从设计到制造:Allegro中一套真正“拿得出手”的Gerber输出配置实战指南
在硬件工程师的职业生涯里,最怕听到的一句话不是“功能不对”,而是——
“你们给的板子文件有问题,钻孔和线路对不上。”
更扎心的是,这问题往往出现在你信心满满地把PCB送去打样之后。工厂一封邮件发来截图:焊盘偏了、阻焊开窗太大、底层丝印全是镜像……轻则返工延误进度,重则整批报废。
而这一切的源头,很可能只是你在Cadence Allegro里点了几下“Artwork”设置时,漏掉了一个关键选项。
今天我们就来聊点实在的:如何用Allegro输出一套让厂家看了直呼“标准”的Gerber文件?不讲虚的,不堆术语,只说那些真正影响生产的细节配置,帮你避开90%以上的交付雷区。
Gerber到底是什么?别再把它当“导出图片”了
很多新手会误以为Gerber就是PCB各层的“截图”或“打印稿”。错。
Gerber是制造指令,是机器能读懂的语言。
它告诉光绘机:“在这块区域镀铜,在那里留个洞,这个圆圈要露铜,那段线不能上绿油。”每一个坐标、每一条路径,都直接决定最终电路板能不能做出来、做得准不准。
目前行业通用的是RS-274X 扩展格式,它的优势在于:
✅ 支持内嵌Aperture(图形模板)
✅ 无需额外提供.apt文件
✅ 层属性完整,支持正负片混合输出
所以你在Allegro里导出时,第一件事就是确认勾上了这一项:
✅ Embedded Apertures (RS274X)
否则系统会拆分出独立的aperture文件,一旦传输遗漏或命名错误,工厂根本无法正确解析。
单位与精度:微米级偏差的罪魁祸首
你以为差0.001mm没关系?可你知道大多数PCB厂的Gerber解析能力上限是多少吗?
答案是:6:5 英寸精度—— 即整数6位,小数5位(相当于0.00001 inch ≈ 0.254μm)。听起来很细,但如果你设成5:4或者用了毫米单位没对齐,舍入误差就会累积,导致整体图形偏移。
推荐设置:
| 参数 | 建议值 |
|---|---|
| Unit | Inches |
| Format | 6:5 |
| Zero Suppression | Leading |
为什么不用mm?因为绝大多数欧美设备和国产高端产线仍以inch为默认单位,尤其是钻孔系统。两边单位不一致,坐标原点哪怕差一丝,也足以让BGA焊盘失准。
🛠 实战提示:在
Manufacturing > Artwork进入控制表单前,先检查菜单底部的状态栏是否显示INCH / 6:5,如果不是,请手动修改全局设置。
层怎么映射?别让GND层变成Top信号层
这是最常见的低级错误之一:明明画的是内电层,结果Gerber里输出成了普通走线层。
原因很简单——你在Artwork Control里搞错了Film的来源类型。
正确做法如下:
1. 顶层/底层信号层(正片)
Layer Name: TopLayer Source Type: Signal Subclass: All Polarity: Positive2. 内层电源/地平面(负片)
Layer Name: L2_GND Source Type: Plane Subclass: Default Polarity: Negative ✔ Preserve Orphan Shapes重点来了:必须勾选“Preserve Orphan Shapes”!
否则,那些用于调试测试的孤立焊盘(比如一个单独的地过孔),会被当成“浮动铜皮”清除掉。等你拿到板子才发现某个地网络不通,查了半天发现是Gerber自己“优化”掉了……
3. 阻焊层(Solder Mask)
这里有个坑很多人踩过:直接把PIN层复制过去当阻焊开窗。
结果呢?绿油把焊盘盖住了,或者开窗比焊盘还大一圈,回流焊时容易连锡。
正确的做法是使用Contraction(收缩)模式:
Layer Name: TOP_SOLDERMASK Source Type: Package Geometry Elements: Pin, Shape, Line, Text ✔ Apply Contraction = 4 mils (即 -4)什么意思?就是每个焊盘自动缩小4mil半径,这样开窗比实际焊盘小8mil直径,既保证上锡空间,又防止溢出短路。
⚠️ 注意:不同工艺略有差异,常规FR4板推荐-4mil;如果是HASL热风整平,可以适当放宽至-3.5mil;沉金板更精细,建议-4.5mil。
4. 丝印层(Silkscreen)
底层丝印文字镜像是正常的!
很多人看到Bottom Silkscreen里的字反着写就慌了:“是不是设置错了?”
不是。PCB制作时,底层丝印是从底面往上印的,所以必须镜像才能从正面看清。
判断标准很简单:
- Top层文字:左 → 右(正常阅读)
- Bottom层文字:右 ← 左(镜像状态)
只要方向符合这个规律,就没问题。
5. 板框与机械层
强烈建议单独建一个Film专门输出板框:
Film Name: BOARD_OUTLINE Source Type: Mechanical Subclass: 1 Only include lines on this layer不要把尺寸标注、装配说明也混进来。Mechanical 1只放外轮廓线,清晰明了,方便厂家识别V-cut、铣槽路径。
其他用途分配建议:
- Mechanical 2:装配指引(如元件投影区)
- Mechanical 13:尺寸标注
- Mechanical 20:禁布区高亮
钻孔文件必须同步!坐标偏移八成出在这儿
Gerber管图形,NC Drill管钻孔。两者若原点不一致、单位不同步,就会出现“孔不在焊盘中心”的经典事故。
NC Drill 输出要点:
进入Manufacturing > NC Drill后,务必检查以下参数:
| 设置项 | 推荐值 | 说明 |
|---|---|---|
| Units | Inches | 必须与Gerber一致 |
| Format | 2:5 | 小数点后5位,兼容性最好 |
| Zero Suppression | Leading | 去除前导零 |
| Tool Origin | Off (Absolute) | 使用绝对坐标 |
| Route Path | 自定义路径 | 如/output/drl/ |
然后点击 Generate,生成两个核心文件:
-.drl:钻孔数据(Excellon格式)
-.drldrw:钻孔图(供人工核对)
同时记得勾选:
- ✔ Generate N/C Drill Legend
- ✔ Draw Symbol at Each Location
这样才能让厂家一眼看出哪个符号对应多大孔径。
怎么验证你导出的文件没问题?
别指望工厂帮你查错。他们只会说:“文件异常,请重新提交。”
你要做的,是在发出之前自己先看一遍。
推荐工具:GC-Prevue(免费且强大)
下载地址:https://www.graphicode.com/free-viewer/
操作流程:
1. 把所有.art文件拖进去
2. 加载.drl钻孔文件
3. 切换Layer View,叠加Top Layer + Drill
4. 放大BGA区域,观察孔是否居中于焊盘
重点关注:
- 是否有缺层?(特别是内电层)
- 阻焊开窗是否过大?
- 底层丝印是否镜像正确?
- 非金属化孔有没有被误标记为镀通孔?
如果一切正常,再打包交付也不迟。
老手都在用的自动化技巧:Skill脚本一键输出
每次都要手动点十几层?项目多了难免漏掉一两项。
我们团队的做法是:写一个标准Skill脚本,固化输出模板。
; gerber_export_standard.il axlCmdWatchState(nil) printf("▶ 开始执行标准化Gerber输出...\n") dd = axlGetDatabase() artCfg = dd~>artwork axlSetArtworkConfig(artCfg) ; 全局设置 axlArtworkSetUnit('inch) axlArtworkSetPrecision(6 5) axlArtworkEmbedApertures(t) ; Top Layer (正片) topFilm = axlAddFilm("TOP_CU") axlAddToFilm(topFilm 'signal 'all t) axlSetFilmPolarity(topFilm 'positive) ; L2 GND Plane (负片) gndFilm = axlAddFilm("L2_GND") axlAddToFilm(gndFilm 'plane t) axlSetFilmPolarity(gndFilm 'negative) axlFilmPreserveOrphans(gndFilm t) ; 保留孤岛 ; Soldermask Top smTop = axlAddFilm("TOP_SM") axlAddToFilm(smTop 'packagegeometry 'pin t) axlAddToFilm(smTop 'shape t) axlSetFilmContraction(smTop 4) ; 收缩4mil ; Silkscreen Top ssTop = axlAddFilm("TOP_SS") axlAddToFilm(ssTop 'text t) axlAddToFilm(ssTop 'line t) axlAddToFilm(ssTop 'arc t) ; Board Outline outline = axlAddFilm("OUTLINE") axlAddToFilm(outline 'mechanical 1 t) ; 输出路径 outputDir = "/proj/release/gerber_v1.2/" axlArtworkOut(outputDir) printf("✅ Gerber输出完成:%s\n", outputDir)把这个脚本放在公司共享库中,新人拿到就能用,极大降低人为失误率。
💡 提示:运行前确保当前.brd已保存,且层名与脚本一致。
交付清单:别忘了这些“附加材料”
一份完整的生产交付包,不只是Gerber+钻孔文件。我们通常还会附上:
📦 gerber_package_v1.2/ ├── TOP_CU.art → 顶层线路 ├── BOT_CU.art → 底层线路 ├── L2_GND.art → 内电层(负片) ├── TOP_SM.art → 顶层阻焊 ├── BOT_SM.art → 底层阻焊 ├── TOP_SS.art → 顶层丝印 ├── BOT_SS.art → 底层丝印 ├── OUTLINE.art → 板框 ├── pcb.drl → 钻孔数据 ├── pcb.rep → 钻孔报表 ├── stackup.pdf → 层叠结构图 ├── readme.txt → 特殊要求说明 └── impedance.xlsx → 阻抗控制参数(如有)其中readme.txt至关重要,内容示例:
项目名称:PowerBoard_V1.2 投板日期:2025-04-05 层数:6层板 板材:IT-180A,Tg=180℃ 表面处理:沉金(ENIG) 特殊工艺: - L3/L4为背钻层,需控深钻 - 差分阻抗 100Ω±10%,参考层L2/L5 - 所有非金属化孔需做掏空处理 联系人:张工,phone: 138xxxx1234有了这份文档,CAM工程师一看就懂,沟通成本大幅下降。
最后几句掏心窝的话
做过这么多年硬件,我发现一个规律:
越是经验丰富的工程师,越重视输出环节的细节。
因为他们知道,一次成功的投板,不仅仅靠完美的布局布线,更依赖于最后一步——把设计意图毫无损耗地传递出去。
而Gerber输出,正是这场“信息接力赛”的最后一棒。
你现在花十分钟认真检查一下Film设置,可能就避免了两周后的紧急改版。
与其事后救火,不如事前防患。
下次当你准备点击“Generate Artwork”时,不妨停下来问自己几个问题:
- 我的单位和精度设对了吗?
- 内电层真的输出成负片了吗?
- 阻焊收缩量加了吗?
- 孤立焊盘会被删掉吗?
- 钻孔和Gerber坐标统一了吗?
只要把这些细节都答清楚了,你的文件,就已经超过80%的同行了。
如果你也在用Allegro做复杂板卡设计,欢迎留言交流你们的输出规范。也许下一次更新,我会把你们的经验也加进来。