2、低功耗设计哲学:终端功耗模型拆解
做NB-IoT终端,说白了就是在跟电池较劲。
我入行那会儿,第一个项目就是抄板子。抄完发现,别人家的设备能跑三年,我的三个月就趴窝了。后来才明白——低功耗不是玄学,是算出来的。
这一节,咱们把终端的功耗模型拆开揉碎,从系统级看到器件级。你想想看,搞懂了电流去哪了,你自然就知道怎么省电了。
2.1 终端的四种状态:休眠、唤醒、发射、接收
NB-IoT终端的工作模式,其实就四种。我习惯叫它「四态模型」:
| 状态 | 典型电流 | 持续时间 | 占比(24h) |
|---|---|---|---|
| 休眠(PSM) | 2~5 µA | 23h 50min | 99.3% |
| 唤醒(Active) | 5~15 mA | 10~50 ms | 0.05% |
| 发射(Tx) | 200~400 mA | 100~500 ms | 0.3% |
| 接收(Rx) | 50~80 mA | 50~200 ms | 0.35% |
嗯,这里要注意:休眠时间占了99%以上。但很多人只盯着发射那几百毫安,却忽略了休眠时的漏电流。
核心公式:
日均功耗 = (I_sleep × T_sleep + I_wake × T_wake + I_tx × T_tx + I_rx × T_rx) / 24h
别小看这个公式。我见过一个项目,休眠电流从5µA优化到2µA,电池寿命直接翻倍。
2.2 系统级低功耗设计方法论
从系统层面看,低功耗设计有三个层次。我管它叫「三层漏斗法」:
第一层:协议与策略层
说白了,就是能不干活就不干活。
- PSM(省电模式):终端上报完数据就睡,网络侧不寻呼它。我建议上报周期尽量拉长,比如从1小时改成6小时。
- eDRX(扩展不连续接收):如果必须保持在线,把寻呼周期设到最大。我记得有个项目,eDRX周期从2.56秒改到40.96秒,接收功耗降了90%。
- 数据合并上报:别采一次发一次。攒够10条数据,一次发完。发射次数少了,电流自然就下来了。
避坑指南:
我曾经把一个水表项目的上报周期从1小时改成24小时,结果客户投诉说「数据延迟太大」。后来加了本地缓存和异常事件主动上报,才平衡了功耗和实时性。
第二层:硬件架构层
这一层,我习惯从「供电树」入手。
你想想看,一个NB-IoT终端里,MCU、射频芯片、传感器、电源芯片……每个器件都在吃电。我的做法是:
- 分时供电:休眠时把传感器、射频的电源彻底切断。用MOS管或负载开关控制。
- 电压适配:MCU在休眠时降到1.8V甚至1.2V。别用3.3V给所有器件供电,那是浪费。
- 时钟选择:休眠时切到32.768kHz低速时钟。我见过有人用16MHz跑休眠,电流直接多出几十微安。
第三层:软件与状态机层
软件层面的优化,往往被忽略。但说实话,软件省电比硬件省电更容易。
- 状态机设计:明确每个状态的进入和退出条件。别让MCU在「半睡半醒」之间徘徊。
- 轮询改中断:能中断就别轮询。轮询是CPU在空转,中断是「有事才叫醒」。
- 快速唤醒、快速处理、快速休眠:我写代码的原则是——醒来后5ms内完成采样,10ms内完成发射,然后立刻睡回去。
2.3 器件级低功耗设计方法论
系统层搞定了,咱们再往下看。器件级的设计,说白了就是选对料、用好料。
2.3.1 MCU选型与配置
MCU是终端的大脑,也是功耗大头。我选MCU时,主要看三个参数:
| 参数 | 要求 | 说明 |
|---|---|---|
| 休眠电流 | < 1 µA | 带RTC保持,不掉数据 |
| 唤醒时间 | < 10 µs | 从休眠到运行,越快越好 |
| 运行电流 | < 3 mA @ 16MHz | 处理完任务立刻休眠 |
我个人习惯用STM32L0系列或国产的AT32L系列。它们都有多级休眠模式,从Stop到Standby,电流从几微安到几十纳安。
注意:
MCU的GPIO在休眠时一定要配置好。我曾经犯过一个错——GPIO浮空,结果漏电流多了5µA。后来全部配置成输出低或上拉输入,才解决。
2.3.2 NB-IoT模组选型
NB-IoT模组是功耗大户。我建议关注这几个点:
- PSM电流:好的模组能做到3µA以下。比如BC95、M5310系列。
- 发射功率等级:不是所有场景都需要23dBm。如果信号好,用20dBm甚至17dBm,电流能省30%。
- 接收灵敏度:灵敏度高的模组,在弱信号下不用反复重传。重传一次,电流就多几百毫安。
我记得有个项目,终端放在地下室。信号差,模组反复重传,电池两周就没了。后来换了高灵敏度模组,又加了外置天线,才把功耗降下来。
2.3.3 电源管理芯片
电源芯片的选择,直接影响整体效率。我的原则是:
- 休眠时用LDO:LDO静态电流低,适合微安级负载。
- 发射时用DCDC:DCDC效率高,能到90%以上。发射时几百毫安的电流,用DCDC能省不少。
- 动态电压调节:有些电源芯片支持动态调压。MCU休眠时输出1.8V,运行时输出3.3V。
2.3.4 传感器与外围器件
传感器这块,我踩过不少坑。给你几个建议:
- 选低功耗传感器:比如温度传感器,休眠电流要< 1µA。像SHT30、BME280都不错。
- 加使能引脚:传感器的VCC用MCU的GPIO控制。不用时彻底断电。
- 减少采样频率:温度变化慢,1分钟采一次就够了。别学我,一开始每秒采一次,电池直接崩了。
2.4 实战:一个典型的功耗计算案例
咱们算一笔账。假设一个水表终端:
- 每天上报4次,每次发射200ms,电流300mA
- 接收100ms,电流60mA
- 唤醒50ms,电流10mA
- 休眠23.9小时,电流3µA
日均功耗 = (3µA × 23.9h + 10mA × 0.2h + 300mA × 0.8h + 60mA × 0.4h) / 24h
算下来,平均电流约 12.5 mA。用一节ER18505电池(容量4000mAh),理论寿命:
4000mAh / 12.5mA = 320小时 ≈ 13天
嗯,13天?这显然不行。
优化后:
- 休眠电流降到2µA
- 上报周期改成每天1次
- 发射功率从23dBm降到20dBm
重新算:平均电流约 0.45 mA。理论寿命:
4000mAh / 0.45mA ≈ 8889小时 ≈ 370天
你看,同样的电池,寿命差了28倍。这就是低功耗设计的价值。
总结一下:
低功耗设计不是一蹴而就的。从系统级到器件级,每一步都要精打细算。我做了这么多年,最大的体会就是——功耗是设计出来的,不是测出来的。
下一节,咱们聊聊NB-IoT模组的选型与硬件设计。到时候我会分享一些模组选型的「潜规则」。