1. 低功耗基础概念:RTOS功耗模型、MCU睡眠模式与电流电压关系
各位同学,咱们今天开篇先聊点基础。别觉得基础就简单,我做了十几年低功耗项目,发现很多坑其实都出在基础概念没吃透上。你想想看,如果连MCU睡多深、电流怎么算都没搞明白,后面调待机电流的时候,那真是两眼一抹黑。
1.1 RTOS下的功耗模型
RTOS系统跟裸机最大的区别是什么?裸机要么跑要么睡,简单粗暴。RTOS呢?它有一堆任务在排队,还有Tick中断在定时唤醒。所以RTOS的功耗模型,说白了就是“谁在占用CPU,CPU在干什么”。
我个人习惯把RTOS功耗拆成三个部分:
- 活跃功耗:CPU正在跑任务代码,外设也在工作。这时候电流最大,通常几十mA甚至上百mA。
- 空闲功耗:所有任务都挂起了,CPU跑空闲任务。这时候如果空闲任务只是死循环,那功耗跟活跃时差不多。所以必须让空闲任务进睡眠。
- 唤醒开销:从睡眠到恢复执行,这段时间的额外功耗。很多人只盯着睡眠电流,忽略了唤醒那几十微秒的尖峰电流——我在项目中遇到过,一个产品待机电流标称2uA,实测却有5uA,查了半天发现是唤醒太频繁,每次唤醒的尖峰把平均电流拉高了。
核心公式:平均功耗 = (活跃时间 × 活跃电流 + 空闲时间 × 空闲电流 + 唤醒次数 × 唤醒能耗) / 总时间
记住,低功耗优化的本质是缩短活跃时间、降低空闲电流、减少唤醒次数。三者缺一不可。
1.2 MCU睡眠模式分类:Sleep / Stop / Standby
不同MCU厂商的叫法可能不一样,但底层逻辑大同小异。我以最通用的ARM Cortex-M系列为例,把睡眠模式分成三个层级。嗯,这里要注意,每个层级省电的程度不同,但恢复代价也不同。
| 模式 | CPU时钟 | SRAM/寄存器 | 唤醒源 | 唤醒时间 | 典型电流 |
|---|---|---|---|---|---|
| Sleep | 停止 | 保持 | 任意中断 | ~几个时钟周期 | ~mA级 |
| Stop | 停止 | 保持 | 特定外设/RTC | ~几十微秒 | ~uA级 |
| Standby | 掉电 | 丢失 | 复位/特定唤醒引脚 | ~几毫秒 | ~nA级 |
Sleep模式:CPU停了,但外设还在跑,SRAM内容全保留。唤醒最快,但省电有限。适合那种“我随时可能被中断唤醒”的场景。
Stop模式:大部分外设时钟都关了,只有少数几个(比如RTC、LPUART)还在工作。SRAM保持,但唤醒后需要重新配置时钟。这是RTOS低功耗调度最常用的模式。我曾经在一个表计项目里,用Stop模式配合RTC定时唤醒,把平均电流从1.2mA压到了12uA。
Standby模式:最省电,但代价也最大——SRAM内容全丢,相当于系统复位。唤醒后得重新初始化所有东西。这种模式只适合那种“几个月才唤醒一次”的场景,比如烟雾报警器。
避坑指南:我曾经在一个NB-IoT终端项目里,为了追求极致待机电流,直接用了Standby模式。结果发现每次唤醒后重新连网耗时3秒,这3秒的电流高达50mA,反而把平均功耗拉高了。后来改成了Stop模式+RTC唤醒,虽然待机电流多了2uA,但整体续航反而提升了15%。
所以,不要盲目追求最低的睡眠电流,要看整个工作周期的平均功耗。
1.3 电流与电压的关系:不只是欧姆定律
说到电流和电压,大家第一反应肯定是I = U/R。但在低功耗系统里,事情没那么简单。
MCU的功耗由两部分组成:
- 静态功耗:漏电流,跟电压成正比,跟温度强相关。温度每升高10°C,漏电流差不多翻一倍。我在做户外传感器时,夏天40°C和冬天-20°C的待机电流能差3倍。
- 动态功耗:P = C × V² × f。注意,电压是平方关系!所以降压比降频更有效。这也是为什么很多低功耗MCU支持动态电压调节(DVS)。
实战技巧:我建议你在选型时,重点关注MCU的“每MHz功耗”指标。比如一个MCU在48MHz下跑3.6mA,另一个在64MHz下跑4.2mA。算一下:3.6/48 = 0.075 mA/MHz,4.2/64 = 0.066 mA/MHz。后者效率更高。但别忘了,还要看睡眠电流和唤醒时间。
还有一个容易被忽略的点:电源转换效率。你用电池供电,中间肯定有LDO或DC-DC。LDO的静态功耗(Iq)可能就有几个uA,如果MCU待机电流才2uA,那LDO自己就吃掉了一大半。我有个项目,选了个Iq=5uA的LDO,MCU待机电流压到1uA,结果整机待机还是6uA——白忙活了。
1.4 本章知识体系总览
下面这张图,把咱们这一章的核心逻辑串起来了。你可以把它当作后续调试的路线图。
这张图把咱们这一章的内容串起来了。从RTOS功耗模型出发,到三种睡眠模式的选择,再到电流电压的物理本质。后面几章咱们会一步步深入,把这些理论变成能落地的代码和调试方法。
好,第一章就到这里。记住我今天说的三个关键词:平均功耗、唤醒开销、电压平方关系。后面调试的时候,你会反复用到它们。