1. 规则全绿那天,我以为自己已经是硬件工程师了
到现在我都记得第一次投板时的心理状态——躺在宿舍床上反复刷新物流信息,脑子里全是绿色对勾:PCB的DRC(设计规则检查)全部通过,原理图和网表核对过,每个网络的飞线都消掉了,规则检查窗口里干干净净什么都没有。那时候我真觉得,自己已经从"会画原理图的学生"进化成了"搞得定硬件的人"。
结果板子到手,焊了三个小时,上电之后我盯着示波器上那一条乱跳的波形看了很久——ADC读数不是稳定值,而是在两个数字之间来回飘;3.3V供电线上纹波大到肉眼能分辨,芯片摸上去温热;程序下载偶尔成功偶尔失败,串口打印到一半就断掉。最讽刺的是,整块板子的DRC报告到那一刻仍然是零错误。
这篇文章就是写给第一次投板的本科生的:不管你是用Altium Designer、嘉立创EDA、Cadence Allegro还是PADS,DRC全绿都只代表你的图"符合了规则库里写下的几何约束",离"这块板子插上电就能正常工作"还有一整条河的距离。我会把我第一次真正做PCB踩过的坑、后来做电源板和混合信号板子时反推出来的原理、以及现在每次投板前必做的检查流程,完完整整讲一遍。
为什么这个topic值得单独拎出来聊?因为"DRC通过"这件事太容易让人膨胀了。它绿得那么确定,你会下意识默认板厂做出来的东西和你画的一模一样、默认所有引脚都会按预期工作。然而DRC连"这条线要过多少个安培的电流"都不知道,更不知道"这个电容必须离芯片引脚多近""这条时钟线下方不能有裂缝"。它只是一个几何规则的守门员,不是电气性能的裁判。
下面我从我那块充满问题的小板子开始讲,把自己当年的排查过程拆开。你会发现,每一个坑都不是"原理图画错"这种低级错误,而是DRC根本管不到的维度。
2. 上电三分钟,DRC给不了你的教训全来了
第一版板子的故事值得讲完整,因为这一版集齐了很多新手会遇到的典型问题——电源、地、时钟、工艺,一个都没落下。
2.1 第一个教训:限流上电和短路预检,比DRC重要得多
板子到手那天,我的操作顺序跟很多新手一模一样:拍照、发朋友圈、然后直接插USB。插上去电脑没有识别到设备,我下意识用手去摸芯片——立马缩手,STM32烫得吓人。后来用万用表一量,电源网络里有虚焊和连锡导致的局部短路,电流没有限制,芯片直接被干到高温。
以后再也没犯过这个错。现在的流程是先拿万用表蜂鸣档量电源网络对地电阻,确认不是0Ω;再从直流电源限流上电,比如先限制100mA,观察电流是否异常,再慢慢往上加。这个习惯花不了两分钟,但能挡住九成"新板子首上电翻车"。DRC管的是你的设计文件,它不检查你的焊接水平,也不管焊盘之间有没有被焊锡桥接——而实物上电之后,这些全都变成电气问题。
2.2 ADC读数乱跳:去耦电容放得远,环路电感在背后捅刀
上电稳定之后,问题开始浮现。板载ADC采集一个分压电阻的电压,理论上是稳定值,实际读数像心电图一样在正负几十个码值之间晃动。我把示波器探到3.3V电源上,纹波大概400mV pk-pk,里面带着明显的开关频率分量——板子上有一颗MP1584降压芯片。
检查布局之后发现问题很典型:我给每个芯片的电源引脚都放了100nF去耦电容,位置却"差不多就行"。离引脚最远的电容大约有1cm,更糟的是电容的过孔打在了电容外侧,电流路径变成了"从过孔出来,绕到电容,再绕回引脚"。这个环路的寄生电感非常大,高频噪声根本压不住,降压芯片的开关噪声直接通过这条高阻抗路径灌进了模拟供电。
DRC不查这些东西。它只关心100nF电容的两个焊盘之间距离够不够、走线宽度够不够,不关心这个电容和它要服务的芯片组成的高频回路是不是一个"大电磁铁"。
2.3 STM32反复重启:时钟线跨过了地平面裂缝
第三个问题最隐蔽:程序经常跑着跑着就复位,串口打印到一半断掉。一开始怀疑是电源问题,给MCU单独加了LDO和磁珠隔离还是偶发。后来我把PCB文件调出来翻,发现8MHz晶振的两根走线正下方,地平面被一道很长的挖空劈成了两半——我在AD20里给一块模拟区域做了覆铜挖空(keepout),本意是"把数字地跟模拟地分开",结果挖空区域正好延伸到了晶振走线下方。
原理其实很朴素:晶振信号的回流电流本来应该紧贴着信号走线正下方的地平面流回驱动端,结果地平面被挖断了,回流只能绕一大圈,环路面积瞬间翻了好几倍。地电位在晶振引脚两端不再一致,时钟边沿抖动被放大,系统反复复位也就不奇怪了。
这是"铜皮挖空"最容易被误用的场景。很多新手为了隔离噪声在连续地平面上开洞,殊不知地平面的价值恰恰在于"连续"。任何一条高速或时钟信号跨过裂缝,结果都比不挖空时糟糕得多。我后来养成了一个习惯:地平面上的每一道挖空,都要问一遍"这里真的需要挖吗?挖了之后有没有信号线从上方跨过去?"
2.4 插不进去的排针和看不清的丝印:DRC不管"实物"
还有两个跟电气无关却非常真实的坑。板上一颗2.54mm排针的孔径我画成了0.9mm,DRC通过——大于最小孔——但实际买来的排针针脚是1.02mm见方的,插不进去,只能手动扩孔,还差点把焊盘弄掉。另一个是丝印,我把极性电容的"+"号和芯片1脚标记字号调得太小,丝印线宽只有0.1mm,板厂丝印打出来全是毛边,焊接时真有一块电容方向焊反,上电就冒了烟。
这两个问题的共性是:DRC的所有规则都基于"设计文件内部的一致性",它不读实物尺寸、不读器件手册里引脚截面是多少、也不管板厂丝印工序最小能印多粗的线。
3. 根因拆解:规则查几何,板子讲物理
把故障列完之后,退一步看本质。DRC全称Design Rule Check,查的是设计规则:间距、线宽、孔径、环形焊盘、走线到板边的距离、丝印到焊盘的距离……这一堆东西有一个共同点——都是几何参数,都是可测量的空间关系。它不关心这条网络在原理图里是什么信号,不关心它上面跑的电流有多大、频率有多高、旁边有没有干扰源。
我后来给师弟师妹讲的时候打了个比方:DRC及格就像科目二考过了,它证明你会在固定场地里完成规定动作,不代表你能上高速公路处理复杂车流。下面几个维度是DRC几乎完全失明、但决定板子能不能用的关键。
3.1 电流与线宽:0.3mm走线到底能过多少电流
第一个经常被忽略的物理量是电流承载能力。很多同学走电源线时习惯跟信号线一样用0.3mm,DRC只要不低于最小线宽就放行。但0.3mm走线能过多少电流,不是拍脑袋定的,工程上常用IPC-2221的经验公式估算:
外层走线电流 I = 0.048 × ΔT^0.44 × A^0.725,内层系数取0.024。其中A是走线截面积(铜厚乘线宽,单位mil²),ΔT是允许温升(摄氏度)。我算几个常见值,条件是1oz(35µm)铜厚:
| 线宽 | 外层10°C温升 | 内层10°C温升 | 20°C温升(外层) |
|---|---|---|---|
| 0.2mm | 约0.74A | 约0.37A | 约1.0A |
| 0.3mm | 约1.0A | 约0.5A | 约1.35A |
| 0.5mm | 约1.44A | 约0.72A | 约1.95A |
| 1.0mm | 约2.38A | 约1.19A | 约3.23A |
注意这组数字的前提是"短走线、无其他热源、没有多根走线聚集"。现实里,0.3mm外层走线跑1A问题不大,但如果放在内层、或者旁边一排线都在发热、或者电源网络要过2A,那它就不够了。再算电阻:0.3mm/1oz的走线每厘米大约16.4mΩ,10cm长的2A供电线会掉330mV——3.3V系统里这几乎是10%的损失,芯片可能直接欠压复位。
我的习惯是:电源正负走线至少1mm起步,负载大的网络直接铺铜或多打过孔,关键电源用2oz铜厚。功率路径上别依赖"看起来还挺宽"的走线,要用公式或工具算一遍。
3.2 回流路径:电流永远会回来,你控制不了它绕多大圈
另一个抽象但极其重要的概念是回流路径。数字信号从来不是只从输出脚流到输入脚,电流必须形成闭合回路。它会从输入引脚附近的参考平面、再通过某个路径回到驱动器。高速情况下,回流电流会自动选择阻抗最低的路径——而最低阻抗的路径,通常是紧贴信号走线正下方的参考平面,也就是地平面或电源平面。
如果你在地平面上挖了一条长槽,或者把信号走线布在毫无参考层的区域,回流电流就只能绕远路。环路面积一大,问题接踵而至:发射噪声变大(EMI变差)、接收外界干扰的能力变强、地电位在不同位置产生压差,最终表现为信号抖动、误码、复位。
地平面连续、完整,是所有布线规则的根基。我见过太多人为了"隔离"在地平面上打洞,结果整块板性能崩掉。正确的做法是:模拟和数字可以在平面上用不同区域摆器件,但不要在地平面上物理切槽。真要分割,也要保证所有跨分割的信号下方有完整的回流通道。回到我那块板子的教训:晶振走线下方的那道坑,就是一次典型的"好心办坏事"。
3.3 去耦电容摆位:拼的不是容量,是环路面积
去耦电容的摆放是"几何决定性能"最典型的例子。电容本身有寄生电感,焊盘、过孔、走线还会贡献额外电感。当芯片内部电路瞬间抽取电流时,去耦电容必须在纳秒级的时间里把电荷送进电源引脚;这个过程能不能做到,取决于"芯片电源脚—电容—返回芯片地脚"这个环路里所有寄生电感的总和。
摆放的黄金顺序是:芯片电源引脚,然后紧贴引脚的电容,再过孔落到底层或内层电源/地平面。电容到引脚的距离越短越好。外置电容的过孔要尽量放在电容的外侧,而不是芯片和电容之间,这样电流才会先穿过电容再到引脚,高频回路才最小。多频段去耦(100nF+10µF)时,小电容要放得比大电容更靠近芯片,因为小电容负责高频,它对环路电感更敏感。
我是后来做反激式开关电源PCB时才真正理解这件事的:电源的功率环路(输入电容—开关管—变压器原边)面积如果太大,开关节点的高dv/dt会辐射出大量噪声,整块板的模拟部分全被打烂。DRC认为0.7mm的间距和2mm的间距没有本质区别,但物理世界知道,这两者的环路面积差了好几倍。
3.4 时钟与混合信号:噪声会藏在你看不见的相位里
ADC/DAC这类混合信号电路是重灾区,也是很多本科生第一次做板子最想挑战又最容易被打击的部分。这里面最容易被忽视的是时钟和电源的耦合。时钟抖动过大,ADC采样点发生的时间随机漂移,表现为信噪比下降、输出码值晃动;而电源噪声可以通过时钟器件内部电路调制到输出相位上。
对于ADC/DAC相关的PCB布局,我总结了三个要点,都是DRC管不着的:
第一,时钟源和时钟走线要远离开关电源、电感、开关节点这类高dv/dt区域,也要避开在头顶走线的垂直投影面。
第二,时钟线和模拟信号线的下方参考平面必须完整,中途尽量不换层;如果必须打过孔,旁边要补地过孔。
第三,给时钟供电单独加LC滤波或独立LDO,避免和数字电路共用一个噪声很大的电源网络。
这些原则看似玄学,其实全是物理:时域上的抖动来自相位噪声和电源耦合,频域上表现为靠近载波的噪声基底抬高。第一次做板子不需要完全用公式推导,但布局阶段就要把"时钟是敏感线,功率是污染源"这个观念立起来。有了这个观念,你回头看很多参考设计的摆件位置,就能看出门道了。
4. 板厂没有义务替你想的事:藏在工艺角落的潜规则
这一节讲的是"你的板子最终不是由设计软件造出来的,是板厂造出来的"。DRC检查的是设计文件,板厂手里是另一套工序逻辑:压合、钻孔、曝光、蚀刻、丝印、阻焊。很多设计文件里的东西,转换到实物时会有"翻译损耗"。
4.1 Gerber才是投板的"最终契约",别只盯着工程文件
很多新手以为把工程文件发给板厂就行了,其实常规流程是导出Gerber和钻孔文件,板厂按Gerber生产。Altium Designer、嘉立创EDA、Cadence Allegro都有导出向导,但有几类坑要特别小心。
负片平面层是Allegro用户最常翻车的地方:用负片画的电源层和地层,如果导出设置不对,整层铜皮可能变成"没有",地全断了但DRC完全正常,板厂照做,回来整片地是断的。这种事故我听说过不止一次。导出之后,一定要用Gerber查看器逐层检查:每一层是否都出来了?钻孔文件是否和孔径表对得上?阻焊层有没有把不该开窗的地方开窗?
热词里"gerber文件转成pcb文件"被搜得很多,我猜大家是想把板厂发来的确认文件转回来看一眼。实际上更常见且更正确的流程是"PCB工程导出Gerber,板厂拿到Gerber生产,再回传Gerber预览确认"。不管方向如何,核心是:投板前审查Gerber,而不是抱着工程文件想当然。我自己见过有人在AD里把某个内层设成不导出,结果整块板电源内层消失,板厂也没提醒——因为它按文件执行,不背这个锅。
4.2 层叠、铜厚与阻抗:不提要求,板厂就按默认做
四层板默认是1.6mm厚,但层间介质厚度直接决定50Ω单端、90Ω USB、100Ω差分信号的实际阻抗。你不提阻抗控制,板厂就按默认叠构做,出来的走线特性阻抗可能完全不在你的信号需求范围内。设计阶段就要决定:哪些网络需要阻抗控制,投板前向板厂要叠构表,按叠构倒推线宽线距。
电源板还要注意铜厚。1oz是常用默认,大电流电源建议2oz。内层走大电流要特别注意,因为内层散热差,载流能力基本是外层的一半,前面表格里的内层系数0.024已经体现了这个关系。就算DRC允许你0.3mm走2A,物理上它也撑不住。
4.3 钻孔不是一句话:孔径、厚径比、槽孔各有讲究
板厂钻孔工序有个"厚径比"概念:板厚与最小孔径的比值,一般超过8:1就要加钱或做不了。厚径比不足时,过孔内电镀铜可能镀不饱,电流一大,过孔内部直接断裂。所以大电流过孔宁可多打几个并联,也别让一个孔扛所有电流。
还有那类槽孔和开槽:如果要在板框上开半孔,或者板内开长槽,要明确标注是NPTH(非金属化孔),否则板厂默认做成金属化孔,可能跟附近的内部走线短路。PADS里画板框开槽、Allegro里做板框槽孔时,都要在制造说明里写清楚,别指望板厂替你猜。
排针、接插件这种需要插实物的孔径,一定先去查器件手册的引脚直径,留0.2到0.3mm余量。我那个0.9mm孔径的教训就是没查手册——DRC通过了,实物插不进去。这类问题在规则库里根本不存在,它属于"工艺与实物的交集"。
4.4 丝印模糊、绿油露铜:看起来小,翻车很疼
丝印模糊的原因,九成是线宽太细。板厂丝印工序通常保证0.15mm线宽以上清晰,很多同学画丝印时字体用得很小、笔画只有0.1mm甚至更细,打出来就是一团墨迹,分不清字。最危险的不是好不好看,而是极性标记和1脚标记看不清,焊接时方向放反,上电就烧器件。投板前自查丝印线宽,版本号更要写在显眼位置,否则返修时你根本不知道手里是第几版。
绿油露铜是另一类常见需求。Allegro里做PCB背面露铜,多半是给大功率器件散热,或者给屏蔽罩提供接地接触面。露铜区域必须反复确认:该露的(散热焊盘)露了,不该露的(走线上方的阻焊)没露。因为露铜意味着这个区域可以接触金属,如果位置靠近外壳或接插件,可能引入意外短路。做完之后在Gerber预览里把阻焊层打开,一眼就能看出到底开了多大的窗。
4.5 覆铜挖空、死铜与拼板:别让板厂帮你做决定
AD20里做铜皮挖空时,要检查挖空区域边缘是否产生"孤岛铜"——一块被挖空包围、没有任何网络连接的铜皮。有些EDA会在DRC里报孤岛铜问题,但很多情况下它只是显示为"未连接铜",新手很容易忽略。孤岛铜在电磁上等于一个小天线,在高频板上就是噪声源,而且板厂不会主动替你删掉。
拼板也有讲究。V割便宜、掰开整齐,但V割线正下方不能有铜箔走线,否则掰板时会伤到走线。所以拼板前要把走线避开V割线的投影区域。邮票孔适合异形板,四个角放几个即可。这些内容板厂下单页面常常默认不提示,全靠设计者自己掂量。
5. 从翻车到能用:一套看得见的测试与改版流程
回到我第一块板子。发现问题之后,我没有直接改版重做,而是花了一整周做测量和定位,因为"现象是ADC跳字",根因可能藏在电源、地、时钟、布局好多个环节里。这一周的排查方式,后来成了我的固定流程。
5.1 测纹波不是接上探头就行,要测出"病灶"
测电源纹波,不能把示波器探头的地线夹子甩一根20cm的长线去夹GND。那根长地线本身就是天线,测出来的"纹波"一半是环境噪声。正确做法是使用探头的地弹簧,直接搭在测量点最近的GND焊盘上,带宽限制打到20MHz,交流耦合,然后判断纹波的频率分量和幅值。
我当时就是用这个方法确认了3.3V纹波里主要是MP1584的开关频率成分,才把怀疑目标锁定在"去耦不良"而不是"芯片本身坏"。测量方法错了,后面全是白忙。
5.2 回板冒烟测试:顺序和限流比胆量重要
我现在的回板流程固定在五步:断电目检,检查焊接、方向、连锡;万用表蜂鸣档量电源网络对地阻抗;直流源限流50到100mA上电,看电流是否异常;逐路供电,先主电源再IO再外设;最后才做功能测试。每一步不过,绝不进入下一步。第一次那个插USB直接摸芯片的莽撞,再也没发生过。
这些操作看起来简单,但对本科生来说,最大的价值是让"板子坏了"这件事变得可控。你不再是一上电就被动等结果,而是在每一步都知道"板子现在处于什么状态"。
5.3 改版不是推翻重画,是带着诊断记录做定点手术
定位完成之后,第二版改动其实不大:去耦电容全部挪到引脚3mm以内,过孔调整到电容外侧,晶振下方地平面不再挖空,电源线加宽到1mm,丝印统一加粗加版本号。改版时必须做一份修改记录,哪怕只是给自己看——版本号、改了哪些网络、为什么改、对应哪个测量结果。没有修改记录的改版等于原地打转,第三版可能把第一版的老毛病又带回来。
5.4 让DRC从"及格线"变成"能力上限"
做完这些之后,我才开始重新审视DRC本身。把它从"最小可接受"提升到"符合真实设计意图"才是正解。比如在Altium Designer里设置网络类,把电源网络的间距单独设得比信号线更大——"怎么设置一个网络和GND的间距"是很多人搜过的热词,这招确实能提前挡住爬电和短路风险。再把电源走线的线宽约束设成1mm最小,把覆铜区域、过孔到走线的距离都收紧。规则越接近你的真实需求,DRC报告才越有参考价值。
DRC的作用被很多人理解反了:它不是"查完了能交差"的合规检查,而应该是"替你实现设计意图的守门员"。默认规则是给所有板子用的通用底线,你的板子有电源网络、有高速信号、有模拟敏感区域,就该为它们建立对应的规则子集。
6. 写在最后:给第一次投板的本科生的几句实在话
第一块板子留给我的不是"一次成功"的成就感,而是"DRC全绿依然翻车"的深刻记忆。现在回头看,那次经历给了我最珍贵的三样东西:一是对"规则检查只是起点"的清醒认识,二是把布局布线从玄学还原成电磁学和工艺的思维习惯,三是一套每次投板前都会跑一遍的检查流程。
如果你即将第一次投板,给你几条掏心窝的建议:
把"先量短路、限流上电"写进肌肉记忆,这是保护你和板子的第一道防线。去看你所用芯片官方参考设计里的Layout章节,照着摆去耦电容和参考平面,比在网上搜"为什么纹波大"高效一百倍。所有器件封装都要查手册核对焊盘与孔径,尤其是接插件。投板前一天导出的Gerber,一定要自己在预览器里逐层看一遍再下单,这能拦下八成"板厂做出来不是你以为那样"的悲剧。
PCB设计这件事,本科课程里讲得最少的往往是最值钱的:回流路径、环路面积、去耦环路、层叠与阻抗、工艺限制。第一次做板子时觉得这些像玄学,等你用示波器和电磁学把它们一个个验证过,会发现全是课本知识的投影。DRC全绿不是终点,甚至不是前半程的终点。板子能不能用,终究要回到物理世界去检验。祝你的第一块板子上电顺利——万一不顺利,也别慌,那正是你真正开始懂PCB的时候。