2. 功耗基础
TinyML 项目的续航焦虑,本质上是对功耗模型缺乏系统认知。很多工程师在实验室里测得的电流数据“很好看”,一旦部署到真实场景,电池续航却断崖式下跌。这往往不是因为某个外设耗电异常,而是因为对嵌入式系统功耗的构成缺乏结构性理解。本章将拆解功耗的物理来源——动态功耗与静态功耗,并厘清电压、频率、电流三者之间的耦合关系,为后续章节的功耗测量、优化策略和电池选型打下坚实的理论基础。
上图展示了嵌入式系统功耗的两大来源:动态功耗与静态功耗。动态功耗源于 CMOS 电路翻转时对负载电容充放电,静态功耗则源于晶体管泄漏电流。两者在 TinyML 设备的不同工作模式下占比截然不同——活跃推理时动态功耗占主导,而深度睡眠时静态功耗决定续航底线。理解这一模型,是后续所有功耗优化工作的出发点。
2.1 动态功耗:TinyML 推理的能量主战场
动态功耗(Dynamic Power)是 CMOS 数字电路在信号翻转时产生的功耗。其物理本质是:每当门电路输出从 0 变为 1 或从 1 变为 0,都需要对下一级门的输入电容和布线寄生电容进行充放电。这个过程的能量消耗与翻转频率成正比,与电压的平方成正比。
核心公式:
P_dynamic = α · C_L · V² · f
其中:α 为活动因子(0~1),表示平均每个时钟周期内信号翻转的概率;C_L 为负载电容(法拉);V 为电源电压(伏特);f 为时钟频率(赫兹)。
在 TinyML 场景中,动态功耗的典型特征如下:
- α 与数据相关:执行卷积运算时,MAC(乘累加)单元持续翻转,α 接近 0.5;而等待 DMA 传输时,总线空闲,α 可能低于 0.1。
- C_L 由硬件决定:芯片制造完成后,C_L 基本固定,但外接总线和 I/O 引脚会显著增加额外电容。
- V 的平方效应:电压从 1.8V 降至 1.2V,动态功耗降至原来的 (1.2/1.8)² ≈ 44%。这是 DVFS(动态电压频率调节)的理论基础。
- f 与性能的权衡:频率翻倍,动态功耗翻倍,但任务执行时间减半,因此单次任务的能量消耗(E = P × t)保持不变。
2.2 静态功耗:待机续航的隐形杀手
静态功耗(Static Power)是指电路在没有信号翻转时仍然消耗的功率,来源于晶体管的泄漏电流。随着半导体工艺从 180nm 缩小到 28nm 甚至更小,静态功耗在总功耗中的占比急剧上升。
| 泄漏类型 | 物理机制 | TinyML 设备中的典型表现 |
|---|---|---|
| 亚阈值泄漏 | 栅极电压低于阈值电压时,源漏间仍有微弱电流 | MCU 深度睡眠时的主要漏电路径 |
| 栅极泄漏 | 栅氧化层极薄,电子隧穿形成栅极电流 | 先进工艺节点(≤28nm)中显著 |
| PN 结反向漏电 | 源/漏与衬底之间的反向偏置二极管漏电 | 温度升高时指数级增长 |
| 偏置电流 | 模拟电路(LDO、运放、基准源)的静态工作电流 | 传感器信号链常开时不可忽略 |
静态功耗对 TinyML 设备的影响尤为关键:一个典型的 Cortex-M4 内核 MCU,在 3.3V 供电下,活跃模式电流可能为 10mA,而深度睡眠模式电流可低至 2μA。如果设备每天只进行 10 次推理(每次 100ms),其余时间全部处于深度睡眠,那么静态功耗将决定 99.9% 时间的能量消耗。
温度陷阱:泄漏电流与温度呈指数关系。在 25°C 环境下测得的 2μA 待机电流,在 45°C 的户外设备外壳内可能飙升至 8μA。这意味着实验室测试数据必须乘以一个温度修正系数,才能用于真实场景的续航估算。
2.3 电压、频率、电流的三角关系
电压、频率、电流三者并非独立变量,而是通过功耗模型紧密耦合。理解这种耦合关系,是进行功耗调优的前提。
电压与频率的关系:数字电路的最高工作频率受限于信号传播延迟,而传播延迟与电压负相关。电压越低,门电路翻转越慢,可支持的最高频率越低。因此,DVFS 策略中,电压和频率必须成对调整:降低频率时,可以同步降低电压以节省功耗;提高频率时,必须相应提高电压以保证时序收敛。
电流与功耗的关系:总电流 I_total = I_dynamic + I_static,其中 I_dynamic = α · C_L · V · f,I_static = I_leak。注意,动态电流与电压成正比(而非平方),因为 P = I × V,而 P_dynamic = α · C_L · V² · f,所以 I_dynamic = α · C_L · V · f。
实际测量中的换算:在嵌入式系统中,我们通常测量电流而非功率。若系统供电电压为 3.3V,测得平均电流为 15mA,则平均功耗为 49.5mW。若电池容量为 500mAh(标称 3.7V),则理论续航为:
电池能量 = 500mAh × 3.7V = 1850mWh
系统功耗 = 49.5mW
理论续航 = 1850mWh / 49.5mW ≈ 37.4 小时
但实际续航往往低于理论值,原因包括:电池放电效率、DC-DC 转换损耗、温度对电池容量的影响、以及系统功耗的动态波动。
2.4 实战案例:智能门锁的功耗模型拆解
我们以一个典型的 TinyML 智能门锁项目为例,演示如何运用功耗模型进行系统级分析。
项目背景与约束:该门锁采用 Nordic nRF52840(Cortex-M4F,64MHz),搭载低功耗摄像头进行人脸识别。电池为 2 节 AA 碱性电池(串联 3.0V,容量约 2000mAh)。目标续航为 12 个月。门锁每天被触发约 20 次,每次触发执行一次完整的人脸识别流程。
初始测量数据:
| 工作模式 | 电流 | 持续时间 | 单次能量 |
|---|---|---|---|
| 深度睡眠(RTC 唤醒) | 1.5μA | 待机 24h | 1.5μA × 3V × 24h = 0.108mWh |
| 摄像头捕获 | 85mA | 500ms | 85mA × 3V × 0.5s = 127.5mWs ≈ 0.035mWh |
| 推理计算(64MHz) | 12mA | 350ms | 12mA × 3V × 0.35s = 12.6mWs ≈ 0.0035mWh |
| 无线发送结果 | 18mA | 80ms | 18mA × 3V × 0.08s = 4.32mWs ≈ 0.0012mWh |
分析过程:每天总能量消耗 = 待机 0.108mWh + 20 次 × (0.035 + 0.0035 + 0.0012)mWh = 0.108 + 20 × 0.0397 = 0.108 + 0.794 = 0.902mWh。电池总能量 = 2000mAh × 1.2V(平均放电电压)× 2 节 = 4800mWh(实际可用约 70%,即 3360mWh)。理论续航 = 3360 / 0.902 ≈ 3725 天 ≈ 10.2 年。
结果对比与风险:理论续航远超 12 个月目标,但实际部署后仅 4 个月就出现低电量报警。排查发现:
- 温度影响:户外安装,夏季高温导致深度睡眠电流从 1.5μA 升至 6μA,待机功耗增加 4 倍。
- 电池自放电:碱性电池年自放电率约 5%,两年损失 10% 容量。
- 摄像头漏电:摄像头电源控制 MOS 管关断不彻底,产生 120μA 的额外漏电流。
优化措施:将摄像头电源改为负载开关(如 TPS62742),彻底切断漏电路径;将深度睡眠模式从 RTC-only 改为 RTC + 保留 4KB RAM(关闭所有外设时钟),待机电流降至 0.8μA;同时将推理频率从 64MHz 降至 32MHz,推理时间从 350ms 增至 620ms,但单次推理能量从 0.0035mWh 降至 0.0028mWh(因为电压可从 1.8V 降至 1.2V)。
复盘经验:功耗模型不能只看典型值,必须考虑温度漂移、外设漏电、电源转换效率三个“隐藏变量”。实验室测得的功耗数据,在真实场景中可能偏差 3~5 倍。
2.5 常见误区与设计要点
在嵌入式功耗工程中,以下误区最为常见,需要特别警惕:
误区一:只关注峰值电流,忽略平均电流。TinyML 设备大部分时间处于待机状态,峰值电流只持续几十毫秒。决定续航的是平均电流,而非峰值。正确做法是使用功耗分析仪记录完整工作周期的电流波形,计算积分能量。
误区二:盲目降低频率来省电。降低频率确实降低动态功耗,但会延长任务执行时间。对于计算密集型任务,E = P × t,频率减半、时间翻倍,总能量几乎不变。真正的省电手段是降低电压,或让系统尽快进入睡眠状态。
设计要点:在 TinyML 项目中,优先考虑“快进快出”策略——以最高频率快速完成推理,然后立即进入深度睡眠。这比用低频慢跑更省电,因为静态功耗在睡眠模式下远低于活跃模式。