2. 嵌入式低功耗基础

在 RT-Thread 低功耗系统工程中,第一步不是急着调用 rt_pm_request(),而是建立对“电到底耗在哪里”的量化认知。只有把功耗拆解为可测量、可建模、可优化的分量,后续的 Tickless 空闲、外设时钟门控、睡眠模式切换才有明确的收益判断依据。本节从物理来源出发,逐步建立动态功耗、静态功耗、能效指标与电池寿命估算的完整分析链条。

一、功耗来源:一颗 MCU 的电都去了哪里

嵌入式系统的总功耗可以按“是否与开关活动相关”划分为两大类:动态功耗与静态功耗。动态功耗来自晶体管翻转、时钟树翻转、总线与存储访问、外设工作;静态功耗来自漏电流、偏置电路、稳压器静态电流、RTC 与唤醒逻辑的常驻供电域。二者叠加构成芯片数据手册中的电流曲线。

更工程化地看,功耗来源可细分为五条路径:

  • 内核与总线动态功耗:CPU 主频、指令执行、Flash 取指、SRAM 访问,与频率和电压强相关。
  • 时钟树功耗:即使外设不工作,只要时钟使能,时钟树翻转就持续耗电。
  • 外设工作功耗:ADC、UART、SPI、LCD、射频等按工作占空比消耗。
  • 静态漏电功耗:工艺越先进漏电占比越高,深睡时往往成为主导项。
  • 电源转换损耗:LDO 压差、DC-DC 轻载效率、电池内阻损耗。
关键结论:动态功耗与“活动量×频率×电压²”成正比,静态功耗与“供电域是否上电、温度、工艺”相关。低功耗优化的本质,是让系统尽可能停留在静态功耗主导的状态,并压缩动态功耗的持续时间。

二、动态功耗与静态功耗的数学表达

动态功耗的经典模型为:

P_dynamic = α · C · V² · f + P_short
其中:
  α   —— 翻转活动因子(0~1)
  C   —— 等效负载电容
  V   —— 供电电压
  f   —— 时钟频率
  P_short —— 短路功耗(瞬态导通)

P_static = V · I_leak(T, V, process)
总功耗 P_total = P_dynamic + P_static + P_peripheral

由公式可见三条优化主线:降电压(平方收益,但受限于最低工作电压与稳定性)、降频率(线性收益,但会拉长任务时间,需权衡能量而非功率)、降活动因子(关闭时钟、门控外设、减少无效轮询)。RT-Thread 的 PM 组件正是围绕“降活动因子”和“切换供电状态”来落地这三条主线。

三、能效指标:不要只看电流,要看能量

很多工程师习惯用“平均电流”评价低功耗,这并不充分。真正决定电池寿命的是能量,即功率对时间的积分。常用能效指标包括:

  • 平均电流 I_avg:适合快速对比,但忽略电压变化。
  • 能量/任务 E_task:完成一次采集+上报消耗的 mJ,是算法与调度优化的核心指标。
  • 能效比:每 MHz 或每 MIPS 消耗的 mA,用于比较不同频率档位。
  • 唤醒开销:从深睡到可运行的时间与额外电荷,决定睡眠粒度是否划算。
  • 占空比:活动时间 / 周期时间,直接决定平均功耗量级。

下图给出一个典型传感节点的功耗构成与状态迁移关系,帮助建立“状态—功耗—时间”的联合视角。

传感节点功耗构成与状态迁移 功耗来源分解 内核/总线动态功耗 α·C·V²·f 时钟树翻转功耗 门控可显著降低 外设工作功耗 按占空比折算 静态漏电功耗 深睡时主导 电源转换损耗 LDO/DC-DC 效率 P_total = P_dyn + P_static + P_periph 运行状态与电流量级 Run 全速运行 ~10 mA @ 64MHz Sleep 空闲睡眠 ~1.2 mA 时钟停 DeepSleep 深睡 ~20 µA 保留RAM Standby 待机 ~2 µA RTC 唤醒 越深睡眠 → 电流越低,唤醒越慢 能效与寿命估算 平均电流 I_avg = Σ(Iᵢ·tᵢ)/T 按占空比加权 电池寿命 T = C_bat / I_avg 需扣除自放电与老化 能量/任务 E = ∫V·I dt 比平均电流更本质 唤醒开销 t_wake 与额外电荷

四、电池寿命估算:从公式到工程修正

最简估算模型是 T = C_bat / I_avg,但工程中必须做三类修正:

  1. 电池可用容量修正:标称 2000 mAh 的锂锰电池在低温、大脉冲电流下有效容量可能只有 70%~85%。
  2. 自放电与老化:年自放电约 1%~3%,长期部署需按 0.9 系数折算。
  3. 脉冲电流与内阻压降:射频发射瞬间数百 mA,若内阻大可能触发欠压复位,需并联电容缓冲。

以一个每秒唤醒采集一次、每次活动 5 ms、活动电流 8 mA、深睡电流 15 µA 的节点为例:

占空比 D = 5ms / 1000ms = 0.005
I_avg = 8mA × 0.005 + 0.015mA × 0.995
      = 0.040 + 0.0149
      ≈ 0.055 mA = 55 µA

电池 1200 mAh,修正系数 0.85:
T ≈ 1200 × 0.85 / 0.055 ≈ 18545 h ≈ 2.1 年

若把唤醒周期从 1 s 放宽到 10 s,活动占比下降,I_avg 可降至约 19 µA,寿命提升到约 6 年。这说明降低唤醒频率往往比优化单次活动电流收益更大,但需与业务实时性要求折中。

五、常见低功耗应用场景与策略对照

应用场景 典型功耗约束 主导功耗来源 推荐策略
无线传感器节点 µA 级平均,电池数年 射频发射 + 唤醒占空比 Tickless + 深睡 + 批量上报
可穿戴手环 数天续航,响应及时 屏幕、传感器、BLE 动态调频 + 外设门控 + 运动唤醒
智能表计 10 年免维护 静态漏电 + RTC Standby + 事件驱动抄表
工业手持终端 单班次续航 CPU 与显示 空闲降频 + 背光自适应
资产追踪器 月级续航,定位精度优先 GNSS 与蜂窝 运动触发 + 地理围栏 + 快速定位

六、常见误区与复盘要点

误区一:只看数据手册的典型电流。手册值通常在 25℃、特定电压、无外设条件下测得,实际板级漏电、上拉电阻、LED 指示灯可能让静态电流翻数倍。

误区二:认为睡眠越深越好。深睡唤醒需要重新配置时钟与 PLL,若唤醒频繁,唤醒能耗可能超过节省的睡眠能耗。应计算“盈亏平衡睡眠时长”。

误区三:忽略 GPIO 漏电。悬空输入、未关闭的上拉、外部模块供电未切断,都会在深睡时形成 µA 级漏电,累积后显著缩短寿命。

复盘方法:用功率分析仪或电流探头记录完整工作周期的电流波形,按状态分段积分得到各状态电荷量,再与理论模型对比。差异最大的那一段,就是下一轮优化的首要目标。RT-Thread 的 PM 框架提供了状态切换与超时管理能力,但前提是你能准确说出每个状态的电流与停留时间。

掌握本节内容后,你应当能够:把系统功耗拆成动态与静态两部分;用 α·C·V²·f 判断优化方向;用平均电流与能量/任务两个指标评估方案;用修正后的电池寿命公式做工程估算;并针对具体场景选择合理的睡眠深度与唤醒策略。这些是后续在 RT-Thread 中配置 PM 组件、编写低功耗驱动与验证功耗指标的基础。