2. MCU内部噪声源分析

做EMC设计这么多年,我最大的体会就是:想要搞定干扰,先得搞清楚噪声从哪来的。MCU本身就是一个噪声源,这听起来有点讽刺,但事实就是如此。你想想看,一个芯片内部几百万个晶体管在高速开关,怎么可能安静?

这一章,我就带你深入MCU内部,看看那些"看不见的捣乱分子"到底是怎么产生的。我个人习惯把内部噪声源分成四类:数字电路开关噪声、时钟谐波辐射、I/O口瞬态电流、内部电源噪声。咱们一个一个来拆解。

2.1 数字电路开关噪声

数字电路的本质是什么?说白了就是0和1的切换。但问题在于,这个切换过程不是瞬间完成的。

CMOS电路在翻转时,会有一个短暂的"导通重叠"阶段。PMOS还没完全关断,NMOS已经开始导通了。这时候,电源到地之间就形成了一个低阻通路,产生一个很大的冲击电流。这个电流,我们叫它"穿透电流"或"短路电流"。

关键数据:

  • 单个门电路的穿透电流峰值:约0.5-2mA
  • 持续时间:约100-300ps
  • 一个百万门级的MCU同时翻转时,瞬间电流可达数百安培

我在项目中遇到过这样的情况:一个STM32F4系列的板子,跑着跑着就死机了。查了半天,发现是内部逻辑翻转时产生的噪声耦合到了复位引脚。后来在电源引脚上加了几颗100nF的电容,问题就解决了。嗯,这里要注意,去耦电容不是随便放的,位置和容值都有讲究。

2.2 时钟谐波辐射

时钟信号是MCU的心脏,但也是最大的噪声源之一。为什么?因为时钟是周期性的方波信号。

根据傅里叶变换,一个理想的方波包含基频和无数个奇次谐波。实际方波虽然上升沿和下降沿不是无限陡,但谐波成分依然很丰富。这些谐波会通过PCB走线、芯片引脚、甚至芯片内部的金属层辐射出去。

时钟频率 主要谐波范围 辐射风险
8 MHz 8 MHz - 400 MHz 中等
48 MHz 48 MHz - 2.4 GHz
168 MHz 168 MHz - 8.4 GHz 极高

你可能会问:"谐波频率这么高,能量应该很小吧?" 没错,能量是随着频率升高而衰减。但问题是,高频信号的辐射效率更高。一根几厘米长的走线,在几百MHz的频率下,就是一根不错的天线。

我记得有一次做CE认证,一个产品在120MHz附近超标了。查来查去,发现是MCU的HSE时钟(8MHz)的第15次谐波。解决办法?在时钟输出引脚上串了一个22Ω的电阻,稍微减缓了上升沿,谐波能量就降下来了。

实战技巧:

时钟走线尽量短,尽量靠近MCU。如果可能,使用内部RC振荡器代替外部晶振。虽然精度差一点,但EMC表现好很多。

2.3 I/O口瞬态电流

I/O口是MCU和外部世界打交道的通道。每次I/O口从高电平切换到低电平,或者反过来,都会产生一个瞬态电流。

这个电流的大小取决于几个因素:

  • 负载电容:包括PCB走线电容、输入引脚电容、分布电容
  • 驱动能力:MCU的I/O口驱动强度可配置,一般从2mA到20mA不等
  • 切换速度:上升/下降时间越短,瞬态电流峰值越大

计算公式很简单:I = C × dV/dt。举个例子,如果负载电容是10pF,电压变化是3.3V,上升时间是2ns,那么瞬态电流峰值就是:

I = 10pF × 3.3V / 2ns = 16.5mA

一个I/O口16.5mA不算大,但如果8个、16个I/O口同时翻转呢?那就是几百毫安了。这些电流会在地平面上产生电压降,形成地弹噪声(Ground Bounce)。

我曾经在一个项目中,用GPIO驱动了一排LED。每次刷新显示时,MCU就莫名其妙地复位。后来用示波器一量,发现地弹噪声达到了1.2V!MCU的复位阈值才0.8V。解决办法?把LED的刷新频率降低,同时在每个I/O口上加了一个100Ω的限流电阻

避坑指南:

我曾经犯过一个错误:为了追求速度,把I/O口的驱动强度设到了最大。结果EMC测试一塌糊涂。后来学乖了,能用低速就别用高速,能用弱驱动就别用强驱动。够用就好,别贪快。

2.4 内部电源噪声

MCU内部有多个电源域:核心逻辑电源(通常是1.2V或1.8V)、I/O电源(3.3V或5V)、PLL模拟电源、ADC参考电源等等。这些电源之间会相互干扰。

内部电源噪声的主要来源:

  1. IR压降:内部金属走线有电阻,大电流流过时会产生压降
  2. Ldi/dt噪声:内部电源网络的寄生电感,配合快速变化的电流,产生电压尖峰
  3. 衬底耦合:数字电路的开关噪声通过衬底耦合到模拟电路

我见过一个案例:一个工业控制板,ADC采集的数据总是跳变。查了外部电路,没问题;换了MCU,还是跳。最后用近场探头一扫,发现MCU内部数字核心的开关噪声通过衬底耦合到了ADC模块。解决方案?在软件上让ADC采样避开CPU密集运算的时间段

内部电源噪声的典型频谱特征:

  • 低频段(<1MHz):主要由负载变化引起
  • 中频段(1-100MHz):主要由时钟谐波和逻辑翻转引起
  • 高频段(>100MHz):主要由上升/下降沿的振铃引起

嗯,这里要特别提醒一下:内部电源噪声和外部电源噪声是相互影响的。外部电源纹波会进入MCU内部,内部噪声也会通过电源引脚传导到外部。所以,做好电源滤波是EMC设计的第一步。

总结一下这节的内容:MCU内部的噪声源是客观存在的,我们无法消除它们,但可以理解它们、控制它们。下一章,我会讲如何从PCB布局和电路设计的角度,把这些噪声的影响降到最低。