3、功耗基础概念:动态功耗、静态功耗、能量与功率的区别、mW与mJ等关键指标

TinyML 设备通常以电池供电或依赖能量采集,功耗直接决定了产品的续航、散热与部署可行性。然而,许多工程师在 profiling 时只盯着“电流读数”,却混淆了功率与能量、动态与静态功耗的边界,导致优化方向错误。本章从物理定义出发,厘清功耗的构成与度量单位,为后续定位推理瓶颈打下基础。

TinyML 功耗构成与度量关系图 功耗分类 动态功耗 (P_dyn) P = α·C·V²·f 来源:晶体管开关、 电容充放电、短路电流 与时钟频率、电压强相关 静态功耗 (P_static) P = V · I_leakage 来源:漏电流、亚阈值 泄漏、栅极漏电 与温度、工艺、电压相关 度量指标 功率 (Power) — mW 瞬时速率:单位时间能耗 能量 (Energy) — mJ 累计总量:功率×时间 电流 (Current) — mA 实测基础:I = P / V 关键:mW 与 mJ 不可混用 核心公式 P_total = P_dyn + P_static E = P × t 1 mJ = 1 mW × 1 s 推理能耗 = 平均功率 × 延迟 能效比 = 推理次数 / 能量 示例: 50mW 运行 20ms → 1mJ 10mW 运行 100ms → 1mJ 能量相同,但体验不同

3.1 动态功耗与静态功耗:物理本质与工程意义

动态功耗(Dynamic Power)是芯片在工作时因晶体管开关、电容充放电而产生的功耗。其经典表达式为 P_dyn = α·C·V²·f,其中 α 是活动因子(即每个时钟周期内发生翻转的晶体管比例),C 是负载电容,V 是供电电压,f 是时钟频率。在 TinyML 推理过程中,MAC(乘累加)运算密集,数据在寄存器、SRAM 与总线之间频繁搬运,α 和 C 都处于高位,因此动态功耗通常占据总功耗的 70%~90%。

静态功耗(Static Power)则源于晶体管的漏电流,即使芯片处于空闲状态也会持续消耗。其表达式为 P_static = V × I_leakage,其中 I_leakage 包括亚阈值泄漏、栅极泄漏和结泄漏。在先进工艺节点(如 28nm 以下)或高温环境下,静态功耗占比会显著上升。对于 TinyML 设备而言,如果推理任务只是间歇性触发,大部分时间处于待机状态,静态功耗反而可能成为续航的“隐形杀手”。

工程判断方法: 要区分动态与静态功耗,可做两组实验。第一组:将芯片时钟频率降为 0(或进入时钟门控状态),此时测得的功耗近似为静态功耗。第二组:在正常频率下运行同一推理任务,测得总功耗减去静态功耗即为动态功耗。若静态功耗占比超过 30%,应优先考虑低功耗待机模式或电源域隔离。

3.2 功率与能量:mW 与 mJ 的本质区别

功率(Power)是单位时间内消耗的能量,单位是瓦特(W)或毫瓦(mW),描述的是“消耗的速率”。能量(Energy)是累计消耗的总量,单位是焦耳(J)或毫焦(mJ),描述的是“消耗的总量”。两者的关系为:E = P × t。在 TinyML profiling 中,这个区别至关重要——一个设备可能瞬时功率很高(例如 500mW),但推理只需 10ms,总能量仅 5mJ;另一个设备瞬时功率只有 50mW,但推理需要 200ms,总能量却达 10mJ。从电池续航角度看,后者反而更耗电。

指标单位物理含义TinyML 中的典型场景
功率mW单位时间能耗速率峰值功率决定电源/电池的瞬时输出能力
能量mJ累计能耗总量单次推理能耗决定电池可执行的总次数
电流mA电荷流动速率实测基础数据,通过 I = P/V 换算
能效比ops/mJ每毫焦耳可执行的运算次数衡量算法与硬件匹配度的核心指标

在实际 profiling 中,工程师常犯的错误是只记录平均功率而忽略推理延迟。例如,优化前平均功率 80mW、推理时间 30ms,能耗为 2.4mJ;优化后平均功率 100mW、推理时间 15ms,能耗为 1.5mJ。虽然功率上升了 25%,但能量反而下降了 37.5%,这才是真正的优化。因此,所有功耗优化都应围绕“能量”而非“功率”展开。

3.3 关键指标解读:从数据手册到实测数据

MCU 数据手册中通常会给出多个功耗参数:工作模式下的 mA/MHz、深度睡眠模式的 μA、以及不同电压下的静态电流。这些参数是理论参考,但实际值会因温度、代码路径、外设状态而偏离。在 profiling 时,应关注以下关键指标:

  • 工作模式功耗(Active Mode):CPU 运行时的功耗,通常以 mA/MHz 表示。例如某 Cortex-M4 内核在 3.3V 下为 0.3mA/MHz,运行在 80MHz 时电流约 24mA,功率约 79mW。
  • 睡眠模式功耗(Sleep Mode):CPU 停止但 SRAM 保持时的功耗。TinyML 推理间隙应尽快进入此状态。
  • 深度睡眠功耗(Deep Sleep):仅 RTC 和少量唤醒逻辑工作,通常在 μA 级别。这是待机状态的目标功耗。
  • 外设功耗:传感器、无线模块(BLE/WiFi)、LED 等外设的功耗往往超过 MCU 本身。例如 BLE 广播峰值电流可达 15mA,远超 MCU 核心。
实测建议: 使用高精度电流探头(如 Nordic Power Profiler Kit 或 Joulescope)测量真实电流波形。不要只读万用表的平均值,因为推理过程中的电流峰值可能达到平均值的 5~10 倍,这会直接影响电源设计。

3.4 案例拆解:一次“功率正常但续航短”的排查

背景与约束: 某智能传感器节点采用 STM32L4 系列 MCU,运行一个 20KB 的 CNN 模型进行关键词识别。设备由 200mAh 纽扣电池供电,设计要求待机电流低于 10μA,可连续工作 6 个月以上。实际测试发现,设备充满电后仅工作 3 周便耗尽。

初始现象与数据: 使用 Joulescope 测量整个工作周期(每 5 秒唤醒一次,每次推理约 40ms)的电流波形。测得平均电流为 1.2mA,远高于设计预期的 0.05mA。进一步拆解:推理期间平均电流 25mA(持续 40ms),待机期间电流 0.8mA(持续 4960ms)。

分析判断过程: 待机电流 0.8mA 明显异常——STM32L4 的 STOP 模式理论待机电流应低于 5μA。通过逐项排查发现,GPIO 引脚 PA2 被配置为模拟输入但未连接外部电路,导致引脚悬空,产生约 0.5mA 的漏电流;同时,I2C 总线上的温湿度传感器未进入睡眠模式,额外消耗 0.3mA。

实际操作步骤:

  1. 将悬空 GPIO 配置为数字输出并拉低,消除引脚漏电。
  2. 在推理完成后,通过 I2C 命令将传感器置于睡眠模式。
  3. 在代码中增加 __WFI() 指令,确保 CPU 在等待期间进入 STOP 模式。
  4. 重新测量:待机电流降至 4μA,平均电流降至 0.21mA。

结果对比: 优化前平均功率 = 1.2mA × 3.3V = 3.96mW;优化后平均功率 = 0.21mA × 3.3V = 0.693mW。电池理论续航从 200mAh / 1.2mA ≈ 166 小时(约 7 天)提升至 200mAh / 0.21mA ≈ 952 小时(约 40 天)。虽然仍低于 6 个月目标,但已大幅改善。后续通过降低推理频率(每 30 秒一次)和优化模型(将 CNN 从 20KB 压缩至 12KB,推理时间从 40ms 降至 25ms),最终达到设计目标。

风险与代价: 降低推理频率会牺牲实时性;模型压缩可能带来 1%~2% 的准确率损失。此外,GPIO 拉低后若外部电路需要高电平信号,可能引发功能异常,需仔细核对原理图。

复盘经验: 功耗 profiling 不能只看“工作时的功率”,必须将待机功耗纳入总能量计算。本案例中,待机功耗占总能耗的 94%(0.8mA × 4960ms vs 25mA × 40ms),优化待机比优化推理效率更关键。

3.5 常见误区与总结复盘

误区一: 将“降低峰值功率”作为首要目标。实际上,只要电源能承受峰值电流,降低平均能量才是续航关键。
误区二: 忽略电压的影响。动态功耗与电压的平方成正比,将核心电压从 3.3V 降至 1.8V,动态功耗可降低约 70%。但需注意外设和 Flash 的电压兼容性。
误区三: 混淆 mW 和 mJ。在汇报优化成果时,必须同时给出功率和延迟,否则无法计算能量。
误区四: 只测 MCU 功耗,忽略外设。在 TinyML 系统中,传感器和无线模块的功耗往往占主导。