1. 先搞清楚镜像层到底在镜像什么
1.1 为什么需要镜像层
PCB 出 Gerber 时,镜像这个词几乎是每个画板子的人都会碰到的,但真正把它讲清楚的人不多。最常见的一个场景就是底层丝印。你在 Bottom Overlay 上放一个 GND 标记,正面看它是反的,只有翻到背面看才是正着的。如果你的产品底面正好朝外,或者需要在背面露出字符标识,工厂在丝印工序里就需要一张“从背面看可读”的底层字符图。Gerber 文件本身并不知道哪一面是正面,它存的只是坐标集合。想让底层字符在视觉上正过来,就必须在导出时对底层做一次坐标反射,也就是我们说的镜像。
第二个常见场景是阴阳板。某些低成本小板子为了节省板材,会在一张板卡里同时排布正面朝上和背面朝上的两个子板。背面朝上的那个子板,其全部底层图形都需要以镜像形式输出,否则拼板后方向就反了。这种事情通常在 Layout 阶段会处理,但如果布局已经冻结、改动成本高,就会要求在导出环节用镜像解决。
第三个容易被忽略的是对齐一致性。镜像并不只是“把某个图层左右颠倒”那么简单。如果一块六层板的 Gerber 里,五层是正向输出,只有底层丝印单独做了镜像,那工厂在 CAM 阶段把各层叠在一起对孔位时,大概率会出现坐标对不上的报警。原因是底层丝印的坐标经过反射后,和钻孔层、底层铜层之间不再共享同一套坐标关系。所以真正实操中,“整组配套层一起镜像”比“单独镜像某一层”要常见得多。
1.2 镜像和翻转不是一回事
新手经常把“翻转板子”和“镜像图形”混为一谈。翻转是视角变化,你把板子从桌子拿起来翻到背面看,左右关系反了,但板子本身的几何坐标一点没变。镜像则是把图形上的所有坐标,按照某个轴做反射变换。前者是你看板子的方式变了,后者是文件数据本身变了。
我习惯用一个透明卡片的例子来解释。你在一张透明片上从左到右写下 A、B、C,正面读就是 ABC。把透明片反过来从背面看,你看到的是 C、B、A,这就是翻转视角。如果你想得到一张胶片,让它放在灯光下从正面看就能直接读出 CBA,那你就需要把原来的图形做一次镜像变换,把所有点沿中轴翻过去,生成一份新的坐标。Gerber 的镜像层级操作,做的就是后面这件事。
在 Altium 里,这两者对应两个完全不同的入口:PCB 编辑器里的 V+B 快捷键只是让你从底面观察板子,不影响任何输出文件;而真正改变 Gerber 文件坐标的,是 Gerber Setup 对话框里层列表中的 Mirror 选项。很多人搞反,就是因为先按了 V+B,发现屏幕上字符都正了,就以为导出的文件也会是正的。实际不是,屏幕显示和文件坐标是两套系统。
2. 22.11 版本后 Gerber 输出到底变了什么
2.1 早期版本怎么操作镜像
Altium 22.11 之前的版本,比如 AD20、AD21 时代,Gerber Setup 的 Layers 页里有一个非常显眼的 Mirror 选项。我当时学这个功能,流程大概是:打开 Gerber Files 对话框,选择 Layers 标签页,在需要镜像的层前点开下拉选项或者直接勾选 Mirror,点确认生成。界面比较直白,找得到就不是大问题。
那个年代还有个特点:Gerber 输出配置跟随着 PCB 文档走,版本之间差异也不大。只要项目模板里配好了一次镜像设置,后续同系列板子基本都能继承。公司内部做标准化 Output Job 后,镜像这件事更像是一次性的配置工作,不太需要每次重设。老版本的风险反而是误触。有些人只是临时预览,不小心把某一个底层文件勾上了镜像,结果整批 Gerber 里就那一层是反的,CAM 检查时很难发现,到产线对位时才会暴露。
2.2 22.11 之后哪里容易踩坑
22.11 版本开始,Altium 对 Gerber 输出引擎做了一轮重构,顺带把界面里很多列的显示方式改成默认精简模式。最直观的变化是,打开 Gerber Setup 的 Layers 页,层列表只显示层名和 Plot 这类核心列,Mirror 列直接藏了起来。第一次看见这个界面的工程师,十有八九觉得新版把镜像功能删了。
另一个容易踩坑的是 Gerber X2 格式成了默认选项。Gerber X2 在文件头会写入更多层属性信息,但它本身并没有一个标准的“镜像”字段。旧工程里保存的镜像状态,通过旧 Output Job 迁移到新版本时,映射并不可靠。我实测过的结果是,有些层勾过的镜像在新版本里被静默忽略,有些层干脆丢失了输出属性。如果你公司里的模板没有同步更新,同一个人、同一个板子,在不同版本电脑上出的 Gerber 甚至方向都可能不一致。
坐标格式的默认值也变过。22.11 之后,Advanced 页里的默认单位、前导零/后导零、精度设置,跟老版本默认值不完全一样。镜像计算依赖精确坐标,一旦精度低一位,底层孔位和顶层孔位在 CAM 里可能就差出几个 mil。这种问题在正常层上不明显,因为大家坐标都是正向;但镜像层经过反射后,轻微误差会被放大,更容易在钻孔对齐时暴露。
2.3 先给结论:功能并没有删
虽然界面变了、默认格式变了,但逐层镜像的功能还在。入口只是被收进列设置里,需要手动把 Mirror 列调出来。具体做法是在 Layers 页的层列表表头右键,在弹出菜单里勾选 Mirror 列。勾出来之后,每个输出层旁边都会出现一个可勾选的格子。
如果你做完这一步发现还是没有,或者这个工程是从老版本迁移来的,最稳妥的办法是把 Output Job 删掉重建。不要试图在旧配置上打补丁。新版对旧输出配置的兼容性并不是百分之百,重建之后重新设置一遍,反而能避免很多隐藏问题。我处理过好几个“镜像莫名失效”的案例,最后都是重建 Output Job 解决的。
3. 镜像层导出的 4 个可行方案
3.1 方案一:Gerber Setup 层列表直接勾镜像(首选)
这是最正规、最可控的方法,也是我现在最常用的方式。
第一步,在 PCB 编辑器里打开 File -> Fabrication Outputs -> Gerber Files。
第二步,切到 Layers 页,在层列表的表头区域右键,把 Mirror 列显示出来。如果你是 22.11 之后的默认界面,这步是必须做的,不做就看不到任何镜像入口。
第三步,在需要镜像的层行勾选 Mirror。这里需要特别强调:不要只勾一层。如果你想让整套底层都以“从底面看图”的方式输出,那么 Bottom Copper、Bottom Solder、Bottom Overlay、Bottom Paste 这几层应该一起勾选。如果只勾了 Bottom Overlay,到底勾不勾 Bottom Copper,取决于你和工厂怎么约定,但至少要把配套的阻焊和字符同时处理掉。
第四步,确认坐标原点和格式。我建议在 Advanced 页把 Format 设置成 2:5,单位按公司规范选毫米或英制。不要用默认最小化设置里的 2:3,精度不够,镜像翻转后小焊盘很容易偏位。
第五步,生成文件。生成后不要急着发,先打开 CAM 工具或者 Altium 自带的 Gerber 查看器,把镜像过的层和钻孔层叠在一起,选几个特征位置量一下坐标,确认没有单层错位。
这里有个我自己的习惯:凡是做过镜像的层,文件名一定加上后缀。Altium 默认会用层名作为文件名一部分,但你可以通过 Output Job 的 Naming 设置改成自定义格式,比如底层丝印写成 OVL_BOT_M,别人拿到文件一看就知道这层是镜像过的。这能省下大量沟通成本。
3.2 方案二:先用底部视图确认方向再出镜像
这个方案不算真正改动 Gerber 输出,但能帮你避免方向搞反。适合那种“我完全不记得底面字符当前方向对不对”的情况。
在 PCB 编辑器里按 V+B,Altium 会从底面显示板子。这个时候你再看 Bottom Overlay 上的字符,就是板子真正从背面看到的样子。如果文字显示是反的,说明当前底层在正向坐标系里是反的,导出时大概率需要镜像;如果文字已经是正的,说明你屏幕上看到的就是“从背面正确阅读”的结果,是否还要镜像,就得看工厂接收习惯。
你还可以顺手测量一些参考坐标。比如记录一个角落定位孔在底面视图里的坐标,然后回到 Gerber 设置里,勾选对应层镜像后再生成,然后检查生成的 Gerber 里这个孔位的坐标是否和你眼睛看到的方向一致。这个方法能帮你建立“视图方向”和“文件坐标”之间的对应直觉,用几次之后就不会再搞反。
之前在论坛看到一个朋友的案例,他把 V+B 之后看到的字符方向当成了 Gerber 文件的最终方向,结果样板回来后字符全部反了。原因就是 Altium 的底面视图会自动帮你把文本按可读方向渲染,但导出的 Gerber 是纯坐标,不会自动做这个处理。所以这个方案更多是定位问题用,不是替代方案一。
3.3 方案三:用 CAM 工具做二次镜像
有些场景下,问题不出在 Altium,而是工厂 CAM 环节。比如你从外部拿到一个别人的 PCB 源文件,源工程已经丢失,只剩一份 Gerber,这时候想在 Altium 里改设置根本没有对象,只能在文件层面补救。
操作大概是:把导出的底层文件导入 CAM 工具,比如 Altium 自带的 CAMtastic,或者免费的一些 Gerber 查看器都可以。选择该文件,执行编辑-镜像-按 X 轴或 Y 轴翻转,再另存为一个新文件。注意镜像轴的选择要看你和工厂的约定,一般以左下角原点做水平翻转比较常见。
这个方案的优势是不动 PCB 源文件,只对交付文件做后期加工。劣势也很明显:容易漏层。底层铜镜像了、底层阻焊忘了,结果交货时坐标对不上。而且一旦出厂的是旧版 Gerber,这个操作是不可逆的,你只能另存副本,不能覆盖原文件。所以我只在极特殊情况下用这个方法,比如某个文件是别人给的、源工程找不到,只能在 Gerber 层面补救。
3.4 方案四:用脚本 / Output Job 做批量镜像
如果你管理的是一整套输出规范,比如公司所有板子都要出两套 Gerber,一套正向、一套镜像备查,那就不要每次手工点。把 Output Job 配置好,配合脚本可以做到一键出两套。
Output Job 可以添加两个 Gerber 输出通道,分别指向不同的输出目录。每个通道对应一份 Gerber Setup 设置,其中一个通道把 Mirror 列全部勾上,另一个通道保持正向。这套配置保存到工程模板里,之后打开任何一个新工程,按一下 Process Outputs 就能同时生成两套文件。
如果项目多到连 Output Job 都不想手工改,可以考虑写一个很小的 DelphiScript 批处理脚本。大致逻辑是遍历某个文件夹下的所有 PCB 文档,逐个打开,修改 Gerber Setup 里的层镜像属性,再执行输出。Altium 的脚本接口里,Gerber 设置是通过 IOutputJob 和 IOutput 等对象操作,底层接口在不同版本间有些变化,这里不展开完整代码。稳妥的做法是,先在你自己的环境里录制一次手工操作生成脚本,再改循环部分,这样能避开很多接口不兼容的坑。
4. 实操记录与参数验证
4.1 一次完整的镜像导出过程
我在一个模拟项目 X 上完整走一遍给大家参考。板子是四层板,顶层、内层 2、内层 3、底层,客户要求出底面镜像的一套文件,用于反面字符工艺。
我的操作顺序是:先打开 Gerber Files 对话框,在 Layers 页显示 Mirror 列,然后勾选 Bottom Copper、Bottom Solder、Bottom Overlay、Bottom Paste 这四层,同时把钻孔文件里的 Drill Drawing 和 Drill Guide 也打开。为什么钻孔也要一起出?因为在 CAM 里验证镜像层时,必须拿钻孔层和底层铜互相对坐标,否则你看不出镜像是否真的生效。
勾完之后,我在 Advanced 页把单位选成毫米,格式选 2:5,尾零填充选择 Suppress trailing zeroes,输出目录单独建了 out_dir_gerber_mirror。
生成完成后,我打开 CAM 查看器导入各个光绘文件,把 Bottom Copper 的镜像层和 Drill 文件叠在一起,在某一块 BGA 区域选了一个孔,查看它在两个文件里的坐标是否一致。正常情况下应该是一致的,因为 Altium 在镜像底层的同时,会保持镜像层和非镜像钻孔层的相对位置。结果一致,就可以放心发出去;如果发现某层没勾,或者坐标差了一个奇数倍格点,马上回去重出。
4.2 验证镜像正确性的三个手段
第一个手段是文本方向检查。在 CAM 工具里把镜像过的底层丝印放大,看字符串是否左右反了。假如设计里你本来写的是 AB,出图后是 BA,那说明镜像生效;如果出图后还是 AB,你就得考虑是不是该层没勾上,或者这个文件本来就是从旧工程里带出来的非镜像备份。
第二个手段是对齐检查。把镜像层和非镜像层的同一条板边对比,看它们是否都沿着原点对齐。正常情况下,板边、定位孔、工艺边都应在同一坐标范围内。如果你看到某个文件整体跑了半个板子,那基本是镜像轴选错,或者原点设置不一致导致的。
第三个手段是回读检查。Altium 也可以把生成的 Gerber 文件导入回 PCB Editor,作为一个临时板子来看。操作是 File -> Import -> Gerber,导入镜像过的文件后,选中某个参考点,观察它相对原点是否处于预期位置。这个方法能把最终文件结果直接叠加到原设计上,比在 CAM 里纯看坐标更直观,也更容易发现问题。
我在这一步上的经验是,验证不要偷懒。误差在屏幕上肉眼很难看出来,但 CAM 里的坐标显示是精确到小数点后四位的。每次出完 Gerber,我至少会抽查三组关键坐标,包括一个板角、一个定位孔、一个靠近中心的器件焊盘。相对误差超过 0.02mm 的,都会重新排查,绝不往下游发。
5. 常见问题与排查实录
为了让这部分可以直接查阅,我整理了一个常见问题表。
| 问题现象 | 可能原因 | 优先排查方法 |
|---|---|---|
| 22.11 之后找不到镜像勾选项 | Mirror 列默认被隐藏 | 在层列表表头右键,显示 Mirror 列 |
| 勾了镜像但叠加后层错位 | 只勾了部分层,没有做整套镜像 | 将底层铜、阻焊、字符、钻孔配套一起镜像 |
| 出图后字符方向仍然反的 | 镜像轴选择不对,或看的是非镜像备份文件 | 先 V+B 查看背面,确认期望方向再重出 |
| 从旧工程打开后镜像丢失 | 新旧输出引擎不兼容 | 重建 Output Job,按新版重新设置 |
| 底层孔位和顶层孔位 CAM 里对不上 | 坐标格式精度太低,或不同层用了不同格式 | 统一 Advanced 页格式为 2:4 或 2:5 |
| 镜像后的丝印文字可读,但铜箔图形反了 | 镜像的是整个层,而不仅仅是文字 | 明确需求是“只镜像字符”还是“整套层镜像” |
第二条是个非常高发的问题。很多项目里,底层字符在 PCB 界面上看是正的,用户就觉得“我已经处理好了”,出 Gerber 时只勾了底层丝印镜像,没管底层铜和钻孔。结果工厂 CAM 一叠层,发现底层丝印和底层铜错位,最终成品字符压到了焊盘上。字符压焊盘不是绝对不行,但如果事先没沟通,很容易被当成设计失误,来回扯皮。
再说一个我遇到过多次的坑:多人协作时的版本混乱。A 同事在 22.11 工程里生成了一份镜像 Gerber,B 同事拿到手后觉得不对,直接在文件夹里改了后缀复制了一份,完全没重新生成。最后送到板厂的文件名和内容完全对不上。我的建议是,镜像文件作为交付物时,最好在文件名里带上工程项目名称、板卡版本、版本号和增量号,并且由一个人统一发出,不要用共享文件夹裸奔。
最后是坐标原点的坑。镜像时如果 PCB 原点设置不在板框左下角,镜像后的板框可能会跑到负象限。大多数 CAM 工具对负坐标也能处理,但部分工厂的下游设备或拼板脚本对负值敏感,会导致拼板时整体偏差。我通常会在出 Gerber 前,把原点重新放到板框左下角,或者在 Advanced 页里勾选 Keep PCB origin,保证所有输出文件的起始坐标一致。
结尾收个经验
这些年和镜像层打交道,我最大的体会是:版本更新不可怕,真正费时间的是旧经验失效后不得不重新踩坑。22.11 之后 Altium 的界面更干净,代价是很多原来一眼可见的选项被藏了起来。只要记得去层列表表头右键调出 Mirror 列,再按“底层配套层整套镜像”的原则操作,大方向就不会错。
如果你正在做的板子恰好需要两类 Gerber 同时交付,不妨提前把 Output Job 存成模板,一正一反两个通道都配好,以后每次只要改板名和版本号就行。这一步前期花二十分钟,后面能省下几十次重复劳动。镜像这件事,说穿了就是坐标变换,理解了它,后面再遇到类似“某一层方向不对”的制造问题,你都能很快推回去。