3、电源管理基础:LDO vs DC-DC,效率曲线,待机功耗优化

做低功耗设计,电源管理是绕不开的核心。说白了,你芯片再省电,电源转换效率一塌糊涂,电池电量照样哗哗地掉。我见过不少工程师,花了大把精力优化代码,结果电源选型没做好,续航直接腰斩。今天咱们就聊聊电源管理的基础——LDO和DC-DC怎么选,效率曲线怎么看,待机功耗怎么压。

3.1 LDO vs DC-DC:谁更适合你的剃须刀?

先问个问题:你的剃须刀需要从3.7V锂电池降压到1.8V给MCU供电,你会用LDO还是DC-DC?

很多人第一反应是DC-DC效率高。嗯,这话没错,但得看场景。咱们先看看两者的本质区别。

LDO(低压差线性稳压器)

LDO的工作原理很简单——把多余的电压以热量形式消耗掉。比如输入3.7V,输出1.8V,那1.9V的压差就变成了热量。

优点:

  • 输出纹波极小,噪声低——对模拟电路很友好
  • 外围电路简单,只需要输入输出电容
  • 成本低,占板面积小
  • 静态电流可以做到极低(微安级)

缺点:

  • 效率 = Vout / Vin,压差越大效率越低
  • 大电流下发热严重
  • 只能降压,不能升压

效率计算公式:

η = Vout / Vin × 100%

例如:3.7V转1.8V,效率 = 1.8 / 3.7 ≈ 48.6%

也就是说,超过一半的能量都变成了热量!

DC-DC(开关稳压器)

DC-DC通过开关管和电感储能,实现电压转换。它不靠压差工作,而是靠占空比调节。

优点:

  • 效率高,通常80%-95%
  • 可以降压、升压、反压
  • 适合大电流场景

缺点:

  • 输出纹波大,需要额外的滤波
  • 外围电路复杂(电感、电容、反馈电阻)
  • 轻载效率下降明显
  • EMI问题需要处理

我的经验:在剃须刀这种电池供电设备中,我习惯把电源分配成两路:

  • 电机驱动:用DC-DC,因为电流大(几百毫安到几安),效率优先
  • MCU和传感器:用LDO,因为电流小(几十微安到几毫安),噪声敏感

这样既保证了电机的高效驱动,又保证了控制电路的干净供电。

3.2 效率曲线:别被标称值骗了

你去看DC-DC的数据手册,都会标一个最高效率,比如95%。但实际用起来,往往达不到。为什么?因为效率是随负载变化的。

我给大家画个典型的效率曲线图(用文字描述):

负载电流 效率(典型DC-DC) 说明
1 μA < 10% 开关损耗占主导,效率极低
100 μA 30% - 50% 轻载,效率开始爬升
1 mA 60% - 75% 进入有效工作区
10 mA 80% - 90% 典型工作点
100 mA 85% - 93% 接近峰值效率
1 A 80% - 90% 大电流下效率开始下降(IR损耗)

看到了吗?在微安级负载下,DC-DC的效率可能还不如LDO!

避坑指南:我曾经在一个低功耗项目中,用了一颗标称效率92%的DC-DC给RTC供电。结果实测待机电流比预期大了3倍。查了半天才发现,RTC只消耗2μA,DC-DC在这个负载下效率不到15%,还不如直接用LDO。

所以,选型时一定要看效率曲线,而不是只看标称值!

3.3 待机功耗优化:把每一微安都榨干

剃须刀大部分时间都在待机。待机功耗直接决定了电池的搁置寿命。我见过一些产品,待机电流做到100μA以上,放一个月电池就亏空了。这显然不行。

待机功耗优化的核心思路就三个字:关、降、切

3.3.1 关——关闭不需要的模块

这是最直接的方法。MCU进入深度睡眠,关闭外设时钟,断开传感器供电。

// 以STM32为例,进入Stop模式
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

// 关闭LDO供电(通过GPIO控制)
HAL_GPIO_WritePin(LDO_EN_GPIO_Port, LDO_EN_Pin, GPIO_PIN_RESET);

但要注意:有些外设的漏电流在关闭后依然存在。我建议用MOS管或负载开关彻底切断供电。

3.3.2 降——降低工作电压和频率

动态电压频率调整(DVFS)是低功耗设计的利器。MCU在待机时,可以降到最低频率运行。

// 降低系统时钟到32kHz
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
HAL_RCC_OscConfig(&RCC_OscInitStruct);

// 切换到LSI作为系统时钟
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_LSI;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

我的习惯:在待机模式下,我会把MCU主频降到32kHz,同时关闭所有不用的外设时钟。这样待机电流可以从mA级降到μA级。你想想看,一个剃须刀每天只用几分钟,剩下23小时55分钟都在待机,这优化空间有多大!

3.3.3 切——切换电源路径

这是最容易被忽视的一点。很多设计在待机时,DC-DC还在工作,白白消耗静态电流。

我建议的做法是:

  • 待机时,关闭DC-DC,切换到LDO供电
  • 或者使用带旁路模式的DC-DC(Bypass Mode)
  • 再或者,直接用一颗超低静态电流的LDO专门给待机电路供电

待机功耗优化清单:

  1. MCU进入深度睡眠(Stop/Standby模式)
  2. 关闭所有外设时钟和电源
  3. DC-DC进入省电模式(PFM)或关闭
  4. LDO选择低静态电流型号(Iq < 1μA)
  5. GPIO设置为模拟输入或下拉,避免浮空漏电
  6. 使用负载开关彻底切断大电流模块
  7. 检查所有上拉/下拉电阻的功耗

3.4 实战案例:一个剃须刀的电源方案

最后,我给大家分享一个我在项目中用过的电源方案。这个剃须刀用的是单节18650锂电池(3.7V),需要三路电源:

负载 电压 电流 推荐方案 理由
电机驱动 3.3V 500mA - 2A DC-DC降压 大电流,效率优先
MCU + 蓝牙 1.8V 10mA(工作)/ 5μA(待机) LDO 噪声敏感,待机电流极低
LED指示灯 3.3V 1mA - 5mA 直接由电池通过限流电阻 简单,成本低

待机时,MCU控制一个MOS管关闭DC-DC的使能引脚,同时自身进入深度睡眠。整个系统的待机电流可以做到3μA以下。按2000mAh的电池算,理论搁置时间可以达到27年——当然,电池自放电会先撑不住。

最后说一句:电源管理没有银弹。LDO和DC-DC各有优劣,关键看你的负载特性和功耗要求。我的建议是:先算清楚每个模块的功耗预算,再根据电流大小和噪声要求选型。别盲目追求高效率,也别一味追求低噪声。平衡,才是低功耗设计的精髓。

下一章,咱们聊聊电池选型和充电管理。到时候我会分享一个关于电池保护板的踩坑经历,保证让你少走弯路。