2. 电源系统排查:3.3V/5V供电异常、纹波过大、LDO选型与散热问题

电源,是嵌入式系统的命脉。我见过太多项目,折腾半天发现是供电出了问题。STM32对电源其实挺挑剔的,3.3V稍微偏一点、纹波大一点,就可能出现各种诡异现象——比如程序偶尔跑飞、ADC采集不准、无线模块连不上。

这一章,咱们就聊聊电源系统怎么排查。从供电异常到纹波过大,再到LDO选型和散热,把坑都踩一遍。

2.1 供电异常的常见表现与快速定位

供电异常,说白了就是电压不对。要么高了烧芯片,要么低了不干活,要么时高时低导致系统不稳定。

2.1.1 电压异常的典型症状

症状 可能原因 排查方向
STM32无法启动,电流极小 3.3V电压偏低(< 2.7V) 检查LDO输出、输入电压
程序偶尔跑飞、死机 电压跌落或纹波过大 示波器看3.3V波形
无线模块连接不稳定 供电瞬间跌落 抓取模块发射时的电压波形
ADC采集值跳动 电源纹波耦合到参考电压 测量VREF+引脚纹波
芯片发烫 电压过高或短路 测量实际电压值
我的习惯: 拿到一块新板子,第一件事不是上电,而是用万用表测3.3V和GND之间的阻值。如果阻值小于几十欧姆,先别上电,查短路再说。

2.1.2 快速定位步骤

遇到供电问题,我一般按这个顺序排查:

  1. 目测——看电源指示灯亮不亮,芯片有没有明显烧毁痕迹。
  2. 万用表测电压——测LDO输入、输出,测STM32的VDD引脚。
  3. 示波器看波形——重点看启动瞬间和负载切换时的电压跌落。
  4. 红外测温——摸一摸LDO和芯片温度,烫手就是有问题。
注意: 我曾经遇到过一块板子,万用表测3.3V正常,但STM32就是跑不起来。后来用示波器一看,3.3V上叠加了一个200mV的100kHz振荡——LDO自激了。所以,万用表只能看平均值,纹波问题必须上示波器。

2.2 纹波过大:看不见的杀手

纹波,就是电源上的交流分量。STM32虽然有一定电源抑制比,但纹波太大,轻则ADC不准,重则系统复位。

2.2.1 纹波的来源

  • LDO自身噪声——某些LDO高频噪声较大,比如AMS1117系列。
  • 负载瞬态响应——WiFi模块发射时电流从几十mA跳到几百mA,电压瞬间跌落。
  • PCB布局问题——电源走线过长、过细,寄生电感导致纹波。
  • 去耦电容不足——高频去耦电容离芯片引脚太远。

2.2.2 纹波测量方法

测纹波,示波器要设置好。我常用的方法:

  1. 示波器探头打到AC耦合,去掉直流分量。
  2. 带宽限制设为20MHz,避免高频噪声干扰。
  3. 探头用接地弹簧,不要用长地线夹——地线夹会引入噪声。
  4. 测量点选在STM32的VDD引脚附近,不是LDO输出端。

经验值: 对于STM32,3.3V纹波建议控制在50mVpp以内。如果超过100mVpp,ADC的12位精度基本就别想了。无线模块(如ESP8266)要求更严,纹波最好小于30mVpp。

2.2.3 纹波抑制方案

方案 适用场景 效果
增加输出电容(10μF+0.1μF) 通用 降低低频纹波
加磁珠+电容组成π型滤波 无线模块供电 抑制高频噪声
换低噪声LDO ADC、传感器供电 从源头降低噪声
增加前级滤波(LC滤波) 输入电压纹波大 改善输入质量
避坑指南: 我曾经在一个项目里,给ESP8266供电的3.3V上只放了一个10μF电容。结果ESP8266一发射,电压就跌到2.8V,WiFi频繁掉线。后来在模块旁边加了一个100μF钽电容+0.1μF陶瓷电容,问题解决。记住:大电容管低频,小电容管高频。

2.3 LDO选型:不是随便一个3.3V都能用

LDO选型,很多人只看输出电压和电流。其实还有几个关键参数容易被忽略。

2.3.1 关键参数对比

参数 说明 选型建议
压差(Dropout Voltage) 输入输出最小压差 电池供电选低压差(< 200mV)
输出噪声 LDO自身产生的噪声 ADC供电选低噪声(< 30μVrms)
电源抑制比(PSRR) 对输入纹波的抑制能力 高频PSRR越高越好
静态电流 LDO自身消耗的电流 电池供电选低静态电流
热阻 散热能力 大电流选低热阻封装

2.3.2 常见LDO型号对比

型号 输出电流 压差 噪声 典型应用
AMS1117-3.3 1A 1.1V 中等 通用数字电路
XC6206P332MR 200mA 200mV 低 电池供电、传感器
RT9013-33GB 500mA 250mV 低 无线模块供电
LP5907MFX-3.3 250mA 120mV 极低 ADC参考电压
注意: AMS1117虽然便宜,但压差高达1.1V。如果你用5V输入,输出3.3V,压差只有1.7V,勉强能用。但输入降到4.5V时,输出可能只有3.4V,已经接近LDO的压差极限了。所以,5V转3.3V用AMS1117没问题,但3.7V锂电池转3.3V就别用它了。

2.4 散热问题:LDO发烫怎么办?

LDO发烫,本质上是功耗太大。功耗P = (Vin - Vout) × Iout。比如输入5V,输出3.3V,电流500mA,功耗就是(5-3.3)×0.5 = 0.85W。SOT-223封装的AMS1117,热阻约90°C/W,温升就是0.85×90 ≈ 76.5°C。如果环境温度25°C,芯片温度就超过100°C了——烫手!

2.4.1 散热计算

芯片结温Tj = Ta + P × RθJA。其中:

  • Ta:环境温度
  • P:LDO功耗
  • RθJA:结到环境的热阻

一般芯片结温不要超过125°C,最好留50%裕量,控制在85°C以内。

2.4.2 散热解决方案

方案 适用场景 效果
加散热焊盘/过孔 PCB空间有限 降低热阻10-20%
换大封装(TO-252) 电流较大 热阻更低
加散热片 空间允许 显著降温
改用DC-DC 压差大、电流大 效率高、发热小
降低输入电压 输入电压可调 直接降低功耗
我的经验: 如果一个项目里LDO发热严重,我一般先算功耗。如果功耗超过0.5W,我会考虑用DC-DC先降到3.6V左右,再用LDO降到3.3V。这样LDO的压差只有0.3V,发热量大幅降低。这叫两级供电,在物联网设备里很常见。

2.5 电源系统排查流程图

下面这张图,是我做电源排查时的思路。你可以照着这个流程走一遍,大部分电源问题都能定位到。

电源系统排查流程图 电源系统排查流程图 发现供电异常 ① 万用表测LDO输入/输出 电压正常? 否 检查输入电源/更换LDO 是 ② 示波器测纹波 纹波<50mV? 否 ③ 增加去耦电容/换LDO 是 ④ 检查散热 温度<85°C? 否 加散热/换DC-DC 是 电源正常,继续调试 提示: 万用表测平均值 示波器看纹波和瞬态

2.6 实战案例:一个WiFi模块频繁掉线的排查

最后分享一个真实案例。去年我做了一个智能家居网关,用STM32F103+ESP8266。板子调好后,发现ESP8266每隔几分钟就掉线一次。

一开始怀疑是WiFi信号问题,换了路由器还是不行。后来用示波器抓ESP8266供电引脚,发现模块发射时3.3V跌到了2.9V,持续约10ms。

排查过程:

  • 万用表测LDO输出:3.32V,正常。
  • 示波器看纹波:静态时20mVpp,正常。但ESP8266发射时,电压跌落明显。
  • 检查LDO:用的是AMS1117-3.3,最大输出1A。ESP8266峰值电流约300mA,按理说够用。
  • 问题出在电容上:ESP8266旁边只有10μF电容,储能不够。

解决方案:在ESP8266供电引脚旁边加了一个100μF钽电容+0.1μF陶瓷电容。再测试,电压跌落从300mV降到50mV以内,掉线问题解决。

教训: 无线模块的峰值电流很大,但持续时间短。LDO的电流能力够不够,不能只看平均值,要看瞬态响应。大电容就是给瞬态电流准备的。记住:模块旁边至少放一个100μF电解或钽电容。