2. TinyML功耗基础

TinyML设备通常以电池供电或依赖能量采集,功耗预算往往被限制在毫瓦甚至微瓦级别。要在这样的约束下实现可持续的推理任务,不能仅靠算法层面的优化,更需要对底层硬件——MCU的功耗行为有系统而精确的理解。本章将拆解MCU功耗的构成要素,建立从物理机制到工程标定的完整认知框架,为后续章节中阈值、采样率与推理频率的联合调优奠定理论基础。

动态功耗 (P_dyn) 静态功耗 (P_static) 外设功耗 (P_periph) P_dyn = α·C·V²·f · 翻转率 α(信号活动因子) · 负载电容 C(门电路+布线) · 供电电压 V(平方关系!) · 时钟频率 f(线性关系) → DVFS 调节 V 与 f 的核心目标 P_static = V · I_leak · 亚阈值漏电 I_sub · 栅极漏电 I_gate · 结漏电 I_junction · 温度每升10°C,漏电约翻倍 → 低功耗模式(睡眠/深度睡眠) P_periph = Σ P_sensor + P_radio + P_ADC · 传感器:待机 vs 测量电流 · 无线:TX/RX/RX监听电流 · ADC:采样率与转换时间 · 外设时钟门控(Peripheral Clock Gating) → 按需供电与采样调度 P_total = P_dyn + P_static + P_periph TinyML 续航优化的三个杠杆点 策略1:DVFS 降低V与f,匹配负载 注意:V有下限约束 策略2:睡眠调度 空闲即睡眠,唤醒开销 权衡:唤醒时间 vs 功耗 策略3:外设门控 按需开启外设时钟 采样率与推理频率匹配

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。因此,外设功耗往往决定了系统的峰值电流和平均功耗上限。

工程启示:在TinyML续航优化中,不应只盯着MCU核心的功耗数据手册,而应建立“核心+外设+电源转换效率”的系统级功耗模型。数据手册中的功耗值通常在特定电压、温度和负载条件下测得,实际应用中需根据自身工况进行折算。

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 长时间待机、事件驱动唤醒
关键约束:DVFS并非可以无限降低电压。每个MCU都有一个最低工作电压(Vmin),低于该电压会导致SRAM数据丢失或逻辑错误。此外,电压切换需要时间(通常为10~100µs),频繁切换反而会增加功耗。因此,DVFS策略应基于任务周期进行“粗粒度”调节,而非逐指令调节。

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提供的一项关键功能,允许软件独立关闭未使用外设的时钟,从而消除其动态功耗。

功耗画像方法:在项目初期,建议为每个外设建立一张功耗-状态表,记录其在待机、测量、传输、睡眠等状态下的电流值。然后根据目标采样率和推理频率,计算每个外设的占空比,从而估算平均功耗。例如,若IMU以10Hz采样,每次测量耗时2ms,则占空比为2%,平均功耗仅为峰值功耗的2%。

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在两次采样之间的空闲时间内仍处于运行模式,而传感器在每次采样后未及时进入待机状态。

优化措施分为三步:

  1. DVFS动态调频:将MCU在采样间隙从64MHz降至16MHz,电压从1.8V降至1.2V,仅在每次推理计算时提升至64MHz。MCU核心功耗降至1.1mW。
  2. 传感器占空比控制:将采样率从25Hz降至10Hz(满足心率信号带宽需求),并在每次采样完成后立即将传感器切换至待机模式。传感器平均功耗降至0.9mW。
  3. BLE事件合并:将广播间隔从100ms延长至200ms,并采用连接事件模式而非广播模式,BLE平均功耗降至1.2mW。

优化后,系统平均功耗降至3.5mW,理论续航提升至约14.3天,满足产品要求。整个优化过程中,功耗分析仪的数据起到了关键作用——没有精确的电流曲线,很难定位到MCU空闲运行和传感器待机缺失这两个主要问题。

案例复盘:该案例揭示了TinyML功耗优化的三个层次:第一层是算法层(降低采样率、减少推理频率),第二层是硬件配置层(DVFS、外设门控),第三层是调度层(睡眠状态机、事件驱动)。实际项目中,应优先从算法层入手,因为算法层的优化往往能同时降低MCU和外设的功耗,且无需修改硬件。

2.5 常见误区与总结

在TinyML功耗优化实践中,工程师常陷入以下误区:

  • 误区一:只关注MCU核心功耗。实际上,外设功耗和电源转换效率(DC-DC或LDO的损耗)往往占据总功耗的30%~50%。
  • 误区二:认为降低频率一定降低功耗。如果电压不随之降低,频率降低只会延长运行时间,总能耗(功率×时间)可能不变甚至增加。
  • 误区三:忽视唤醒开销。频繁进入深度睡眠再唤醒,唤醒期间的电压爬升和时钟稳定时间会消耗额外能量。若睡眠时间短于唤醒开销的“盈亏平衡点”,不如保持空闲模式。
  • 误区四:忽略温度对静态功耗的影响。在高温环境下,静态功耗可能翻倍,导致续航显著缩短。