1. 为什么必须亲手导出Gerber?——不是点击“导出”就完事的硬核真相
在PCB设计圈里,Altium Designer导出Gerber文件这件事,听起来像“打开软件→点几下鼠标→保存”,但实际交付工厂前踩过的坑,远比你想象中更具体、更致命。我带过三届硬件新人,几乎每个人都卡在同一个环节:明明AD界面显示“Export completed”,嘉立创/华秋/深南电路的工程反馈却是“Gerber层缺失”“钻孔文件错位”“铜皮被误判为阻焊开窗”。问题从来不在软件本身,而在于——你根本没搞懂Gerber到底是什么,它不是“图纸截图”,而是一套由27个独立文件组成的、面向制造设备的机器语言指令集。
核心关键词Altium Designer、PCB、Gerber文件,这三个词连在一起,本质是设计端与制造端的契约交接点。Gerber不是图片,不是PDF,更不是AD工程文件的压缩包;它是ASCII文本格式的坐标指令流,每一行都对应着光绘机喷头的启停、移动、曝光动作。比如一个简单的圆形焊盘,在Gerber里会被拆解成:G01(直线插补)+X12345Y67890(坐标)+D02(抬刀)+D03(落刀)+M02(程序结束)——这种底层逻辑,直接决定了你的板子能不能做出来、做出来是不是你想要的样子。
为什么AD20/AD23/AD24/AD25导出步骤看似一样,但老工程师总强调“版本差异要校验”?因为从AD18开始,Gerber输出引擎底层重构了:AD18用的是Gerber RS-274X标准兼容层,AD21起强制启用IPC-2581B元数据嵌入机制,AD25则默认开启“Drill Drawing Layer Mapping”智能钻孔映射。这些变化不会弹窗提醒你,但会悄悄改变钻孔文件命名规则、阻焊层极性定义、甚至丝印文字的矢量填充方式。我去年帮一家医疗客户返工过一批板子,问题就是AD23导出时未关闭“Use Legacy Drill File Format”,导致钻孔文件里的孔径单位被识别为mil而非mm,0.3mm的过孔在工厂被加工成0.012inch(0.3048mm),勉强能用但EMC测试全军覆没。
适合谁看?如果你是刚从立创EDA或嘉立创EDA转过来的设计师,习惯“一键生成Gerber”,那这篇必须精读——AD的Gerber导出是精密手术,不是批量打包;如果你是做了三年以上PCB却还在用“默认设置导出”的工程师,这篇会帮你省下至少三次打样报废成本;如果你是工厂CAM工程师,想反向理解设计端常犯的错误,这里全是真实案例还原。接下来所有内容,不讲虚的,只拆解你按下“Export”按钮之前,必须亲手确认的每一个开关、每一处参数、每一条路径。
2. Gerber文件的本质与AD导出逻辑深度拆解
2.1 Gerber不是“图”,是“机床指令集”——从光绘机原理反推导出逻辑
很多新手以为Gerber是PCB的“高清截图”,这是最危险的认知偏差。真正的Gerber文件诞生于上世纪70年代,专为光绘机(Photoplotter)设计。这种设备没有屏幕,只有一台高精度X-Y移动平台+紫外激光头,靠读取文本指令控制激光开关和平台位移。所以Gerber本质是数控机床G代码的PCB专用变种。一个标准Gerber文件(RS-274X格式)包含三类核心指令:
- 坐标系定义:
%MOIN*(英寸单位)或%MOMM*(毫米单位),%FSLAX24Y24*(X/Y轴小数位数,24代表小数点后4位,即0.0001inch精度) - 图形绘制指令:
X12345Y67890D02*(移动到坐标)、D03*(曝光)、G75*(圆弧插补) - 层属性声明:
%LNTopLayer*(层名声明)、%LPD*(正片模式)、%LPC*(负片模式)
Altium Designer导出Gerber的过程,就是把PCB编辑器里的图形对象(走线、焊盘、覆铜)实时翻译成这套指令流。关键点在于:AD不是“截图保存”,而是“实时编译”。当你在PCB界面拖动一个焊盘,AD后台同步更新其Gerber坐标指令;当你修改覆铜边界,AD重新计算所有铜皮区域的轮廓矢量并生成新指令。这意味着导出前必须确保:设计已完全编译(无未处理的DRC错误)、所有层叠结构已锁定(Layer Stack Manager中无未应用的变更)、所有网络已正确识别(Netlist无悬空引脚)。
提示:AD界面右下角状态栏显示“Ready”不代表Gerber就绪。必须手动执行Tools → Design Rule Check,确认“No violations found”,再检查PCB面板中“Layers”页签下的所有层是否显示“Enabled”,尤其是机械层(Mechanical Layers)是否被意外禁用——曾有客户因机械层2(Board Outline)被关闭,导致Gerber里缺失板框,工厂按默认矩形切割,边缘器件全被削掉。
2.2 AD版本演进对Gerber输出的实质性影响
AD20、AD23、AD24、AD25并非简单UI升级,Gerber引擎底层逻辑存在代际差异。忽略版本特性,等于主动埋雷:
| 版本 | 关键变更点 | 实操风险案例 |
|---|---|---|
| AD20及更早 | 默认使用Legacy Drill Format(Excellon 1.0) | 钻孔文件无单位声明,工厂需人工指定mm/inch,0.5mm孔易被误读为0.02inch(0.508mm) |
| AD21-AD22 | 引入IPC-2581B元数据嵌入 | 导出Gerber时若勾选“Include IPC-2581B Data”,会生成额外.xml文件,部分国产工厂CAM软件无法解析,报错“Unknown file format” |
| AD23-AD24 | 默认启用“Smart Drill Mapping” | 自动将Drill Drawing层映射到实际钻孔层,但若设计中Drill Drawing层被误删,AD会静默跳过钻孔导出,生成零字节.drill文件 |
| AD25 | 强制要求“Unified Output Job”工作流 | 传统File → Fabrication Outputs → Gerber Files路径被弃用,必须通过Output Job文件统一管理,否则导出选项灰显 |
我实测过AD25的“Unified Output Job”机制:新建Output Job后,添加Gerber Output,其配置界面底部多出“Advanced Settings”按钮。点开后可见“Drill Origin”选项,默认为“Absolute Origin”,但若你的PCB原点(Origin)设在板边外侧,工厂光绘机会以绝对坐标定位,导致所有图形偏移。必须手动改为“Relative to Board Outline”,才能确保坐标系与板框对齐。这个选项在AD20里根本不存在,老用户凭经验导出,到了AD25就会失效。
2.3 为什么必须分层导出?——Gerber文件的物理制造意义
Gerber文件不是“一张图”,而是按制造工序拆解的27个独立文件。嘉立创官网明确列出必需文件清单:Top Layer(顶层铜)、Bottom Layer(底层铜)、Top Solder Mask(顶层阻焊)、Bottom Solder Mask(底层阻焊)、Top Silkscreen(顶层丝印)、Bottom Silkscreen(底层丝印)、Drill Drawing(钻孔图)、NC Drill(钻孔坐标)、Board Outline(板框)。少一个,工厂就卡在哪个工序。
- 铜层(GTL/GBL):决定电路走线和焊盘形状,正片模式(LPD),白色区域为铜皮
- 阻焊层(GTS/GBS):决定绿油覆盖范围,负片模式(LPC),黑色区域为开窗(露出铜皮)
- 丝印层(GTO/GBO):决定字符印刷位置,正片模式,白色区域为油墨
- 钻孔层(TXT/DRILL):包含孔径、孔位、孔类型(PTH/NPTH),单位必须与工厂约定一致
特别注意阻焊层的负片特性:你在AD里画的阻焊开窗(Solder Mask Expansion),在Gerber里表现为“挖空”区域。如果导出时未勾选“Plot solder mask as negative”,工厂会把整个板面涂满绿油,所有焊盘都被封死。这个选项在AD23的Gerber Setup对话框中位于“Advanced”页签,名称是“Create solder mask as negative image”,默认关闭——意味着你必须手动打开,否则90%的初学者都会翻车。
3. 完整实操流程:从AD界面到工厂接收的全流程拆解
3.1 导出前的强制自检清单(5分钟省下3天返工)
在点击“Export”之前,必须完成以下6项检查。这不是形式主义,而是制造端的硬性准入门槛:
DRC终极验证:运行Tools → Design Rule Check,勾选“All Rules”,重点确认:
- Clearance(间距):信号线与铜皮、焊盘与焊盘间距≥4mil(0.1016mm)
- Short-Circuit(短路):无未连接的重叠焊盘
- Un-Routed Net(未布线):所有网络Status显示“100% Routed”
注意:AD的DRC报告里“Violations”数量为0,不代表Gerber就安全。曾有客户DRC全绿,但Gerber里阻焊层因“Solder Mask Expansion”值设为负数,导致焊盘被绿油完全覆盖。必须手动检查PCB面板→Properties→Design Rule→Manufacturing→Solder Mask Expansion,确认值为正数(推荐0.1mm)
层叠结构锁定:打开Design → Layer Stack Manager,确认:
- 所有层(Top Layer, Inner Layer 1, Bottom Layer等)厚度、材料(FR-4)、铜厚(1oz/2oz)已填写
- “Apply Changes”按钮呈灰色(表示已应用),若为蓝色,必须点击应用
- 机械层(Mechanical Layers)中,Layer 1(Board Outline)必须启用且包含闭合多边形
钻孔定义核查:打开PCB面板→Drill Pairs,确认:
- 所有钻孔对(Drill Pair)已定义(如Top-Bottom)
- NPTH(非电镀孔)与PTH(电镀孔)已分类,NPTH孔径标注为“NPTH_Φ0.8mm”
- 钻孔表(Drill Table)已插入PCB,且位置在板外空白区(避免被裁切)
原点(Origin)重置:按Ctrl+Shift+R重置原点至板框左下角。原因:工厂光绘机以板框为基准定位,若原点在板内某焊盘上,会导致所有坐标偏移。实测案例:某客户原点设在USB接口中心,Gerber坐标全为负值,工厂CAM软件报错“Invalid coordinate”。
字体矢量化:选中所有丝印文字(快捷键S→Text),右键→Properties→Font,将TrueType字体改为Stroke Font(如Sans Serif),并勾选“Convert to Polygon”。原因:TrueType字体在Gerber里会丢失轮廓,变成方块乱码;Stroke Font转为多边形后,可被光绘机精确识别。
文件命名规范预设:在Project → Project Options → Options页签,设置“Output Path”为相对路径(如“Outputs/Gerber”),避免绝对路径(C:\Users...)导致协作时路径失效。
3.2 AD25 Unified Output Job实操详解(适配最新版)
AD25已废除旧式菜单导出,必须通过Output Job统一管理。以下是完整步骤(以双面板为例):
创建Output Job文件:
右键项目根目录 → Add New to Project → Output Job。命名为“Fabrication_Output.jobopts”。添加Gerber输出任务:
在Output Job编辑界面,点击“Add Output”按钮 → 选择“Gerber Files”。此时右侧配置区出现“Gerber Setup”选项卡。配置Gerber层映射(关键!):
切换到“Layers”页签,逐层勾选:- Top Layer → GTL(顶层铜)
- Bottom Layer → GBL(底层铜)
- Top Solder Mask → GTS(顶层阻焊)
- Bottom Solder Mask → GBS(底层阻焊)
- Top Overlay → GTO(顶层丝印)
- Bottom Overlay → GBO(底层丝印)
- Mechanical 1 → GKO(板框,必须勾选)
- Drill Drawing → TXT(钻孔图)
- NC Drill → DRL(钻孔坐标)
注意:Drill Drawing层必须单独勾选,且文件名后缀设为“.txt”,否则工厂无法识别钻孔图。NC Drill层文件名后缀必须为“.drl”,这是行业硬性约定。
设置高级参数(避坑核心):
切换到“Advanced”页签,关键设置:- Units:选择“Millimeters”(国内工厂通用,嘉立创/华秋均要求mm)
- Format:设置“2:4”(整数2位,小数4位,即0.0001mm精度)
- Solder Mask:勾选“Create solder mask as negative image”(强制负片)
- Drill Origin:选择“Relative to Board Outline”(避免坐标偏移)
- Plot Layers:勾选“Plot only used layers”(跳过空层,减小文件体积)
生成并验证:
点击右上角“Generate Content”按钮。生成后,打开Outputs文件夹,检查:- 文件数量:应有10个文件(GTL, GBL, GTS, GBS, GTO, GBO, GKO, TXT, DRL, X2)
- 文件大小:铜层文件通常>100KB,阻焊层>50KB,若某文件<5KB,大概率层未勾选或为空
- 文件内容:用记事本打开GTL文件,首行应为
%FSLAX24Y24*(24位精度),末尾有M02*(程序结束)
3.3 AD20/AD23兼容导出方案(老版本用户必看)
若你仍在用AD20或AD23,流程略有不同,但核心原则不变:
- 入口路径:File → Fabrication Outputs → Gerber Files
- 层设置:在Gerber Setup对话框中,“General”页签勾选“Plot layers used in project”,然后在“Layers”页签手动勾选所需层(同AD25逻辑)
- 钻孔文件单独导出:File → Fabrication Outputs → NC Drill Files,关键设置:
- Units:必须与Gerber一致(mm)
- Format:选择“Excellon 2.0”(AD23起默认,兼容性更好)
- Zero Suppression:选择“Leading”(去掉前导零,如00123→123)
- 板框层特殊处理:Mechanical 1层必须设为“Board Outline”,并在“Gerber Setup”→“Mechanical Layers”页签中勾选“Include mechanical layers”
实操心得:AD20导出时,常遇到“Drill Drawing层不生成”问题。根源是Drill Drawing层在PCB中未被赋予“Drill Drawing”类型。解决方法:PCB面板→Layers→右键Mechanical 2→Properties→Layer Type改为“Drill Drawing”,再重新导出。
4. 工厂拒收的12个高频问题与现场排查技巧
4.1 Gerber文件级问题速查表
| 问题现象 | 根本原因 | 排查工具与方法 | 解决方案 |
|---|---|---|---|
| 工厂反馈“无钻孔文件” | NC Drill层未勾选,或Drill Drawing层类型错误 | 用记事本打开.drl文件,检查首行是否有M48(Excellon头标识) | 在AD中确认Drill Drawing层类型为“Drill Drawing”,NC Drill导出时勾选“Generate drill table” |
| 阻焊全覆盖,焊盘不上锡 | 未勾选“Create solder mask as negative image” | 用GC-Prevue打开GTS文件,观察焊盘区域是否为黑色(开窗) | AD25中Advanced页签开启该选项;AD20中Gerber Setup→Advanced→勾选“Plot solder mask as negative” |
| 丝印文字全变方块 | 使用TrueType字体未转多边形 | 放大查看GTO文件,文字区域是否为连续矢量线 | 全选文字→右键Properties→Font→改为Stroke Font→勾选“Convert to Polygon” |
| 板边不齐,器件被切 | Mechanical 1层无闭合多边形,或原点偏移 | 用ViewMate打开GKO文件,检查板框是否闭合 | 在PCB中绘制闭合多边形→右键→Properties→Set as Board Shape;按Ctrl+Shift+R重置原点 |
| 过孔无铜,信号断开 | PTH孔未定义为电镀孔 | 检查PCB面板→Drill Pairs,确认孔对包含“Plated” | 双击过孔→Properties→Hole Size→勾选“Plated” |
| Gerber文件为0字节 | 输出路径含中文或特殊符号 | 查看Outputs文件夹,文件大小为0 | 将项目路径改为纯英文,如“D:\PCB_Project\Outputs” |
4.2 GC-Prevue实战验证技巧(免费神器)
工厂不会给你解释,但你可以用GC-Prevue(免费Gerber查看器)提前发现90%的问题:
- 安装与加载:下载GC-Prevue后,打开软件→File → Load Job → 选择Gerber文件夹(含所有.gtl/.gbl/.gts等文件)
- 层叠检查:左侧Layers列表,勾选Top Layer + Top Solder Mask,观察焊盘是否被阻焊层精准覆盖(焊盘白,阻焊黑,边缘对齐)
- 钻孔验证:勾选NC Drill层,用Measure工具测量孔径,对比BOM表中孔径规格(如Φ0.3mm)
- 板框校验:勾选GKO层,用Zoom工具拉满查看板边,确认无缺口、无毛刺
- 坐标系确认:右键→Properties→查看“Origin”坐标,应为(0,0)或接近板框左下角
注意:GC-Prevue中绿色代表铜层,红色代表阻焊开窗,蓝色代表丝印。若看到焊盘区域为绿色+红色重叠,说明阻焊开窗正确;若只有绿色,说明阻焊未开窗——这就是“不上锡”的根源。
4.3 嘉立创/华秋/深南电路的平台上传避坑指南
不同工厂对Gerber包的要求有细微差异,必须针对性调整:
嘉立创(JLCPCB):
要求.zip包内不含子文件夹,所有Gerber文件平铺在根目录。命名必须为:*.gtl(顶层铜)、*.gbl(底层铜)、*.gts(顶层阻焊)...
若上传后提示“文件格式错误”,大概率是.zip包里多了“Outputs”文件夹,需解压后重新压缩。华秋(HQPCB):
支持IPC-2581B格式,但需在上传页面勾选“Use IPC-2581B”。若用AD25导出时已嵌入元数据,此处必须勾选,否则解析失败。深南电路(Sunway):
要求Drill文件必须为Excellon 1.0格式(非2.0)。AD25导出时,在NC Drill设置中将“Format”改为“Excellon 1.0”,并取消勾选“Embedded tool information”。
实测案例:某客户用AD25导出Excellon 2.0钻孔文件上传深南,系统提示“Tool not found”,原因是2.0格式的工具表(T01C0.3)未被识别。改为Excellon 1.0后,工具表变为T01F0.3,顺利通过。
5. 进阶技巧:自动化脚本与团队协作规范
5.1 批量导出脚本(Python+AD API)——解放重复劳动
当项目增多,手动导出10次Gerber会消耗大量时间。AD提供Scripting API,可用Python自动执行:
# gerber_export.py import os from altium_designer import Project # AD内置API模块 def export_gerber(project_path): proj = Project.Open(project_path) # 设置输出路径 output_dir = os.path.join(os.path.dirname(project_path), "Outputs", "Gerber") os.makedirs(output_dir, exist_ok=True) # 配置Gerber输出参数 gerber_job = proj.CreateOutputJob("Gerber_Job") gerber_job.AddOutput("Gerber Files") gerber_job.SetProperty("Units", "Millimeters") gerber_job.SetProperty("Format", "2:4") gerber_job.SetProperty("SolderMaskNegative", True) # 执行导出 gerber_job.Generate(output_dir) print(f"Gerber exported to {output_dir}") if __name__ == "__main__": export_gerber(r"D:\Projects\Power_Supply.PrjPcb")注意:此脚本需在AD安装目录下运行(因依赖AD内核DLL)。实际部署时,建议封装为.bat批处理文件,双击即可执行,避免工程师接触代码。
5.2 团队Gerber交付规范(血泪教训总结)
我们团队推行的《Gerber交付Checklist》已迭代7版,核心条款:
- 文件命名:
ProjectName_RevA_TopCopper.gtl(含项目名、版本、层名) - 版本控制:每次ECN变更,Gerber文件名增加RevB/RevC,旧版存档不覆盖
- 交付包结构:
Gerber_Package.zip ├─ Gerber/ # 所有Gerber文件 ├─ Drill/ # .drl和.txt文件 ├─ Readme.txt # 包含板厚、铜厚、阻焊颜色、表面处理(沉金/喷锡) └─ BOM.xlsx # 与Gerber匹配的物料清单 - 签字确认:硬件工程师、PCB工程师、采购三方在Readme.txt末尾电子签名,注明日期
最后分享一个小技巧:在AD中设置“Template Project”,将所有Gerber导出参数(层映射、单位、精度)预设好。新项目创建时,直接基于此模板,省去每次重复配置。我放在公司服务器共享目录,新人入职第一天就能独立导出合格Gerber——这才是真正把经验沉淀为生产力。