4. 电源管理:电源域划分、电压调节技术、电源开关与隔离

电源管理,说白了就是管好每一毫安电流的去向。很多工程师觉得低功耗就是选个低功耗MCU完事,结果一测电流,几十微安下不去。问题出在哪?出在电源架构上没下功夫。

我做过一个表计项目,硬件改了三版才把休眠电流从12µA压到1.5µA。回头一看,核心就三件事:该关的域要关死、该降的电压要降到位、该隔离的信号不能漏电。这一章咱们就把这三件事掰开揉碎讲清楚。

电源管理核心架构 电源输入 (VIN) 电压调节技术 (DCDC / LDO / DVS) VDD_CORE (常开域) VDD_IO (可控域) VDD_RF (开关域) 负载开关 / 电源门控 电平转换 / 隔离单元 IO 漏电阻断 CPU / RAM / RTC GPIO / UART / SPI RF / 传感器 / 外部设备 核心原则:按功能划分电源域,按需求选择调节方式,按状态控制开关与隔离

4.1 电源域划分——把电路切成几块

电源域划分,就是把芯片上的不同功能模块,接到不同的电源网络上。每个域可以独立开关或调压。你想想看,如果整个芯片只有一个电源,休眠时RAM还得供电,那漏电就省不下来。

我习惯把电源域分成三类:

域类型 典型模块 供电策略 休眠电流贡献
常开域 RTC、唤醒逻辑、备份寄存器 始终供电,电压可降至最低保持值 几十 nA ~ 几百 nA
可控域 CPU Core、SRAM、主要外设 工作时正常供电,休眠时关断或保持 关断时 0,保持时 µA 级
开关域 RF PA、传感器、大功率外设 按需开启,用外部负载开关控制 关断时完全隔离
我的经验: 常开域越小越好。我曾经在一个项目中把RTC和唤醒定时器放在同一个域,结果RTC的32kHz振荡器漏了200nA,唤醒定时器反而只漏50nA。后来把RTC单独拉出来用外部晶振,常开域电流降到了80nA。

4.2 电压调节技术——给每个域最合适的电压

电压调节不只是把3.3V转成1.8V那么简单。不同负载、不同场景,调节方式的选择直接影响功耗。

4.2.1 LDO vs DCDC

LDO简单、纹波小,但效率低。DCDC效率高,但有开关噪声。怎么选?看场景。

参数 LDO DCDC (Buck)
效率 Vout/Vin(压差大时极低) 80%~95%
静态电流 可低至几百 nA 几 µA ~ 几十 µA
输出纹波 < 50µV 10~50mV(需后级滤波)
适用场景 休眠保持、模拟电路供电 大电流负载、主核供电

我个人习惯:常开域用超低静态电流LDO(比如TPS7A02,Iq=25nA),主核用DCDC。如果DCDC的静态电流太大,休眠时可以把DCDC关掉,切到旁路LDO供电。

4.2.2 动态电压调节 (DVS)

DVS就是跑得快时给高电压,跑得慢时给低电压。CMOS功耗和电压的平方成正比,降0.3V可能省下30%的功耗。

// 伪代码:DVS控制逻辑
void set_voltage_for_freq(uint32_t freq_mhz) {
    if (freq_mhz > 48) {
        set_dcdc_voltage(1800);  // 1.8V
    } else if (freq_mhz > 16) {
        set_dcdc_voltage(1500);  // 1.5V
    } else {
        set_dcdc_voltage(1200);  // 1.2V,最低保持电压
    }
}
注意: DVS切换时要有足够的去耦电容,否则电压跌落会导致系统复位。我吃过一次亏——电压从1.8V切到1.2V时,负载电流突变,DCDC响应慢了,结果MCU掉电复位。后来在输出端加了10µF陶瓷电容才稳住。

4.3 电源开关与隔离——把漏电路径彻底切断

电源域划分好了,电压调节选好了,但如果域之间的隔离没做好,电流会从缝隙里漏过去。嗯,这里要注意。

4.3.1 电源开关方案

关断一个电源域,最直接的办法就是串一个开关。常用方案有三种:

  • PMOS 负载开关: 成本低,压降小,适合1A以下电流。我常用SiP32431,导通电阻30mΩ,关断时漏电只有1nA。
  • 集成电源开关: 比如TPS22918,带软启动和输出放电,适合给传感器模块供电。
  • eFuse: 带过流保护,适合大电流或安全关键场景。

4.3.2 信号隔离——漏电的隐形通道

电源域关了,但信号线还连着,电流会通过IO引脚的保护二极管倒灌进关断域。这是新手最容易踩的坑。

我曾经在一个产品中,把传感器域的电源用MOSFET关断了,但I2C的SCL和SDA还连着主控。结果传感器域虽然没供电,但I2C线上的高电平通过传感器芯片的IO保护二极管,给整个域灌了30µA的电流。折腾了两天才找到原因。

解决方案:

  • 电平转换芯片: 比如TXS0102,带断电高阻特性,一侧断电时另一侧不受影响。
  • IO隔离电阻: 串1kΩ~10kΩ电阻,限制倒灌电流。简单但有效。
  • 三态门控制: 关断域前,先把所有连接的IO设为高阻输入。
避坑指南: 我曾经在调试时发现,即使所有外设都断电了,MCU的休眠电流还是比手册标称值高了5µA。最后用热成像仪一照,发现一个GPIO口配置成了推挽输出高电平,而外部电路已经断电,电流通过内部保护二极管漏到了VDD。改成高阻输入后,电流立刻降下来了。

4.4 实战:一个三域电源管理电路

下面是一个实际项目的电源架构,我把它简化后分享给你:

电源域 电压 供电方式 开关控制 隔离措施
VDD_RTC 1.8V LDO (Iq=50nA) 常开 无
VDD_CORE 1.2V~1.8V DCDC + LDO 旁路 PMOS 开关 电平转换至 VDD_IO
VDD_SENSOR 3.3V 负载开关 GPIO 控制 I2C 隔离芯片

这个架构的休眠电流实测:VDD_RTC 域 120nA,VDD_CORE 关断后 0A,VDD_SENSOR 关断后 0A。总休眠电流 120nA,用一颗 200mAh 的纽扣电池可以撑 190 年(理论值,实际还要考虑电池自放电)。

小技巧: 测量超低功耗时,用万用表的 µA 档可能不够准。我习惯用示波器配合电流探头看动态电流,再用高精度万用表(比如34465A)测平均电流。另外,记得在电源入口加一个10Ω采样电阻,方便用示波器抓电流波形。

电源管理这块,说白了就是「分而治之」——把电路切成块,每块用最合适的方式供电,块与块之间做好隔离。做到这三点,你的低功耗设计就成功了一大半。