3. 电源管理单元:电压调节器与供电域分析

电源管理,说白了就是给芯片各个部分喂对电压。STM32 内部集成了完整的电源管理单元,但很多人只把它当成“上电就能跑”的黑盒子。我刚开始做低功耗项目时也这么想,结果电池供电的产品待机电流死活降不下来——后来才发现是电压调节器模式没配对。

这一章咱们就把 STM32 的电源架构拆开看。你理解了 VDD、VDDA、VREF、VBAT 这些供电域的关系,再去设计去耦电容和电源序列,心里就有底了。

3.1 电压调节器:LDO 与 SMPS 的选择

STM32 内部有两个核心电压调节器选项:LDO(低压差线性稳压器)和 SMPS(开关模式电源)。它们负责把外部输入的 VDD(通常是 1.8V~3.6V)转换成内核需要的 1.2V 或 1.0V(视型号而定)。

特性 LDO 模式 SMPS 模式
效率 较低(约 50%~70%) 较高(约 80%~90%)
纹波 极低(< 1mV) 较高(10~50mV)
静态电流 低(μA 级) 较高(mA 级)
PCB 面积 小(仅需去耦电容) 大(需电感、电容)
适用场景 低功耗待机、噪声敏感 高负载、电池供电

关键点:LDO 和 SMPS 不是二选一的关系。STM32U5、L5 等系列允许你在运行时动态切换。我做过一个可穿戴项目,待机时用 LDO 把电流压到 1μA 以下,工作时切到 SMPS 提升效率——切换时间大约 5μs,完全不影响业务。

我的习惯:如果产品对射频或模拟采样有要求,我会优先选 LDO 模式。SMPS 的开关噪声会耦合到 VDDA 域,ADC 的 ENOB 可能掉 1~2 位。实在要用 SMPS,记得在 VDDA 入口加一级 LC 滤波。

3.2 供电域分析:VDD、VDDA、VREF、VBAT

STM32 的供电域不是简单的一根 VDD 走天下。我见过不少工程师把 VDDA 和 VDD 直接短接,结果 ADC 采样噪声大得离谱。咱们逐个看:

3.2.1 VDD 域(主数字供电)

给 CPU 内核、数字外设、存储器供电。范围 1.8V~3.6V。这是功耗大头,也是低功耗优化的主战场。

3.2.2 VDDA 域(模拟供电)

给 ADC、DAC、比较器、PLL、复位电路供电。要求比 VDD 更干净。我建议 VDDA 和 VDD 之间加一个 10Ω 电阻或磁珠隔离,再各放一组去耦电容。

3.2.3 VREF 域(参考电压)

ADC 和 DAC 的参考基准。可以是内部 VREFBUF 输出,也可以外部输入。精度要求高时,我习惯用外部精密基准(比如 REF3033),内部 VREFBUF 的温度系数大约 50ppm/°C,够用但不算优秀。

3.2.4 VBAT 域(备份供电)

给 RTC 和备份寄存器供电。当主 VDD 掉电时,VBAT 维持时间和日期。注意:VBAT 电流极低(典型 0.5μA),但必须保证电压不低于 1.65V,否则 RTC 数据会丢失。

我曾经踩过的坑:有个项目用 CR2032 电池给 VBAT 供电,没加二极管隔离。结果主电正常时,VDD 通过 VBAT 引脚给电池充电——电池鼓包了。正确的做法是加一个 BAT54 肖特基二极管,或者用 STM32 内部集成的电源切换电路。

3.3 电源序列与去耦电容设计

电源序列,就是各个供电域上电和下电的先后顺序。STM32 内部有上电复位(POR)和掉电复位(PDR)电路,但外部供电顺序不对,可能导致芯片锁死或 IO 漏电。

3.3.1 上电序列要求

  1. VDD 先上电,然后 VDDA 和 VREF 跟上。时间差建议在 1ms 以内。
  2. VBAT 可以随时上电,但不要比 VDD 晚太多(超过 10ms 可能触发 POR 误动作)。
  3. VDD 和 VDDA 的压差任何时候不要超过 0.3V。这是硬性要求,否则 ESD 二极管会导通。

实测数据:我用示波器抓过 VDD 和 VDDA 的上电波形。如果 VDDA 比 VDD 晚 2ms 以上,芯片启动时 ADC 的第一次转换结果会异常(偏差 5% 以上)。把两个电源用同一个 LDO 输出,再各加 10μF + 0.1μF 去耦,问题就解决了。

3.3.2 去耦电容设计原则

去耦电容不是越多越好。我见过有人在一块 STM32 板子上放了 20 个 0.1μF 电容,结果高频噪声反而更大了——因为电容并联会产生反谐振。

供电域 推荐电容组合 布局要求
VDD 10μF + 0.1μF × 2 靠近 VDD/VSS 引脚对
VDDA 4.7μF + 0.1μF 紧贴 VDDA/VSSA 引脚
VREF 1μF + 0.1μF 距离 VREF 引脚 < 5mm
VBAT 0.1μF 靠近 VBAT 引脚

布局技巧:小电容(0.1μF)要放在最靠近引脚的位置,过孔直接打在焊盘旁边。大电容(10μF)可以稍远,但不要超过 15mm。我习惯在 PCB 背面放一组备用电容焊盘,调试时如果发现噪声超标,直接补焊。

3.4 电源管理知识结构图

下面这张图把本章的核心关系画出来了。你可以把它当成调试时的快速参考:

STM32 电源管理单元结构图 外部电源输入 电压调节器选择 LDO 模式 / SMPS 模式 VDD 域 内核 + 数字外设 VDDA 域 ADC + DAC + PLL VREF 域 ADC/DAC 参考 VBAT 域 RTC + 备份寄存器 去耦电容设计 10μF + 0.1μF 组合 | 紧贴引脚 | 避免反谐振 电源序列:VDD → VDDA → VREF | VBAT 独立 注意:VDD 与 VDDA 压差任何时候不超过 0.3V 去耦电容布局:小电容靠近引脚,大电容不超过 15mm

3.5 实战调试要点

最后分享几个我在调试电源问题时常用的检查点:

  • 测纹波:用示波器 AC 耦合,20MHz 带宽限制,探头用接地弹簧(不要用长地线夹)。VDD 纹波超过 50mV 时,先检查去耦电容是否虚焊。
  • 测上电顺序:用双通道示波器同时抓 VDD 和 VDDA,看上升沿时间差。超过 1ms 就要调整电源电路。
  • 测 VBAT 电流:断开主电源,用万用表 μA 档串入 VBAT 回路。如果电流超过 5μA,检查 VBAT 引脚是否有外部上拉电阻。
  • 测 SMPS 开关噪声:用近场探头(H 场探头)扫电感周围,找到噪声耦合路径。我遇到过 SMPS 电感离天线太近,导致蓝牙灵敏度下降 3dB 的情况。

重要提醒:不要在 VDD 和 VDDA 之间直接连 0Ω 电阻。我见过有人这么干,结果 VDDA 上的噪声直接灌进 VDD,ADC 采样值跳得像心电图。至少用磁珠(比如 600Ω@100MHz)隔离一下。

嗯,电源管理这部分内容比较多,但它是低功耗调试的基础。你把这些供电域的关系理清了,去耦电容布局做对了,后面调低功耗模式、调 ADC 精度都会顺手很多。