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、射频芯片、传感器、电源芯片……每个器件都在吃电。我的做法是:

  1. 分时供电:休眠时把传感器、射频的电源彻底切断。用MOS管或负载开关控制。
  2. 电压适配:MCU在休眠时降到1.8V甚至1.2V。别用3.3V给所有器件供电,那是浪费。
  3. 时钟选择:休眠时切到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 电源管理芯片

电源芯片的选择,直接影响整体效率。我的原则是:

  1. 休眠时用LDO:LDO静态电流低,适合微安级负载。
  2. 发射时用DCDC:DCDC效率高,能到90%以上。发射时几百毫安的电流,用DCDC能省不少。
  3. 动态电压调节:有些电源芯片支持动态调压。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模组的选型与硬件设计。到时候我会分享一些模组选型的「潜规则」。