上周一个刚入行半年的小兄弟发消息问我,原理图画完了,怎么才能让AD软件把它变成一块能发去打样的PCB。他熬到凌晨一点,把原理图往PCB里同步,结果器件全堆在板框外,Messages面板还刷了一屏红字,气得差点删工程重画。其实AD软件这条"原理图到PCB"的链路本身并不玄乎,本质就是把"你想怎么连"翻译成"铜箔该怎么连",中间靠网表(Netlist)和工程变更单(ECO)把两头对齐。真正让人卡住的,是文档里从来不写的那些细节:封装属性怎么填、编译为什么过不去、器件为什么跑到板外、规则没设好为什么布线处处碰壁。这篇我把这些年用AD画板的完整流程从头捋一遍,从原理图收尾检查、编译、网表同步、板框设定、规则设置,一直到布线、铺铜、DRC和出Gerber。不管你是刚接触AD软件画图的学生,还是从别家工具转过来想摸清AD脾气的老手,都能照着走一遍,也能避开我当年踩过的坑。
1. 先把链路想明白:AD到底在原理图和PCB之间传什么
1.1 网表不是文件,是"连接关系加器件清单"
很多人以为点一下"Update PCB Document"是在复制原理图,其实不是。原理图对PCB来说,唯一有价值的信息只有两类:一类是器件清单,每颗器件叫什么位号、用哪个封装、参数是什么;另一类是连接关系,也就是网表,它只记录"U1的第14脚和R5的第2脚属于同一个网络"这种逻辑关系,至于走线绕多远、走多宽、走内层还是外层,它一概不管。理解这一点很关键,因为它解释了很多新手困惑的现象:原理图里改动一颗电阻的位置,PCB里毫无反应;但你把某个网络名从VCC改成+3V3,同步之后PCB里就会多出一个新网络,旧网络上的走线直接变成"未布线"状态。
我习惯把原理图看成"设计意图",PCB看成"物理实现",中间这一步同步就是"签合同"。合同签完之后两边就得对账,之后任何一边单方面改,都要重新走一次同步。这也是为什么工程化项目里,工程师宁愿在原理图上改,也不愿意直接在PCB里凭手感连线——PCB里手工加的走线,在原理图上根本不存在,下次同步很容易被当垃圾清掉,或者形成一种"孤儿网络",DRC还会报错。
1.2 为什么别用"另存为"之类的野路子
刚学AD的人最容易犯的一个错,是在原理图文件上右键另存为PCB,或者拿个空PCB文件硬贴器件。这种做法初看能省事,但代价是原理图和PCB之间断开了联动关系:你改了原理图,PCB那边完全不知情;你在PCB里删了一个器件,原理图还傻乎乎地画着它。等板子打回来焊不上,你才发现某颗电容的封装被换成了0603而实物是0805。
另一种野路子是直接在PCB里Place Component手动摆件,然后用P+L硬连线。这个做法在没有原理图的"抄板"场景下偶尔能救命,但对正常项目来说绝对是负收益。因为手动摆件不产生Net信息,你的板子在DRC层面就没有任何"必须连接"的约束,一根线漏掉了,机器不会提醒你,是你自己被万用表打脸。所以只要你不是在做纯抄板或者练手,就一定走"原理图编译——ECO同步"这条正路。前期多花二十分钟整理原理图,后面能省掉几个小时的返工。
2. 原理图收尾:同步前必须做干净的几件事
2.1 每个元件都要有可靠的封装属性
同步失败的头号原因,是原理图里某些元件没有合法封装。AD里每个原理图符号都要在属性面板里指定Footprint,它可以来自集成库,也可以来自你自己的PCB库。这里有个细节:AD的属性面板里Footprint字段填的必须是封装名,而不是封装文件的路径,路径要在库安装列表里提前配置好。我见过太多人把C:\MyLib\0805.PcbLib这种路径填进去,编译不报错,一同步就提示找不到封装。
更麻烦的是封装名对不上但拼写相近的情况,比如库里叫RES-0805,原理图里写成R0805,AD会忠于原文直接报找不到。我的习惯是:先把要用到的所有封装在自己的PCB库里核对一遍命名,然后在原理图里对着库名逐个填,绝不凭记忆敲。批量改的话可以用Properties面板里的搜索替换,或者用Parameter Manager统一核对,一千个元件也就是几分钟的事。
顺带说一个容易忽略的点:多子件元件的封装。像双运放、四路门电路、双MOS管这类器件,一颗芯片里含多个Part,封装只在其中一个Part上指定,其他Part的Footprint字段留空是正常的。但如果你每个Part都填了同一个封装名,同步时AD会认为你要在PCB上放好几颗芯片,报位号重复。这种问题排查起来很费时间,不如一开始就把多子件的封装属性处理干净。
2.2 位号、注释、参数规范化
位号(Designator)重复是另一个高频坑。比如两份原理图里都用了R1,或者复制粘贴时忘了重命名,编译的时候AD通常只在Messages里给一条不起眼的警告,你如果没点开看,同步之后PCB里就只出现一颗R1,另一颗被悄悄丢掉了。板子回来少颗电阻,你查半天原理图,发现它赫然画在上面。
我的做法是:编译之前先执行Tools里的Annotate Schematics,让AD把整个工程重新编号,位号连续且唯一。Annotate的时候要注意几个选项:Order of Processing选"Across Then Down"还是"Up Then Across"取决于你习惯的阅读顺序,对功能没影响;但下面那个"Numbering Scheme"建议保留默认,不要随便改成带字母后缀的格式,否则后续改板加料容易乱。如果工程里已经有量产过的板子,重编号会导致BOM变动,这种情况就跳过Annotate,改用"Annotate Schematics Quietly"只补空缺位号。
注释(Comment)和参数(Parameters)虽然不影响同步,但影响BOM和可读性。我一般会保证每颗器件至少有Comment(一般写规格,比如"10uF/16V")和一个自定义的"Supplier"参数,方便后期出采购表。
2.3 编译与ERC,把警告当回事
原理图整理完之后,右键工程名选择Compile PCB Project。这一步AD会把整个工程交叉引用一遍,生成编译后的中间数据,所有同步操作都基于这份数据,而不是基于你眼睛看到的图纸。编译完成后,哪怕Messages面板只弹了一条,也建议点开看一眼,别习惯性按F5关掉。
ERC(电气规则检查)的常见报错我按处理优先级排一下:
| 报错内容 | 常见原因 | 处理建议 |
|---|---|---|
| Footprint not found | 封装名拼错或库未加载 | 核对封装名,确认库已安装并启用 |
| Duplicate Designator | 位号重复 | 运行Annotate重编号 |
| No Driving Source | 输入脚没有驱动源 | 检查是否有上拉/下拉,或确认引脚电气类型设错 |
| Unconnected Pin | 引脚悬空 | 有意悬空的加No ERC标记,其余补连接 |
| Net has only one pin | 网络只有单点 | 检查是否漏画连线或网络标签拼错 |
| Duplicate Net Names | 同名网络用了不同标签 | 统一网络命名 |
其中"Net has only one pin"最值得警惕,它九成意味着你漏连了一根线,而且这条线在PCB里也不会有任何提示——因为没有网络约束,DRC根本不会报。我个人的经验是,编译后把Messages按严重程度排序,警告以上的一条条过,不要放过任何一条和网络相关的提示。
2.4 跨页原理图与页码处理
工程稍微大一点,原理图就会拆成多个Sheet。这时候要处理两件事:一个是页码,一个是跨页连接。页码是每张图纸的Document Number参数,如果两张图的编号都是1,导出PDF的时候会看到两个"1",打印装订时特别容易混乱。解决办法是在每张图纸的属性面板里手动指定Document Number,或者干脆用Tools里的"Number Sheets"功能自动铺号。
跨页连接靠的是Port(端口)和Off-Sheet Connector。同一个信号在A页和B页上都放一个同名Port,AD编译时会自动把它们连成一个网络。这里有个新手常犯的错:用网标(Net Label)当跨页连接用。Net Label的作用域是单张图纸,两页各放一个同名Net Label,编译时不会合并,同步到PCB上是两个毫不相干的网络,名字还撞车。所以跨页用Port,页内用Net Label,电源用Power Port,这三者的作用域分清楚了,后面就不会出鬼故事。
3. 从原理图导入PCB的完整操作流程
3.1 建立PCB文件与板框
先在工程里新建一个PCB文件,右键工程 - Add New to Project - PCB。文件名我习惯跟工程名保持一致,比如MainBoard.PcbDoc,这样后面打包发厂不容易拿错。新建之后第一件事不是急着同步,而是定义板框。
板框决定了器件能落在哪儿、铜皮能铺到哪儿。在AD17之后的版本里,推荐的做法是切到某个机械层(比如Mechanical 1),用Place - Line画一个闭合的矩形或者异形轮廓,然后全选这些线,执行Design - Board Shape - Define Board Shape from Selected Objects。这样板框就正式生效了,视图里会看到一张带圆角的深色板子。如果你画的轮廓没有闭合,这个命令会直接失败,所以画之前记得检查首尾是否重合,用Shift+E开启捕捉能帮你对齐端点。
板框的外形尺寸要和结构对上,最忌讳"看着差不多"。有外壳、有安装柱的项目,一定要先拿到结构件的开孔位置和尺寸再画轮廓。我见过有人板子画完了才发现固定孔离边缘太近,螺丝头压到了走线。更稳妥的做法是让结构同事直接给一张DXF,用File - Import - DXF/DWG导入到机械层,照着描轮廓,误差能控制在几丝。
3.2 ECO同步的两种入口和一次典型报错
同步有两个入口,效果完全一样:
- 在原理图界面:Design - Update PCB Document xxx.PcbDoc
- 在PCB界面:Design - Import Changes From xxx.PrjPcb
点完之后会弹出Engineering Change Order对话框,里面分三栏:Modifications(将要执行什么改动)、Validate Changes(检查能不能改)、Execute Changes(真正执行)。这三个按钮的顺序不能跳,先Validate再Execute。Validate阶段会把所有问题一次性暴露出来,比如某个封装找不到,或者某个网络里有重复位号。
Validate全绿之后再Execute,器件就会落到PCB里。第一次同步最常见的画面是:所有器件密密麻麻堆在板框右下角,还套着一个虚线框,那就是Room。Room本身是AD用来分组管理器件的东西,对小工程来说没什么用,我通常直接在Room上右键Delete掉,器件就散开了。注意删Room的时候要选"Delete Room Only",别把里面器件一起删了。
如果Validate报红,最典型的就是"Footprint not found"。这时候别急着去改原理图,先在PCB侧打开Components面板,看看缺的是哪几颗,然后回到原理图核对该元件的Footprint字段是不是和库里的名字完全一致。我踩过一次坑:库里封装名后面有个空格,肉眼看不出来,编译也不报错,Validate就是过不去,最后是把两个名字复制到文本编辑器里对比才发现的。所以遇到这类问题,复制粘贴比对胜过肉眼检查。
3.3 器件落地后的Room处理与初步布局
器件落地之后,我一般会先做一轮粗略分堆,而不是立刻精确定位。做法是框选所有器件,用Tools - Component Placement - Arrange Within Rectangle,先按类型粗略排开;或者更粗暴一点,按功能手动拉到板框附近:电源部分一堆、MCU一堆、接口一堆。这一轮的目的不是好看,是让后面的布局有个起点。
真正开始摆放的时候,我会按信号流向来走。以一块STM32F103C8T6的最小系统板为例:先把USB或者排针接口放到板边,再把LDO、输入电容、输出电容按从左到右的顺序摆在接口旁边,接着把MCU放到中间,晶振紧贴MCU的OSC引脚,复位电路挨着NRST,最后是LED和按键放在容易操作的位置。这个顺序的好处是,你不用等到布线阶段才发现"电源线要绕半块板"。
摆放的同时可以顺手把丝印调一下。AD的器件位号默认可能压在焊盘上,或者朝向五花八门。我习惯用Tools - Component Placement - Auto Position下的位号自动摆放,然后再手动微调几个关键的。丝印不用追求完美,但至少要做到装配时能看清、不压焊盘、不超出板边。
4. AD画PCB必须先设好的规则
4.1 电气间距与线宽电流对照
规则是AD里最容易被跳过、也最容易让布线阶段崩溃的一环。你如果什么都不设就开画,默认的Clearance是10mil,线宽是10mil,走几根线下来就会发现过孔放不下、间距处处报错。我的建议是在布线之前把规则过一遍,重点就三个:Clearance、Width、Via。
Clearance按加工能力设。国内大部分常规工艺的板厂,两层板线宽线距6/6mil(约0.15mm)是标配,四层板做5/5mil也没问题,性价比高的区间是8/8mil。我一般的设法是:全局Clearance设0.2mm,然后给电源网络单独放宽到0.3mm,给高压隔离区域单独设一条大到离谱的规则。这样既有安全余量,又不会浪费面积。
线宽和电流的关系是新手最关心的。铜厚1oz(35μm)的前提下,外层走线在允许10℃温升时的载流能力大致如下:
| 线宽(mm) | 对应mil | 1oz外层载流(约) | 常见用途 |
|---|---|---|---|
| 0.2 | 8 | 0.7A | 一般信号线 |
| 0.3 | 12 | 1.0A | 小电流电源 |
| 0.5 | 20 | 1.5A | 主电源、电机驱动 |
| 1.0 | 40 | 2.5A | 大电流路径 |
| 2.0 | 80 | 4.0A | 电源入口、汇流 |
这张表是工程上的大致参考,真按IPC的标准公式算会得到相近的量级,但实际设计里我会再留30%以上余量,因为板子装在密闭外壳里,环境温度可能比实验室高不少。经验上,电源主干线宽按"1A对应0.5mm"来估算是比较稳的,需要更大电流时优先考虑加铜厚、开窗加锡或者铺一整块铜皮,而不是无限加宽走线。
4.2 过孔、层叠与平面规则
过孔尺寸要和板厂的钻孔能力对上。常规工艺最小机械孔0.2mm,但我一般用0.3mm孔径配0.6mm焊盘,这个组合几乎所有板厂都不加价,可靠性也好。电流大的路径别指望单个过孔,0.3mm过孔的载流能力大概1A左右,1.5A以上我就打两个并联,3A以上打四个,呈田字形排布。
层叠方面,两层板适合简单项目,四层板是最常用的性价比方案。四层板的经典叠法是:Top - GND - Power - Bottom,信号走在顶层和底层,第二层做完整地平面,第三层做电源分割。这样做的原因是,地平面离信号层只有一张介质,回流路径最短,信号完整性最好。如果项目里有DDR4或者千兆以太网这类高速接口,层叠就要重新规划,通常要保证高速信号有完整的参考平面,必要时加到六层甚至八层。层叠厚度建议在Layer Stack Manager里按板厂的标准结构填写,比如总厚1.6mm、芯板0.5mm这种,出来的阻抗才是可预期的。
4.3 差分对与等长规则
USB、以太网、DDR这类接口的布线,光靠普通走线是不够的。USB 2.0的D+和D-要在原理图里就建立差分对关系,做法有两种:一是用命名约定,网络名分别叫USB_D_P和USB_D_N(AD认得_P/_N后缀);二是用Place - Directives - Differential Pair指令,把它贴在两条线上,然后在属性里配对。建立好之后,在PCB侧的Differential Pairs Editor里就能看到这一对,接着在规则里设置差分阻抗和线宽线距,比如USB 2.0设90Ω差分、线宽0.2mm、间距0.15mm。
等长主要针对并行总线,比如DDR4的地址线和数据线。AD里可以用xSignals功能定义一组需要等长的网络,然后在规则里给这组网络设一个允许误差,比如±50mil。布线的时候用Tools - Interactive Length Tuning(快捷键是T加R)来加蛇形绕线,绕的时候注意不要在原信号路径上留下太长的分支,蛇形段要尽量均匀,避免自串扰。LAN8720A这类PHY芯片的差分对,除了等长还要注意走线尽量短、不要在中间打过孔换层、参考平面必须完整。
5. 布局布线实操:从摆放器件到铺铜收尾
5.1 布局的三条优先级
布局决定布线的成败。我把布局的原则归纳成三条优先级,按顺序来就不会乱:
- 接口位置优先固定。连接器、排针、按键、指示灯这些和结构、外壳相关的东西,位置由不得你,先把它们钉死。
- 核心器件靠中心。MCU、FPGA、电源芯片放在板子中间区域,保证四周到它的走线距离都比较均衡。
- 去耦电容贴身放。每颗电源引脚旁边都要有去耦电容,而且离引脚越近越好,走线越短越好,最好走成"引脚-电容-地"这样一个小环路。这一条做不到,后面信号出问题的时候你会怀疑人生。
晶振的摆放单独强调一下:紧贴MCU的振荡引脚,两个负载电容对称摆在晶振两侧,晶振下方不要走任何其他信号,最好在晶振周围打一圈地过孔做包地。这些不是玄学,是降低时钟抖动和干扰的实际手段。
5.2 走线与铺铜的现场细节
走线的基本操作是P+L开始交互式布线,P+V放过孔,走的过程中按L换层,按空格切换拐角方向。几个我常用的技巧:
- 按
Shift+E切换捕捉模式,能快速吸附到焊盘中心、走线端点、栅格点,配合G改栅格大小,效率提升非常明显。 - 走线拐角只用45度或圆弧,不用直角。直角走线在高频下会因为线宽突变引起阻抗不连续,低频板子虽然影响不大,但养成习惯没坏处。
- 过孔换层的时候,尽量让过孔靠近焊盘,不要拖一截短线再接孔。短线会在高频下形成寄生电感。
- 布线顺序一般是:先电源后信号,先关键信号后普通信号,先密后疏。别一上来就在板边画耗时的装饰性走线。
铺铜是收尾阶段的大动作。常用操作是P+G画多边形铜皮,画的时候在属性里指定网络(一般是GND),然后设置移除死铜(Remove Dead Copper)。铺铜的规则设置里,有几个选项要留意:网格铜(Hatched)和实心铜(Solid)的选择,一般信号板用实心铜,散热要求高的地方可以配合网格;包围间距(Pour Over)设置成"Pour Over All Same Net Objects",这样同一网络的焊盘和过孔能被铜皮直接覆盖,接地阻抗更低。
5.3 铜皮挖空、隔离带与常见误区
铜皮挖空这个功能很多人用到的时候才想起来找。它的用处主要有三类:一是净空区,比如天线下方、蓝牙模块周围要求不能有铜;二是隔离带,高压和低压之间需要一条明显的间隙;三是结构避让,螺丝孔、安装柱周围需要留出空间。操作方式是Place - Polygon Cutout,在已有铜皮上画一块区域,然后重新铺铜(Tools - Polygon Pours - Repour All),那块区域就被挖掉了。
挖空之后一定要重新铺铜并重新做DRC,因为铜皮的形状变了,可能会出现新的死铜或者间距违规。我见过一种情况:挖空区边缘离某个焊盘只剩0.1mm,DRC报短路,查了半天才发现是挖空边界画歪了。所以挖空之后建议用View - 3D Layout或者按2键切2D视图核对一下边界。
另一个常见误区是把所有层都铺满铜。实际上顶层和底层的铜皮要有节制,因为它们离元件最近,铺错了会带来寄生电容,影响高频信号,也会让焊接返修变难。我的习惯是:顶层做选择性铺铜,底层做完整地平面,中间层专层专用,不混用。
6. 常见问题与排查套路
6.1 同步失败与网络丢失
同步失败的问题我整理成一张速查表,遇到报错直接对号入座:
| 现象 | 大概率原因 | 排查动作 |
|---|---|---|
| Validate就报红,提示找不到封装 | 封装名不一致或库未加载 | 打开Components面板核对缺件名单,回原理图逐个对比封装名 |
| 器件全部堆在板外且位置重合 | Room未定义或板框未生效 | 删除Room,重新定义Board Shape |
| 某个网络在PCB里只有一截走线 | 原理图里该网络只有单点连接 | 回原理图搜索该网络名,检查是否漏画连线 |
| 同名网络在PCB里变成两个 | 跨页用了Net Label而非Port | 把页内的Net Label换成Port,重新编译再同步 |
| 删除器件后PCB里还留着走线 | 同步时勾选了不删除的选项 | 检查ECO对话框的Modifications列表,确认删除项已勾选 |
这张表里我特别想强调最后一条。ECO对话框里默认会列出所有改动,但如果你之前手动改过一些东西,可能会在列表里看到"Delete Component"这类条目被你顺手取消了勾选,结果就是原理图上删掉的器件,PCB里还阴魂不散地躺着,最后变成一个孤立网络,DRC还不一定报得出来。所以每次同步前扫一眼Modifications列表,确认该删的真的被删了。
6.2 DRC报错与死铜
DRC跑完之后密密麻麻的报错里,最常见的是这几类:Clearance Violation(间距不足)、Short-Circuit(短路)、Un-Routed Net(未布线)、Width Constraint(线宽不符合规则)。处理顺序上,我一般先把Un-Routed Net清掉,再处理短路,最后统一看间距和线宽,因为这些报错之间会互相掩盖。
短路报错有时候是铜皮引起的,尤其是铺完铜之后某个网络被铜皮意外连上。这种情况下一方面检查铜皮的间距设置,一方面确认铜皮指定的网络是不是GND。还有一种情况是焊盘和过孔之间的阻焊开窗重叠,DRC会当成短路报出来,这个可以通过调整Solder Mask Expansion解决。
死铜(Dead Copper)是另一类烦人的问题。所谓死铜,就是一块铜皮和它的网络没有任何电气连接,孤零零地悬在那儿。它不但没作用,还可能在蚀刻过程中脱落,或者贴着信号线耦合噪声。解决办法是在铺铜的属性里勾选Remove Dead Copper,让AD自动清理。如果清理完之后某个区域完全空了,说明那块地确实没有连接点,需要考虑补几个地过孔打通。
6.3 输出文件:Gerber、钻孔与PDF图纸
板子画完,DRC全清,就可以出文件发厂了。Gerber的输出路径是File - Fabrication Outputs - Gerber Files。几个参数务必核对:单位选Inches,格式选2:4或者2:5(现在板厂基本都支持2:5,精度更高),层选择里,Top和Bottom的阻焊层(Solder Mask)、丝印层(Silkscreen)、钢网层(Paste)都要勾上,机械层记得把你定义板框的那个层也勾上,否则板厂不知道板子外形。
Gerber出完还要出钻孔文件,路径是File - Fabrication Outputs - NC Drill Files。钻孔文件和Gerber必须放在同一个目录,板厂才能自动匹配。输出的常见坑是:钻孔文件里没有勾选"Separate files for plated and non-plated holes",导致金属化孔和非金属化孔混在一起,装配孔的孔径出现偏差。所以勾选项要逐个核对,别图快一路下一步。
最后是图纸输出。原理图的PDF建议用File - Smart PDF,导出前确认每张图纸的Document Number不重复;PCB的装配图可以用Draftsman生成一张带位号和尺寸的正式图纸,方便焊接和检查。如果只是自己看,直接File - Print预览一下也行,但发厂和交付时,正式的PDF图纸还是要有,出问题时至少有个证据说明你当初设计的是什么样。
我个人在实际操作中的体会是,AD这条从原理图到PCB的链路,真正的门槛不在软件操作,而在前置检查的耐心。原理图那一头多花二十分钟核对封装、位号、网络和跨页连接,后面能省掉两三个小时的返工和排查,这个账怎么算都划算。还有一个习惯我坚持了很多年:每完成一轮同步或者一次大改动,就立刻跑一次DRC,别等到板子画完了再统一检查,那时候报错堆成山,根本分不清哪条是旧的、哪条是新引入的。另外,规则不是一次性设定就永远不动的,项目换一个、板厚换一次、信号速率提高一档,规则都得跟着调,我会在工程目录里留一份规则导出的文件(Design - Rules - 右键Export Rules),下次开新工程直接导入,省去重复配置的时间。