搞硬件这些年,我发现一个规律:很多工程师画板子阶段顺风顺水,一到导出Gerber文件就翻车。尤其是刚切到Cadence Allegro 17.2的兄弟,界面找半天,参数懵一圈,出的文件发到板厂不是缺层就是乱码。我见过太多因为Gerber问题导致打板延期、甚至返工的案例,所以今天专门把Allegro 17.2下导出Gerber的完整流程、参数设置和踩坑经验一次写透。简单说,Gerber就是板厂唯一认的“图纸语言”,把你PCB设计里的铜箔、丝印、阻焊、钻孔翻译成制造机能识别的指令。这篇文章适合所有需要自己出光绘的硬件工程师、PCB Layout工程师,以及刚入行想搞懂全流程的新人。
1. 出Gerber前先搞清楚:为什么要出、要出哪些、怎么准备
1.1 为什么板厂只认Gerber,直接发.brd不行吗
很多刚用Cadence的工程师会问:我把整个.brd工程文件发给板厂不行吗?答案很遗憾:不行。板厂虽然也能用Allegro打开brd文件,但设计文件里包含你的个人库路径、颜色设置、显示状态、乃至一些未完成的临时对象,这些在转换到产线数据时极容易出错。板厂最希望拿到的,是一套标准化、独立的制造数据包,也就是Gerber文件和钻孔文件。
Gerber文件本质上是一组矢量图形指令,用的是RS-274X格式(也叫扩展Gerber,X2格式是带属性能的衍生版),每条指令告诉光绘机“在哪里画线、在哪里填充形状”。它不依赖任何EDA软件,打开方式非常统一,所以行业里把它当成了PCB制造的“通用语言”。
我在实际工作中坚持一个原则:发板前一定用CAM工具把Gerber重新打开看一遍,而不是直接在Allegro里盯着brd文件看。因为Allegro里你看到的是“设计意图”,Gerber才是“制造真身”,两者之间可能存在参数过滤、层映射错误等问题,肉眼在源工程里是看不出来的。
1.2 出Gerber前必须完成的检查清单
不要一上来就点Manufacture->Artwork,先花5分钟过一遍基础检查。我在生产实践中整理了一份清单,每次出光绘前逐项过:
第一,跑一遍DRC并清零。Allegro 17.2的DRC模式有在线和批处理两种,出光绘前建议执行一次Batch DRC,重点看Open、Short、Unconnected Pads这些致命错误,不要带着短路风险发板。
第二,确认Outline闭合且只有一个轮廓环。板厂铣外形靠的是Outline层的闭合多边形,如果轮廓有缺口或者重复线段,铣出来的板子形状就是错的。可以执行菜单Setup->Outlines->Outline Symbolism检查一下,或者直接放大轮廓端点看有没有断点。
第三,确认所有需要开窗的过孔和焊盘都在正确的层叠设置里。比如BGA扇出的过孔,你要确定它在Top Solder/Bottom Solder层是否要开窗,还是用Via遮蔽(Via, unmasked或Via, masked)。这一项在Allegro的Padstack Editor里定义,出Gerber前最好逐类过一遍焊盘库。
第四,检查图纸单位和解算精度。Allegro 17.2支持mil和mm混合显示,但数据库的精度是固定的。建议全程使用mil为单位设计,出Gerber时也统一用inch(英制)输出,避免单位换算带来的精度损失。
第五,确认叠层信息完整。尤其是电源地平面层的正负片属性,你用的是正片(Positive)还是负片(Negative),直接影响光绘文件里铜箔的显示逻辑。这个在Setup->Cross-Section里看,出光绘前必须心里有数。
1.3 文件目录规划与命名规范,这是被忽视的“隐形坑”
出Gerber最忌讳的就是把几十个文件全部堆在一起,命名还是默认的art_01、art_02这种。板厂工程师每天处理大量文件,命名混乱会极大增加沟通成本,甚至导致层序搞错。
我个人的习惯是,在PCB工程目录下新建一个专门文件夹,比如“Gerber_YYYYMMDD_V1.2”,里面再分子目录或直接按文件名前缀区分。推荐的文件命名格式是“项目名-版本-层名”,例如:
- G_Project_TOP.art
- G_Project_BOT.art
- G_Project_TOP_SOLDER.art
- G_Project_BOT_SOLDER.art
- G_Project_TOP_SILK.art
- G_Project_BOT_SILK.art
- G_Project_PWR1.art(内电层)
- G_Project_GND1.art(地层)
- G_Project_OUTLINE.art
- G_Project_DRILL.drl
钻孔文件也建议单独加一个_DRILL后缀,方便和光绘区分。文件名里最好不要带空格和特殊字符,斜杠、中文括号这类路径符号在CAM工具里偶尔会出问题。不要问我怎么知道的,都是实测踩过的坑。
2. 光绘参数设置面板,一次配好用到老
2.1 打开Artwork Control Form的正确姿势
在Allegro 17.2里,出光绘的入口是Manufacture -> Artwork...,快捷键是Alt+M后连续操作也行,但记住这条菜单路径就够用了。点击后弹出的是“Artwork Control Form”对话框,这个面板会在后续每次出光绘时反复用到。
面板左侧是Film Control栏,列出了所有可用的光绘层项(Film),右侧是当前选中层项的详细参数。第一次打开时你会发现里面已经预置了一些默认层项,但通常不完整,需要手动添加并配置。
这里有个很实用的操作:把整个面板的配置导出保存为参数文件。在Allegro 17.2中,这个面板支持直接保存Film配置文件(后缀.rsf或其他自定义),下次换项目或者换电脑,直接加载回来,所有分层、参数、输出路径一次性恢复。强烈建议你花一次时间配好后保存下来,后续项目出光绘就是分钟级的事。
2.2 需要逐项确认的全局参数,少一个都会出问题
Artwork Control Form右上角的几个全局参数,是新手最常见的翻车点:
Format精度选项,一般选“5:5”,IEEE 754中Gerber数据最常见的输出格式就是“整数5位,小数5位”,这个精度在英寸单位下是真正可以到0.00001英寸的,完全满足普通PCB制造要求。如果板子尺寸特别大,比如超过10英寸,可能要用“6:5”或更高,但99%的板子5:5就够。
Aperture选项里,务必勾选“Supress unconnected pads”——这个下面会展开讲,默认也是勾选状态,但有人手滑取消过,结果焊盘满天飞。
Plot mode选择“Negative”还是“Positive”要看层属性。走线层、丝印、阻焊通常用Positive(正片),内电层如果设成了负片,这里要选Negative才能得到正确结果。
Suppress选项组里,我通常勾选“Suppress leading zeros”和“Suppress trailing zeros”中的一个,具体取决于板厂要求。国内板厂一般支持前导零压缩(Leading Zero Suppression),我习惯统一选这个。这个参数影响的是坐标数值的表示方式,不匹配时CAM软件打开可能报错,但很多CAM工具会自动识别,为了稳妥还是问一下板厂习惯。
2.3 Undefined Line Width和Shape Bounding Box,这两个参数别乱改
在右侧参数区,Undefined Line Width默认0.005英寸或0.127mm,这个值用于处理设计中未指定线宽的对象(比如某些零宽度的线),Gerber里不能存在零线宽,所以会统一赋予一个默认值。正常情况不用改,但如果你知道设计里有细线想保留宽度,就设成接近实际值的参数。
Shape Bounding Box默认值是100,表示动态铜皮边框的解析尺寸。它影响的是动态Shape在光绘时的输出分辨率,数值偏大可能导致复杂铜皮的边缘锯齿明显,偏小则增加文件体积和光绘时间。普通设计用默认值即可,高密度板可以适当降低到50,但不要低于25,否则文件会异常庞大。
这些参数属于“配置一次就不想再动”的类型。我建议你在模板工程里设置好,每次新建PCB设计都从模板创建,这样就不需要每次重新配置。
3. 逐层输出实操:从走线层到钻孔文件的完整生成
3.1 配置走线层和平面层的光绘文件
在Film Control栏里点击右侧的Add按钮,弹出添加光绘层的对话框,输入层名比如“TOP”,然后在“Layer Elements”里选择你要输出的子层。对于顶层走线层,一般需要勾选:
- ETCH/TOP
- PIN/TOP
- VIA/TOP
这三个是铜箔图形的主要来源。如果设计中有走线层上有辅铜、导线标记等,对应子层也要加进来,否则会出现“钻孔有孔但不见焊盘”的诡异现象。
勾选完成后,双击Film Control里的“TOP”层项,进入该层的光绘输出选项。这里注意一个关键设置:在“Film options”选项卡里,要勾选“Use aperture rotation”之类的高级选项吗?不用管,我一般只确认两项:Output units是Inches,Format是5:5。其他保持默认。
内电层(电源层、地层)如果是负片设计,同理添加层项,但在Plot mode里选Negative,同时确认“Film”里的子层包含ETCH/PWR1、PIN/PWR1、VIA/PWR1这些。如果你是正片铺铜的内电层,那就和走线层一样选Positive,子层选ETCH即可。
这里有一个很容易被忽略的细节:内电层负片设计里,Thermal Relief(热焊盘)和Anti Pad(隔离焊盘)的形状来自Padstack Editor定义,Gerber里不会单独生成对象,而是通过负片逻辑的空心效果体现。所以如果出片后发现内电层的焊盘连接关系不对,往往是焊盘库里的Relief和Antipad参数没设好,而不是光绘设置问题。
3.2 阻焊、助焊、丝印层,这三层最容易出幺蛾子
阻焊层分顶层Top Solder和底层Bot Solder。在Allegro里,它们的子层内容是“PIN/TOP(或BOT) + VIA/TOP(或BOT)+ ETCH/TOP(或BOT)”,但注意,阻焊层需要打开“Unfilled shapes”相关选项吗?不需要,默认即可。
阻焊层一个关键参数是“Suppress unconnected pads”。如果这个选项开着,那么没有网络连接的独立焊盘(比如测试点、定位柱焊盘)在阻焊层上不会开窗,结果就是板子回来后这些位置被绿油盖住,测试探针扎不上。所以,如果你设计里有一些机械定位用的裸铜焊盘,记得针对阻焊层单独关闭这个抑制选项。
丝印层Top Silk/Bot Silk通常勾选“BOARD GEOMETRY/SILKSCREEN_TOP”和“MANUFACTURING/AUTOSILK_TOP”,还有“REF DES/SILKSCREEN_TOP”。如果你自己画了丝印文字放在Board Geometry层的Silkscreen子层,一定要确保这一项被包含。很多工程师出完光绘后发现丝印丢字,查来查去就是这里漏勾了。
助焊层(Pastemask)只在需要刷锡膏的SMT层才要出,原理和阻焊类似,勾选PIN和VIA(需要钢网开孔的过孔)以及ETCH。
每个层项添加完成后,先不要全部生成。我习惯在Film Control里把这些层项都编排好,确认每个层的子层选择无误,再统一创建。
3.3 钻孔文件NC Drill的生成,这个环节坑最多
Allegro 17.2中,钻孔文件入口是Manufacture -> NC -> Drill。点击后会弹出钻孔参数设置,关键是这几项:
在Drill Hole菜单里,单位选Inches,格式选5:5(和光绘保持一致)。Output File路径选择之前规划好的Gerber目录,文件名默认是drill.drl,也可以改成项目名_DRILL.drl。
有一个经常出问题的选项是“Repeat code”或者叫“Suppress same coordinate repeats”,某些CAM软件对压缩重复坐标的钻孔文件支持不完善,会导致孔位错乱。我一般把“Output format”里跟压缩相关的选项关闭,用最常规的坐标序列输出。
还有一个关键参数是“参考点(Reference point)”,默认可能是0,0,这个没问题。但如果在Allegro里用了非原点偏移的布局,建议把参考点设为准原点的绝对坐标,避免钻孔和光绘错位。
生成钻孔文件后,Allegro会同时生成两个辅助文件:一个是钻孔符号图(通常在MANUFACTURING/NCLegend层),另一个是钻孔文件对应的光圈表(.tap或.drl同名的.rpr文件)。钻孔符号图是给板厂确认孔位和孔径对应的说明图,建议出光绘时也把它输出成一个单独的GERBER层项,比如“DRILL_LEGEND”,极大地方便板厂工程审查。
3.4 轮廓层和特殊标记(V-cut、拼板、装配标记)
PCB外形加工必须要的Outlines,在Allegro里通常是在“BOARD GEOMETRY/OUTLINE”子层。添加一个名为“OUTLINE”的光绘层,只勾选“BOARD GEOMETRY/OUTLINE”即可。如果要在Gerber中体现V-cut或拼板邮票孔,则还需要把“BOARD GEOMETRY/V-CUT”或“MANUFACTURING/NCDRILL”等相关子层一起选进去。
有些工程师还会在丝印层放一个“装配标记”或“UL标记”,这类内容一般放在BOARD GEOMETRY或MANUFACTURING的特定子层,比如“Pb-free”标识。出光绘前需要在丝印层项里把这些子层一并勾选,否则印在板子上的标识就神秘失踪了。
我前面提到了NC Legend钻孔符号图,实际操作中,我还会额外输出一个“DRILL_FIGURE”或“MANUFACTURING/NCLEGEND”光绘层,这个不影响制造,但对人工检查钻孔文件极有帮助。尤其用CAM350回读时,有符号图对照,一眼就能看出孔位和孔径是否对应。
3.5 一键生成与文件清单核验
参数都设置好后,在Artwork Control Form下方点“Select All”将需要生成的层项全部选中,再点“Create Artwork”,Allegro就会在输出路径下按每个Film项生成一个.art文件。
生成完毕后,回到Gerber目录,对照以下清单检查,缺任何一个都别发板:
- 顶层走线 TOP.art
- 底层走线 BOT.art
- 顶层阻焊 TOP_SOLDER.art
- 底层阻焊 BOT_SOLDER.art
- 顶层丝印 TOP_SILK.art
- 底层丝印 BOT_SILK.art(双面板才需要)
- 内电层若干 PWR.art/GND.art(多层板)
- 助焊层 TOP_PASTE.art/BOT_PASTE.art(SMT需要)
- 外形层 OUTLINE.art
- 钻孔文件 DRILL.drl
- 钻孔符号图 DRILL_LEGEND.art
我个人的经验是清单模式比什么都可靠,哪怕做了几十次,面对紧张的交期也不要跳过检查步骤。
4. 验证环节:生成之后必须做的事,别急着打包发板
4.1 用CAM350或Allegro自带的工具做回读验证
Gerber文件生成之后,最重要的一件事是用第三方工具重新“打开”一遍。行业里用CAM350的人最多,免费好用的还有Gerbv、以及Altium Designer的光绘查看器,网上甚至可以直接用在线Gerber Viewer。
用CAM350导入时,注意单位选择Inches,格式选择5:5,前导零或后导零的压缩方式要和Allegro里设置的一致。如果导入后发现图形缩成一个小点或者拉长变形,基本就是单位或格式不匹配,需要重新导入。
导入后逐层检查:铜箔层看焊盘、走线、过孔是否完整;阻焊层看开窗位置是否正确,丝印是否压到不该压的焊盘;外形层看板框是否是闭合的完整形状;最后把钻孔层叠加到走线层上,确认每个孔都有对应的焊盘。
我在木材行业待过一段时间,有个类比很形象:出Gerber就像把设计图纸翻译成机械加工中心的G代码,CAM验证就像在机床上空跑一遍程序,不跑一遍直接上件,轻则报废工件,重则撞机。PCB打样虽然不至于撞机,但一次返工的时间和金钱成本足以让你长记性。
4.2 Allegro 17.2中的回读确认功能
除了外部CAM工具,Allegro 17.2也提供了光绘回读检查:File -> Import -> Artwork。选中你刚生成的某个.art文件,导回到当前PCB环境里,Allegro会以导入图形的形式覆盖显示。
这个方法适合“快速自查”某一层,比如你怀疑内电层负片效果不对,可以用它把内电层Gerber导回来,对比原始设计。注意回读导入的图形是普通图形元素,不是网络对象,所以不要在这个状态下做编辑,只在视觉层面检查。
4.3 钻孔文件与光绘对齐检查,这是最容易被忽视的一步
钻孔文件是单独的.drl文本文件,CAM工具整合时,关键看钻孔的坐标是否和光绘中的焊盘中心一致。最容易出问题的是“原点(Origin)不一致”——Allegro里光绘原点是设计原点(通常左下角),钻孔文件如果用了不同的参考点,叠加之后所有孔都会整体偏移。
在Allegro生成钻孔时,参考点选“Design Origin”(绝对原点)就可以避免这类问题。如果已经生成了错误的钻孔文件,可以在CAM350里用“Move”功能整体平移对齐,但最稳妥的办法是回到Allegro重新生成。
另外,钻孔文件的格式参数要和光绘完全一致。比如光绘是Inches 5:5,钻孔也必须是Inches 5:5,否则CAM350里孔和焊盘错位一个固定量,这种坑我帮同事排查过两次,都是这个原因。
5. 常见问题速查与避坑指南
5.1 高频问题对照表,哪一条都能救命
我把这些年遇到过的高频问题整理成一个速查表,每个都是亲身踩过的坑,新项目出光绘前对照一遍能省不少麻烦。
| 现象 | 根因 | 解决办法 |
|---|---|---|
| 丝印在CAM里大面积丢失 | 丝印层Film未包含Silkscreen子层 | 检查Film内容,补选REF DES/SILKSCREEN与BOARD GEOMETRY/SILKSCREEN |
| 独立焊盘没开窗 | 阻焊层勾选了抑制未连接焊盘 | 对SOLDER层关闭Suppress unconnected pads选项 |
| 钻孔偏一个固定距离 | 钻孔参考点未选设计原点 | 重出NC Drill,参考点设为Design Origin |
| 内电层焊盘连接呈方形或断开 | 负片层的Thermal Relief参数异常 | 检查Padstack里的Relief和Antipad设置 |
| 文件打开显示单位错误 | Gerber生成与CAM导入单位不一致 | 统一用Inches,5:5格式导入 |
| 图形边缘出现锯齿 | Shape Bounding Box过小 | 在Artwork参数中适当增大或恢复默认值 |
| 过孔在阻焊层被全部堵住 | VIA子层未加入Solder Film | 阻焊Film中补充VIA/TOP等子层 |
| 铜皮光标出现“大块空白” | 动态铜皮在Artwork中输出异常 | 将动态Shape转为静态后重新出片 |
| 钻孔文件缺失孔位 | 输出时压缩选项导致部分孔被合并 | 关闭Repeat Code或相关压缩选项 |
5.2 负片电源层的显影逻辑,不懂原理会一直踩坑
很多工程师分不清正片负片到底影响什么,这里我用人话解释一遍。
正片(Positive)就是你画什么,出什么。铜皮是实心的,焊盘、线条都是图形本身的内容。负片(Negative)则是反向逻辑:你画出来的铜皮区域,在Gerber里代表“不要铜”的区域,所以内电层的“Anti Pad”用一个大圆环画出来,代表这个位置不要铜;而“Thermal Relief”用几个小连接条画出来,代表铜在这里以热焊盘方式连接。
如果电源层用了负片设计,出光绘时选了Positive,那么在CAM里看到的就是铜皮全没了,铜皮位置变成空洞。反过来,正片层选了Negative,也会得到“反白”的奇怪效果。
所以,出光绘前,必须清楚每个内电层的正负属性。在Setup -> Cross-Section里查看层叠时,如果有“Film”类型标识,对应的光绘层参数要一致。这是Allegro出Gerber中少数的“逻辑反直觉”点,千万别硬记参数,理解了原理才不会在叠层复杂时翻车。
5.3 关于“5层板”和特殊叠层的光绘补充
有读者会搜“5层板子”这种关键词,这里多说一句:PCB常规层数是偶数层(2、4、6、8),因为需要在压合时保持铜箔层对称,防止板材翘曲。如果你看到“5层”的说法,一般是指4层板+1层埋阻或特殊结构,或者是某些非对称设计。
遇到非对称叠层时,出光绘的思路不变,但要注意:每一层都得有明确对应的“Film”定义,尤其是中间层不能漏。我建议在Artwork Control Form里为每个物理层都建一个独立Film项,哪怕有的层只是完整GND铜皮,不要把它们合并到一个Film里,否则后期调试或改板会非常痛苦。
另外,半固化片层的“假层”不需要出光绘,只有铜箔层(ETCH层)才需要。很多新手会在层叠里看到一大堆Prepreg名字,以为都要出,其实那些只是板材结构信息,制造时板厂会按叠层表自行处理。
5.4 给板厂提交资料时,这几个附件务必齐全
Gerber和钻孔文件只是核心数据,实际发板时还需要配套其他资料,否则沟通成本极高。
首先是叠层说明,最好是一个简单的文本文件,写明层数、板厚、铜厚、阻抗要求、表面处理工艺(喷锡、沉金、OSP等)。其次是钻孔文件对应的孔径统计表,很多板厂会直接从Gerber里提取,但你自己主动给一份更显专业。
如果你的板子有特殊工艺要求,比如阻抗控制、盘中孔树脂塞孔、背钻,务必单独写清楚,并在文件名里标注“备注:盘中孔塞孔”。这些信息如果只写在聊天窗口里,很容易在生产交接时丢失,白纸黑字放进压缩包最稳妥。
最后,不要忘记“Readme”文件,里面写清楚项目名、版本、日期、层数、所用EDA工具版本,以及每个文件对应的层含义。一两分钟的整理成本,能给板厂省下大量猜谜时间,也降低自己被打回返工的概率。
6. 个人经验补充:出Gerber这件事,养成良好的习惯比任何技巧都重要
如果只让我说一条最重要的经验,那就是“标准化你的操作流程”。我见过很多工程师每次出光绘都临时配参数,一会儿用5:4,一会儿用5:5,一会儿抑制前导零,一会儿又不抑制,板厂那边每次都得重新适配,特别容易出错。
我现在固定用一套流程:单位固定Inches,精度固定5:5,前导零抑制固定开,参考点固定Design Origin,输出目录固定放在以“Gerber”开头的文件夹里,文件名固定带项目名和版本。这套流程固化以后,出Gerber再也没出现过让板厂困惑的情况。
还有一个小技巧:项目迭代时,旧版本的Gerber文件不要直接覆盖,而是保留归档。新版发板前,我会用Beyond Compare之类的工具对比新旧两版钻孔文件和外形层,确认差异符合预期。这招能帮你快速发现“改一处布线结果意外改动了外形”的这类隐秘问题。
最后再分享一个经验:Gerber生成后,如果有可能,尽量用在线Gerber Viewer再快速过一遍,很多在线工具支持浏览器直接看,不需要安装CAM350。虽然功能不如专业软件,但胜在方便,适合在最后发出前做一次“扫一眼”级别的确认。多一道确认,少一次打板翻车,这是硬件人的生存智慧。