ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Altium Designer原理图编译与检查:从ERC到网表核对的完整指南

Altium Designer原理图编译与检查:从ERC到网表核对的完整指南 用Altium Designer画原理图的人很多但把原理图的编译与检查当回事的人不多。我见过太多“画完编译一下Messages面板没有红叉就当完成”的流程结果板子回来不是电源短路就是某个引脚悬空导致功能异常。编译检查这件事说小了是点一下软件按钮说大了它直接决定你后面PCB设计、打样、调试的返工成本。这篇文章我结合自己多年用AD画板、带新人的经验把原理图编译与检查的完整逻辑、环境坑、高频报错排查链路以及编译通过之后还要盯住的细节一次讲清楚。1. 编译不是走过场原理图阶段最容易省下的返工成本1.1 一个真实案例上电冒烟与“编译没报错”的真相先讲一个我亲眼见过的例子。之前团队里有个同事用STM32F103C8T6做一块小核心板原理图画完编译一下Messages面板只有几条Warning没有红叉就高高兴兴同步PCB、打样了。板子回来上电发现某个外设中断引脚的电平一直飘忽导致系统误触发。查了两天最后把原理图放大到引脚端才发现那颗MCU的IRQ引脚根本没有真正连到上拉电阻——线看起来是搭上了实际上差了一个栅格的距离连接点没生成编译报了一条“Unconnected Pin”的Warning。大家当时都忽略了Warning默认它“不影响大局”。这个案例很典型。很多工程师把“编译通过”理解为“设计没问题”实际上AD的编译检查只是把你图纸里的连接关系翻译成网表再逐条对照规则清单打勾。你设置的规则严它查得细你设置得松它就睁一只眼闭一只眼。而且Warning级别的问题恰恰是原理图上最容易被忽略、最终在硬件调试时最折磨人的问题。引脚悬空、网络标号拼写不一致、负载电容没接地这些都可能只以Warning形式出现但它们在真实电路里会导致上电异常、信号跳变、芯片发烫。1.2 编译到底在帮你做什么我习惯把AD的原理图编译理解成三层动作。第一层是生成网表。编译器把你画的每一条线、每一个网络标签、每一根引脚统一翻译成一张连接清单。这张清单不是给人看的是给后续PCB导入、仿真、BOM输出、PDF归档用的。如果你的原理图连网表都生成得磕磕绊绊后面任何环节都会跟着出问题。第二层是电气规则检查也就是ERC。它按照Project Options里设定的规则检查这张网表里有没有逻辑矛盾、电气冲突或者绘制规范问题。比如引脚类型不匹配、悬空引脚、单端网络、重复位号等。这一层相当于给原理图做一次“体检”把明显的问题在出图前捞出来。第三层是建立项目层级结构。对于多张原理图组成的工程编译会检查Sheet Symbol和子图端口的对应关系、网络标号的作用域、电源符号的影响范围等确保整个项目树是完整闭合的。这里必须泼一盆冷水编译检查不是万能的。它查不出你选错了封装、查不出电路逻辑设计本身有问题、查不出某个器件该接上拉你却接了下拉。它只能保证“你画的连接关系是自洽的”。所以编译通过是底线不是目标。这也是为什么后面第五部分我还会强调一堆编译之外的检查项。2. 编译前的环境准备安装、缓存和库路径是暗坑重灾区2.1 版本选择与跨版本工程的兼容问题搜索热度里“altium designer下载”“altium designer安装教程”常年居高不下说明很多人在环境层面就卡住了。AD的版本迭代非常快从AD17到AD24界面和内核都有明显变化。我的个人经验是个人学习可以追新团队做项目一定要统一版本最好连SVN或Git里的工程模板也一起锁版本。跨版本打开工程时AD会提示你升级工程格式。升级之后老版本就再也打不开了。而且工程里的规则设置、打印模板、输出配置文件在跨版本迁移时偶尔会丢字段尤其是“Error Reporting”里的自定义级别升级后可能被重置回默认值。所以每次换版本第一件事就是打开Project Options把错误报告级别重新过一遍。如果你身边同事还在用AD19你手上是AD24互相传工程就要格外小心。我推荐的做法是团队内部以某个版本为基准提交工程时导出一份PDF原理图挂在同目录下别人即使打不开工程也能先审图。这样既不影响评审也避免了“你要我改图但我连工程都打不开”的尴尬。另外还有一个高频问题Altium Designer Viewer。这是官方出的免费查看器适合不画板只审图的人。但要注意Viewer只能看不能编译。如果你指望用Viewer检查原理图错误那是看不到编译结果的。审图还是要让设计者提供编译报告或Messages截图。2.2 缓存与历史文件的清理“altium designer如何清理缓存”这个问题被搜得多说明它确实困扰了一批人。AD用久了缓存和历史文件会积累到让人崩溃。典型症状包括点Compile图标半天没反应、Messages面板卡顿、导出PDF时只出一半页面、甚至关闭工程时弹出一堆奇怪的保存错误。我的清理流程是这样的实测有效第一在Preferences里找到Local History相关设置把保存历史的天数和副本数调小。AD默认会把每次保存的版本都留一份日积月累占掉几个GB都很正常。这个设置不影响你手动备份只影响自动历史版本。第二退出AD软件手动清理用户缓存目录。具体路径类似%APPDATA%\Altium\Altium Designer {版本号}\里面会有临时文件、缓存、恢复文件等占用不小。操作前先备份整个目录到移动硬盘然后删除里面可再生的缓存内容比如文件夹下的Temporary、Cache、Preview等子目录不同版本名称略有差异。重新打开工程后AD会按需重建这些缓存。第三每个工程目录下往往有一堆__Previews、History、Outputs文件夹里面全是被AD自动生成的中间文件。这些不属于设计源文件可以放进.gitignore或定期清理。但要注意如果工程里配置了Output Job输出文件Outputs文件夹里可能是你要归档的PDF和BOM不要一刀切删掉。清理完缓存再编译你会明显感觉到项目展开速度和编译响应都变快了。如果清理缓存之后依然卡那就要检查是不是杀毒软件实时扫描和AD抢文件锁导致的把工程目录加入白名单通常能解决。2.3 库文件路径与隐藏引脚编译时突然报“找不到库文件”或者某个器件变成灰色不可编辑这类问题大部分出在库路径上。AD的库有两种挂载方式一种是File-based Libraries就是本地原理图库和PCB库另一种是通过网络仓库或云存储同步的库。本地库文件如果被移动、改名或者网络盘掉线AD在打开工程时就会找不到器件模型导致编译无法识别元件的引脚定义。我的建议是工程引用的库文件尽量放在工程目录内部的Libraries子文件夹里用相对路径引用不要用绝对路径或映射网络驱动器。这样工程拷到任何电脑只要整个目录一起拷库路径就不会断。还有一个非常隐蔽的坑自己画的库元件带隐藏引脚。很多从网上下的原理图库为了美观把VCC、GND引脚设成Hidden属性元件放上来表面看只有几个信号引脚编译时电源引脚却自动挂到了同名的全局网络上。如果这个隐藏引脚的电气类型设得不对比如应该是POWER却设成了PASSIVE或者同名电源网络和某路信号短在一起编译就会报出一些“莫名其妙”的错误。排查思路是选中元件按快捷键P打开Properties面板在Pin区域查看有没有隐藏引脚或者直接用Cross Probe跳到报错引脚看它在元件内部的类型定义。3. 搞清楚AD在查什么错误等级、规则矩阵的完整逻辑3.1 错误等级的四种语义在Project Options里Error Reporting标签下的每一条规则都可以设置报告级别。默认有四种报告级别含义对编译的影响No Report不检查完全忽略这类问题Warning警告提示可能有隐患编译继续Error错误标记为错误但编译流程仍会完成Fatal Error致命错误一旦出现编译直接中断很多初学者会有一个误区把所有条目都拉到Fatal Error或者No Report。拉到最严的结果是库文件里一点历史遗留问题都会被放大成致命错误导致你根本没法编译全部设成No Report更危险等于自己把安全检查关了。我自己的做法是分类管理绘制类规则比如栅格对齐、线宽声明、对象重叠在方案阶段可以设成Warning不影响快速验证电气类规则比如引脚类型冲突、电源短路、重复位号全部保持Error或Fatal Error因为这些直接关系到网表是否正确。等到工程接近发布再把所有规则统一收紧做一次完整的“高严格度”编译确保万无一失。3.2 高频检查项的设计意图Error Reporting里规则很多真正需要人理解其背后逻辑的是下面这几类Nets with only one pin单端网络一个网络只有一端连着元件另一端挂在空中。这通常意味着你漏画了一条线或者网络标号写错。很多情况下它不致命但它是最常见的人为失误信号。Unconnected Pin悬空引脚元件的某个引脚没有连接到任何线和网络。如果是MCU多余IO口可以理解如果是电源芯片的EN引脚悬空那就要小心了。Output pin with no load / Input pin with no driver输出引脚没接负载或输入引脚没驱动源。这类错误背后往往是引脚类型定义不匹配比如连接器引脚被定义成了Output但实际它只是对外接口。Duplicate Designators重复位号同一张图里出现两个R1或多个C3。AD的网表生成时会混乱同步到PCB后位号会打架。Sheet Symbol/Port不匹配层次原理图里父图方块符号的端口和子图里的Port对不上编译会报端口无法连接到父图。这些规则不是AD发明出来凑数的它们对应的是真实硬件设计中高频出现的低级失误。理解每条规则“在防什么错”你才知道什么时候该放宽、什么时候该收紧。3.3 规则矩阵与Power作用域Error Reporting窗口里有一个Rule Matrix标签页它按引脚类型两两组合设置检查级别。引脚类型包括Input、Output、Bidirectional、Power、Passive、OpenCollector等。矩阵交叉点的含义是当这A类型引脚和B类型引脚连到同一个网络时报什么级别。最典型的是Power引脚连到普通逻辑引脚。比如你把3.3V电源符号连到了一个GPIO上矩阵里Power与Input/Output的交叉点如果设成Error编译就会报错。这个机制便宜又有效能挡住一批“电源短到信号上”的低级错误。但是Rule Matrix对引脚类型的依赖也带来一个坑很多第三方库元件的引脚类型标得并不严谨。比如某些连接器把所有引脚都标成Passive那矩阵检查就形同虚设反过来有些芯片厂商把开漏引脚标成Output实际上它需要外接上拉到另一路电源编译时就会误报Output pin with no load或电压不匹配。所以碰到可疑的报错先看元件库引脚类型再决定是改线路还是改库不要一上来就按No ERC糊弄。另外Global Power-Object Scope这个设置很多人看不懂。它管的是电源符号、GND符号的作用范围。如果设成“Global”所有图纸里的VCC网络都指同一个网络如果设成“Flat”或按层次匹配那不同子图里的VCC可能是不同的物理网络。多路电源设计时经常遇到这个问题一路5V、一路3.3V如果都叫VCC作用域又设成全局编译就会报网络冲突。解决思路很简单要么每路电源用独立名称5V、3V3要么在原理图里用Net Tie做明确连接要么调整Power作用域设置。千万别偷懒统一叫VCC然后在PCB里手动割铜。4. 高频编译错误排查链路从报错信息反推根因4.1 引脚或器件不在栅格上报错信息类似“Pin X is off grid”。这个错误翻译成人话就是AD认为这个引脚没有停在栅格点上导致它和线或网络端口之间无法建立物理连接关系。原理图编辑器的走线、引脚、标号全都基于栅格对齐栅格不一致就会产生虚假的连接。排查链路第一步先看全局栅格设置。Design → Rules → Schematic → General → Snap Grid看快照栅格是多少如果元件引脚间距是10mil快照栅格最好也设置为10mil或更小。第二步选中报错元件看它的原点位置和旋转角度。从别的软件导入的原理图或者从PDF转出来的图纸经常带有一堆非整数坐标。第三步如果只有个别元件掉栅格直接拖动元件让引脚重新吸附到栅格上如果整张图都有问题选中全部对象把X、Y坐标换成最近栅格点。我踩过的教训是复制粘贴是重灾区。从旧工程复制一个模块到新工程粘贴时如果鼠标停在不规范的位置整个块都会偏移半格。粘贴之后养成习惯全选粘贴内容按G键切换栅格吸附模式做一次吸附校准。4.2 重复位号与位号重排的正确姿势“Duplicate Designators”报错见得非常多。常见场景是复制了某个电路模块位号也一起复制了新块里的电阻电容还是原来的R1、R2。如果不处理网表里就有两个R1PCB导入后位号冲突BOM也乱七八糟。排查方法很简单双击Messages里的错误条目AD会自动跳转到那个元件也可以打开“SCH Inspector”筛选同类元件找重复项。批量修复用Tools → Annotation → Annotate Schematics Quietly让AD从头到尾按顺序把位号重排一遍。这一步很快能解决90%的重复位号问题。但这里有个非常重要的注意事项在原理图和PCB已经建立同步关系之后不要轻易做全局位号重排。因为PCB上的摆放、丝印、走线约束都是按旧位号存储的你在原理图里一键重排回到PCB同步时所有位号全部变化哪怕封装和网络没变也要花大量时间重新核对。我建议的流程是PCB布局布线开始前把所有位号问题处理完一旦进入PCB阶段只对新增器件手动补编号。4.3 网络“看起来通其实没通”“Net with only one pin”和“Floating net”这类报错很多人第一反应是“我明明画了线啊”。实际情况往往是线确实拉过去了但线的端点没有精准落在引脚端点上差那么0.01mm。AD的电气连接判断看的是“连接点”也就是导线端部那个小方块标记。没有这个标记电气上就是断的。排查链路先把报错网络用Edit → Select → Net选中系统会高亮所有连接对象你就能看到它到底接了哪些引脚然后把视图放大到最大检查线头有没有出现红色或绿色的连接点标记再按快捷键P重新拉一段线覆盖原来的连接处确保端点重合。如果是网络标号问题检查标号拼写是否完全一致包括大小写。AD对网络标号是严格区分大小写的VCC和vcc是两个不同的网络。还有一个高级技巧执行Design → Netlist → Configure Physical Nets。这个对话框会把原理图中的物理网络列表和当前连接清单做一次核对哪些网络在原理图层面被合并或拆分一清二楚。对于排查“看起来通了但网表里断着”的问题比肉眼找线快得多。4.4 引脚类型不匹配“Output pin with no load”、“Input pin with no driver”、“Pin type mismatch”这类错误根源在引脚类型的定义和实际连接关系有冲突。最典型的场景一个芯片的使能脚是Input外部接了一个RC延时电路RC另一端来自某个逻辑门Output这是合理的。但如果你把RC误接到了电源符号上编译器会认为Input引脚没有驱动源报错。连接器对外接口的引脚类型被设成Output但它实际是接外部传感器的信号输入。编译时AD发现这个Output脚没接负载也会报错。处理思路不是硬消报错而是先判断“我的电路到底对不对”。如果电路没问题就修正引脚类型连接器这一类对外接口引脚我通常统一设成Passive表示它既不是输出也不是输入只是连接点。如果是芯片库自带的引脚类型和实际应用不符改库之前要确认不会影响其他工程否则就复制一份到本地库再改。这个错误背后更值得警惕的是“引脚的隐藏属性”。有些芯片的电源引脚在库里面被定义成Passive而不是Power当你用电源符号给它供电时矩阵检查可能不报错一旦换了一版库又报错。归根结底靠谱的库是编译检查有效性的基础。4.5 层次原理图的端口和方块符号对不上画多张原理图的层次设计时“Port not linked to parent sheet”这类报错经常出现。原因是子图里的Port和父图Sheet Symbol上的Entry名称不一致。要么是子图改了端口名父图没更新要么是父图新建了Sheet Symbol端口是手敲的某个字母拼错。我的推荐做法是用AD的自动生成能力代替手工放置。在父图执行Design → Create Sheet Symbol From SheetAD会读取子图里所有Port自动生成匹配的Sheet Symbol端口。这样从源头保证名称一致。万一已经手工画了父图修改子图端口后可以在父图选中Sheet Symbol用右键菜单里的“Update Sheet Symbol”之类选项刷新端口。每次修改完层次结构都建议重新编译一次把所有Sheet Symbol入口和Port来一次全面匹配。4.6 故意悬空No ERC的正确使用实际设计中确实存在“故意不连接”的引脚。比如MCU多余IO口不接、测试点不接网络、某些芯片的NC脚。这时候直接在闲置引脚上放一个No ERC标记告诉编译器“这里不用查”能有效降低噪音。但No ERC不是免死金牌我见过太多人把它当成“消警器”凡是报错就标一个最后Messages面板干干净净板子回来一堆问题。我对团队的要求是放No ERC的地方必须同时在引脚旁边加文字注释说明为什么不连。比如“NC - as per datasheet pin 5”或者“Test point/Not assembled”。这样以后任何人看这张图都能理解当时为什么放过它。严谨一点的做法是在元件的Parameters里加一条Note说明悬空引脚的用途和后续处理方式比如软件配置成内部下拉。5. 编译零报错之后与PCB交接前还要做哪些检查5.1 不要急着同步PCB先核对关键网络编译和ERC全部通过只能说明原理图内部逻辑自洽不能保证它和你的设计意图一致。我在带项目的过程中养成的习惯是编译过后先不急着同步PCB而是打开网表或Configure Physical Nets人工核对几个关键网络的Pin数量。你会说这不是重复劳动吗其实不是。原理图上的VCC网络你眼睛看着好像接了十几颗芯片实际网表里可能是断的——因为有人用了两种命名方式比如VDD和VCC混用在原理图上看都是电源符号编译却把它们识别成了不同网络。用文本方式查看网表一眼就能发现这种问题。具体操作是Design → Netlist → Generate Netlist生成一份Protel格式的网表文件用文本编辑器打开搜索关键网络名核对每个网络下挂的Pin数量是否符合预期。比如3.3V网络预期接20个引脚如果只看到12个就说明有8个引脚的电源连接断了赶紧回去查。5.2 封装与物料清单的核查ERC查不到封装错误这句话怎么强调都不为过。STM32F103C8T6既有LQFP48封装也有某些模块的贴片形式你选错封装编译照样零错误板子回来芯片却放不上去。DHT11、STC89C52RC这类常用器件网上流传的原理图库里的封装和实际采购的器件版本经常有出入必须逐个核对Footprint Manager。我的标准流程是在Tools → Footprint Manager里把每个元件的当前封装截图或者导出成PDF和BOM里实际采购物料的封装尺寸做逐一比对。重点看引脚数、间距、热焊盘尺寸。比如QFN封装底部焊盘ERC根本不理会但它直接影响焊接良率和散热PCB阶段再改就晚了。如果你参考的是原厂方案比如SW6206快充方案、BQ40Z50电池管理方案它们通常会提供全套原理图、PCB、封装库和寄存器列表。这些原厂封装一般比较可靠但也不是绝对不用检查——不同批次的原厂参考设计可能更新了封装下载前先核对版本。我习惯把原厂方案的封装全部导入到一个独立的“Vendor Lib”里用器件型号命名方便追溯。5.3 导出PDF的坑为什么只能导出部分区域“AD20导出原理图PDF只有部分区域”是搜索热词里非常具体的一个问题我在项目里也给同事排查过。大多数情况下原因出在打印图纸范围设置上。如果你在Print对话框里选择了“Primary”或“Current Document”又或者纸张大小没有匹配原理图图纸大小AD只会输出当前视图范围内的内容自然出现“只有部分区域”。正确做法是使用File → Smart PDF向导模式下选择“Current Project”或“All Sheets”纸张大小选“Fit to sheet”或直接选“A3/A2”把Margin设成0这样导出的是整张图纸。还有一个隐藏坑原理图里存在游离对象比如某根线头或标号被拖到了图纸边框之外Smart PDF在计算图纸区域时会被这些对象带偏导致输出范围变大或空白。出现这种情况可以先执行一次Compile再用Edit → Select → All Outside Sheet把图纸外的对象揪出来删除或拖回界内再导出PDF就正常了。如果你用OrCAD画图比较多转AD后容易在打印设置上花时间。OrCAD的Off-Page Connector和AD的Net Label逻辑类似但AD的Smart PDF更依赖工程里的图页信息。我的经验是输出PDF前先保存工程再关掉不相关的窗口否则Smart PDF偶尔会把当前高亮状态带进去导出一堆诡异的网格阴影。5.4 建立自己的检查清单模板说了这么多最后还是建议你做一个固定流程的检查清单。我自己的模板是这样的每次发板前逐条打勾[ ] 所有工程文件已保存无未命名文件[ ] 编译Messages面板零Error每条Warning都已逐条确认并写出原因[ ] Configure Physical Nets中关键电源网络Pin数核对无误[ ] Footprint Manager中所有封装与采购BOM一致[ ] 所有No ERC标记均有注释说明[ ] 层次工程中Sheet Symbol与Port匹配[ ] 多路电源网络命名不冲突Power作用域设置正确[ ] Smart PDF导出完整所有图页均可读[ ] 已将编译快照或PDF版原理图归档到版本管理清单看起来很琐碎但它能兜住底。硬件设计这个行当你踩过的每一个坑都是靠真金白银和加班时间换来的。把流程固化下来让每一次编译检查都不只是走个过场比追求“画图快”重要得多。其实说到最后编译检查这件事真正的难点不在于软件操作而在于你愿不愿意在打样之前花那半小时把每一条Warning都看明白。我在实际项目中坚持的原则很简单编译零Error是底线逐条确认Warning是习惯网表和封装的人工核查是态度。这三点做到位你能躲开硬件调试阶段至少一半的坑。
返回列表