2. 电源系统架构:STM32内部电压调节器、VDD/VDDA/VBAT供电域解析、电源管理模式总览
做低功耗项目,第一关就是搞懂芯片怎么“吃电”的。
很多人一上来就翻数据手册找“待机电流xx μA”,结果焊好板子一测,电流大得离谱。为什么?因为你没搞明白STM32内部那几个供电域是怎么工作的。
这一节,我就带你把这套电源架构彻底理清楚。
2.1 三个供电域:VDD、VDDA、VBAT
STM32的电源引脚,别看名字多,其实就三类:
- VDD:主电源域。给内核、存储器、大部分外设供电。电压范围一般是1.8V~3.6V。
- VDDA:模拟电源域。专门给ADC、DAC、复位电路、PLL等模拟模块供电。要求比VDD更干净。
- VBAT:备份电源域。给RTC和备份寄存器供电。当VDD掉电时,由电池或超级电容维持。
关键点:VDDA必须≤VDD,否则芯片内部ESD保护二极管会导通,轻则漏电,重则烧芯片。我见过一个同事把VDDA接3.6V、VDD接3.3V,结果芯片发热——嗯,那板子直接报废了。
另外还有个VSS和VSSA,就是地。别小看地,布局不好,模拟信号全是噪声。
2.2 内部电压调节器:LDO与SMPS
STM32内部有一个低压差线性稳压器(LDO),把VDD降到1.2V左右,给内核和数字逻辑用。
这个LDO有三种工作模式:
- 正常模式:输出1.2V,内核全速跑。
- 低功耗模式:输出1.0V或更低,内核降频或休眠。
- 关闭模式:完全断电,只有备份域活着。
有些型号(比如STM32L4+系列)还集成了开关电源(SMPS)。效率比LDO高得多,但噪声大一点。我个人的习惯是:如果项目对射频或高精度ADC有要求,尽量用LDO模式;如果是电池供电、对噪声不敏感,SMPS能省不少电。
我的经验:在STM32L073上做过一个水表项目,用SMPS模式,整体功耗比LDO模式低了约30%。但注意,SMPS需要外部电感,PCB面积会大一点。
2.3 供电域划分:Vcore、Vbat、Vdd
STM32内部把功能模块划分到不同的供电域,每个域可以独立开关。这是低功耗设计的核心。
| 供电域 | 包含模块 | 可独立关断? |
|---|---|---|
| Vcore域 | CPU、Flash、SRAM、数字外设 | 是(通过降低电压或关闭时钟) |
| 备份域 | RTC、备份寄存器、LSE振荡器 | 是(由VBAT供电) |
| 模拟域 | ADC、DAC、比较器、PLL | 部分可关断 |
| VDD域 | I/O引脚、复位电路、部分外设 | 否(始终供电) |
你想想看,如果只是需要RTC走时,完全可以把Vcore域断电,只留备份域。这就是待机模式的基本思路。
2.4 电源管理模式总览
STM32的电源管理模式,说白了就是“关掉不用的东西”。从省电程度由低到高,主要有这几种:
- 运行模式:全速跑,功耗最大。
- 睡眠模式:CPU停,外设继续跑。适合等待中断的场景。
- 停止模式:CPU停,大部分外设停,SRAM和寄存器内容保留。唤醒快。
- 待机模式:几乎全关,只留备份域和唤醒引脚。功耗最低,但唤醒后相当于复位。
还有一种叫“低功耗运行模式”,是让CPU在低频下跑,同时关闭部分外设。我一般在需要“边采集边省电”的场景用这个。
注意:进入待机模式前,一定要把I/O引脚配置好。我曾经犯过一个错:待机时某个引脚浮空,结果漏电几十微安,白白浪费了电池。正确的做法是:把不用的引脚设为模拟输入或上拉/下拉输出。
2.5 一张图看懂电源架构
下面这张SVG图,把STM32的电源域、调节器、管理模式之间的关系画清楚了。我建议你保存下来,做项目时对照着看。
2.6 实际项目中的选择思路
搞清楚了这些,你就能根据需求选模式了:
- 需要实时响应(比如按键唤醒):用停止模式,唤醒时间几微秒。
- 需要RTC走时,偶尔上报数据:用待机模式,RTC闹钟唤醒。
- 需要连续采集传感器数据:用低功耗运行模式,CPU降频跑。
一个小技巧:在停止模式下,如果不需要SRAM内容,可以关闭SRAM的供电。STM32L4系列支持这个功能,能再省几微安。具体看参考手册的“SRAM retention”章节。
好了,电源架构这块就讲到这里。下一节我们开始动手配置时钟树——毕竟,省电的第一步,就是让时钟跑得刚刚好。