2. TinyML功耗基础
TinyML设备通常以电池供电或依赖能量采集,功耗预算往往被限制在毫瓦甚至微瓦级别。要在这样的约束下实现可持续的推理任务,不能仅靠算法层面的优化,更需要对底层硬件——MCU的功耗行为有系统而精确的理解。本章将拆解MCU功耗的构成要素,建立从物理机制到工程标定的完整认知框架,为后续章节中阈值、采样率与推理频率的联合调优奠定理论基础。
2.1 MCU功耗模型:从物理机制到工程公式
MCU的总功耗由三部分构成:动态功耗、静态功耗和外设功耗。动态功耗源于CMOS电路在逻辑翻转时对负载电容充放电所消耗的能量,其表达式为 P_dyn = α·C·V²·f,其中α为信号翻转率(0~1),C为等效负载电容,V为供电电压,f为时钟频率。值得注意的是,电压以平方项进入公式,这意味着降低电压对功耗的削减效果远大于降低频率。例如,将电压从1.8V降至1.2V(降幅33%),动态功耗理论上可降低约56%,而频率从100MHz降至50MHz仅能降低50%。
静态功耗则来源于晶体管的漏电流,包括亚阈值漏电、栅极漏电和PN结漏电。在先进制程(如28nm以下)中,静态功耗占比显著上升;而在TinyML常用的40nm~180nm成熟制程中,静态功耗虽占比相对较低,但在深度睡眠模式下仍是主要消耗。静态功耗与温度强相关,温度每升高10°C,漏电流约翻倍,这在高密度部署或户外场景中必须纳入考量。
外设功耗是TinyML系统中容易被忽视的部分。一个典型的IMU传感器在测量模式下的电流可能达到0.5~2mA,而MCU核心在低功耗运行时的电流可能仅为0.1~0.5mA。无线模块(如BLE)的峰值电流更是可达10~20mA。因此,外设功耗往往决定了系统的峰值电流和平均功耗上限。
2.2 动态功耗与静态功耗的权衡:DVFS与睡眠模式
DVFS(Dynamic Voltage and Frequency Scaling)是TinyML设备最核心的功耗管理手段。其基本原理是:根据当前计算负载动态调整供电电压和时钟频率,使MCU工作在“刚好满足性能需求”的工作点上。实现DVFS需要MCU内部集成可调压的电源管理单元(PMU)或使用外部可调压的DC-DC转换器。常见的实现方式包括:
- 运行模式(Active):全速运行,电压和频率均为最高值,适用于推理计算阶段。
- 空闲模式(Idle):CPU时钟停止,外设时钟继续运行,电压可适当降低,适用于等待外设事件。
- 睡眠模式(Sleep):CPU和大部分外设时钟停止,仅保留低功耗定时器或唤醒源,电压降至最低维持值。
- 深度睡眠模式(Deep Sleep):仅保留RTC和少量唤醒逻辑,静态功耗降至最低,适用于长时间待机。
DVFS的调节策略需要权衡响应时间与功耗。例如,在推理任务到达前,MCU处于深度睡眠(功耗约1µA);当传感器数据准备好时,通过中断唤醒MCU,快速提升电压和频率至运行模式(功耗约10mA),完成推理后再次降频并进入睡眠。这个“唤醒-计算-睡眠”的循环中,唤醒时间和电压爬升时间决定了功耗开销的边界。
| 工作模式 | 电压范围 | 频率范围 | 典型功耗 | 唤醒时间 | 适用场景 |
|---|---|---|---|---|---|
| 运行(Active) | 1.2~1.8V | 16~100MHz | 5~50mW | — | 推理计算、数据预处理 |
| 空闲(Idle) | 1.0~1.2V | 外设时钟运行 | 1~5mW | 1~5µs | 等待DMA传输、外设事件 |
| 睡眠(Sleep) | 0.9~1.0V | 仅低功耗定时器 | 10~100µW | 5~20µs | 周期性采样等待 |
| 深度睡眠(Deep Sleep) | 0.7~0.9V | 仅RTC | 1~10µW | 50~200µs | 长时间待机、事件驱动唤醒 |
2.3 外设功耗特性:传感器、ADC与无线模块的功耗画像
TinyML系统的外设功耗往往占据总功耗的40%~70%。以典型的环境监测节点为例:一个温湿度传感器(如SHT30)在测量模式下的电流为1.5mA,待机电流仅0.2µA;一个9轴IMU(如MPU9250)在低功耗模式下的电流为3.5µA,但全速测量时可达3.7mA;BLE模块在TX时的峰值电流为15mA,RX监听时为5mA,而睡眠时仅为1µA。这些外设的功耗差异巨大,且与采样频率、通信频率直接相关。
ADC的功耗与采样率和分辨率密切相关。大多数MCU内置的12位ADC在1MSPS采样率下功耗约为1~2mW,但若将采样率降至10kSPS,功耗可降至0.1mW以下。此外,ADC的参考电压源和内部放大器在采样间隙应被关闭,以节省功耗。外设时钟门控(Peripheral Clock Gating)是MCU提供的一项关键功能,允许软件独立关闭未使用外设的时钟,从而消除其动态功耗。
2.4 案例拆解:智能穿戴设备的心率监测功耗优化
某智能手环需要实现连续心率监测,硬件平台采用Cortex-M4F内核MCU(最高运行于64MHz),搭配光学心率传感器(峰值电流2.5mA,待机电流0.5µA)和BLE模块(TX峰值15mA)。初始方案中,MCU以64MHz全速运行,传感器以25Hz采样率连续工作,BLE每100ms广播一次数据。实测平均功耗为8.2mW,电池容量为100mAh,理论续航仅约5天,远低于产品要求的14天。
通过功耗分析仪抓取电流曲线,发现功耗分布如下:MCU核心运行功耗占35%(约2.9mW),传感器采样功耗占28%(约2.3mW),BLE广播功耗占30%(约2.5mW),其他外设和静态功耗占7%。进一步分析发现,MCU在两次采样之间的空闲时间内仍处于运行模式,而传感器在每次采样后未及时进入待机状态。
优化措施分为三步:
- DVFS动态调频:将MCU在采样间隙从64MHz降至16MHz,电压从1.8V降至1.2V,仅在每次推理计算时提升至64MHz。MCU核心功耗降至1.1mW。
- 传感器占空比控制:将采样率从25Hz降至10Hz(满足心率信号带宽需求),并在每次采样完成后立即将传感器切换至待机模式。传感器平均功耗降至0.9mW。
- BLE事件合并:将广播间隔从100ms延长至200ms,并采用连接事件模式而非广播模式,BLE平均功耗降至1.2mW。
优化后,系统平均功耗降至3.5mW,理论续航提升至约14.3天,满足产品要求。整个优化过程中,功耗分析仪的数据起到了关键作用——没有精确的电流曲线,很难定位到MCU空闲运行和传感器待机缺失这两个主要问题。
2.5 常见误区与总结
在TinyML功耗优化实践中,工程师常陷入以下误区:
- 误区一:只关注MCU核心功耗。实际上,外设功耗和电源转换效率(DC-DC或LDO的损耗)往往占据总功耗的30%~50%。
- 误区二:认为降低频率一定降低功耗。如果电压不随之降低,频率降低只会延长运行时间,总能耗(功率×时间)可能不变甚至增加。
- 误区三:忽视唤醒开销。频繁进入深度睡眠再唤醒,唤醒期间的电压爬升和时钟稳定时间会消耗额外能量。若睡眠时间短于唤醒开销的“盈亏平衡点”,不如保持空闲模式。
- 误区四:忽略温度对静态功耗的影响。在高温环境下,静态功耗可能翻倍,导致续航显著缩短。