第3章 电源树设计与功耗估算

电源树设计,说白了就是给板子规划一条能量高速公路。从电池到每个芯片,中间经过哪些转换、降压、滤波,每一步都决定着你这块板子能撑多久。我见过不少项目,功能调通了,一测功耗直接傻眼——电池寿命只有设计目标的十分之一。嗯,问题基本都出在电源树上。

3.1 系统电源架构

先看一个典型的STM32L4电池供电系统长什么样。我习惯把电源树分成三级:

  • 一级:电池输入 —— 锂电池3.7V、干电池3V、纽扣电池3V
  • 二级:主电源转换 —— LDO或DCDC,输出3.3V/1.8V
  • 三级:负载点供电 —— MCU内核、外设、传感器、无线模块

下面这张图是我常用的电源树结构,你可以参考:

电源树架构图 电池输入 (3.0-4.2V) 保护 + 滤波 LDO 3.3V 效率: 70-85% DCDC 3.3V 效率: 85-95% 模拟外设 / 传感器 MCU / 无线模块 关键原则:噪声敏感负载走LDO,大电流负载走DCDC
我的习惯:画电源树时,我会把每个节点的电压、最大电流、静态功耗都标在旁边。这样一眼就能看出瓶颈在哪。

3.2 LDO vs DCDC 怎么选

这个问题几乎每个学员都会问。我的回答很简单:看你的电流需求和噪声容忍度。

对比项 LDO DCDC
效率 低(压差越大越低) 高(85-95%)
输出纹波 极低(< 50μV) 较高(10-50mV)
静态电流 可低至1μA 通常10-100μA
外围器件 只需输入输出电容 需要电感、二极管、反馈电阻
PCB面积 小 大
成本 低 高

我个人的选型原则是这样的:

  • 传感器供电 → LDO。ADC采样精度要求高,纹波必须压住。
  • MCU核心供电 → DCDC。STM32L4跑起来几十mA,DCDC能省不少电。
  • 待机供电 → LDO。待机时电流只有几μA,DCDC的静态电流反而成了负担。
我曾经踩过的坑:在一个温湿度采集器项目里,我图省事全板用了LDO。结果3.7V锂电池降到3.3V,效率只有89%,待机功耗比预期高了30%。后来把MCU供电换成DCDC,电池寿命从8个月延长到了14个月。

3.3 典型功耗模型

要估算电池寿命,先得搞清楚系统在不同状态下的功耗。STM32L4的功耗模型可以分成四个状态:

  1. 运行模式:CPU全速跑,外设全开。电流约5-15mA。
  2. 睡眠模式:CPU停,外设保持。电流约500μA-2mA。
  3. 停止模式:大部分时钟关,保留RAM。电流约1-5μA。
  4. 待机模式:几乎全关,只有RTC。电流约0.3-1μA。

实际项目中,系统不会一直待在一个状态。我一般用时间加权平均法来估算:

// 功耗估算示例
// 假设一个传感器节点每10分钟采集一次

float I_run   = 8.0;   // mA,运行模式电流
float I_sleep = 1.2;   // mA,睡眠模式电流
float I_stop  = 0.003; // mA,停止模式电流

float T_run   = 0.05;  // 小时,每次采集耗时3秒
float T_sleep = 0.01;  // 小时,睡眠等待
float T_stop  = 0.106; // 小时,剩余时间

float I_avg = (I_run * T_run + I_sleep * T_sleep + I_stop * T_stop) / (T_run + T_sleep + T_stop);
// 结果约 0.045 mA = 45 μA

关键结论:待机时间占90%以上的系统,平均功耗基本由待机电流决定。所以优化待机电流比优化运行电流更有效。

3.4 电池寿命估算

有了平均功耗,电池寿命就好算了。公式很简单:

电池寿命(小时) = 电池容量(mAh) / 平均电流(mA)

但实际要考虑几个因素:

  • 电池自放电:锂电池每月约1-2%,干电池约0.5-1%。
  • 温度影响:低温下电池容量会下降,0°C时可能只剩60%。
  • 截止电压:电池不能放空,一般留10-20%余量。

我习惯用一个更保守的公式:

// 实际可用容量 = 标称容量 × 温度系数 × 截止系数
float C_nominal = 2000;   // mAh,18650锂电池
float K_temp    = 0.85;   // 假设工作温度0-40°C
float K_cutoff  = 0.90;   // 留10%余量

float C_actual = C_nominal * K_temp * K_cutoff;
// 结果约 1530 mAh

float I_avg = 0.045;      // mA,上一步算出的平均电流
float life_hours = C_actual / I_avg;
float life_days  = life_hours / 24;
// 结果约 1416 天 ≈ 3.9 年
我的经验:理论估算值通常比实际偏大20-30%。因为电池老化、温度波动、PCB漏电都会吃掉容量。所以我一般会在估算值上再打八折作为设计目标。

3.5 实战中的电源优化技巧

最后分享几个我在项目中用过的实用技巧:

  • 动态电压调节:STM32L4支持在运行时切换内核电压。跑低频时用1.2V,跑高频时用1.8V,能省20-30%功耗。
  • 外设电源域管理:不用的外设直接关掉时钟,别只靠软件使能。我见过有人开了SPI时钟没关,白白多耗了200μA。
  • LDO选型注意:选静态电流低的LDO,比如TPS7A02,静态只有25nA。普通LDO静态可能到几μA,待机时就成了主要耗电来源。
  • DCDC轻载效率:有些DCDC在轻载(<1mA)时效率会掉到50%以下。选型时要看效率曲线,别只看满载数据。
再提醒一句:电源树设计不是一次搞定的。我建议在原理图阶段就搭好功耗模型,每加一个器件就更新一次估算。等板子回来再测,发现不对就晚了。