1. 为什么“全绿”反而最危险:从一次真实的翻车说起
DRC 全绿,板子回来却点不亮。这种事我经历过不止一次,每次都是打样费加急费外加一周的调试时间打了水漂。最让人难受的不是钱,而是你明明看着软件里那个绿色的对勾,心里踏实得不行,结果拿到实物一上电,要么某个芯片发烫,要么信号死活出不来,要么连接器根本插不进去。你回头再打开工程文件,DRC 依然是绿的,规则检查一条报错都没有。
问题出在哪?出在DRC 只检查你告诉它要检查的东西。它检查的是“设计规则”,不是“设计意图”。线宽够不够、间距够不够、过孔有没有超出边界,这些它管;但你的封装引脚定义对不对、原理图和 PCB 的引脚映射有没有错位、机械结构和电气连接有没有冲突,它一概不管。换句话说,DRC 是一个严格执行命令的士兵,但你给的命令本身就是错的,它也会一丝不苟地执行到底,然后告诉你“一切正常”。
这篇文章要聊的就是四个典型的“DRC 全绿但板子必错”的场景。这些坑在 KiCad、Altium Designer、嘉立创 EDA、Cadence Allegro 里都会遇到,只是表现形式不同。无论你是刚画完第一块板子的新手,还是已经做过几十款产品的老手,这四个错误都值得你逐条对照检查。因为它们的共同特点是:软件不会报错,但硬件一定会出问题。
我先把这四个错误的轮廓勾出来,后面再逐个拆解。第一,封装引脚编号和原理图符号引脚编号不匹配,这是最隐蔽也最致命的一类;第二,DRC 规则设置过松,导致实际制造无法实现;第三,机械层与电气层脱节,板子装不进外壳或者螺丝孔短路;第四,Gerber 导出参数错误,软件里看着没问题,工厂拿到文件却做不出来。这四个问题有一个共同点:它们都发生在 DRC 的盲区里。
提示:DRC 通过不等于设计正确。DRC 是底线检查,不是完整性检查。每次发板前,必须有一套独立于 DRC 的人工复核流程。
2. 错误一:封装引脚编号与原理图符号错位
2.1 这个错误为什么 DRC 查不出来
DRC 检查的是 PCB 上的物理关系:走线间距、线宽、过孔环宽、铜皮到板边的距离。它不关心你 PCB 上这个三脚器件的焊盘,在原理图里对应的是哪三个网络。KiCad 的 DRC 不会去比对原理图符号的引脚编号和 PCB 封装的焊盘编号是否一致,Altium 的 Design Rule Check 同样不管这件事。嘉立创 EDA 的检查也集中在物理规则上。
结果就是:你的原理图里一个 SOT-23 封装的 MOS 管,引脚 1 是栅极、引脚 2 是源极、引脚 3 是漏极。但你用的 PCB 封装,焊盘编号可能是 1 是栅极、2 是漏极、3 是源极。原理图导入 PCB 时,网络按照引脚编号一一对应连接,DRC 检查走线间距全部合格,板子做出来,MOS 管的漏极和源极接反了。上电一瞬间,要么管子直接烧掉,要么电路功能完全异常。
这种错误在分立器件上尤其常见,因为不同厂家、不同封装库对同一个 SOT-23 的引脚定义可能不同。你从网上下载的封装库,和你自己画的原理图符号,引脚编号映射关系很可能不一致。
2.2 一个真实的案例:RS485 收发器引脚错位
我之前做过一块 RS485 隔离收发板,用的是一款常见的隔离型 RS485 芯片。原理图符号是我自己画的,按照数据手册的引脚定义:引脚 1 是 VCC1,引脚 2 是 GND1,引脚 3 是 RXD,引脚 4 是 RE,引脚 5 是 DE,引脚 6 是 TXD,引脚 7 是 GND2,引脚 8 是 VCC2。PCB 封装用的是从供应商官网下载的参考库。
导入 PCB 后,DRC 全绿,走线也全部连通。板子回来一上电,隔离侧没有输出。我查了半天,最后拿万用表一个一个引脚对,发现供应商的封装库把引脚 4 和引脚 5 的定义搞反了——RE 和 DE 互换了。DRC 不会告诉你这个,因为网络连接关系是按照引脚编号建立的,编号对上了,网络就通了,但物理引脚的功能错了。
这个问题的排查成本极高,因为你首先会怀疑电路设计、怀疑芯片本身、怀疑电源,最后才会想到去核对封装引脚。而那时候已经浪费了大量时间。
2.3 如何系统性地避免引脚映射错误
我的做法是建立一套“三对照”流程。第一步,原理图符号画完后,对照数据手册的引脚定义表,逐个核对引脚编号、名称、类型(输入/输出/电源/地)。第二步,PCB 封装画完或下载后,对照数据手册的封装尺寸图和推荐焊盘布局,逐个核对焊盘编号和位置。第三步,原理图导入 PCB 后,不要急着布线,先用“交叉探测”功能,在原理图里点一个引脚,看 PCB 里高亮的是不是对应的焊盘。
KiCad 里可以用“工具 -> 交叉探测”来实现,Altium 里是“Tools -> Cross Select Mode”。嘉立创 EDA 也有类似的功能。这一步花不了五分钟,但能拦住绝大多数引脚映射错误。
另外,对于关键器件,我建议在 PCB 上放一个丝印标注,比如在 MOS 管旁边标上“G/S/D”,在连接器旁边标上“Pin1”。这样即使焊接时也能快速核对。丝印不占额外成本,但能救命。
注意:从网上下载的封装库,尤其是非官方渠道的,必须逐引脚核对。我遇到过不止一次封装库焊盘编号错位、焊盘尺寸偏差过大的情况。
2.4 封装继承与多态在 PCB 设计中的类比
热词里出现了“封装继承多态”,这其实是软件工程的概念,但在 PCB 设计里也有类似的逻辑。你可以把“原理图符号”理解为一个接口定义,它规定了引脚编号和功能;把“PCB 封装”理解为一个实现类,它规定了物理尺寸和焊盘位置。两者必须严格对应,否则就是“接口实现不一致”。
在 KiCad 里,一个符号可以关联多个封装,比如一个电阻符号可以关联 0603、0805、1206 三种封装。这类似于“多态”——同一个接口,不同的物理实现。但前提是,这些封装的焊盘编号必须和符号的引脚编号一致。如果 0603 封装的焊盘编号是 1 和 2,符号的引脚编号也是 1 和 2,那没问题;但如果某个封装的焊盘编号是 A 和 B,那就对不上了。
所以,每次给符号关联新封装时,都要确认焊盘编号的映射关系。KiCad 在“符号属性 -> 封装”里可以查看和编辑这种映射,Altium 在“原理图库 -> 引脚映射”里也有对应的设置。
3. 错误二:DRC 规则设置过松,制造端无法实现
3.1 默认规则为什么不够用
KiCad 的默认 DRC 规则里,最小线宽通常是 0.2mm,最小间距 0.2mm,最小过孔直径 0.6mm,最小过孔环宽 0.1mm。这些参数对于很多常规板厂来说是可以做到的,但问题是:你的板厂能做到,不代表你的设计意图能被正确实现。
举个例子,你设了最小线宽 0.2mm,然后电源走线也用了 0.2mm。DRC 不会报错,因为规则允许。但实际电流需要 1A,0.2mm 的线宽在 1oz 铜厚下大概只能承载 0.5A 左右,长时间工作会发热甚至烧断。DRC 只管“能不能做出来”,不管“做出来能不能用”。
再比如,你设了最小间距 0.2mm,然后两根信号线之间刚好 0.2mm。DRC 通过。但板厂在蚀刻过程中,由于工艺偏差,实际间距可能变成 0.15mm,导致短路或者阻抗异常。DRC 不会考虑工艺余量。
3.2 线宽与电流的对应关系
热词里出现了“pcb 线径和电流”,这是每个 PCB 工程师都必须掌握的基本功。我一般用这个经验公式来估算:对于 1oz 铜厚(约 35μm),外层走线,温升 10°C 的情况下,1A 电流大约需要 0.4mm 线宽;2A 需要 0.8mm;3A 需要 1.2mm。如果温升允许 20°C,线宽可以适当减小,但余量要留足。
内层走线因为散热条件差,同样的电流需要更宽的线。一般来说,内层线宽要比外层大 50% 左右。比如外层 1A 用 0.4mm,内层 1A 就要用 0.6mm。
对于电源走线,我通常会在计算值的基础上再留 50% 到 100% 的余量。比如计算出来 1A 需要 0.4mm,我会用 0.6mm 到 0.8mm。多出来的铜面积不花额外成本,但能显著降低温升和压降。
3.3 过孔与环宽的选择
热词里还有“一般 pcb 中 m2 螺丝孔留多大过孔和环宽”,这个问题很具体。M2 螺丝的直径是 2mm,螺丝孔通常留 2.2mm 到 2.4mm 的孔径,具体取决于螺丝公差和装配精度。如果是金属螺丝,还需要考虑螺丝头与周围铜皮的间距,避免短路。
对于过孔,我一般用 0.3mm 孔径配 0.6mm 焊盘,环宽 0.15mm。这是大多数板厂的标准工艺,成本最低。如果需要更小的过孔,比如 0.2mm 孔径,环宽 0.1mm,那就属于“微孔”范畴,成本会上升,而且不是所有板厂都能做。
DRC 里设置过孔规则时,要注意“最小环宽”这个参数。环宽太小,钻孔偏移时可能钻到焊盘外面,导致断路。我一般设最小环宽 0.13mm,这是大多数板厂的工艺底线。
3.4 如何根据板厂工艺调整 DRC 规则
我的做法是:在画板之前,先确定板厂,然后去板厂官网下载他们的“工艺能力表”。嘉立创、华秋、捷配这些国内主流板厂都有公开的工艺参数。把他们的最小线宽、最小间距、最小过孔、最小环宽等参数,填入 DRC 规则里,并且在此基础上留 20% 到 30% 的余量。
比如板厂说最小线宽 0.1mm,那我在 DRC 里设 0.15mm;板厂说最小间距 0.1mm,我设 0.15mm。这样即使工艺有波动,也不会超出板厂的能力范围。
另外,对于阻抗控制的走线,比如 USB、HDMI、以太网,不能只看线宽和间距,还要考虑层叠结构和铜厚。热词里出现了“lan8720 pcb 设计”和“usb3.0 9pin pcb 布线图”,这些高速信号对阻抗匹配要求很高。我一般会用板厂提供的阻抗计算工具,或者用 KiCad 自带的“PCB Calculator”来算。
提示:DRC 规则不是越严越好。规则太严,会导致大量误报,反而让你忽略真正的错误。规则太松,又拦不住问题。关键是“匹配板厂工艺 + 留合理余量”。
4. 错误三:机械层与电气层脱节
4.1 板子装不进外壳的经典场景
DRC 只检查电气层,不检查机械层。你的板子电气上完全正确,但连接器位置偏了 2mm,外壳装不上;或者螺丝孔位置对了,但孔径太小,螺丝拧不进去;或者板边到最近走线的距离不够,安装时螺丝刀碰到走线导致短路。
我遇到过最离谱的一次是:板子画完后,DRC 全绿,发出去打样。板子回来,发现 USB 连接器离板边太近,插线时插头会碰到外壳边缘,根本插不到底。原因是画 PCB 时只考虑了电气连接,没有考虑连接器插头的物理尺寸和插拔空间。
还有一次,螺丝孔周围铺了铜皮,DRC 没报错,因为铜皮到孔壁的距离满足电气间距要求。但实际装配时,金属螺丝拧进去,螺丝头压到铜皮,把电源短路了。DRC 不会检查“螺丝头会不会碰到铜皮”,因为它不知道你会用什么螺丝。
4.2 机械层的正确使用方法
在 KiCad 里,机械层通常用“Edge.Cuts”来定义板框,用“User.Drawings”或专门的机械层来标注螺丝孔、连接器位置、外壳边界。Altium 里有专门的“Mechanical Layer”,嘉立创 EDA 也有类似的层。
我的习惯是:在画电气层之前,先把机械结构画好。具体来说,第一步,根据外壳或安装要求,画出板框和螺丝孔位置。第二步,标注连接器的位置和方向,确保插拔空间足够。第三步,标注禁止布线区,比如螺丝孔周围、板边一定范围内、连接器下方等。第四步,再开始画电气走线。
这样做的目的是:让机械约束成为电气设计的“边界条件”,而不是事后检查。DRC 不会帮你检查这些,但你可以通过“禁止布线区”来强制约束走线。KiCad 里可以用“Keepout Area”来实现,Altium 里可以用“Keepout”或“Polygon Pour Cutout”。
4.3 螺丝孔与安装孔的细节处理
热词里出现了“一般 pcb 中 m2 螺丝孔留多大过孔和环宽”,我再展开说一下。M2 螺丝孔,如果是非金属螺丝,孔径留 2.2mm 就够了;如果是金属螺丝,孔径留 2.4mm,并且孔周围至少 1mm 范围内不能有铜皮和走线。如果是沉头螺丝,还要考虑沉头深度和直径。
对于安装孔,如果不需要电气连接,最好做成“非金属化孔”,也就是孔壁没有铜。这样即使螺丝碰到孔壁,也不会短路。KiCad 里在焊盘属性里选“NPTH”(Non-Plated Through Hole)就行。Altium 里也有对应的“Non-Plated”选项。
如果需要金属化孔作为接地连接,那就要确保孔周围的铜皮与螺丝头有良好的接触,同时避免短路到其他网络。我一般会在螺丝孔周围做一个“接地焊盘”,但焊盘外径要比螺丝头大,并且与周围铜皮保持足够间距。
4.4 圆形 PCB 的特殊注意事项
热词里出现了“圆形 pcb”,这种板子机械层和电气层的配合更麻烦。圆形板框在 KiCad 里用圆弧画,但 DRC 对圆弧的检查有时候不够精确。我遇到过圆形板边到走线距离 DRC 显示合格,但实际板厂铣边时刀具半径导致实际板边内缩,走线被切到。
所以,对于圆形 PCB,我一般会把板边到最近走线的距离留到 0.5mm 以上,而不是 DRC 允许的 0.2mm。另外,圆形板的拼板方式也需要注意,V-CUT 不适合圆形板,通常用邮票孔或者桥连。这些机械细节,DRC 一概不管。
5. 错误四:Gerber 导出参数错误
5.1 Gerber 导出为什么容易出错
Gerber 是 PCB 制造的标准格式,但导出 Gerber 时的参数设置非常关键。单位选错了(英寸 vs 毫米)、格式选错了(RS-274X vs RS-274D)、层选错了(少导了一层、多导了一层)、钻孔文件格式不对,这些都会导致工厂拿到的文件和你软件里看到的不一样。
DRC 是在 PCB 工程文件里跑的,它检查的是工程文件的数据。但工厂拿到的是 Gerber 文件,是工程文件经过“导出”这个转换过程后的结果。如果导出参数错了,DRC 再绿也没用,因为工厂看到的和你看的不是同一个东西。
我遇到过最典型的一次是:导出 Gerber 时忘了勾选“包含板框层”,工厂拿到文件后不知道板子多大,打电话来问。还有一次,钻孔文件用了英制单位,工厂按公制解读,孔位全部偏移。
5.2 Gerber 导出的标准流程
在 KiCad 里,导出 Gerber 的流程是:“文件 -> 制造输出 -> Gerber”。我一般会按以下参数设置:
- 单位:毫米
- 格式:RS-274X
- 精度:4.6(整数 4 位,小数 6 位)
- 层:至少包含 F.Cu、B.Cu、F.SilkS、B.SilkS、F.Mask、B.Mask、Edge.Cuts
- 钻孔文件:单独导出,单位毫米,格式 Excellon
Altium 里是“文件 -> 制造输出 -> Gerber Files”,参数类似。嘉立创 EDA 里是“导出 -> Gerber”,流程更简化,但也要注意层选择。
导出完成后,我强烈建议用 Gerber 查看器(比如 KiCad 自带的 Gerber Viewer,或者在线工具)打开检查一遍。重点看:板框是否完整、丝印是否清晰、阻焊开窗是否正确、钻孔位置是否对得上。这一步花五分钟,能拦住绝大多数导出错误。
5.3 阻焊层与丝印层的常见问题
阻焊层(Mask Layer)定义的是“哪里不盖绿油”,也就是需要露铜的地方。如果你在焊盘上忘了开阻焊,焊盘会被绿油盖住,焊不上锡。DRC 不会检查这个,因为它只管电气连接,不管焊接工艺。
丝印层(Silkscreen Layer)定义的是文字和图形。如果丝印压到焊盘上,焊接时丝印油墨会影响焊锡润湿,导致虚焊。DRC 通常不会报丝印压焊盘的错误,但有些软件可以设置“丝印到焊盘间距”规则。我一般会手动检查一遍,确保丝印不压焊盘、不压过孔。
另外,丝印的线宽不能太细,否则工厂印不出来。我一般用 0.15mm 到 0.2mm 的丝印线宽,最小不低于 0.12mm。字符高度不低于 0.8mm,否则看不清。
5.4 BOM 文件与坐标文件的导出
热词里出现了“kicad 生成 bom 文件”和“cadence pcb 怎么导出 bom 表”,BOM 和坐标文件是给工厂做贴片用的。BOM 里要有位号、型号、封装、数量;坐标文件里要有位号、X 坐标、Y 坐标、旋转角度、层。
这两个文件如果出错,贴片厂就会贴错料或者贴偏。我遇到过 BOM 里型号写错,导致贴片厂贴了错误的芯片;也遇到过坐标文件旋转角度不对,导致芯片方向反了。这些错误 DRC 都不管,但后果很严重。
我的做法是:导出 BOM 和坐标文件后,用 Excel 打开,逐项核对位号、型号、封装、坐标。特别是对于有极性的器件(二极管、电解电容、芯片),要确认旋转角度和方向标记。
注意:Gerber、BOM、坐标文件是三个独立的输出,每个都要单独检查。不要以为 Gerber 没问题,BOM 就没问题。
6. 四个错误的快速自查清单
6.1 发板前的必查项
每次发板前,我都会过一遍这个清单。你可以直接抄作业:
| 检查项 | 检查方法 | 常见问题 |
|---|---|---|
| 引脚映射 | 交叉探测逐个核对 | 封装焊盘编号与符号引脚编号不一致 |
| 线宽电流 | 按 1A/0.4mm 估算,留余量 | 电源线太细,发热或压降过大 |
| 过孔环宽 | 最小环宽 0.13mm | 环宽太小,钻孔偏移导致断路 |
| 机械配合 | 1:1 打印板框,实物比对 | 连接器位置偏、螺丝孔干涉 |
| 禁止布线区 | 螺丝孔、板边、连接器下方 | 走线太靠边,装配时短路 |
| Gerber 层 | Gerber 查看器逐层检查 | 少导层、单位错误、格式错误 |
| 阻焊开窗 | 检查焊盘是否露铜 | 焊盘被绿油盖住,焊不上 |
| 丝印压焊盘 | 目视检查 | 丝印压焊盘,导致虚焊 |
| BOM 型号 | 逐项核对 | 型号写错,贴错料 |
| 坐标文件 | 核对位号、坐标、角度 | 旋转角度错,器件贴反 |
6.2 我的个人经验:三次发板,三次检查
我现在的习惯是:画完 PCB 后,不急着发板。第一天,跑 DRC,改到全绿。第二天,过一遍上面的自查清单,重点核对引脚映射和机械配合。第三天,导出 Gerber、BOM、坐标文件,用查看器检查一遍,然后才发给工厂。
这三天不是连续三天,中间可以隔几天,让自己冷静一下。因为画板的时候容易陷入“局部正确”的思维定式,隔几天再看,往往能发现之前忽略的问题。我至少有三次是在“第三天检查”时发现了引脚映射错误或者机械干涉,避免了打样失败。
6.3 常见问题速查表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 板子点不亮 | 电源引脚接反、芯片方向错 | 万用表测电源引脚电压、核对芯片方向 |
| 某个功能异常 | 信号引脚映射错 | 交叉探测核对引脚、示波器测信号 |
| 芯片发烫 | 电源短路、引脚接错 | 断电测阻抗、核对引脚定义 |
| 连接器插不进 | 机械位置偏、孔径小 | 1:1 打印比对、卡尺测孔径 |
| 螺丝孔短路 | 孔周围有铜皮 | 检查禁止布线区、改用非金属化孔 |
| 工厂说文件有问题 | Gerber 层缺失、单位错 | Gerber 查看器逐层检查、确认单位 |
| 贴片贴反 | 坐标文件角度错 | 核对坐标文件、确认器件方向标记 |
| 焊盘焊不上 | 阻焊没开窗 | 检查阻焊层、确认焊盘露铜 |
7. 从“DRC 全绿”到“板子能用”的思维转变
7.1 DRC 是工具,不是保证
我刚开始画板的时候,特别依赖 DRC。每次看到全绿,就觉得万事大吉。后来踩的坑多了,才明白 DRC 只是一个“语法检查器”,它检查你的设计是否符合规则,但不检查你的规则是否符合意图。就像写代码,编译器不报错,不代表程序逻辑正确。
真正的保证来自于你对电路的理解、对器件的了解、对工艺的熟悉。DRC 能帮你拦住 80% 的低级错误,但剩下的 20% 才是真正考验功力的地方。而这 20% 里,引脚映射、机械配合、Gerber 导出、规则设置,是最容易出问题的四个点。
7.2 建立自己的检查清单
每个工程师都应该有自己的检查清单。这份清单不是从网上抄的,而是从自己踩过的坑里总结出来的。我现在的清单里,每一条都对应着一次真实的翻车经历。比如“核对封装引脚映射”这一条,就是因为 RS485 芯片引脚错位那次加进去的;“检查螺丝孔周围禁止布线”这一条,就是因为螺丝短路那次加进去的。
你也可以这样做:每次板子出问题,解决之后,把问题和解决方法记下来,加到自己的检查清单里。时间长了,这份清单就是你最宝贵的经验财富。
7.3 工具选型的建议
热词里出现了很多工具名:KiCad、Altium Designer、嘉立创 EDA、Cadence Allegro。每个工具都有自己的优缺点。KiCad 免费开源,适合个人和小团队;Altium 功能强大,适合专业设计;嘉立创 EDA 上手快,适合快速打样;Allegro 适合高速高密度设计。
但无论用什么工具,上面说的四个错误都可能发生。工具只是工具,关键还是设计者的思维和流程。我见过用 KiCad 画出非常专业的板子的工程师,也见过用 Allegro 画出引脚映射错误的板子。工具不能替代思考。
7.4 最后分享一个小技巧
每次发板前,把 PCB 的 3D 视图打开,转一圈看看。KiCad 和 Altium 都有 3D 预览功能。这一步能发现很多 2D 视图下看不到的问题:连接器方向对不对、器件高度会不会干涉、螺丝孔位置合不合理。我至少有两次是在 3D 视图里发现连接器方向画反了,避免了打样失败。
3D 视图不需要精确的器件模型,哪怕只是简单的立方体,也能帮你判断空间关系。这个习惯花不了几分钟,但能拦住很多机械层面的错误。