
AD22 里画 2 层板最容易被应付过去的一步就是 Class 和规则设置。我见过太多这样的板子原理图画得干干净净布局也规规矩矩结果 DRC 一跑两百多条报错或者板子打回来发现电源走线细得跟头发丝一样、密脚 IC 的阻焊开窗连成一整片。追根溯源问题几乎都出在同一件事上——从头到尾用的都是 AD22 出厂默认的那套规则Class 一个没建规则一条没改。默认值本身没什么错它是按通用安全值给的但通用就意味着对你的板子不一定合适。2层板只有 Top 和 Bottom 两层铜没有完整的内层地平面回流路径、载流能力、阻抗控制这三件事全都要靠走线和铜皮硬扛规则设置的分量比 4 层板重得多。这篇文章面向的是这样一类人会用 AD22 画板Layout 也能拖得动但每次新建工程都要重新翻一遍规则对话框改完也不知道改全没改全或者建过 Net Class但下次从原理图同步一下类就没了。我会把 2 层板这一套 Class 体系怎么搭、几条关键规则的具体数值怎么倒推出来、优先级怎么排、Query 语句怎么写、最后怎么沉淀成模板文件从头到尾捋一遍。数值我会给出计算过程不直接甩结论你换成自己的板厚、铜厚、载流要求也能算。1. 先厘清 Class 与 Rule 的关系否则改到最后自己都绕晕1.1 从 4 层板搬到 2 层板的三个典型翻车第一个翻车是间距。4 层板有内层参考平面线到线之间只要有 0.15mm 就基本安全因为串扰主要靠参考平面兜底。2 层板不行Top 层两条长距离平行走线底下没有完整平面边缘场直接耦合过去间距按默认的 0.254mm 走反而还凑合一旦你为了省空间把间距规则改成 0.127mm串扰就会明显上来。所以 2 层板上的 Clearance 规则不是越松越好也不是越紧越好而是分对象分场景——地线和电源线之间可以松两条长并行的信号线之间必须紧。第二个翻车是线宽。4 层板电源走 0.5mm 心里很踏实因为内层还有铜。2 层板 Top 层只有 1oz 铜0.5mm 宽、35µm 厚截面积只有 0.0175mm²扛 2A 已经接近 10℃ 温升的临界。很多人习惯性地把 Width 规则的 Max 卡死在 0.5mm结果画大电流路径时一拉粗线就报错只好拆成两条细线绕反而更难散热。Width 规则的 Max 值在 2 层板上应该放开Min 值才是真正要守的底线。第三个翻车是过孔。4 层板上的过孔主要是换层载流压力小。2 层板上如果 Bottom 层是一整片地铜那 Top 层上的每一个地过孔都是回流路径的一部分一根信号线换层后回流要在地铜上绕一大圈才能跟上。这类过孔的数量和位置直接影响 EMI。规则里没法直接约束回流过孔必须贴着信号过孔放只能靠 Via Style 规则把过孔尺寸定死然后靠人工在关键信号过孔旁边补地过孔。1.2 Class 是花名册Rule 是规章两者必须配套AD22 的规则引擎里每一条规则都有一个作用域写在规则对话框的Where the First Object Matches和Where the Second Object Matches两个框里本质就是一句 Query 语句。你可以直接把一堆网络名硬写进去比如InNet(VBAT) || InNet(VCC_5V) || InNet(VCC_3V3) || InNet(VCC_1V8)这句没错能跑。问题是项目一改多加了一路 1V2 电源你得回来把每一处写过的 Query 都补一遍漏掉任何一处那条规则的覆盖就不完整了而 DRC 不会告诉你你忘了加一个网络它只会默默按默认规则放行。这就是不做 Class 最大的代价——错误是静默的。Class 解决的就是这件事。把上面那四个网络放进一个叫PWR的 Net Class规则里只需要写InNetClass(PWR)。以后新增电源网络在原理图或 PCB 面板里往PWR类里一拖所有引用这个类的规则自动生效一条都不用改。AD22 里的 Class 分好几族Net Class网络类、Component Class元件类、Differential Pair Class差分对类、Pad Class焊盘类、Layer Class层类还有结构类。对于 2 层板真正高频使用的是前三族Layer Class 基本用不上因为规则里直接写OnTopLayer或OnLayer(Bottom Layer)就够了。这里有个认知上的坑要提前说清Class 是对象集合Rule 是约束条款两者是正交的。你可以建十个 Class 但一条规则都不为它们写也可以为同一个类写五条不同维度的规则。很多人建完 Class 就以为万事大吉其实那只是把花名册编好了规章一条还没写。提示判断一个项目的规则体系健不健全有个很土但很有效的办法——打开 Design » Rules看规则树里有多少条规则的 Query 里是硬写的InNet(...)。这个数量越多项目就越脆。2. 2层板该建哪几个 Class怎么建才不会被同步冲掉2.1 我常用的最小 Class 清单2 层板结构简单Class 不需要建得太细细了维护成本反而高。我一般控制在 4 个 Net Class 2 个 Component Class 1 个差分对类基本能覆盖九成以上的中小型项目。Class 名称类型典型成员用途PWRNet ClassVBAT、VCC_5V、VCC_3V3、VCC_1V8、VREF统一放宽线宽、收紧到信号线的间距GNDNet ClassGND、AGND、PGND铜皮连接方式、直连过孔HSNet ClassUSB_DP/DM、CLK、SPI_SCK 等高速信号收紧间距、限制换层次数SLOWNet ClassLED、按键、继电器驱动、蜂鸣器允许细线宽、允许长距离走线ICComponent Class所有芯片、模块用于元件间距、丝印避让CONNComponent Class排针、座子、接线端子用于板边距离、机械避让DIFFDifferential Pair ClassUSB_DP/DM 等差分线宽、间距、等长为什么把 SLOW 单独拎出来因为把它和 HS 混在一起规则只能取两者的交集结果是既限制了高速线又委屈了低速线。分开之后HS 类可以设最小间距 0.2mm、禁止在 Top 层长时间平行走线靠人工把关SLOW 类可以放宽到 0.15mm走线自由度大很多。这种该松的松、该紧的紧是 2 层板能不能布通的关键。Component Class 常被忽略其实很有用。比如你可能希望在排针、座子周围留出更大的机械避让或者不让丝印压在 IC 上。这些约束用 Net Class 表达不了必须靠 Component Class。2.2 在原理图侧定义 Class 的三种做法这是我踩过最多次的坑在 PCB 面板里手工建了一堆 Net Class改了几轮原理图一次 Update PCB 之后类成员全乱了。原因是 AD 的类定义有来源概念PCB 端的类如果和原理图端不同步后续更新时会按原理图为准。所以稳妥做法是尽量在原理图侧定义类PCB 侧只做补充。第一种做法是放 Net Class 指示符。在原理图编辑器里选 Place » Directives » Net Class把它放在要归类的网络走线上然后在属性面板里填 ClassName比如PWR。一个网络可以被多个指示符命中就会同时属于多个类。这种做法最直观缺点是网络多的时候要放很多个视觉上乱。第二种做法是 Parameter Set。在走线上放一个 Parameter Set在里面加一条名为Net Class的参数有些版本是ClassName值填类名。它和指示符本质一样只是能挂的参数字段更多适合顺便把差分对、走线宽度偏好一起写进去的场景。第三种做法是总线自动生成。在 Project Options » Class Generation 里勾上Generate Net Classes for Buses然后原理图里用总线命名规范比如DDR_DQ[0..15]AD 会自动生成一个叫DDR_DQ的 Net Class成员就是这 16 根线。这个方式对排线、并行总线特别省事一条总线一句话搞定。同样的机制还有Generate Net Classes for Components会按元件的前缀或者指定规则生成 Component Class。做法适合场景维护成本主要缺点Net Class 指示符零散网络、电源类低网络多时图面拥挤Parameter Set需要同时挂多个参数的场合中属性面板里字段容易填错总线自动生成并行总线、排线极低依赖命名规范命名一乱就失效我的习惯是混合用电源和地这种零散网络用指示符并行总线和排线用总线自动生成差分对单独用差分对指示符。2.3 差分对类要在哪一端生成差分对比较特殊它的类成员是一对一对的不是单个网络。AD22 里可以在 PCB 面板切到 Differential Pairs Editor 模式用Create Differential Pairs From Nets按钮按_P/_N、_/_-之类的后缀规则批量识别并建对。这个功能很快但它是在 PCB 端生成的关系原理图同步时同样有被覆盖的风险。更稳的办法是在原理图里给差分对网络放差分对指示符Place » Directives » Differential Pair把正负两根线的网络名按规范写好。这样从原理图 Update 到 PCB 的时候差分对关系会跟着过去类也就在了。识别后缀在 Project Options 里可以配常见的是_P/_N也有用/-的看你团队习惯统一一下。注意无论用哪种方式改完 Class 之后一定要重新跑一次 Update PCB Document然后打开 Object Class Explorer 逐个核对成员。我吃过一次亏——原理图里改了一个网络名指示符上的 ClassName 还是旧的结果那根线整个掉出了 PWR 类规则对它全部失效DRC 一切正常板子回来才发现那一路电源线是按信号线宽走的。3. 2层板真正需要动的那几条规则3.1 Clearance分层设置比一把梭更管用默认的 Clearance 规则大约是按 0.254mm 给的对 2 层板来说偏保守会白白吃掉布线空间。常规工艺下0.2mm 是舒适值0.15mm 是省空间的进攻值再往下就要看板厂能力和成本了。但不要只改这一条。我的做法是按优先级建三条第一条PWR与HS之间的间距设为 0.25mm。电源线是噪声源高速线是敏感对象两者靠太近容易耦合这条要比普通间距更严。第二条HS类内部的线间距设为 0.2mm并且尽量拉长平行段就走不过去——AD 没有直接约束平行长度的规则只能靠经验在布线时错开。第三条全局默认间距设为 0.2mm。至于SLOW类和GND之间的间距其实可以放松到 0.15mm因为低速线对耦合不敏感地线本身又是参考。这一步能明显提升 2 层板的布通率尤其是那些元件密、空间紧的小板子。再补充一个容易被忽略的点Clearance 规则在 AD 里默认作用于不同网络的对象之间同网络内部的走线重叠不会被判为短路。这是合理的但也意味着你没法用 Clearance 规则来约束同网络走线之间的最小间距需要控制线间距只能靠人工或者用其他手段。3.2 Width线宽要从载流倒推不是拍脑袋Width 规则有三个值Min、Preferred、Max。Preferred 只影响交互式布线的默认值DRC 不检查它Min 和 Max 才是会被 DRC 卡的红线。很多人把 Max 设成 Preferred 的 1.2 倍结果想加粗电源线的时候一路报错这就是典型的把 Preferred 当成了上限。真正该做的是先把载流量算出来。IPC-2221 给出的经验公式是A (I / (k × ΔT^0.44))^(1/0.725)其中 A 是导体截面积单位 mil²I 是电流AΔT 是允许温升℃外层 k 取 0.048内层取 0.024。算出截面积后除以铜厚1oz 铜约 1.378 mil就得到线宽。按外层、1oz 铜、静止空气、不打散热孔的最保守条件算结果是电流允许温升 10℃ 的线宽允许温升 20℃ 的线宽1A约 0.30mm约 0.20mm2A约 0.78mm约 0.52mm3A约 1.36mm约 0.92mm5A约 2.77mm约 1.85mm这张表有几个使用前提必须说清楚。第一它假设的是裸露铜实际板子有阻焊覆盖散热会差一些所以算完建议再留 20% 到 30% 的余量。第二它假设的是连续直流如果是脉冲电流按有效值折算。第三如果走线特别短几个毫米以内热传导能帮上忙可以适当减一档。把这些数落到 Width 规则上我的配置是PWR类 Min 设 0.4mm、Preferred 设 0.5mm、Max 放开到 5mmGND类 Min 设 0.4mmHS类 Min 设 0.2mmSLOW类 Min 设 0.2mm全局 Min 设 0.15mm。提示全局 Min 值设成 0.15mm 而不是 0.127mm是因为 0.15mm 是绝大多数板厂的双层板常规工艺不需要加价设成 0.127mm 有些厂会进精细线路档报价直接涨一截。3.3 Via Style过孔不是越小越好还要算载流Routing Via Style 规则管的是过孔的直径、孔径的 Min/Preferred/Max 三档。同样的道理Preferred 只影响你放新过孔时的默认值Min 和 Max 才是 DRC 的边界。如果 Max 卡得太紧你后面想手动放个大一点的过孔做散热就会报错。2 层板上过孔的两个用途要分开看待。换层用的过孔0.3mm 孔径 / 0.6mm 盘径是稳妥档绝大多数板厂不加价机械钻孔也不容易偏。载流用的过孔就要单独算了。孔壁镀铜厚度通常按 25µm 算板厂常见的 1oz 孔铜一个孔径 d 的过孔其孔壁环形截面积约等于S π × d × t以 0.3mm 孔径、25µm 孔铜代入S ≈ 3.14 × 0.3 × 0.025 ≈ 0.0236 mm²。换算成 1oz 铜厚的等效线宽大约相当于 0.67mm 宽的走线。按前面那张表0.67mm 在 10℃ 温升下大约能扛 1.7A。但过孔在板子内部散热条件比表层走线差得多还要考虑工艺波动所以我实际会打个对折——单个 0.3/0.6 的过孔按 0.8A 到 1A 估。过孔规格孔径/盘径单孔保守载流常见用途0.3mm / 0.6mm约 0.8A ~ 1A普通换层、小电流0.4mm / 0.7mm约 1.4A中等电流、电源分支0.5mm / 0.8mm约 2A大电流路径、散热0.8mm / 1.2mm约 4A大电流汇流点大电流靠单孔硬扛从来不是好办法正确做法是并排打一排过孔。三个 0.3/0.6 的过孔并联保守估 2.4A 到 3A比一个 0.8/1.2 的大孔更划算还省钻孔成本。并排过孔之间的间距别太近孔到孔至少留 0.25mm否则钻孔时容易破壁。这个约束可以用 Manufacturing 类里的 Hole To Hole Clearance 规则卡住。关键信号的换层过孔旁边一定要补回流地过孔。2 层板没有地平面信号从 Top 换到 Bottom回流要沿着地铜皮绕行绕得越远环路面积越大。紧贴信号过孔放一到两个地过孔能把回路面积压到最小。这个动作规则管不了只能靠布线时养成习惯。3.4 Polygon Connect Style地铜皮的热焊盘是个大坑2 层板通常会在 Bottom 层铺一整片 GND 铜皮或者 Top 层也铺一块。铜皮和焊盘的连接方式由 Polygon Connect Style 规则控制这条规则不设好会有两种极端后果。第一种极端是全部直连Direct Connect。铜皮直接糊在焊盘上散热太快手工烙铁根本焊不动尤其是大面积的接地焊盘和插件引脚。第二种极端是全部热焊盘Thermal Relief结果是每根接地过孔都被四个细脖子卡着大电流下这些脖子成了瓶颈等效载流能力比直连低一大截。我的配置分两条规则一条针对焊盘Query 写IsPad用 Thermal Relief辐条宽度 0.25mm空气间隙 0.25mm四条辐条。这个参数下辐条的总截面积约为 4 × 0.25 × 0.035 ≈ 0.035mm²等效线宽约 1mm一般信号的接地引脚完全够用手工焊接也舒服。另一条针对过孔Query 写IsVia用 Direct Connect。过孔不需要焊接直接连上能显著降低接地阻抗也避免热焊盘的窄脖子限制载流。注意如果你用的是网格铜Hatched而不是实心铜热焊盘的辐条和网格线可能会错位叠加导致连接数量不足。2 层板的地铜皮我建议一律用实心铜不要图好看用网格。网格铜对散热和回流都没好处。3.5 Manufacturing 与 Mask跟板厂工艺对齐的价值这一组规则是很多人直接跳过的地方但它们决定了板子能不能按预期做出来。我列一下我常用的数值以及背后为什么这么定。规则名称建议值依据Minimum Annular Ring0.15mm常规工艺的环宽下限再小容易破环Hole To Hole Clearance0.25mm钻孔定位误差与破壁风险Minimum Solder Mask Sliver0.1mm阻焊桥的机械强度下限Silk To Solder Mask0.15mm丝印不能压到开窗上否则印不上去Silk To Silk0.15mm丝印字符之间不能糊在一起Board Outline Clearance0.3mm 到 0.5mm走线和铜皮到板边留安全距离Minimum Solder Mask Expansion0.05mm开窗过大会吃掉阻焊桥这里面最值得展开的是阻焊开窗和阻焊桥这对矛盾。AD 默认的 Solder Mask Expansion 是 4mil大约 0.1mm。对普通封装的焊盘没问题但你一旦碰到 0.5mm 间距的密脚 IC比如 TSSOP、QFN焊盘宽 0.3mm、焊盘间隙 0.2mm两侧各扩 0.1mm中间的阻焊桥就只剩 0.2 - 0.1 - 0.1 0直接连成一片。结果就是回流焊时相邻引脚之间挂锡拆都拆不干净。解决办法是在规则里给密脚封装单独建一条 Solder Mask ExpansionQuery 写成按封装名匹配把扩展值降到 0.05mm 甚至 0。同时把 Minimum Solder Mask Sliver 设成 0.1mm让 DRC 帮你把做不出阻焊桥的地方抓出来。丝印到阻焊的 0.15mm 这条也经常被人忽略。板厂在印丝印的时候如果字符压在开窗区域上油墨会渗进焊盘要么印不上要么印成一团。DRC 跑一遍 Silk To Solder Mask 就能把这些问题提前暴露出来。4. 优先级与 Query规则写准比写多更重要4.1 AD 判定优先级的真实逻辑AD22 的规则列表是从上往下执行的位置越靠上优先级越高。当一对对象同时命中多条同类规则时AD 会取优先级最高的那条来判定剩下的全部忽略。这个机制决定了规则列表的顺序本身就是一种设计。最容易踩的坑是新建的规则默认被扔在列表最底下。比如你新建了一条 PWR 的 Clearance 规则条件写得天衣无缝但上面那条全局 Clearance 的优先级比它高结果全局规则先命中你辛辛苦苦写的 PWR 规则从来没生效过。更麻烦的是界面上看不出任何异常DRC 也不报错。改的办法是在规则对话框里点右下角的 Priorities 按钮或者在规则树上右键 Move Up。我的习惯是排成特殊在前、通用在后差分对专属规则差分对间距、差分对线宽特定网络对之间的规则如 PWR 对 HS特定类内部的规则如 HS 类内间距、PWR 类线宽单类通用规则如 GND 连接方式全局默认规则排完之后跑一次批量 DRC然后做一次反向验证故意把间距改小看 DRC 会不会按你预期的规则报错。如果报错信息里引用的规则名不是你写的那条说明优先级排反了回去调。4.2 2层板常用的 Query 语句速查Query 是 AD 一个迷你查询语言支持And、Or、Not和括号组合。下面这些是 2 层板里出现频率最高的Query 写法命中对象All所有对象InNetClass(PWR)PWR 类里的所有网络对象InNet(GND)名为 GND 的网络InComponentClass(IC)IC 类里的元件InDifferentialPairClass(DIFF)差分对类对象IsVia所有过孔IsPad所有焊盘IsTrack所有走线段IsPolygon所有铜皮OnTopLayer/OnBottomLayer位于顶层 / 底层的对象IsSurfaceMount/IsThroughHole表贴 / 插件对象HasFootprint(TSSOP-20)指定封装的元件InNetClass(PWR) And IsViaPWR 网络里的过孔组合起来能表达很细的意图。比如限 PWR 类在底层上的走线最小宽度规则条件就可以写InNetClass(PWR) And OnBottomLayer And IsTrack写 Query 有几个原则。第一能用类就别写具体网络名原因前面讲过。第二字符串一律用单引号双引号在某些版本里会解析失败。第三And的优先级高于Or遇到多条件时老老实实加括号别指望解析顺序符合你的直觉。4.3 三个特别容易写错的 Query第一个是把InNetClass和InNet混用。前者匹配的是属于某个类的对象后者匹配的是某个具体网络的对象。这两者返回的结果集完全不同前者会包含这个网络上的一切——走线、焊盘、过孔、铜皮后者只针对网络本身。写规则的时候想清楚你是要管网络还是管网络上的对象。第二个是IsVia的作用范围。它匹配所有过孔包括盲埋孔和测试点孔。2 层板没有盲埋孔问题不大但如果你从别的项目导入了规则里面可能有针对盲埋孔的条款导进来在 2 层板上永远不会命中属于无效规则建议清理掉。第三个是括号。有一类需求是PWR 类或者 GND 类里的过孔用直连有人会写成InNetClass(PWR) Or InNetClass(GND) And IsVia按 And 优先的规则这句实际等价于InNetClass(PWR) Or (InNetClass(GND) And IsVia)PWR 类里的焊盘、走线也会被命中规则范围一下就失控了。正确写法是(InNetClass(PWR) Or InNetClass(GND)) And IsVia5. 把这一套做法沉淀成可复用的模板5.1 导出 RUL 文件与制作模板 PCB规则配好之后最不划算的做法就是只留在当前工程里。设计完一遍下次新项目又从头来。AD22 提供了规则的导入导出打开 Design » Rules在左侧规则树的空白区域右键选 Export Rules存成一个 .RUL 文件。新项目里同样的位置右键选 Import Rules整套规则一次性导入包括所有 Class 成员和优先级顺序。不过这里有个细节RUL 文件里保存的是规则条件规则的 Query 里引用的 Class 必须在新工程里也存在否则导入后条件命中不到任何对象。所以正确顺序是先确认新工程里的 Net Class 成员已经建好再导入 RUL。更省事的办法是做一个模板工程。我会维护一个Template_2L.PcbDoc里面已经配好全部规则、Class、层叠参数板厚、介质常数、铜厚、常用的图层颜色方案甚至放几个常用的封装库引用。新项目直接从它另存一份改掉项目名就能开工。这个文件我大概每半年更新一次把新踩的坑对应的规则补进去。层叠参数也在模板里定好。2 层板的 Layer Stack Manager 里主要就三项介质厚度决定板厚常见 1.6mm、介电常数FR-4 大约 4.3 到 4.5、铜厚1oz 即 35µm。这些值不只是记录它会影响 AD 的阻抗计算。5.2 用 DRC 做闭环验证规则设完不等于生效必须用 DRC 验证一遍。Tools » Design Rule Check 打开批量检查我的检查清单是这几项必须勾上Clearance、Short-Circuit、Un-Routed Net、Width、Routing Via Style、Minimum Annular Ring、Hole To Hole Clearance、Minimum Solder Mask Sliver、Silk To Solder Mask、Board Outline Clearance、Modified Polygon、Net Antennae。在线 DRC 建议一直开着边布边报比攒到最后一次性跑要省时间。但要注意在线 DRC 只检查你打开的那条规则吗不是它检查所有 Online 生效的规则性能上会有影响板子元件特别多的时候可以临时关掉靠批量检查兜底。跑完批量检查后不要只看红色报错数量要点开每一条看它引用的是哪条规则。如果发现某个报错引用的规则名是Clearance默认名而不是你自己建的那条说明你的规则优先级排错了这是最隐蔽的一类错误。5.3 我踩过的坑和对应的检查动作第一个坑是差分对从原理图同步后消失了。原因是原理图里网络名没有按约定的后缀写或者差分对指示符没放对位置。检查动作每次 Update PCB 之后切到 PCB 面板的 Differential Pairs Editor 模式数一下对数对不对。第二个坑是铜皮重新铺完之后 DRC 突然冒出一堆间距报错。原因是铜皮的优先级或者 Rebuild 顺序问题铺完铜要全选铜皮右键 Repour All然后再跑一次 DRC。这个动作我现在已经写进了出图前的固定流程。第三个坑是导入别的项目的 RUL 之后原来的规则被覆盖了一部分。RUL 导入默认是追加还是替换不同版本表现不一样导入前一定要先备份当前的规则再导出一份导入后逐条核对。第四个坑是 Width 规则的 Max 值卡得太死。有次做电源板PWR 类 Max 设了 1mm结果从连接器到 MOS 管那段需要 3mm 宽的汇流走线一拉就报错。现在我的做法是 Max 一律放开到远大于实际需要的值靠 Min 值守底线靠人工把关上限。最后分享一个小技巧。规则列表其实可以右键生成报告把整个规则树导成一个 HTML 或文本文件。我在出图交付之前会生成一份和 PCB 文件一起放进项目归档。下次有人问这块板的线宽是按多少设计的翻一下报告就有答案比打开工程翻规则快得多。这个习惯让我省了不少事后解释的力气——毕竟规则文件本身不显眼但它才是一块板子真正的设计约束记录。