1. 为什么别人的Gerber一次通过,你总要返工?
如果你在PCB设计行业待过一两年,一定见过这样的场景:画板子的时候风生水起,一到导出Gerber文件就原形毕露。发给板厂之后,要么被问“缺层”,要么被告知“丝印和阻焊没对齐”,最惨的是钻孔文件跑偏,整个板子报废。我一直觉得,出Gerber这件事,属于那种“看起来很简单、做起来全是坑”的活。Cadence Allegro作为业内主流的PCB设计工具,它的光绘输出机制足够强大,但正因为选项多、参数细,反而让很多工程师摸不着头脑。
这篇博文主要解决三类人的问题:刚接触Allegro不久、准备第一次投板的新手;被板厂反复追问Gerber问题、急需一套标准流程的老手;以及那些想用Allegro快速导出高质量光绘文件、希望减少来回沟通成本的人。我会把从检查设计到输出钻孔文件的完整流程拆开来讲,包括参数为什么要这样设、哪些坑我最常踩、以及怎么用CAM350快速验证。说白了,就是希望你看完这篇之后,能形成一套自己的“肌肉记忆”,每次出板都顺顺当当。
我先把话说在前面:Gerber文件本身并不复杂,它就是把PCB的每一层拆成独立的图形文件,给板厂当“图纸”用。复杂的是Allegro里那一堆Artwork选项、精度设置、光圈处理,以及钻孔文件的单独导出机制。只要你理解了背后的逻辑,这些选项就不再是拦路虎,而是你手里最顺手的工具。
2. 导出前必做的5项检查,先别急着打开Artwork面板
2.1 检查设计规则和未布线区域,别让板厂替你发现错误
很多人打开Artwork面板之前根本不跑一遍DRC,直接就Generate,结果Gerber到了板厂那里一堆问题。我在实际工作中有一条铁律:出光绘之前,先耐住性子跑一遍完整的DRC,并重点确认下面几项。
第一,未布线的网络(Unrouted Nets)必须清零。虽然Allegro的DRC会提示,但有时候你会看到“动态铜皮已覆盖”就以为连上了,实际上网络连接被错误地断开或“假连接”,这在光绘文件里是看不出来的,板厂更不可能替你去查网络连接关系。第二,检查是否有孤立铜皮(Isolated Shape)。孤立铜皮在出Gerber时通常不会报错,但它在生产端可能造成电镀不均匀,严重的时候整块板子翘曲。我习惯在Shape全局动态铺铜状态下跑一遍“Isolated Shape Check”,有就删掉或加过孔连接。第三,确认板上没有未定义的封装或锁定状态异常的Cell,Allegro里如果封装引用了错误的库文件,导出的焊盘可能直接消失。
另一个容易忽略的是检查板框和布线层。你的Outline必须闭合、无重复线段,否则板厂做外形时无法识别。很多新手在Classic Board Outline上画了多段线,看起来是一个方形,但线段端点没有连接上,板厂读Gerber时会发现外形不闭合。我一般会在Artwork前先打开“Manufacturing/Outline”层看一眼,再用“Dimension”检查尺寸标注,确保板框信息完整。
2.2 列一张层清单,哪些层必须出、哪些层可以合并
Allegro的Artwork面板默认会列出当前设计里所有“Film”,也就是你要输出的光绘层。这里最容易犯的错误是:只勾选了自己看得见的几层,比如TOP和BOTTOM,而丝印、阻焊、助焊层全部漏掉。板厂拿到你的Gerber之后,要么帮你脑补,要么退回让你补文件。我的做法是做一个标准层清单,每次照单检查。
通常一个双面板需要这些光绘文件:
- TOP层(布线层)
- BOTTOM层(布线层)
- SILK_TOP / SILK_BOTTOM(丝印层)
- SOLDER_TOP / SOLDER_BOTTOM(阻焊层)
- PASTEMASK_TOP / PASTEMASK_BOTTOM(助焊层,用于贴片钢网)
- DRILL(钻孔文件,单独导出)
如果是四层及以上,还要加内层电源地平面,以及可能的Negative Layer(负片层)。注意:Allegro很多默认模板会把“Board Geometry/Outline”自动加进每一层Film,这样板框信息就重复了。虽然不影响生产,但会让文件变乱。我一般只把Outline加在Silkscreen和一些必要层中。
除了层清单,还要注意一个细节:Allegro的Artwork面板里,每个Film可以包括多个Subclass。比如丝印层,除了“Board Geometry/Silkscreen Top”,还应该把“Ref Des/Silkscreen Top”和“Device Type/Silkscreen Top”一起勾选上。否则你导出的丝印层缺少元件位号字符,这个问题极其常见。
2.3 先看一眼Artwork面板,确认当前精度和坐标模式
Artwork面板里的Format和精度,决定了光绘文件中坐标数据的小数位数。如果有人把精度设置成4.2,也就是整数4位、小数2位,那么在英寸单位下,理论分辨率只有0.01英寸(约0.254mm),这个误差对于高密度板卡来说完全是灾难。我见过很多案例,板厂反馈孔位偏移、走线错位,最后发现就是精度设置问题。
我常用的组合是“整数5位+小数3位”(5.3)或者“整数4位+小数4位”(4.4),单位用英寸,坐标类型选Absolute(绝对坐标)。其中4.4格式在业界兼容性最好,大多数厂商和CAM工具都认;5.3格式更稳妥,但文件体积稍大。实际中我一般固定用4.4,除非板子非常大或者你担心边缘精度,否则没必要升到5.3。如果你从别人手里接手一个PCB,先打开Artwork面板看一眼这些设置,再决定要不要改。
3. 光绘参数设置详解:单位、精度与光圈背后的逻辑
3.1 单位、精度、零抑制,这三个参数决定板厂能不能看懂你的文件
Allegro的Artwork面板有一项“Film Control”,它们里面的Setup有很多选项:Device type、Format、Output units、Suppress、Coordinate type等。这些英文术语看起来很绕,实际逐个拆开并不难。
首先是Device type,一般默认是Gerber RS-274-X,这是目前最主流的光绘格式。它把光圈(Aperture)信息直接嵌入到光绘文件里,不依赖单独的D码文件,兼容性很好。如果你有特殊需求,可以选Gerber X2,它支持嵌入层名和属性,但部分老厂可能不支持,投板前要确认。我个人默认坚持RS-274-X,名字简单,可靠性高。
然后是Format和Output units。Format是“整数位+小数位”的组合,之前说过,建议4.4或5.3。Output units建议与你的设计单位保持一致。如果你的PCB板框、约束规则全部是mil,那输出单位就用Inches;如果一开始就是毫米,就统一用Millimeters。千万不要设计是mil、输出是mm,这样尺寸换算容易出幺蛾子,尤其当你板子上有很多4位小数的坐标时,误差会被放大。
最后是Suppress(零抑制)。这个选项控制坐标数据里的前导零和尾随零怎么处理。常见的选择有:
- Leading zeros:省掉坐标中的前导零,比如0.125英寸输出成.125
- Trailing zeros:省去尾随零
- None:完全保留
我一般选“Leading zeros”,因为文件体积小一些,而且板厂CAM软件解析没问题。但也有工程师喜欢“None”,图个直观。只要不选成“Suppress trailing zeros”并且和板厂习惯冲突,问题不大。如果你投的板厂有指定要求,照他们说明来。
3.2 光圈(Aperture)不用单独管,但你要会检查
老式Gerber格式(RS-274-D)是把光圈定义放在一个单独的D码文件里,很多人导出时要手动指定Aperture文件,搞得很头疼。而RS-274-X把这个包袱甩掉了——光圈定义直接内嵌到每个光绘文件中。所以在Allegro里,你几乎不需要专门去“做光圈”。但有个时刻你应该主动看光圈:当你发现某些焊盘在Gerber里显示为“空心圆”或“变成线框”时,多半是光圈匹配出了问题。
在Allegro里,Artwork面板的“Aperture”标签可以查看当前光圈表。如果设计中有Flash焊盘、热焊盘这些特殊形状,RS-274-X会自动生成相应光圈。我遇到过一次插件孔焊盘在光绘预览里变成细线的情况,后来发现是那个封装焊盘用的是Rectangular(矩形),而光圈表里没有对应的Flash定义。解决办法是检查封装库的焊盘定义,或者把“Use aperture rotation”选项开启。这种问题在CAM350里一眼就能看到,所以我后面会专门讲怎么检查。
其实更常见的坑是“Undefined line width”设为0。Allegro里有些线宽为0的图形,比如某些辅助线或Outline,光绘输出时如果Undefined line width为0,CAM软件可能直接忽略或显示异常。我习惯把这个值设为6或10mil,让这些“零线宽”图形有一个默认宽度,避免文件读出来是空的。
3.3 内层负片怎么设?Positive还是Negative要分清楚
如果你的PCB有电源层或地层,并且你决定用负片(Negative)方式出图,那在Artwork里要为这些层单独设置Film极性。这个操作逻辑很容易让人迷糊,我尽量说大白话。
在Allegro画板阶段,你看到的电源层铜皮是正的,或者说是有铜的区域。如果用正片方式出Gerber,那么“铜皮区域=有图形”,和屏幕上看到的是一致的。如果用负片方式,那么“光绘文件里的图形区域=无铜区域”,也就是反的。负片的优势是文件小、出图快,但对于复杂的内层分割,正片更直观,也更容易检查。
在Artwork面板里,双击某个Film会弹出“Edit Film”对话框,里面有一项“Mirror”和“Positive/Negative”的选择。如果你在PCB上设置该层为负片,在Film里也要对应选择Negative,否则出来的铜皮完全是反的,这个错误非常致命。我的习惯是:一般内层电源/地平面用负片,信号层用正片。但如果你不熟悉负片的检查方式,全程正片其实更安全,代价只是文件大一点。
3.4 钻孔文件的参数设置不能照抄光绘
钻孔文件(Drill File)在Allegro里是单独导出的,路径是Manufacturing -> NC -> NC Drill。很多人习惯性打开NC Drill对话框,直接点确定,结果板厂拿到手的钻孔表格式不对,或者单位不对。
NC Drill里的参数单位和精度必须和光绘文件保持一致。比如光绘是4.4英寸,钻孔文件也应该4.4英寸。如果你光绘用mm、钻孔用inch,孔位坐标就会整体偏移。我一般在NC Drill对话框里面选择:
- Output file:名字改成标准的“XXX-TOP.drl”或“XXX-NC.drill”
- Format:4.4
- Coordinate type:Absolute
- Excellon format:Combined(或者Separate,按板厂要求)
- 勾选“Enhanced Excellon format”
- Tool sequence:Ascending(按钻孔尺寸排序)
这些看起来琐碎,但非常影响投板效率。还有一个重点:如果你板子上有非金属化孔(NPTH),一定要在NC Drill里正确识别。Allegro会为PTH和NPTH生成不同的钻孔符号,如果你定义封装的时候没区分,NPTH会被当成PTH处理,板厂做出来就麻烦了。
4. 分步实操:10分钟完成Gerber加钻孔文件导出
4.1 第一步:配置Film控制面板,保存成模板
Allegro的Artwork窗口可以直接从菜单Manufacturing -> Artwork打开。打开之后你会看到“Film Control”窗口,里面有一个列表,默认会有一组名字。很多人从这里开始手动加层、删层,每次都很痛苦。我的建议是:第一次配置好之后,用窗口下的“Save”按钮把当前的Film设置保存成Artwork文件(比如main.art),以后每次出图直接加载,改改版号就行。
配置时我习惯按这样的顺序操作:
第一步,先在上方的“Film:”区域,把“Film name”命名成你要输出的层名。比如TOP、BOTTOM、SILK_TOP、SOLDER_TOP这种一目了然的命名。然后点击“Add”添加该Film,接着在左边“Available Subclasses”里勾选对应的Subclass。以SILK_TOP为例,我至少勾选:
- Board Geometry/Silkscreen_Top
- Ref Des/Silkscreen_Top
- Device Type/Silkscreen_Top(如果有这个子类)
- Board Geometry/Outline(一般加在这里)
第二步,对于ETCH层,比如TOP,只勾选ETCH/TOP。注意不要不小心勾了ETCH/TOP和ETCH/BOTTOM,否则两层线混在一张光绘里,板厂直接懵。
第三步,设置每一层的极性。双击Film名称,在弹出的对话框中把“Positive”或“Negative”选对。信号层选Positive,负片内层选Negative。
第四步,在“Undefined line width”里填写6~10mil,并在“Shape bounding box”里设置为板框尺寸范围,或者尽量大一些。若“Shape bounding box”设置得太小,铜皮会被裁剪掉,这也是一个经典翻车点。
4.2 第二步:生成光绘文件,留意日志和警告
配置好Film之后,回到“Film Control”窗口,点击“Select All”或者勾选你要输出的Film,再点“Generate Photoplot”。Allegro会在下方的报表窗口输出一堆日志。很多人点完就关掉窗口,我劝你不要急着关。
那堆日志里最关键的信息是:每个Film生成的文件名、路径,以及可能出现的警告。比如“Warning: Shape with no bounding box”或“Warning: undefined line width”之类,都是信号。你必须在投板前解决这些警告,否则文件就是带病出征。
生成之后,记得去输出目录看一眼。常见默认路径是设计文件目录下的artwork子文件夹。如果你希望文件整理得清晰一点,可以在Artwork窗口里修改“Photoplot output directory”,我习惯每个项目单独建立“gerber”目录,光绘和钻孔全部输出进去。
4.3 第三步:生成钻孔文件和钻孔符号图
在Allegro菜单选择Manufacturing -> NC -> NC Drill,弹出NC Drill窗口。在这里设置单位、格式、以及Enhanced Excellon等参数。我建议输出前先点“Drill Customization”,确认刀具表(Tooling List)中的孔径与封装一致。
点击“Generate Drill File”后,Allegro会生成钻孔文件,同时还会生成一个钻孔符号图(Drill Legend),通常在Manufacturing/Drill Legend子类里。这个Drill Legend不是必须的光绘层,但强烈建议你也把它输出成一个光绘文件或者PDF。板厂可以通过它快速确认孔的类型、数量和符号,省得来回问。
如果你板子上有铣槽、异形孔,还需要用Manufacturing -> NC -> NC Route来生成NC Route文件。NC Route和NC Drill是分开的,很多人忘记导路由文件,导致板厂漏做铣槽,这个也需要注意。NC Route的参数设置和NC Drill一致,单位、格式都要统一。
4.4 第四步:用CAM350快速验证,别把问题留给板厂
这是我自己最依赖的一步。导出Gerber之后,不要直接给板厂,先丢到CAM350或者免费的GerbView工具里看一眼。我基本每次都会打开CAM350的File -> Import -> Auto Import,选择你的Gerber文件夹,它会把所有光绘文件自动导入,然后你就能看到整块板子的渲染结果。
我最常用的检查项有几个:
- 图层是否齐全,颜色对不对,有没有叠错层
- 丝印是否清晰,是否压焊盘太严重
- 阻焊是否覆盖所有需要开窗的焊盘
- 钻孔文件是否对齐焊盘中心
- 内层负片是否反了
- Outline是否完整闭合,尺寸标注是否合理
有些工程师嫌麻烦,觉得板厂会帮他检查。但你要明白,板厂每天处理几十个设计,他们只按文件加工,不会主动分析你的设计意图。你把CAM350检查这一步当成自己设计的“最后一道防线”。我见过太多“压焊盘丝印导致立碑”“负片反了导致电源短路”的案例,只要在CAM350里多看一眼,这些低级错误全都能拦住。
5. 常见问题速查:板厂最常反馈的几种Gerber异常
5.1 层缺失或内容不完整,八成是Film配置漏勾了
板厂反馈“缺少Top silkscreen”或者“只有外形没有走线”,多半是你在Artwork面板中没把对应Subclass勾进Film。我处理过很多次类似的求援,最后发现都是“Ref Des/Silkscreen_Top”没勾上,导致位号字符全部丢失。还有一次是SOLDER_TOP层只勾了“BOARD GEOMETRY/SOLDERMASK_TOP”,漏掉了“PIN/SOLDERMASK_TOP”和“VIA/SOLDERMASK_TOP”,阻焊开窗出不来,板厂拿到手的Gerber看起来所有焊盘都被绿油盖住。
这种问题最好用CAM350逐层检查。如果发现某一层只有板框线,没有其他内容,马上回去看这个Film到底加了哪些Subclass。还有一个技巧:导出后生成一个PDF版本的装配图,和CAM350的Gerber图叠在一起对比。这招能快速发现丝印位置错乱、镜像翻转等问题。
5.2 丝印和阻焊“对不上”,先查镜像和正负片设置
有时候你导出的丝印文字在CAM350里是反的,比如U1的位号变成镜像了。这通常是“Mirror”选项被意外勾选。在Allegro的Artwork窗口,Film的属性里有一项“Mirror”,如果不小心对一个底层Film勾了Mirror,整个底层丝印就会镜像翻转。同理,底层走线如果被设置为Mirror,也会全部水平翻转。
解决思路是:检查底层Film的Mirror属性,正常底层的Artwork Film不需要Mirror,只有当你在做顶层和底层合并时才有可能需要。除非你非常清楚自己在干什么,否则所有Film都不要勾Mirror。
5.3 板厂说文件尺寸不对,多半是单位和精度混用了
单位不一致很难通过视觉效果看出来,只有用CAM350的测量工具去量板框尺寸,才会暴露出差异。一个典型案例是:设计用mm,但Artwork里输出单位选择了Inches,精度4.4,结果整个板子的坐标数值虽然都是“对”的,但单位换算后板厂读出来尺寸比设计值小了25.4倍。这种错误让板厂无法施工,返工周期极长。
我建议在导出前,打开NC Drill和Artwork窗口,把单位、精度这四项抄下来对比一遍,保持一致。尤其从一个模板项目拷贝到另一个项目时,模板里的旧设置很容易带过来。在项目最开始建库时就把单位固定好,中途不要去切换。
5.4 钻孔文件“偏孔”,先查Excellon格式和坐标原点
钻孔文件偏孔,另一只可能的原因就是“坐标原点”没设置好。Allegro里默认的钻孔坐标原点是当前图纸的绝对原点,但如果你在画板时移动过原点(比如用Setup -> Change Drawing Origin把原点改到了板子左下角),而Artwork的光绘原点又用的是系统原点,那两者就会错位。
我习惯在输出前,把光绘和钻孔的原点统一设置到一个固定的坐标点,比如板框左下角。这样CAM350导入后,光绘与钻孔就能重叠。具体操作是:在Artwork窗口设置“Film origin”,同时在NC Drill窗口设置“Drill origin”。两个原点保持一致,问题就解决了。
还有一个很容易忽略的点:Excellon格式中的“Tool list”排序方式。如果你输出Combined格式,Allegro会把所有孔径和坐标放在同一个文件里,顺序按Tool排。如果使用Separate格式,会拆成多个文件。有的板厂接收系统默认按Tool升序解析,如果你生成的是降序,板厂解析时就会错乱。我在实际中一直固定用Ascending,这个习惯帮我少绕了很多弯。
5.5 快速排查表,直接对着处理
| 问题现象 | 可能原因 | 解决建议 |
|---|---|---|
| 光绘文件缺层 | Film里漏勾Subclass | 回到Artwork面板逐层检查勾选 |
| 丝印字符缺失或变框 | 线宽为0,Undefined line width设0 | 统一将Undefined line width设为6mil或更大 |
| 焊盘显示为线框 | 光圈Flash未匹配 | 用RS-274-X格式,检查封装焊盘定义 |
| 底层文字镜像 | 底层Film勾选Mirror | 取消该Film的Mirror属性 |
| 负片内层铜皮反了 | Film极性与设计极性不一致 | 双击Film确认Positive/Negative设置 |
| 光绘和钻孔错位 | 原点不一致 | 统一Artwork原点与NC Drill原点 |
| 钻孔文件缺少NPTH | 封装孔属性未定义 | 检查封装中孔的Plating属性 |
| 板子尺寸不对 | 单位或精度设置不一致 | 统一单位与Format精度 |
| 外形不闭合 | Outline线段未闭合 | 检查Board Geometry/Outline |
| 铜皮被裁剪 | Shape bounding box设置太小 | 放大Shape bounding box范围 |
6. 最后的一些习惯和心得
文章写到这儿,技术流程基本全部覆盖了。我再分享几个自己踩过不少坑后总结下来的工作习惯,希望对你有参考价值。
第一个习惯是“项目模板化”。不是只保存原理图库和封装库,还要保存一套已经配置好的Artwork文件、NC Drill文件,甚至包括CAM350里的检查脚本。这样每次新建项目,直接套模板,顶多改改板名和版本号,出Gerber的时间能压缩到几分钟之内。我见过不少工程师每次都在Artwork面板里手动加层、手动设参数,效率低而且容易漏。
第二个习惯是“存档版本化”。每一版Gerber导出之后,在文件夹里明确标记版本号和时间,比如“Gerber_R1_20240915”。因为板厂的小批量试产和大批量投板往往隔很久,如果你没有一个清晰的版本标记,时间一长根本分不清哪一份才是最新的。这不只是帮自己,也是帮板厂减少误会。
第三个习惯是“投板前问板厂一句”。不同板厂对Gerber格式、钻孔文件命名、是否有特殊要求的理解不完全一样。有的厂要求RS-274-X,有的厂只接受X2;有的厂要求提供DXF外形图,有的厂不需要。你在投产前五分钟问一下对方常用格式和命名规范,就能避免很多低级返工。不要想当然地认为所有板厂都一样。
最后想说的是,Allegro这套工具虽然选项多,但只要你理解了每个参数“为什么存在”,它其实非常稳定可靠。你可以把导出Gerber看成是设计工作的“最终签字环节”,多用一点时间检查,多跑一遍CAM350,你的设计在生产线上的成功率就会高一大截。出Gerber这个技能,不要求多高深,但一定要稳。稳到每一版文件拿出去,板厂不用问你任何问题,那就是真正合格了。