作为一名在电子行业摸爬滚打多年的硬件工程师,我处理过的Gerber文件少说也有上千份。每次把设计好的PCB文件转换成Gerber发给板厂时,总会有新人问我:"这堆文本文件怎么能变成电路板?"今天我就带大家彻底搞懂这个PCB行业的"普通话"。
Gerber文件本质上是一套光绘机(PCB生产的关键设备)能听懂的"绘图指令集"。就像指挥机器人画画一样,它用ASCII文本告诉机器:"移动到A点,用5号笔画个圆,再用3号笔画条线..."。这种格式由Gerber Systems公司(现属Ucamco)在1980年代制定,现已成为PCB制造的通用语言。
关键理解:Gerber不是存储最终图形的矢量文件,而是记录如何绘制图形的步骤脚本。就像菜谱不是菜肴本身,而是烹饪过程的描述。
现在所有正规PCB厂都采用RS-274X标准(扩展Gerber),它的三大优势让老版RS-274D彻底退出历史舞台:
自包含性:Aperture(光阑)定义直接嵌入文件内部,不再需要额外的.apt文件。这避免了"找不到画笔定义"的致命错误。
极性支持:通过%LP*%指令可以声明正片(铜箔保留)或负片(铜箔蚀刻),这对电源层和大面积铺铜至关重要。
高级图元:除了基础线段,还支持圆弧(G02/G03)、区域填充(G36/G37)和复杂宏定义,能精确描述现代高密度PCB图形。
一个典型的RS-274X文件就像精心编排的剧本:
gerber复制%FSLAX24Y24*% ; 坐标格式声明
%MOIN*% ; 使用英制单位
%ADD10C,0.012*% ; 定义圆形Aperture(D10直径0.012英寸)
%ADD11R,0.1X0.05*% ; 定义矩形Aperture(D11 0.1x0.05英寸)
D10* ; 选用D10画笔
X1000Y2000D02* ; 移动到(1.0,2.0)
X1500Y2000D01* ; 画线到(1.5,2.0)
X2000Y2500D03* ; 在(2.0,2.5)打孔
M02* ; 结束
经验之谈:我见过新手设计师犯的最大错误就是忽略单位声明(%MO)。曾经有团队误将毫米文件当英寸发送,导致做出来的板子比指甲盖还小,损失数万元。
%FSLAX24Y24*%这行看似晦涩的声明实际决定了数值如何解析:
FS表示格式规范,L代表前导零省略,A指绝对坐标X24表示X坐标含2位整数和4位小数,Y24同理这意味着X123456Y789012实际表示:
实用技巧:国内工厂常用
X35Y35格式(3整数5小数),而欧美多用X24Y24。导出Gerber前务必与板厂确认,否则可能导致微米级误差。
Aperture定义了绘图工具的形状和尺寸,常见类型包括:
| 类型代码 | 说明 | 示例 |
|---|---|---|
| C | 圆形 | %ADD10C,0.02*% |
| R | 矩形 | %ADD11R,0.1X0.05*% |
| O | 椭圆形 | %ADD12O,0.08X0.03*% |
| P | 正多边形 | %ADD13P,0.05X8*% |
实战经验:
C,0.2mm的ApertureD01(画线):从当前位置到指定位置用当前Aperture"扫过"形成图形
gerber复制X10000Y20000D01* ; 从当前位置画线到(10.0,20.0)
D02(移动):抬笔移动到目标位置,不产生图形
gerber复制X15000Y25000D02* ; 移动到(15.0,25.0)
D03(闪光):在目标位置"盖章"当前Aperture形状
gerber复制X20000Y30000D03* ; 在(20.0,30.0)打孔/焊盘
常见误区:很多人以为Gerber是矢量路径,实际上它是记录画笔运动轨迹的"扫描仪式"绘图。比如用圆形Aperture画线,实际得到的是有宽度的条状区域。
一套完整的PCB Gerber包含多个文件,各司其职:
| 文件扩展名 | 层类型 | 关键参数 |
|---|---|---|
| .gtl | 顶层走线 | 最小线宽/间距 |
| .gbl | 底层走线 | 过孔连接关系 |
| .gts | 顶层阻焊 | 开窗比焊盘大0.1mm为佳 |
| .gbs | 底层阻焊 | 避免阻焊桥断裂 |
| .gto | 顶层丝印 | 文字高度建议≥0.8mm |
| .gbo | 底层丝印 | 避开焊盘和过孔 |
| .gko | 板框 | 确保是闭合多边形 |
| .drl | 钻孔文件 | 区分通孔/盲埋孔 |
血泪教训:
如果要用程序解析Gerber(比如开发查看工具),核心流程如下:
预处理阶段
Aperture字典构建
python复制apertures = {
10: {'type': 'circle', 'diameter': 0.01},
11: {'type': 'rect', 'width': 0.1, 'height': 0.05}
}
状态机维护
python复制current_state = {
'x': 0, # 当前X坐标
'y': 0, # 当前Y坐标
'aperture': None,# 当前Aperture
'interp_mode': 'linear', # 插值模式
'polarity': 'dark' # 绘图极性
}
几何图形生成
对于大多数应用,建议直接使用成熟库:
pcb-tools库(支持Gerber和Excellon)gerber-parser(浏览器端解析)libgerbv(GerberViewer的核心)避坑提示:处理圆弧时特别注意G02/G03的IJ参数定义——I是圆心到起点的X偏移,J是Y偏移,这与SVG的圆弧参数定义不同。
虽然都能描述图形,但本质差异显著:
| 特性 | Gerber | SVG |
|---|---|---|
| 本质 | 绘图指令集 | 图形描述 |
| 坐标 | 物理单位(mm/inch) | 无单位像素 |
| 线宽 | 由Aperture定义 | stroke-width属性 |
| 填充 | 需用D01扫描或填充块 | 自带fill属性 |
| 极性 | 支持正/负片 | 仅正片 |
典型转换陷阱:
直接将Gerber转SVG可能导致:
这对"表兄弟"格式常被混淆:
| 指令 | Gerber | G-Code |
|---|---|---|
| 移动 | D02 | G00 |
| 线性插补 | D01 | G01 |
| 圆弧插补 | G02/G03 | G02/G03 |
| 工具选择 | D10/D11等 | T01/T02等 |
| 单位 | 物理尺寸 | 物理尺寸 |
主要区别:
对于异形焊盘(如散热焊盘),可以定义宏:
gerber复制%AMMACRO1*
4,1,4,0,0,0.5,0.5,0.5,0,0,0,0*%
%ADD10MACRO1*%
这个宏定义了一个带十字散热槽的方形焊盘,比用多个基本图形拼接更高效。
Excellon格式钻孔文件需注意:
我曾遇到过一个案例:因未标注0.3mm以下微孔为激光钻孔,导致机械钻孔断刀,整批板材报废。
虽然RS-274X仍是主流,但新趋势值得关注:
不过根据我的经验,传统Gerber在未来十年仍会是制造端的主力——就像PCB行业的PDF,简单可靠才是硬道理。
最后分享一个实用网站:PCBLabs.cn的在线Gerber查看器,支持即时渲染和DFM检查,比本地CAM软件更快捷。当你在深夜赶稿子需要快速检查文件时,这类工具能救命。