1. 先弄明白:AD里原理图和PCB为什么是两个文件
用过 Altium Designer 的人,第一次打开它的工程面板时都会有那么一瞬间的困惑——同一个板子,为什么非要拆成一个.PrjPcb工程、一个.SchDoc原理图、一个.PcbDoc布局文件?直接在一个界面里画完不好吗。我刚从学校实验室那种"一个软件画到底"的思路切过来时,也这么想过,后来做过几块板子才慢慢理解这个设计的意义。
道理其实不复杂。原理图描述的是逻辑连接关系:STM32F103C8T6 的 PA5 引脚接一颗 LED 的阳极,LED 阴极经限流电阻到地,这是一个纯粹的"谁连谁"的问题。而 PCB 描述的是物理实现:这颗 LED 放在板子右上角还是左下角、限流电阻贴在哪一侧、这条线从顶层绕还是从底层穿、线宽多少、和旁边那条信号线隔多远,这些是几何和工艺问题。这两种信息在本质上是不同维度的,硬塞进一个文件里,改原理图会牵动布局,挪个元件又可能把网络关系搅乱。
分开之后有个很直接的好处:同一个原理图可以对应多块不同的 PCB。比如你在做一个 STM32 最小系统板,先在万能板上验证过一版布局,后来改成贴片打样,原理图一个字没动,PCB 重画一遍就行。反过来也一样,DHT11 温湿度采集那部分电路在好几个项目里复用,直接复制原理图页,PCB 那侧重新布局布线即可。
而对新手来说,理解这个分家最关键的一点是:AD 不是"自动把原理图变成 PCB",它是"把原理图里的网络关系搬进 PCB"。网络表(Netlist)才是中间那个真正被传递的东西。你点下那个Update PCB Document的瞬间,软件做的事情是把每个元件的位号、封装、每一根网络连接、每个电源和地网络,一条条写进 PCB 文件里,然后生成一堆带着飞线的元件堆在板框外面。剩下的活,全是人的。
这里顺带说一句工程文件的结构。一个规范的 AD 工程,通常长这样:
MyProject.PrjPcb // 工程文件,记录文件隶属关系和编译选项 ├── MyProject.SchDoc // 顶层原理图 ├── Sub_MCU.SchDoc // 子图:主控部分 ├── Sub_Power.SchDoc // 子图:电源部分 ├── MyProject.PcbDoc // PCB 布局文件 ├── MyProject.PrjPcbStructure // 生成的层次结构 └── Project Outputs/ // 输出目录,Gerber、BOM、PDF 都往这扔有人习惯一张原理图塞下整块板,几百个元件全挤在一页 A4 上,放大到 400% 才能看清一个电阻。这种习惯在板子小的时候没事,一旦碰到 DDR4 内存接口那种动辄上百根等长线的设计,一页根本画不下。分页的原则很简单:功能独立、可以单独复用的电路,就拆成一页。电源一页、主控一页、接口一页、驱动一页,这样后面排查问题和复用都方便。顺便提一个别人常踩的坑,多页原理图里经常出现ORCAP-11010那种页码重复报错,AD 这边对应的是图纸编号参数没设对,在 Properties 面板里把Sheet Number改成唯一值就好,别用批量复制页面然后忘记改编号。
2. 生成 PCB 之前,原理图这边必须先过三道关
2.1 位号、注释和封装的统一整理
绝大多数"导入 PCB 后一堆报错"的根源,其实在原理图阶段就埋下了。所以点那个同步按钮之前,我一般会先把原理图理顺。
第一步是位号(Designator)。从别的工程复制过来的电路,位号经常是 R?、C?、U? 这种问号状态,或者两个模块里都出现了 R1。AD 里用Tools > Annotation > Annotate Schematics Quietly可以按图纸顺序重新编号,但更推荐Annotate Schematics那个带预览的对话框,先把已有的位号锁住(在原理图符号属性里勾上Lock),再给新元件排号,这样不会把已经画好丝印的老元件位号打乱。
第二步是注释(Comment)。这一列在原理图里看着不起眼,但它是 BOM 的基础。我的习惯是电阻电容填具体阻容值和封装,比如10k 0603,芯片填完整型号,比如STM32F103C8T6。千万别写"LED灯"、"电阻"这种描述性文字,采购和贴片厂看到这两个字会直接打电话过来问。
第三步是封装(Footprint)。这是最容易翻车的地方。原理图符号的封装字段必须是封装库里真实存在的名字,而不是你脑子里以为的名字。举个具体的例子,0603 电阻的封装名在不同库里可能是R0603、RESC0603N、0603R三种写法,你在原理图里随手写了0603,同步的时候 AD 找不到,直接给你弹一个Footprint Not Found的红叉。
2.2 编译工程,把该报的错一次性挑出来
原理图填完之后,别急着往 PCB 走,先按一下C然后C(或者菜单Project > Compile PCB Project)。这一步做的是规则检查(ERC),它会告诉你哪些地方网络悬空了、哪些电源网络只有一个连接点、哪些输入引脚没被驱动。
编译完看Messages面板。这里有个小技巧:AD 默认会把大量警告塞进Messages,看着一片红容易让人心态崩掉。在Project Options > Error Reporting里,把Net with only one pin、Off-grid object这类对你来说不致命的项目改回Warning甚至No Report,只留Unconnected input pin、Duplicate net name、Floating net label这几个真正要命的。这样一轮下来,Messages 里剩下的就基本都得处理了。
我见过一个很典型的案例:一块 4-20mA 采集板,原理图编译报了Unconnected input pin,打开一看是运放的反馈网络里有个电阻一端悬空,因为连线的时候鼠标抖了一下没接上。这种错误如果带进 PCB,最后就是打样回来板子不工作,然后拿着万用表一根一根量。
还有一个 AD 特有的检查手段:打开Navigator面板,把模式切到Nets,逐个点网络名看它高亮了哪几根线。这比肉眼扫图靠谱得多,尤其是在有总线(Bus)拆分的图上。
2.3 封装库的确认——最容易被跳过的一步
第三步是在 AD 里建一个工程级的封装库,或者至少确认你的封装来自一个统一的地方。我推荐的做法是:给每个工程单独建一个.PcbLib,把用到的封装全都从系统库里复制进来一份。听起来有点麻烦,但它解决两个问题。
一是库会变。今天你在系统库里用的SOIC-8封装,明天库更新了,尺寸或者焊盘位置微调了,你的老工程一打开就全乱了。工程自带库等于把封装"冻"在了项目里,永远不会变。
二是对不上。封装名对不上是同步失败的第一大原因,如果封装库就在工程里,打开 PCB 库面板一眼就能看出这个封装到底存不存在。
这一步的代价其实很低,收益却非常高。尤其是做一些偏门器件的时候,比如某款欧姆龙继电器或者一个特定的 DC-DC 芯片,原厂只给了 PDF 尺寸图,你得自己照着画焊盘。画完之后直接存进工程库,比存进"收藏夹"式的公共库靠谱。
3. 从原理图同步到 PCB 的完整实操过程
3.1 新建 PCB 并先把板框定下来
同步之前得先有个 PCB 文件。File > New > PCB,保存到工程目录下,然后在工程面板里右键Add Existing to Project把它挂上去。这一步别忘,不然待会儿Update PCB Document的时候下拉框里找不到目标文件。
接下来的第一件事是画板框。在Keep-Out Layer上画一个封闭矩形(或者直接用Design > Board Shape > Define from selected objects),尺寸按你结构件的要求来。比如做一个 60mm × 40mm 的壳子,那板框画 58mm × 38mm 比较稳妥,留出装配余量。
坐标系原点我一般放在板框左下角,Edit > Origin > Set。这是个很实在的习惯,后面出 Gerber 给板厂、出贴片坐标给产线,原点统一在左下角,工程师一眼就能对上。
板框定完之后,再顺手把机械层上的安装孔、定位框也标上。安装孔的孔径和位置我习惯先画好,等于把布局的边界条件先钉死。
3.2 Update PCB Document 那一下,到底发生了什么
现在可以同步了。在原理图界面下,Design > Update PCB Document 工程名.PcbDoc。弹出来的对话框就是前面说的那个"同步器",左边一列是操作类型,右边是具体的元件和网络。这里关键是看状态列:打勾的说明能正常执行,红色的叉说明有错误。
常见的那几个红叉,我列一下:
| 报错信息 | 背后原因 | 处理方法 |
|---|---|---|
| Footprint Not Found | 封装名在 AD 里搜不到 | 回到原理图改封装名,或把封装加进库 |
| Duplicate Net Name | 两个网络名字一样但实际不连通 | 改掉其中一个网络标签 |
| Component Not Found | 位号重复或者元件被删了一半 | 重新注释位号 |
| Net already exists | 网络表和 PCB 里已有的网络冲突 | 全选删除后重新同步 |
红叉全清掉之后,点Execute Changes。这时候你会看到一堆元件带着机械感地"飞"到 PCB 工作区外面,每个元件之间都拉着细细的飞线。这一刻其实就是原理图到 PCB 的交接完成。
3.3 房间(Room)到底要不要留
同步之后,AD 会在板框外生成一个大的矩形,把所有元件圈在里面,这个框叫Room。它的本意是把同一张原理图页的元件归为一组,方便整体移动。
我的建议是:多页原理图的工程,留着 Room 有用;单页原理图,直接删掉。因为 Room 会带来一个讨厌的行为——你在 PCB 里手动挪动元件,如果开启了Design > Rules > Placement里的Room Definition约束,元件会被强行拽回 Room。更麻烦的是,后面从原理图重新同步一次,Room 会把已经布局好的元件重新打乱。
删法很简单,在 PCB 里选中 Room 框,按 Delete。然后在Project Options > Class Generation里把Generate Rooms取消勾选,以后同步就不再生成。
3.4 规则设置:先把线宽、间距、过孔定死
布局之前先把规则设好,这是个顺序问题。很多人是画完线才想起来检查线宽,结果发现整板线都太细,然后一条条改,浪费时间。
Design > Rules打开规则管理器。需要重点关注这几类:
第一类,Electrical > Clearance。新建一个间距规则,最小间距一般设 0.2mm,板厂普工艺能做到 6mil(约 0.15mm),但留点余量更稳。如果你的板上混有 220V 那种高压区域,一定要单独建一条规则,间距至少 2mm 以上,并在Where The First Object Matches里限定到高压网络。这就是所谓的高低压隔离,处理反激式开关电源这类板子的时候,这条规则比什么都重要。
第二类,Routing > Width。默认线宽建议 0.25mm 起步,信号线够用。电源和地单独建规则,比如 5V 主路设 0.8mm,3.3V 设 0.5mm。具体数值怎么定,下一节细说。
第三类,Routing > Via。过孔尺寸我一般用外径 0.6mm、孔径 0.3mm 这一档,属于常规工艺稳稳能做的范围。如果板子密度高,可以降到 0.45/0.2,但要先跟板厂确认能不能做。
第四类,Manufacturing > Hole Size,最小孔径,一般设 0.2mm。Manufacturing > Silk to Solder Mask,丝印到阻焊的间距,设 0.15mm 左右,防止丝印文字压到焊盘上。
规则设好之后,在 PCB 里按Shift+V能实时看到间距提示,布线时心里有底。
3.5 布局:先定大件,再排小件
规则定完才轮到布局。布局这件事没有标准答案,但有一套通用的顺序:
- 先放结构和接插件。USB 口、排针、接线端子、按键,这些位置由外壳和操作习惯决定,位置定死了,剩下的都是围着它们转。连接器一定要贴着板边,别放在板子正中间,否则线缆插上之后受力全压在焊盘上。
- 再放主控芯片。STM32F103C8T6 放在连接器能快速到达的位置,同时让晶振紧贴它的 OSC 引脚,走线越短越好。
- 然后放电源部分。DC-DC 的输入电容、电感、输出电容要按芯片手册推荐的顺序紧凑排列,环路面积越小越好,否则纹波和 EMI 都控制不住。这块地方的布局比布线重要得多。
- 最后才是阻容和小的外围器件。这时候可以用
Tools > Component Placement > Arrange Within Rectangle让 AD 帮你做初步的自动排布,然后手工微调。
布局阶段有个判断标准很实用:飞线不乱。如果一堆飞线在板子中间交叉成一团乱麻,说明布局有问题,别急着布线,回去重新摆。飞线走向顺了,布线会快很多。
3.6 布线、铺铜和收尾
布线我一般分三轮。第一轮只走关键的:电源、地、时钟、复位、所有差分类信号。第二轮走普通信号。第三轮处理剩下的飞线,通常是一些跨区域连接。全局自动布线功能我基本不用,出来的结果没法看,实在赶时间可以只对某几个网络用Autoroute > Net。
布线时有几条自己给自己定的规矩:
- 走线拐弯用 45 度或圆弧,不用 90 度直角,直角在高速信号上会引起阻抗突变。
- 时钟线、差分线尽量走在同一层,换层次数越少越好。
- 同一方向的线之间保持 3W 原则,即中心间距不小于线宽的三倍,减少串扰。
- 地网络尽量铺铜,不要靠细线一根根连。
铺铜用Place > Polygon Pour,选好网络(一般是 GND),盖住整板。铺完之后一定要按Tools > Polygon Pours > Repour All重新灌一次,确保和实际布线一致。
AD20 及以后的版本还提供一个很实用的功能,就是铜皮挖空。比如你在电源部分需要留出爬电距离,或者某个区域不想被地铜覆盖,就用Place > Polygon Pour Cutout画一块区域,重新灌铜之后那块地方就空了。做高低压隔离板时这个功能几乎必用。
最后一步是整理丝印。把位号按方向排齐(Tools > Component Placement > Align Components里的Position Component Text一键整理),检查有没有丝印压到焊盘,然后把Design Rule Check跑一遍,确认没有间距、短路、孔径违规。到这里一块板从原理图到可投产的 PCB 就算走完了。
4. 几个绕不开的参数计算与经验值
4.1 线宽和载流能力怎么对应
线宽这个问题问的人最多,尤其是"0.3mm 的线能过多大电流"这种。网上流传的对照表版本很多,我这里给一组基于常规 1oz 铜厚(35μm)、允许温升 10℃的经验值,够日常估算了:
| 线宽(mm) | 外层载流(A) | 内层载流(A) |
|---|---|---|
| 0.15 | 0.35 | 0.15 |
| 0.20 | 0.45 | 0.20 |
| 0.30 | 0.65 | 0.30 |
| 0.50 | 1.00 | 0.45 |
| 0.80 | 1.50 | 0.70 |
| 1.00 | 1.80 | 0.85 |
| 2.00 | 3.20 | 1.60 |
可以看到内层的载流能力差不多只有外层的一半,因为内层铜被夹在中间散热差。所以大电流路径一律走外层,必要时双面并行走线,或者直接在阻焊层开窗加锡。这是我做电机驱动板时踩过坑才记住的:TB6612 那类驱动芯片的电机输出脚,线宽给到 1.5mm 以上才踏实,0.5mm 走 1A 长期跑会发烫。
4.2 过孔不是越小越好
过孔的载流能力比同直径的走线差,因为铜层薄。0.3mm 孔径的过孔大约能过 0.5A 左右,如果电源要过 2A,就得并行放四个。
还有个容易被忽略的点:过孔会带来寄生电感。大概每 1mm 板厚对应 1nH 左右的电感量,1.6mm 板厚一个过孔约 1.6nH。在几十兆的信号上这不算什么,但在开关电源的环路里就很要命。所以电源的输入输出回路,能不用过孔就不用,非要换层就多打几个并联。
4.3 层叠和阻抗,先有个概念
双面板的层叠很简单,就是上下两层铜加中间的基材。四层板就更讲究一些,典型结构是信号-地-电源-信号,中间那层的介质厚度决定了阻抗。50 欧姆的单端走线在常见的 1.6mm 四层板上,线宽大概 0.2mm 上下,具体值要拿板厂的阻抗计算工具算。
对做 DDR4 或者 LAN8720A 这类高速接口的人来说,阻抗不是可选项而是硬要求,得拿着叠层表跟板厂对参数。而对大多数 STM32 小系统板,不用太纠结,把走线做短做顺就够了。做内存条那样带 SPD 参数的设计才需要反过来考虑:SPD 里存的时序参数本身就假设了特定的 PCB 走线延迟,所以布线长度得配合它调,这是个先有鸡还是先有蛋的问题,一般按 JEDEC 参考设计走就不会错。
5. 高频报错与排查速查
5.1 同步阶段那几种典型红叉
同步失败的原因翻来覆去就那么几类,整理成表放在手边效率很高:
| 现象 | 排查方向 |
|---|---|
| 元件全部显示 Footprint Not Found | 封装库没挂进工程,或库路径变了 |
| 只有某几个元件报封装找不到 | 那几个元件的封装名拼错了 |
| 网络全部消失,只剩电源和地 | 原理图里的网络标签没加或加错 |
| 同步后元件位号全变 | 原理图被重新注释过,PCB 侧未同步 |
| 同步后 PCB 里多出一堆重复元件 | 上一次同步没清干净,先全删再导 |
提示Cannot add net一类的错误 | PCB 里已存在同名网络,通常是残留 |
5.2 原理图侧的隐蔽问题
有些问题在同步阶段不报错,但会在后面转化成更麻烦的故障。
一个是网络标签作用域。AD 里的网络标签默认在整个工程范围内有效,所以你在电源页给一条线标了VCC,接口页又给另一条独立的线标了VCC,虽然两者物理上不连,但 AD 认为它们是同一个网络。编译的时候不会报错,导入 PCB 后却会出现一根莫名其妙飞过整板的线。解决办法是在Project Options > Netlist Options里把网络标识符作用域改成Sheet Symbols/Ports,或者老老实实只用层次端口跨页连接。
另一个是隐藏引脚。有些符号的电源引脚是默认隐藏的,比如某些运放或者逻辑门,它们会自动连到名字相同的全局网络上。如果你不知道这件事,可能会发现芯片的 VCC 引脚在 PCB 里凭空连到了别处。在元件属性里把Show All Pins勾上就能看到。
还有一类是只画了一半的差分对。原理图上标了_P没标_N,或者两条线的命名规则不一致,AD 无法识别成差分对,PCB 里就会当成两根普通线,等长补偿也就无从谈起。做 USB、以太网这些接口时,命名规范一定要统一。
导出 PDF 的时候也有个小坑,很多人遇到过"导出原理图 PDF 只有局部区域"。那通常不是软件 bug,而是打印设置里Print Area选成了Current View而不是Entire Document,勾上后者再导就完整了。
6. 踩过坑才记住的几个细节
6.1 关于原理图检查的习惯
我现在养成一个习惯:原理图画完之后,先不看 AD 的编译结果,自己拿Navigator面板从第一个网络点到最后一个,眼睛跟着高亮走一遍。这一步很枯燥,但捡回来的错误值这个时间。上面提到的那个悬空反馈电阻,就是编译只给了个Warning被我忽略,最后自己一个个点网络才发现的。宁可多花十分钟,也别让板子回来返工两周。
6.2 关于封装的自检
自己画的封装,画完之后一定要做一件事:打印 1:1 的图纸,拿实物元件压上去对一对。听起来很土,但确实能挡住焊盘间距偏小、引脚序号排反这类错误。尤其是排针和连接器,方向搞反了会导致整个板子装不进去。嘉立创那类平台上现成的库可以参考,但用之前最好还是在 AD 里量一下关键尺寸。
6.3 关于 AD 版本差异
AD20 到 AD21 到更新的版本,界面和功能都有变化。比如图纸大小设置在 AD21 之后挪到了Properties面板里改,不再是双击图纸边框的那个对话框了。Gerber 导入这类操作,AD 支持把 Gerber 当参考层叠在 PCB 上做视觉对比,但指望它把 Gerber 反编译成可编辑的 PCB 是不现实的,输出格式本身是有损的。
6.4 关于工具切换
用惯了 Allegro 或者 PADS 的人转到 AD,最容易不适应的是规则管理器那套逻辑。Allegro 的约束管理器是独立窗口、层级很深,AD 的Design > Rules是树状结构,改完当场生效。键盘快捷键也完全不同,Allegro 里做安装孔是一套Padstack流程,AD 里直接放个焊盘设成Mounting Hole类型就行。工具之间来回切的时候,别指望肌肉记忆能通用,先花半小时把常用快捷键重新捋一遍更省事。
我个人在实际操作中的体会是,从原理图到 PCB 这件事,软件操作只占三成,剩下七成是对电路本身和工艺的理解。AD 把同步做得足够傻瓜了,点几下按钮就能把网络搬过去。真正决定板子能不能一次成功的,是原理图里那些网络标得对不对、封装选得准不准、规则设得合不合理、布局铺得顺不顺。这些活没人能替你干,但每干一次,下次就快一点、稳一点。