画2层板的人多半都遇到过这种场景:同样的走线习惯,换一块板子就冒出一堆间距报错,电源网和信号网挤在同一条线宽里,想改个参数又得在菜单里翻半天。这类问题大多数不是手艺不到家,而是开工之前没把Class和规则框架理顺。AD22(Altium Designer 22)的PCB规则体系其实相当成熟,只要在动手走线前花二十分钟把网络类(Net Class)和设计规则(Design Rules)搭好,整块2层板从布局到出Gerber都会顺很多。这篇就结合我这些年用AD22做2层板的经验,聊清楚Class怎么分、规则怎么设、Query语法怎么写,以及我踩过、也见过别人踩的那些坑。
1. 2层板为什么值得先做Class和规则框架
1.1 2层板和多层板在规则上的本质差别
很多人从4层板切到2层板,第一反应是"层少了好画",但真正做下来会发现,2层板对规则的前期规划要求反而更高。原因很直接:4层板通常有完整的地平面和电源平面,回流路径、阻抗、串扰这些大半由叠层结构兜底,规则的容错空间比较大。而2层板只有顶层和底层两面铜,地平面往往只有一个不完整的铺铜区域,信号回流路径被迫和走线挤在同一平面上。
这就带出三个连锁反应。第一,间距规则必须收得更紧,因为顶层走线和底层走线是空间上正对的两面,任何一面出现间距违规,DRC都会直接报出来。第二,线宽规则要分得比多层板更细,2层板没有内电层帮你分流,电源网络的载流全部压在表层铜皮上,线宽算错就是发热、压降甚至烧板。第三,铺铜和过孔规则必须提前定好,否则你画到一半改一次过孔尺寸,几百个孔要逐个替换,那种返工体验我不想再体验第二次。
换句话说,多层板可以依赖叠层"兜底",2层板必须靠规则"守住"。这就是为什么我说2层板的规则框架比多层板更值得先做——它不是锦上添花,而是设计能不能一次成功的底线。
1.2 先立规矩再走线的工作流
我现在的固定流程是这样的:原理图完成后,先在原理图里把网络按功能打上Net Class参数,同步到PCB;然后在PCB里打开Design » Classes确认Class划分,再进Design » Rules把间距、线宽、过孔、铺铜这几大类规则一次性配齐;最后才开始布局、布线。整个前期准备大概二十分钟,但它省下的返工时间通常是几倍甚至十几倍。
这套顺序背后的逻辑是"规则驱动设计"。AD22的在线DRC是实时跑的,你在走线时它就按当前规则检查。如果规则是错的、或者根本没设,你等于在一条没有标线的路上开车,撞了才知道。反过来,把规则先配好,走线过程中违规会立刻飘红,你能马上修正,而不是等布线做完再回头大面积返工。
还有一点常被忽略:规则框架同时也是团队沟通的载体。一块板的规则文件导出后就是一份可执行的"设计规范",比口头交代"电源线走粗点、间距留大点"精确得多。后面我会讲怎么把这套规则导出复用。
2. Net Class怎么分才顺手
2.1 按电气属性划分的通用思路
Class划分没有唯一标准,但有一条通用原则:按"电气属性相同或相近"来分组,而不是按"功能模块"来分组。这两者的区别很关键。按功能模块分(比如"电源模块""MCU模块"),会导致同一个Class里既有大电流的电源线又有微弱信号,线宽、间距根本没法统一设。而按电气属性分,同一个Class里的网络对线宽、间距的诉求是一致的,规则才能真正落地。
结合2层板的常见设计,我一般会分这么几类:
- Power类:所有电源正极网络,比如VCC、3V3、5V、VBAT。这类网络需要更大的线宽。
- GND类:地网络。铺铜连接方式、过孔密度都和其他网络不同,单独成类。
- HighSpeed类:有速率要求的信号,比如SPI时钟、USB差分、时钟线。这类对间距和长度敏感。
- Signal类:普通低速信号,GPIO、控制线之类。规则最宽松。
- Analog类:模拟信号,比如运放输入、ADC参考。这类对噪声敏感,间距通常要留大。
分完之后你会发现,绝大多数2层板用这五类就够了。Class不是分得越多越好,分得太细反而增加维护成本。我见过有人把每个网络单独建一个Class,最后规则列表几十条,改一个参数牵一发动全身,纯属给自己找麻烦。
2.2 从原理图一键同步Class
手动在PCB里逐个添加网络到Class是最笨的办法,网络多的时候极易漏。更高效的做法是在原理图阶段就用Parameter Set把Class信息带上。
具体操作:在原理图中选中要归类的网络(或网络上的连线),执行Place » Directives » Parameter Set,把参数集放到该网络上,然后在参数集的属性里添加一个参数,Name填"NetClass",Value填你想要的目标类名,比如"Power"。多个网络要归到同一个Class,就重复放置参数集,Value保持一致即可。
做完之后,从原理图Update到PCB(Design » Update PCB Document),AD22在同步过程中会自动按照NetClass参数生成对应的类。这个机制的好处是双向可持续——以后原理图改了,重新同步,PCB里的Class成员会自动跟着更新,不会出现原理图和PCB网络分类对不上的情况。
注意:Parameter Set这个方式在AD22里默认会被编译检查。如果你的工程编译报"未使用的参数集"之类的警告,可以在Project Options里把对应的检查项关掉,或者干脆把它当作设计说明留着,不影响功能。
2.3 Class之间的交叉与优先级
这里有个新手容易掉进去的坑:一个网络可以同时属于多个Class,而Class之间没有继承关系。比如你把GND放进GND类,同时又误操作把它加进了Power类,那GND网络会同时匹配两条规则。这时候到底哪条生效?
答案是看规则优先级,而不是Class本身的顺序。这一点和某些其他EDA工具不同,AD22的规则匹配是"列表从上往下,第一条匹配的生效"。所以Class划分时就要有意识避免交叉,尤其是电源类和地类之间不要重叠,否则规则行为会变得难以预测。
如果你确实需要某个网络有特殊待遇(比如某根电源线比同类更粗),不要靠Class交叉来实现,正确做法是单独为这个网络写一条优先级更高的规则,Query用InNet('具体网络名')。后面第4节会详细讲Query怎么写。
3. 2层板核心设计规则逐条拆解
3.1 Electrical类:Clearance间距规则
Clearance(间距)是所有规则里最基础也最重要的一条,它定义了不同网络铜箔之间的最小距离。AD22里这条规则是"双对象"规则,也就是你要分别指定"第一个对象匹配什么"和"第二个对象匹配什么"。
2层板的间距我一般这么设:普通信号对普通信号,最小间距6mil(约0.15mm),这是多数普通工艺厂能做到的常规值;信号对电源、电源对电源,可以适当收紧到6mil;如果有高压或者对噪声特别敏感的部分,单独拉一条规则放到10mil以上。
关键是作用域的写法。默认那条"All to All"的规则我通常保留为最宽泛的兜底,比如设6mil,然后把特殊规则加在它上面。比如:
- 规则1:InNetClass('GND') to All,间距6mil
- 规则2:InNetClass('Power') to All,间距8mil
- 规则3:All to All,间距6mil(兜底)
由于列表从上往下匹配,Power类网络会命中规则2,其余网络命中规则3。这里GND和Power如果间距诉求不同,就要注意谁在上面——优先级高的先匹配。
有个实测经验:2层板铺铜之后,GND铜皮会大面积覆盖,这时候GND到其他网络的间距规则会频繁触发。如果你把GND间距设得太小,铺铜会自动贴着信号线,视觉上很乱;设太大又浪费板面。我的经验值是普通2层板GND到信号走线留8mil,视觉和电气性能都比较平衡。
3.2 Routing类:Width线宽与载流计算
线宽规则是2层板的第二道生命线。AD22的Width规则同样支持按Class分别设置,每条规则可以设Minimum、Preferred、Maximum三个值。其中Preferred是走线默认采用的宽度,Min和Max是允许范围。
我通常的配置是:普通信号线Min 6mil、Preferred 8mil、Max 50mil;电源线根据电流单独算;地线可以跟信号线一致,因为在2层板里地主要靠铺铜,走线只是辅助连接。
电源线宽必须靠计算,不能拍脑袋。业内通用的估算依据是IPC-2221的载流公式,简化形式是:I = k × ΔT^0.44 × A^0.725,其中I是电流(安培),ΔT是允许温升(摄氏度,一般取10℃到20℃),A是导线横截面积(单位mil²),k是外层取0.048、内层取0.024。因为2层板的铜都在外层,取k=0.048。
按这个公式,1oz铜厚(35μm)下外层走线的载流能力大致如下表:
| 线宽 | 截面积 | 载流(ΔT=10℃) | 载流(ΔT=20℃) |
|---|---|---|---|
| 0.2mm | 10.85 mil² | 0.74 A | 1.01 A |
| 0.3mm | 16.27 mil² | 1.00 A | 1.35 A |
| 0.5mm | 27.13 mil² | 1.45 A | 1.96 A |
| 1.0mm | 54.25 mil² | 2.39 A | 3.25 A |
| 2.0mm | 108.5 mil² | 3.95 A | 5.36 A |
用法很直接:比如你的3V3电源要给整板供1.5A,选ΔT=10℃这一档,对照表格,0.5mm(约20mil)就能覆盖,但我一般会留一倍余量,直接走1.0mm(约40mil),压降小、温升低,2层板板面也够铺得下。别小看这点余量,2层板没有内层分流,一旦某个器件实际电流超出预估,粗线的容错空间就是救命的。
注意:上表是单根导线的理想载流,实际还要考虑走线周围铺铜的散热作用。如果电源线两边都有大面积铺铜,载流会更好;如果是悬空的孤线,温升会比表格值高,这时要再放大线宽。
3.3 Routing Via:过孔尺寸与孔环
2层板的过孔规则直接影响板子的可制造性和可靠性。Via Style这条规则控制过孔直径和孔径,通常我会定义两套:一套常规孔,孔径0.3mm、外径0.6mm;一套电源孔,孔径0.4mm、外径0.8mm,用来承载大电流。
为什么孔径和外径要成对定义?因为外径减去孔径的一半就是孔环(Annular Ring)。孔环太薄,钻孔偏位时容易破环,导致开路。多数板厂的工艺能力要求孔环单边不小于0.15mm,所以0.3mm孔径配0.6mm外径,孔环正好是0.15mm,属于安全底线。如果你有空间,0.3/0.7或0.3/0.8更保险。
过孔规则的Query写法上,电源过孔我会单独指定:InNetClass('Power'),然后绑定大的过孔样式;普通信号走默认过孔。另外过孔数量也值得规划,尤其是GND,2层板里地层回流依赖过孔把顶层地连到底层铺铜,过孔太稀会导致回流路径变长、地阻抗升高。我的经验是信号换层处旁边尽量就近放一个地过孔,关键位置做到"一换层一地孔"。
提示:过孔规则改起来很简单,但改完已经布好的线不会自动更新。所以务必在布线前定好过孔样式,避免布完线再调整。如果非要中途改,可以用Tools » Via Stitching或者批量选中过孔统一替换。
3.4 Plane和Polygon:铺铜相关规则
2层板很大程度靠铺铜实现地平面和电源平面,所以Polygon相关规则必须配好。这里最关键是Polygon Connect Style(铺铜连接样式),它决定铺铜和焊盘/过孔是怎么连接的。
默认情况下AD22用的是Relief Connect(花焊盘连接),焊盘通过四条细连接臂连到铜皮上。这么做的好处是焊接时散热慢、好焊,缺点是连接阻抗比直连高。对于GND,我通常对普通焊盘保留花焊盘连接,对过孔和测试点用Direct Connect(直连),因为过孔不需要焊接,直连能让地的连通性更好。对于电源铺铜,如果电流大,我会改成直连,减少连接处的压降。
另一条重要规则是Copper to Board Edge(铜到板边距离)。很多新手没设这条,结果铺铜直接铺到板边,切割时铜箔被划伤甚至短路。2层板的常规做法是铜到板边留0.5mm(约20mil),如果板子要做V-CUT拼板,距离还要再留大一点。
Polygon Repour(重新铺铜)也不是一次性动作。每改一次布局、挪一个器件,铺铜都要重新灌。我习惯在Design » Rules里把Polygon的清除间距和铺铜间距设置成一致,避免铺铜边缘出现"锯齿"或"孤岛"。发现孤岛铜(Island)要用Tools » Polygon Pours » Remove Islands处理掉,它们悬空没连接,是天线也是干扰源。
3.5 Mask与Silk:阻焊丝印规则
阻焊和丝印规则不影响电气,但影响焊接和装配,很多板子出问题恰恰出在这。阻焊关键参数是Solder Mask Expansion(阻焊开窗补偿),它决定阻焊层比焊盘大多少。设太小,阻焊会盖到焊盘上,导致上锡不良;设太大,相邻焊盘之间的阻焊桥(Solder Mask Bridge)会断,焊接时容易连锡。
我常用的值是:一般焊盘阻焊开窗单边扩4mil(约0.1mm)。对于引脚间距0.5mm以下的密脚器件,开窗要收到2mil甚至更小,保证阻焊桥能留住。这个值要看板厂工艺,有些板厂阻焊对位精度高,可以放宽,有些则要求更保守,提前问一下不吃亏。
丝印规则里,Silk to Solder Mask(丝印到阻焊)和Silk to Silk(丝印到丝印)是两条必设项。丝印压在焊盘上会被后续焊接工艺磨掉或者造成误判,所以丝印到阻焊我一般设4mil以上。丝印到丝印不能重叠,否则字符糊成一团,最小间距设4mil。另外注意丝印别压到过孔和测试点上。
4. Query语法与规则优先级实战
4.1 常用Query表达式速查
AD22的规则作用域是靠Query表达式描述的,掌握几个常用写法就能覆盖绝大多数场景。下面这张表是我平时最常用的:
| Query表达式 | 含义 |
|---|---|
| All | 所有对象 |
| InNet('VCC') | 指定单个网络 |
| InNetClass('Power') | 指定某个网络类 |
| InComponent('U1') | 指定某个器件 |
| IsVia | 所有过孔 |
| IsPad | 所有焊盘 |
| IsTrack | 所有走线 |
| HasFootprint('0805') | 指定封装的所有对象 |
| (InNetClass('Power') or InNetClass('GND')) | 或逻辑组合 |
写Query时注意几点:网络名和类名要加引号;比较运算符、逻辑运算符(and、or、not)要小写或按AD的语法写;括号用来明确运算顺序,别省。我见过有人写InNet(VCC)没加引号,规则直接不匹配,排查半天才发现是语法问题。
Clearance这种双对象规则,两个位置的Query要分别填。比如"电源类网络与其余所有网络的间距",第一个对象填InNetClass('Power'),第二个对象填All。如果你想让电源与信号间距8mil、信号与信号间距6mil,就要写两条规则,一条Power to All,一条All to All,靠优先级区分。
4.2 优先级排序的隐藏逻辑
前面反复提到优先级,这里把它讲透。AD22的规则编辑器里,同一类规则(比如所有Clearance规则)是并列的一个列表,AD按从上到下的顺序逐条匹配Query,第一个匹配成功的规则生效,后面的不再检查。所以"特殊规则放上面,通用规则放下面"是铁律。
调整优先级的方法有两种:一是在规则编辑器里选中规则,点上下箭头按钮移动;二是拖动规则。界面里还有个Priority列显示数值,数值越小优先级越高,但实际匹配看的是列表顺序,移动规则时数值会自动重排。
这里最容易踩的坑是:在默认的All to All规则下面加了特殊规则。结果特殊规则永远匹配不到,你会觉得"我明明设了8mil,怎么还是按6mil报错"。每次加完规则,养成习惯看一眼它在列表里的位置,特殊规则一定在兜底规则之上。
还有一个隐藏逻辑:规则是按类型分组的,不同大类的规则互不干扰(比如Clearance和Width是两套列表),所以优先级只在同类规则内部生效。不用担心线宽规则会影响间距规则的匹配。
5. 一套可直接复用的2层板通用规则模板
5.1 规则清单表格
把上面讲的整合成一张可直接照抄的清单,你新建2层板工程时可以逐条对照设置:
| 规则类型 | 作用域(Query) | 关键参数 |
|---|---|---|
| Clearance | InNetClass('Power') to All | 8mil |
| Clearance | All to All | 6mil |
| Width | All | Min 6, Pref 8, Max 50mil |
| Width | InNetClass('Power') | Min 20, Pref 40, Max 120mil |
| Via Style | InNetClass('Power') | 孔径0.4, 外径0.8mm |
| Via Style | All | 孔径0.3, 外径0.6mm |
| Hole Size | All | Min 0.2, Max 6.3mm |
| Hole to Hole | All | 8mil |
| Copper to Board Edge | All | 20mil |
| Silk to Solder Mask | All | 4mil |
| Silk to Silk | All | 4mil |
| Solder Mask Expansion | All | 4mil |
| Polygon Connect | InNetClass('GND') | 焊盘花焊盘,过孔直连 |
这套参数适配绝大多数普通2层板。不是每个值都绝对,但作为起点非常稳,你可以根据具体板子的工艺能力和电流需求微调。
5.2 规则的导出、导入与团队复用
规则设好之后,强烈建议导出备份。方法是打开Design » Rules,右键选Export Rules,存成.RUL文件。下次新项目直接用Import Rules导进去,二十秒搞定,不用重配。
这套机制在团队里价值更大。你可以把验证过、量产过的规则文件作为团队标准规范下发,所有人新项目先导入这套规则,大家的间距、线宽、过孔标准就统一了。我见过太多团队因为规则不统一,A画的板间距6mil、B画的板间距10mil,PCB打样回来工艺一致性差,沟通成本居高不下。
注意:导出的RUL文件是基于Query的,只要新工程里Class命名和网络命名规范一致,导入后规则就能直接生效。所以团队里最好约定一套Class命名规范(比如统一的Power、GND、HighSpeed),这是规则复用的前提。
另外,AD22的规则可以配合工程模板一起用。把常用规则、层叠、图纸参数都放进一个模板工程(.PrjPcb),新建项目直接基于模板创建,规则框架一步到位。这是我目前觉得最省事的做法。
6. 常见报错与排查实录
6.1 典型DRC报错速查表
规则设了不等于不出问题,理解报错含义才能快速定位。下面是我最常遇到的几类:
| 报错信息 | 可能原因 | 处理方法 |
|---|---|---|
| Clearance Constraint Violation | 两网络间距小于规则值 | 确认是哪条规则触发,挪线或调规则 |
| Width Constraint Violation | 走线宽度超出Min/Max | 检查是否有插件或批量修改漏网 |
| Short-Circuit | 铜箔直接接触 | 多为铺铜间距过小或焊盘连锡 |
| Un-Routed Net | 网络未完全连通 | 检查是否漏了飞线、过孔未连 |
| Hole Size Violation | 过孔孔径超范围 | 统一替换过孔样式 |
| Silk to Solder Mask | 丝印压焊盘 | 挪丝印或缩小字体 |
| Modified Polygon | 铺铜未更新 | Tools » Polygon Pours重铺 |
| Room Definition Violation | 器件超出Room范围 | 调整Room或关闭该检查 |
排查时的核心思路是"先看是哪条规则触发的"。AD22在DRC报告里会标注规则名,直接去规则编辑器找到那条规则,确认作用域写的对不对,八成能定位问题。
6.2 几个容易忽略的细节
最后分享几个我踩过的坑,都是文档里不会写的。
第一个坑:在原理图改了网络名,PCB里Class成员不会自动更新。因为Class成员在PCB端是实例化的,网络名对应不上时它会保留旧成员。解决办法是同步后进Design » Classes手动核对一遍,或者删掉旧Class重新从原理图同步。这个坑不常见但一旦踩上很难查。
第二个坑:铺铜和DRC是"先后顺序"关系。你刚铺完铜,DRC不一定立刻按新铜皮重跑。稳妥做法是铺铜后手动执行Tools » Design Rule Check,让它完整跑一遍,别依赖实时检查。尤其是板子大、网络多的时候,实时DRC为了性能会有取舍。
第三个坑:过孔塞油和开窗。VIA有Tented(盖油)和Exposed(开窗)两种状态,这个在Solder Mask规则里控制。如果地过孔要散热,就要开窗;如果只是普通连接,盖油更干净。很多人忘了设,导致板子回来后一堆没盖油的黑孔,既不美观又容易氧化。
第四个坑:规则的Min/Max和Preferred要配合。有人只设Preferred不设Min/Max,结果AD允许你走任意宽度的线,DRC不报。正确做法是三个值都设,Min和Max就是你允许的边界,Preferred是默认值。规则只有带上下界才真正有约束力。
第五个坑,也是我吃过亏的:规则修改之后,以已经布好的线不会自动按新规则重画。比如你原来用6mil走线,后来把Power类Preferred改成40mil,那些已经布好的6mil电源线不会自动变粗,DRC也不会因为"它现在是Preferred不是Min"就报错。所以规则一定要在布线前定稿,中途大改规则等于返工。
我个人在实际项目里的体会是,2层板能不能一次成功,七成取决于开工前的规则准备。二十分钟的Class划分和规则配置,换来的是后面布线时心不慌、DRC时少返工、出板后少飞线。这套流程用顺了之后,你会发现AD22真正的效率不在画图有多快,而在于规则体系帮你把设计约束"固化"下来,让每一次走线都踩在安全线以内。