Allegro导出Gerber文件:从设计到制造的“临门一脚”实战指南
在PCB设计流程中,最让人提心吊胆的不是布线时的信号完整性难题,也不是电源层分割的复杂拓扑——而是当你终于通过所有DRC检查、完成覆铜更新、确认丝印无误后,准备把心血之作交付给PCB工厂的那一刻。
一个看似简单的“导出Gerber”操作,却可能因为某个极性设置错误或单位不匹配,导致整板报废。
Cadence Allegro作为高端PCB设计平台,功能强大,但其输出流程对新手而言并不友好。很多工程师花了数周时间精心布局布线,却在最后一步功亏一篑:阻焊开窗过大、钻孔缺失、丝印压焊盘……这些问题往往不是设计问题,而是数据输出配置不当所致。
本文将以一次完整的Allegro Gerber输出为例,带你避开那些“看不见的坑”,掌握一套标准化、可复用、高可靠性的制造数据生成方法。
为什么说“导出Gerber”是设计闭环的关键?
我们先来思考一个问题:
你画的板子,真的能被工厂“看懂”吗?
PCB制造商并不打开.brd文件,他们只认两样东西:
- Gerber 文件(各层图形信息)
- NC Drill 文件(钻孔数据)
这两类文件就是你的“设计语言翻译器”。如果翻译错了,哪怕电路原理再完美,也无法还原成实际电路板。
而Allegro中的Artwork Control Form,正是这个翻译过程的核心控制台。它决定了每一层如何映射、以何种格式编码、是否包含覆铜、极性如何处理等关键细节。
🔍 小知识:Gerber RS-274X 是目前行业主流标准,支持嵌入D-code,无需额外提供 aperture list,比老式RS-274D更安全稳定。
实战全流程:五步搞定标准Gerber输出
第一步:输出前的终极自检
别急着点“Plot”,先做这几件事:
| 检查项 | 操作路径 |
|---|---|
| 运行最终DRC | Tools > Verify Design |
| 更新所有覆铜 | Shape > Global Dynamic Params > Repour All |
| 锁定调试标记 | 右键对象 →Lock或移至机械层并设为不可输出 |
| 确认原点位置 | 推荐使用左下角板框交点作为绝对原点 |
📌经验提示:建议在机械层绘制一个“输出区域框”,避免误将非生产区内容导出。
第二步:打开 Artwork 控制界面
有两种方式进入:
- 方法一:
Tools > Artwork - 方法二:
Display > Color/Visibility > Film Control
推荐使用第一种,因为它直接进入光绘参数设置模式。
第三步:精准配置层映射与属性
这是最关键的一步。你需要为每层选择正确的物理层,并设置合适的输出参数。
✅ 标准四层板典型层映射表(适用于大多数国内PCB厂):
| 输出层名(Film Name) | 对应Allegro层 | 极性(Polarity) | 说明 |
|---|---|---|---|
TOP | top_signal | Positive | 顶层走线 |
GND | internal_gnd | Positive | 内电层地平面 |
PWR | internal_pwr | Positive | 内电层电源平面 |
BOT | bottom_signal | Positive | 底层走线 |
SM_TOP | soldermask_top | Negative | 顶层阻焊(负片) |
SM_BOT | soldermask_bottom | Negative | 底层阻焊(负片) |
PS_TOP | paste_mask_top | Positive | 钢网层(正片) |
PS_BOT | paste_mask_bottom | Positive | 底层钢网 |
SILK_TOP | silkscreen_top | Positive | 顶层丝印 |
SILK_BOT | silkscreen_bottom | Positive | 底层丝印 |
OUTLINE | board_geometry\outline | Positive | 板框轮廓 |
⚠️ 注意事项:
- 阻焊层必须设为 Negative!否则工厂看到的是“全遮盖”,而不是“开窗”。
- 内电层不要勾选“Anti Etch”以外的对象,防止误输出测试点或文字。
- Route Keepout、Package Keepout 等禁布区不要加入任何输出层。
第四步:全局参数设置(决定成败的细节)
点击 Artwork 窗口下方的“Parameters…”按钮,进入核心参数配置。
推荐配置如下:
| 参数项 | 推荐值 | 说明 |
|---|---|---|
| Units | inch | 行业通用,避免mm转换误差 |
| Format | 2:4 | 整数2位 + 小数4位,精度达0.1mil |
| Zero Suppression | Leading | 去除前导零,防解析错误 |
| Aperture Mode | Extended (RS-274X) | 必选,确保D-code内嵌 |
| Film Dimension | 自动识别板框 | 若异常需手动输入 |
| Data Precision | (2,4) | 与Format一致 |
| Polarity | per layer 设置 | 主页中各层单独设定 |
💡技巧:可以保存.artwork模板文件,下次直接加载,避免重复配置。
第五步:执行输出 & 外部验证
点击“Plot”按钮开始生成文件。
输出路径建议统一管理,例如:
D:\Project\BoardName\Output\Gerber\V1.0_20250405\生成完成后,务必进行以下验证:
✅ 使用 GC-Prevue 或 ViewMate 打开查看:
- 切换颜色方案,反色显示阻焊层 → 检查开窗是否准确对应焊盘
- 叠加 TOP 和 SM_TOP 层 → 观察是否有过覆盖或漏开窗
- 查看钻孔图层 → 确认通孔、盲埋孔位置正确
- 放大丝印边缘 → 检查是否压到SMD焊盘
✅ 检查.drl文件头部信息:
用记事本打开drill.drl,首几行应类似:
M48 INCH,TZ FMAT,2 METRIC,2,4 T01C0.300 ...若出现MM或FMAT,1,说明格式不符,需重新导出。
高频痛点与避坑秘籍
❌ 痛点一:阻焊开窗太大 or 完全没开?
根源:Padstack 中的 Soldermask Expansion 设置不合理,或 Artwork 极性错误。
解决办法:
在 Padstack Editor 中批量修改:
- 进入Options > Padstack > Edit
- 选中常用贴片焊盘(如SMDRECT),设置Soldermask_T和Soldermask_B扩展值为6mil
- 保存为模板,后续复用在 Artwork 中确认该层极性为Negative
输出后用Gerber工具反色查看,理想状态是“焊盘处为空白圆圈”
📌 经验法则:一般扩展值 = 焊盘尺寸 + 4~6mil,具体根据工厂能力调整。
❌ 痛点二:钻孔文件打不开?坐标错乱?
常见原因:单位混乱、零抑制模式不对、缺少M48指令。
解决方案:
- 统一使用inch + 2:4 format
- NC Parameters 中勾选:
Use Leading Zero SuppressionGenerate Step and Repeat InfoOutput Origin Same as Drawing- 输出后检查
.drl是否包含M48开头和M30结尾
💬 曾有项目因未启用
Leading Zero Suppression,导致某孔坐标被解析为.0001而不是1.0001,结果偏移整整1英寸!
❌ 痛点三:丝印模糊断裂?字体变形?
根本原因:文本未转几何体,且线宽太细。
应对策略:
在 Allegro 中启用:
Setup > User Preferences > text_force_exact_circ
并勾选:display > convert_text_to_geometry设置丝印线宽 ≥6mil(最小推荐值)
使用工业级字体(如 Arial Narrow、Helvetica),避免宋体、楷体等TrueType复杂字体
输出前运行命令:
tcl ratsnest all
确保没有残留未处理元素
进阶玩法:用Skill脚本实现一键导出
如果你经常打样,每次都手动点十几层太麻烦?试试自动化!
以下是经过验证的Allegro Skill 脚本,可一键导出标准Gerber+钻孔包:
; allegro_auto_export.il ; 功能:全自动导出标准Gerber与Excellon钻孔文件 ; 作者:硬件老兵 @ 2025 axlShell() ; ========== 用户可配置区 ========== outputDir = "D:/Output/Gerber_Auto" boardName = "PROJECT_ALPHA" layerMapping = list( list("TOP", "top_signal"), list("GND", "internal_gnd"), list("PWR", "internal_pwr"), list("BOT", "bottom_signal"), list("SM_TOP", "soldermask_top"), list("SM_BOT", "soldermask_bottom"), list("PS_TOP", "paste_mask_top"), list("PS_BOT", "paste_mask_bottom"), list("SILK_TOP", "silkscreen_top"), list("SILK_BOT", "silkscreen_bottom"), list("OUTLINE", "board_geometry\\outline") ) ; ========== 创建Artwork对象 ========== artworkObj = axlCreateArtwork() axlSetArtwork(artworkObj) ; 添加所有层 foreach(item layerMapping, filmName = car(item) layerPath = cadr(item) axlAddLayer(artworkObj ?name filmName ?layer layerPath) ) ; 设置全局参数 axlSetArtworkParam(artworkObj ?format "RS274X") axlSetArtworkParam(artworkObj ?units "inch") axlSetArtworkParam(artworkObj ?precision '(2 4)) axlSetArtworkParam(artworkObj ?zero_suppression "leading") axlSetArtworkParam(artworkObj ?aperture_mode "extended") ; ========== 分层设置极性 ========== axlSetLayerPolarity(artworkObj "SM_TOP" 'negative) axlSetLayerPolarity(artworkObj "SM_BOT" 'negative) ; ========== 输出Gerber文件 ========== system(sprintf(nil "mkdir -p %s" outputDir)) ; 创建目录 foreach(item layerMapping, filmName = car(item) fullName = sprintf(nil "%s/%s_%s.gbr" outputDir boardName filmName) axlOutputFilm(artworkObj ?file fullName ?layer filmName) ) ; ========== 导出钻孔文件 ========== drillFile = sprintf(nil "%s/%s_drill.drl" outputDir boardName) repFile = sprintf(nil "%s/%s_drill.rep" outputDir boardName) axlCmdString(sprintf(nil "output ncformat excellon file %s units inch zeros leading format 2:4" drillFile)) axlCmdString(sprintf(nil "output ncformat report file %s" repFile)) ; 清理对象 axlDeleteArtwork(artworkObj) println("🎉 成功导出全套制造文件至:%s" outputDir)📌使用方法:
1. 将脚本保存为.il文件
2. 在 Allegro 中执行:Tools > Execute Script
3. 修改outputDir和boardName即可复用
✅ 适合团队协作、版本迭代频繁的项目,极大提升输出一致性。
最终交付包该怎么打包?
别忘了,你交给工厂的不只是几个.gbr文件。
一份专业的制造资料包应该包括:
📦 BOARDNAME_V1.2_20250405.zip ├── Gerber/ │ ├── BOARDNAME_TOP.gbr │ ├── BOARDNAME_GND.gbr │ ├── ... │ └── BOARDNAME_OUTLINE.gbr ├── Drill/ │ ├── BOARDNAME_drill.drl │ └── BOARDNAME_drill.rep ├── Docs/ │ └── README.txt └── Test/ └── BOARDNAME_IPC_NETLIST.ipc (可选)其中README.txt内容示例:
项目名称:PowerModule_V1.2 板层数:4层(FR-4, 1.6mm) 表面处理:沉金(ENIG) 阻抗要求:单端50Ω ±10%,差分90Ω ±10% 特殊说明: - 所有0402元件正面朝上 - Vias-in-pad需填胶 - 阻焊颜色:绿色 联系人:张工 138xxxx1234写在最后:好设计,更要“说得清”
很多初学者认为:“只要我能做出来,工厂就能做出来。”
但现实是:你能做出来 ≠ 工厂能看得懂。
Allegro导出Gerber的过程,本质上是一次“跨系统、跨语言”的工程沟通。你必须站在制造端的角度去思考:他们的设备怎么读取这些数据?CAM软件如何解析极性?AOI检测依据什么判断开窗是否合格?
只有当你建立起这种“双向思维”,才能真正实现从“能画出来”到“能造出来”的跨越。
下次你在点击“Plot”之前,请默念三遍:
“单位对了吗?”
“极性设对了吗?”
“阻焊开窗看得见吗?”
然后,放心地把文件发出去吧。
如果你在实现过程中遇到了其他挑战,欢迎在评论区分享讨论。