序
最近将PCB图纸送去工厂打样,需要将Gerber转换成PCB文件,如何将Gerber转换成PCB的文章在网上可以找到很多,但大部分文章只是简单罗列了其中的几个步骤。对于初学者来说,只是”知其然而不知其所以然”,如果转换不成功、甚至于转换完成之后的PCB的逻辑连接发生了错误,也只能是一脸懵逼,不知道错在哪里。
所以这篇博客记录一下Gerber转换PCB过程中的每个步骤以及执行该步骤的原因、目的,能对这一”逆向工程“的过程有一个清晰的了解。
Gerber文件是什么?
Gerber,又称光绘文件,是一种标准的文件格式。PCB板厂可以通过Gerber直接生产出最终的PCB。目前常用的格式为RS-274X,大部分板厂也支持最新Gerber X2格式(多了板的层叠信息与属性)。
国内很多工程师喜欢把PCB设计文件直接发给板厂,其实这一做法是有风险的。因为板厂最终还是需要把PCB文件转换成Gerber才能进行生产,而从PCB到Gerber的这一过程存在很多潜在的问题:
- 由于Gerber精度设置的问题,PCB上连通的网络未必在Gerber上连通
- 由于EDA工具版本的问题,可能板厂打开的PCB文件已经发生了变化
- 由于缺乏沟通,PCB上一些不需要显示的参数也遗留在成品上
总而言之,PCB转成Gerber的这一过程未必是copy不走样,设计师应对这一过程负责。所以一般有经验的老工程师都会亲手把PCB转成Gerber,然后通过CAM350之类的软件,检查一下Gerber是否有问题,然后再送板厂加工。
另外,无论您使用Altium、Allegro或者是Expedition,只要转成了Gerber,板厂都可以正确识别。
还有一点,从Gerber反向生成PCB是比较困难的,出于安全性的考虑,企业也不愿意把设计源文件直接发给板厂。
Gerber的组成
Gerber由两个重要的组成部分,缺一不可:
- Gerber光绘文件:PCB的每个层都对应一个独立的Gerber文件,用于描述该层中的内容(有点类似于胶片)
- NC Drill钻孔文件:垂直方向上的钻孔,决定了不同层中导线的连接
从3D的角度,完整的Gerber文件包含了每个层的信息以及各个层中用于信号连接的钻孔(过孔):
以AD为例,生成Gerber文件时,不是一个文件,而是一组文件,包含了PCB中每个层中的信息。下表是AD生成的Gerber文件后缀极其代表的意义。
GERBER后缀 | 描述 |
---|---|
G1,G2,etc | Mid-layer 1, 2(中间信号层) |
GBL | Bottom Layer(底层) |
GBO | Bottom Overlay(底层丝印) |
GBP | Bottom Paste Mask(底层助焊) |
GBS | Bottom Solder Mask(底层阻焊) |
GD1, GD2, etc. | Drill Drawing(钻孔图) |
GG1, GG2, etc. | Drill Guide(钻孔向导) |
GKO | Keep Out Layer |
GM1, GM2, etc. | Mechanical Layer 1, 2(机械层) |
GP1, GP2, etc. | Internal Plane Layer 1, 2(内电层) |
GPB | Pad Master Bottom(底层焊盘) |
GPT | Pad Master Top(顶层焊盘) |
GTL | Top Layer(顶层) |
GTO | Top Overlay(顶层丝印) |
GTP | Top Paste Mask(底层助焊) |
GTS | Top Solder Mask(顶层阻焊) |
如果是Allegro,那就是一堆的*.art文件(Artwork)。
当然,只有Gerber文件是不够的,因为Gerber并没有层与层之间导线连接的关系。如果一个信号流过了多个层,肯定需要由过孔进行过渡。NC Drill文件记录了PCB上所有需要钻孔的信息(包括位置、孔的大小等),也是制造PCB不可或缺的关键信息。
以下是AD生成的NC Drill钻孔文件:
文件名 | 描述 |
---|---|
FileName.DRL(可选) | 二进制格式的钻孔文件。对于一个存在盲、埋孔的多层PCB,每个Layer Pair(层对)都会生成一个单独后缀的TX* |
FileName.DRR | 钻孔报告 - 包括tool的详细信息,孔的尺寸、数量、Tool travel等 |
FileName.TXT | ASCII格式的钻孔文件。对于一个存在盲、埋孔的多层PCB,每个Layer Pair(层对)都会生成一个单独后缀的TX* |
FileName-Plated.TXT(可选) | ASCII格式的钻孔文件. 选择后只文件中只记录PTH的钻孔。对于不通类型的钻孔(比如Slot、方形),会生成单独的文件 |
FileName-NonPlated.TXT(可选) | ASCII格式的钻孔文件. 选择后只文件中只记录NPTH的钻孔。对于不通类型的钻孔(比如Slot、方形),会生成单独的文件 |
FileName-BoardEdgeRout.TXT(可选) | ASCII格式的rout文件。记录了板形以及板子的cutout |
FileName.LDP | ASCII格式的钻孔对报告。被CAM编辑器用来检测盲、埋孔 |
下图是一个默认状态下AD生成的NC Drill示例:
示例中含有盲、埋孔,生成NC Drill时每种类型的盲、埋孔都会单独生成一个*.TX1/2/3的文件。不同类型的孔(Slot、方形)也会单独生成一个TXT文件。
说了那么多无非是要强调一点,无论正向还是逆向,这两个类型的文件是绝对不可以少的:
- 一个叫Gerber
- 一个叫NC Drill
如何从Gerber生成PCB
Altium Designer自带了一个类似CAM350的工具,叫Camtastic。虽然用起来不如CAM350那么顺手,但基本的功能都是没有问题的。从Gerber到PCB的逆向工程,就由Camtastic工具来完成。
第一步:新建一个Cam文档
第二步:导入Gerber及NC Drill
这是比较关键的一步,如果只导入Gerber,不导入NC Drill,会导致后续无法解压网表。如果有IPC Netlist,也可以一起导入,这样在解压网表时,网表的名称就会与源设计相同,而默认情况下系统会自定义网表的名称。
在Preference中,可以定义CAM识别的文件后缀。如果要导入Allegro或者Expedition的Gerber,可以在这里添加相应的后缀以便于快速识别。
导入完成后,就可以在AD中查看或编辑Gerber文件了:
第三步:层的映射
这也是比较关键的一步,点击Tables » Layers打开映射界面:
左侧的Gerber层必须和Type列中的PCB层正确映射。其中信号层的映射尤其重要:顶层/底层分别映射为Top/Bottom;中间信号层映射为Internal;内电层映射为Pos Plane/Neg Plane。
除此之外,NC Drill的TXT文件也需要正确映射到Drill Top/Bottom/Int。
第四步:层的顺序(Layer Order)
层映射完毕之后,会弹出Create / Update Layer Order对话框(也可以通过Layer » Order菜单访问):
在这里,需要定义所有的信号层(包括Top、Bottom、中间信号层及内电层)的物理顺序。这一步也相当关键,如果存在盲、埋孔,这里定义错误的话会直接导致PCB导出的错误。记住,Top层的Physical Order始终是1,其它层的顺序按实际的板层结构依次类推。Physical Order中的数字是不可以重复的。
第五步:解压网表(Extract Net)
如果以上步骤都没有问题的话,就可以通过Gerber和NC Drill反推出PCB中的网表信息。点击Tools » Netlist » Extract菜单得到PCB的网表:
第六步:导出PCB
一切就绪,最后一步是导出PCB。如果缺少Net List或其它信息,Export to PCB的菜单是灰色不能点击的。
第七步:清理PCB文件
逆向工程导出的PCB只是Track和Pad的组合体,压根就没有器件(Component)的概念。您还需要通过无数次的Ctrl+C、Ctrl+V才能重新把这些零零碎碎的对象组合成正常的PCBLib。向工程只是复原PCB的样式和逻辑连接而已,并非是恢复到原始的PCB设计文件。