← 返回基础原理库

低功耗设计原理:为什么续航看的是"平均电流"

最后更新 2026-07-01
⏱ 约 8 分钟 🟢 软件/低风险

你做了个电池供电的小设备,测工作时才耗 80mA,一节 2000mAh 电池算下来该撑 25 小时。结果装上去两三天就没电——反过来别人的传感器节点,一节纽扣电池能跑一年。差在哪?不在那 80mA,而在你没让它睡觉。低功耗设计的全部功夫,都绕着一个数打转:平均电流

续航看的是平均电流,不是峰值

先把最要命的一句撂这儿:电池能撑多久,等于容量除以平均电流,跟你工作时那个峰值电流几乎没关系。

续航时间 ≈ 电池容量(mAh) / 平均电流(mA)

关键就在"平均"两个字。你测的 80mA 是设备满负荷干活那一瞬间的电流——但电池设备绝大多数时间根本不该干活。它更像守夜人:偶尔醒来看一眼、干点活、倒头继续睡。真正决定续航的,是把醒着的大电流和睡着的小电流按时间摊平后的平均值。

举个实数。设备每分钟醒 1 秒采集上报(80mA),其余 59 秒深睡只耗 10μA(0.01mA),平均电流是:

(80mA × 1s + 0.01mA × 59s) / 60s ≈ 1.34mA

同样电池,续航从"一直 80mA"的 25 小时,变成 2000 / 1.34 ≈ 1493 小时,约 62 天。占空比再压狠点——每 5 分钟醒 1 秒——平均电流压到 0.28mA,续航直奔一年。看清楚了吗?峰值一点没变,改变续航的是"醒着的时间占多大比例"。所以低功耗的第一性原理就是:想尽办法让平均电流小,核心手段就是睡觉。 想深挖续航怎么算、放电曲线和电池衰减,看 电池续航估算

睡眠与唤醒:干活时干活,剩下全睡死

于是低功耗设备的节奏就成了固定套路:大部分时间深睡到微安级,需要时才醒来爆发式干活,干完立刻睡回去。 醒着那点时间就是占空比里的"占空",你要做的是把它压到极小。要分清两种睡眠深度,差别巨大:

  • 浅睡(light sleep):CPU 停了、时钟大部分关了,但内存(RAM)和外设状态都保住,中断、定时器、串口来数据都能立刻唤醒,醒来后程序从睡的那一行接着往下跑,上下文全在。代价是省得不够狠,还得供着 RAM。适合"睡一小会儿、随时快速响应"。
  • 深睡(deep sleep):几乎全芯片断电,只留一小块超低功耗的 RTC 域(实时时钟域)盯着唤醒源。省到微安级,但代价是——RAM 里的东西基本全丢,醒来等于重新开机,从 app_main 重头跑。只有 RTC 域里那块特殊内存(RTC memory)能跨深睡保住少量数据。

那断电后谁来叫醒它?靠 RTC 域里还醒着的唤醒源:定时器(睡够多少秒自己醒)、引脚电平(某个脚被拉高/拉低就醒)。ESP32-S3 的引脚唤醒用 ext1(指定一组 RTC 引脚、按"任一为高"或"全部为低"触发)——这也是 S3 和老 ESP32 的区别:S3 只有 ext1,没有老款只能配单脚的 ext0,多脚唤醒直接用 ext1。完整实战代码、RTC memory 用法、唤醒源配置都在 L3 深度睡眠实战 里跑过。

ESP32-S3 的三档功耗:心里得有本账

要设计低功耗,得先知道芯片各档大概耗多少才能算平均电流。ESP32-S3 大致分三档(具体值随主频、外设开关、供电电压浮动,以模组 datasheet 为准):

状态 量级 谁还醒着 唤醒方式
Active(工作) 几十~上百 mA 全芯片,WiFi 发射时更是瞬间冲高到一两百 mA ——
Light sleep(浅睡) 数百 μA ~ 一两 mA RAM 保持、外设状态保住 中断/定时器/串口,秒醒且续跑
Deep sleep(深睡) 10 μA 上下 只剩 RTC 域 RTC 定时器 / ext1 引脚,醒来重启

看这张表就明白:Active 和 Deep sleep 差了四个数量级(mA 对 μA,差一万倍)。这就是占空比为何是命门——多醒一秒,都是拿一万倍的电流去烧电池。设计时先按这三档估出平均电流,能不能满足续航一算就知道。把它和整机功耗连起来算,看 功耗预算

压平均电流的几招

思路只有一条:要么让睡的时间占比更高,要么让醒着时更省。 几招:

  • 提高睡眠占空比:收益最大。能 5 分钟上报一次就别 1 分钟,间隔每翻一倍平均电流几乎减半。先问清业务多久要一次数据,别高频轮询。
  • 该断电的外设全断:传感器、屏幕、LED、外部 flash,深睡前主动关掉或用一个 MOS 管切断供电。很多外设待机也要几 mA,比主控深睡还费电——它们醒着,你这 10μA 深睡就白做了。
  • 降频:干活但不赶时间时,把 CPU 主频从 240MHz 降到 80MHz,动态功耗跟着降。
  • 按需联网:WiFi 是全场最大的电老虎——连接、扫描、发射瞬间冲到一两百 mA。别让它常连挂机,而要攒够数据一次性连上、发完立刻断开进深睡。传小数据能用更省的 低功耗广域网络 就别硬上 WiFi。

几个偷电的坑

平均电流压不下去,八成是下面几处在漏电:

现象 怎么避
外设一直供着电 主控深睡才 10μA,整机实测却几 mA 深睡前切断传感器/屏幕供电;查每个外设的待机电流
上拉/下拉电阻常年耗电 每个上拉电阻默默地漏几十 μA,几个加起来盖过深睡电流 深睡时该悬空的引脚别留强上拉;必要的上拉挑大阻值(几十 kΩ 起)
WiFi 常连挂机 明明只偶尔传数据,续航却按小时算 改成按需连接、发完就断睡;别用需要保持长连接的心跳协议
只测了工作电流 datasheet 算的续航和实测差十倍 一定要实测整机深睡电流(串个 μA 级电流表或用功耗分析仪),别只信芯片单项参数
🚧 避坑

低功耗第一坑是只盯主控功耗,忘了外设和上拉在偷电——主控深睡到 10μA,可传感器待机 2mA、几个上拉再漏几十 μA,整机平均电流就废了。设计完一定实测整机深睡态真实电流,datasheet 单项参数拼出来的续航和实际能差一个数量级。WiFi 更要按需用、发完就断。

一句话口诀

续航看平均电流不看峰值:容量除以平均电流就是能撑多久。压它靠一件事——多睡、睡死:大部分时间深睡到微安级(ESP32-S3 约 10μA,靠 RTC 定时器或 ext1 引脚唤醒),需要时才醒来爆发干活。四招:提高睡眠占空比、断闲置外设、降频、WiFi 按需连。收尾一定实测整机深睡电流,防外设和上拉偷电。

下一步

把平均电流换算成能撑多少天、放电曲线怎么看,去 电池续航估算。睡眠唤醒的完整实战代码和 ext1 配置,看 L3 深度睡眠实战。整机各模块功耗账怎么列,看 功耗预算。电源纹波和去耦怎么做干净,看 纹波与去耦。回 元器件原理总览 补齐其余电源基础。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为公开资料的学习整理,非亲测。涉接线/花钱/合规的步骤请结合实物与官方最新资料验证,风险自负。见免责声明