本节摘要:微控制器(MCU)是节点的"出纳"和"账房",管着算力、睡眠、外设与协议栈;RAM 与 Flash 则是它记账放数的地方。本节讲清 MCU 的算力定位、工作模式与功耗曲线、降频降压(DVFS)的原理,RAM/Flash 的角色分工,并用一段伪代码展示睡眠-唤醒的省电循环。
感知这一环讲完了,把读数变成决策与报文的"出纳"——MCU 登场。处理和计算这笔账,也要精打细算。
WSN 的任务普遍不重:读个传感器、跑个轻量协议栈、偶尔做一次压缩。因此节点往往用 8 位或 32 位超低功耗 MCU,而不是高性能通用处理器。它最关键的三个"省电开关"我们逐个看。
工作模式与功耗曲线。 典型 MCU 有活动(Active)、空闲(Idle)、睡眠(Sleep)、深度睡眠(Deep Sleep)等档位。几个数量级的差别往往就在模式切换上:

深睡时只有微安级,活动+收发时飙升到数十毫安。多数节点 90% 以上时间应在深睡态,把有限能量集中在"收发那几毫秒"使用,这就是占空比省电的硬件基础。
DVFS(动态电压频率调整)。 计算量小时,同时调低时钟频率与电压,功耗按电压的平方关系下降得很明显。轻量任务用慢频跑完即可;只有突发大计算才拉满频率。简单说就是"量体力活调节奏"。
RAM : 当下要用的数据(热账本) Flash: 程序 + 想留住的数据(存档) 原则: 用多少建多少,避免把"存档"误放 RAM 而丢数据
一种常见坑是把校准值、节点 ID 只放 RAM,掉电全丢。这类"固定数据"应写入 Flash。
初始化外设、读 Flash 配置、入注册 loop: 设置定时唤醒与 GPIO 中断 进入低功耗睡眠(关无关外设) 被定时器唤醒 → 采样一次 → 本地更新 → 再次入睡 被事件中断唤醒 → 高优先级处理 → 尽力快速回到睡眠
这串循环的关键不是代码多复杂,而是**"醒得快、醒得短"**——离开高频、快速处理、马上睡回。很多产品寿命波动,症结就是睡眠时长被"长唤醒周期"悄悄吃掉。
⚠️ 常见坑:为了"省事",在死循环里用忙等待(空转)代替睡眠。空转等于全速跑还在烧电,却没有产出——这是程序层最普遍的浪费。
我用一组粗略数帮你直观感受差异。假设 8 位超低功耗 MCU,活动态约 3mA、深睡态约 2uA。一个节点每 10 分钟醒一次、一次醒 50ms,如果剩下的时间都用空转而非深睡:
用深睡: 平均电流 ≈ (3mA×50ms + 2uA×9min50s)/10min ≈ 0.45mA 量级 用空转: 平均电流 ≈ 3mA 全程 → 高出一个数量级甚至更多
也就是说,同样是"该醒醒、该睡睡",把"睡"落到实处(用深睡而非空转),寿命往往能拉开一个数量级。这正是 2.3 想表达的核心:"会睡觉的代码"顶得上一次硬件升级。
堆栈、缓冲、固件占多少,画一张内存地图很有用:
| 用途 | 放哪 | 注意 |
|---|---|---|
| 运行时变量/栈 | RAM | 占用量越省越好 |
| 采样缓冲 | RAM | 按窗长规划,别超 |
| 程序代码 | Flash | 编译产物大小 |
| 校准/节点ID/累计值 | Flash | 掉电要保住 |
常见风险是把"要永久保留的校准值"只写 RAM,一掉电就丢;或把大缓冲放 RAM 挤爆堆栈导致偶发复位。做一张如上表的内存规划,能把这类雷提前拆掉。
任务一多(同时管传感器、通信、调度),裸机事件循环开始不够用,这时上一款轻量 RTOS 更稳。别因为它"轻量"就小看,FreeRTOS、Contiki 这类都能在小内存上把任务与占空比安排好。判断标准是:单任务且简单→裸机够用;多事件、要维护、有明确优先级→上 RTOS 更省心。这个"该不该升级"的决策,正是 2.6 讲软件栈时的大前提。
挑 MCU 时我问自己三句:需要几路 ADC/串口(外设够不够)、睡眠电流和唤醒时间(省不省)、片上 Flash/RAM 容不容得下协议栈(够不够用)。三者平衡才算合适,而不是越高级越好。高级 MCU 若睡眠特性不优,反而更费电。
多数 MCU 给了睡眠、深度睡眠、保存寄存器关机好几档,很多人图省事一律用"最浅的一档"。真想做账,思路该反过来:能用深档就不吊浅档。
浅睡: 唤醒最快,但电流可能是 uA 级到几十 uA,适合"隔秒就要醒" 深睡: 唤醒慢(几百 us 到 ms),但电流可下探到 nA 级,适合"半天才醒一次" 取舍: 唤醒慢不等同于费电;深睡时多付出的唤醒延迟,往往换回数十倍的睡眠省电
判断口诀:看唤醒频率选档位。 秒级及更快唤醒用浅档,分钟到小时级唤醒放心切深档——别因惰性把深档的能力躺着不用。
拿到芯片手册,睡眠电流漂亮不等于整机漂亮,因为真正跑起来还有唤醒开销、外设漏电与稳压器自身。粗略折算:
整机平均电流 ≈ 各类状态电流 x 时间占比,再加守护开销 守护开销: 稳压器自耗 + 传感器待机 + GPIO 漏电(看似微安,几年叠加不轻) 结论: 纸面 2uA 深睡,接上真实负载后常拉到几 uA 到十几 uA
这解释了为什么两台"同一芯片"的样机,实测寿命能差出一大截——差在往外围、往唤醒次数、往电源设计扔了多少暗账。做寿命预估算"纸面 + 结构件 + 实测"三步,别只信手册。
下一节轮到通信单元,看看最大的一笔能耗到底怎么花、又怎么省。