做硬件时间长了会发现一个很有意思的现象,产品不过EMC,第一反应往往是加个电容试试,通信不稳定?加电容!ADC 数据乱?加电容!MCU 死机?还是加电容!感情万物皆可加电容,是吧?
电容当然有用,但如果干扰的源头、传播路径和敏感对象没有搞清楚,电容加得越多,甚至可能越糟。我一直觉得,抗干扰设计真正应该解决的不是怎么把噪声滤掉,而是先回答三个问题:干扰从哪里来?通过什么路径过来?最后是谁被干扰了?
把这三个问题搞明白,很多EMC问题其实就没那么玄学了。
先搞清楚干扰到底是怎么跑进来的?
硬件里的干扰大致可以分成两类:传导干扰和辐射干扰。比如一个 Buck 电源工作在500kHz,MOSFET开关瞬间产生很大的di/dt和dv/dt。假设功率回路电流在20ns内从0A跳到5A:
这已经是非常陡的电流变化了,假设PCB上某段回路存在5nH的寄生电感,那么:
也就是说,仅仅5nH的寄生电感,就可能因为一次快速电流变化产生1.25V的瞬态电压。所以很多时候你看到的莫名其妙的尖峰,并不是芯片自己产生了什么奇怪的东西,而是PCB寄生参数参与了工作。这也是为什么高速开关电源、MOS驱动、继电器、马达控制这些电路,PCB布局本身就是抗干扰设计的一部分。
第一招:从源头减少干扰,比后面补救有效得多
这是我最推荐的一种思路,不要等噪声跑出来以后再想办法消灭它。例如 Buck的高频功率环路:输入电容 → 上管 → 下管 → GND → 输入电容
这个环路应该尽可能小,为什么?
因为环路面积越大,寄生电感通常越大,同时也更容易形成磁场辐射。同样是一个开关电源,功率回路小,尖峰小,辐射也容易控制,功率回路大,哪怕原理图完全一样,EMC结果也可能完全不一样,所以PCB抗干扰的第一原则其实很简单:高速、大电流、高di/dt回路优先缩小面积。尤其是 MOSFET、二极管、输入旁路电容、驱动器这几个器件,别为了看起来整齐把它们摆得很远。
第二招:电源去耦不要只看有没有电容
很多工程师检查原理图时,会问MCU旁边不是有100nF吗?有100nF不代表去耦就一定做好了。假设MCU瞬间需要100mA电流,电容负责支撑电流,允许电源下降100mV,响应时间要求20ns。那么
从理论上看,20nF似乎就够了,但实际问题在于电容不是理想器件。它有ESR、ESL,而且PCB走线和过孔同样存在寄生电感,所以高速电源去耦真正重要的是电容值 + ESR + ESL + 布局距离。100nF电容如果离MCU电源脚几厘米,效果可能还不如一个10nF但紧贴引脚的电容。
第三招:敏感信号不要和脏信号混在一起
硬件里最典型的脏信号:SW节点,MOS栅极,PWM电机相线,时钟,DC/DC电感附近节点典型的敏感信号:ADC输入,运放输入,电流采样,晶振,RESET,CAN/LIN等通信信号,传感器输出如果把ADC采样线从MOSFET的SW节点下面穿过去,后面再给ADC输入加一个电容,往往只是补锅。
更合理的做法是先从PCB物理位置上隔离干扰。例如ADC前端可以设计一个RC低通:
假设R = 1kΩ, C = 10nF,那么fc ≈ 15.9kHz,如果你的有效信号只有几百Hz,而开关噪声在几百kHz,那么这个滤波器就很有价值。但如果ADC采样本身需要几十kHz甚至更高带宽,这个RC就不能随便加,滤波器不是越强越好,而是要根据有用信号带宽和干扰频率来定。
第四招:接口是EMC最容易进出的地方
很多产品内部测试都很好,一接线束就开始出问题,原因很简单,线缆就是一根非常好的天线。尤其是USB,CAN,RS485,电源输入,传感器接口,电机线,这些接口必须考虑外部干扰进入PCB的路径。
常见手段包括TVS + 共模电感 + RC滤波 + 合理接地 + 屏蔽,例如外部ESD打进来,如果TVS距离接口很远,中间那段PCB走线仍然可能承受很高的瞬态电压。所以TVS的一个基本原则就是离连接器越近越好,不要把TVS放在我觉得方便布线的地方。它真正应该放在干扰进入PCB的第一道防线。
第五招:地不是全部连起来就结束了
“单点接地”“一点接地”“模拟地数字地分开”这些话经常被说,但最容易被误用。真正应该关注的是大电流回流路径,会不会经过敏感电路的参考地?例如MOSFET开关电流从功率地回流,如果这股电流经过ADC的参考地,那么ADC看到的就不是一个干净的0V。
假设公共地阻抗只有:Z=10mΩ,但瞬间回流电流达到5A:
对于一个3.3V系统来说,50mV已经不算小了,如果ADC测量的是几十mV甚至几百mV的信号,这个地弹噪声足以让结果明显失真。所以所谓地干净,本质上就是让不同功能电路的回流电流尽量不要互相污染。
第六招:必要的时候,主动降低信号边沿速度
这个方法非常实用,但经常被忽略,数字信号并不是频率越高,干扰越严重,很多时候真正的问题是边沿太快,比如一个GPIO虽然只有1MHz,但上升时间只有1ns,它的高频谐波成分可能远高于1MHz,如果这个信号并不需要这么快,可以在驱动端串一个几十欧姆的电阻。例如R=33Ω,配合负载电容形成一定的边沿控制。
它的作用不是滤掉1MHz,而是降低瞬态 di/dt,减少振铃和高频能量。这在SPI,MCU GPIO,时钟,PWM,MOS栅极驱动上都非常常见。当然,串联电阻也不能乱加,需要结合负载、电容、时序裕量一起计算。
第七招:抗干扰设计最终还是要靠测试闭环
我比较反感一种调EMC的方法这个地方加个磁珠试试,不行就换一个,还不行再加电容,这其实是在碰运气,更靠谱的方法应该是先定位频率,再定位路径,最后针对性处理,比如EMI测试发现200MHz附近有明显峰值,那么就要去判断哪个时钟可能产生?有没有高速IO?有没有DC/DC谐波?是共模还是差模?是通过电源线出去,还是通过线缆辐射?
然后再决定是改布局,加RC,加磁珠,加共模电感,调整驱动速度,增加屏蔽,优化接地。抗干扰设计其实没有什么万能器件,电容不是万能药,磁珠也不是万能药,屏蔽更不是万能药。
真正成熟的硬件设计,应该是从噪声源 → 耦合路径 → 敏感对象一路分析。能在源头降低dv/dt、di/dt,就不要等噪声跑到后端再滤,能通过PCB布局解决的问题,就不要全部堆器件,能用回流路径解决的问题,就不要寄希望于多铺一点地,说到底,EMC不是产品做完以后才开始的一项测试,而是从第一根线、第一颗电容摆在哪里的时候,就已经开始了。
332