7.2 低功耗设计与电池供电复盘


7.2 低功耗设计与电池供电复盘

本节摘要:电池供电项目的续航从来不是"电池容量除以工作电流"这么一笔死账,而是一场与占空比的博弈:设备每秒都醒着的部分决定了基线,醒来的方式与时长决定了峰值,睡眠深度决定了底线。本节给出功耗剖面的测量方法、深眠架构的搭建步骤与续航账的完整算法,并用一台监测仪从五天续航到十四个月的复盘走通全程。

7.1 节让设备会报告自己的状态;这一节处理电源约束下最苛刻的一类交付:没有电源线。它放在诊断之后、性能之前,因为功耗定型是硬件与软件的共同决定——软件晚一天定型,硬件就多一天返工风险。第 1 章的供电设计在此迎来终考。

先画电流的剖面图

低功耗设计的第一步不是改代码,是把设备的电流画成随时间的剖面图。工具不必贵:一只万用表的微安档看睡眠电流,一只串在供电回路的采样电阻加示波器(或 ADC 高速采样)看活动期的波形,就够绝大多数项目用。剖面图上你会看到三类区域:

  • 深眠区:主控与外设大部断电,电流应在微安到十微安量级——这个数字是睡眠质量的标尺;
  • 活跃区:采集、计算、写卡,几毫安到几十毫安,持续几十毫秒到几秒——时长决定占比;
  • 射频峰:无线发射的毫秒级尖峰,一两百毫安——它对平均电流贡献小,对电源轨考验大(第 1 章的供电设计在此回收)。

续航的账全在这张图里:平均电流 = 各区域电流乘以各自时间占比之和。2000 毫安时电池、平均电流 100 微安,理论续航约 2.3 年;平均电流 5 毫安,只剩两三个星期——注意两个数字之间只差"活跃占比从 0.1% 涨到 5%"。低功耗设计的全部工作,就是把活跃占比往小数点后两位压。

图:一台监测仪的电流剖面与占比

图:一台监测仪的电流剖面与占比

深眠架构的三步搭建

把设备改成深眠架构按三步走。第一步,切断该切断的:深眠是主控的休克疗法,但外围还在偷电——LED 指示灯(毫安级惯犯)、上拉电阻的持续回路、带使能脚的传感器(不使能就休眠)、LDO 的静态电流(选静态电流微安级的型号,第 1 章选 LDO 时的这条现在变成生死线)。

第二步,安排唤醒源:定时唤醒用 RTC 计时器(ESP32 的深眠定时器、AVR 的看门狗定时器或 RTC 晶振);事件唤醒用外部中断(按钮、传感器报警脚)。唤醒源的选择与 1.3 节的 32.768kHz 表晶直接相关——定时唤醒的精度由它决定,晶振误差百分之一,唤醒间隔就被拉长缩短百分之一。

第三步,安排醒来后的流程:唤醒如同冷启动(多数 RAM 内容丢失),该记的状态要写进 RTC 保留内存(深眠中仍供电的小块 RAM)或 Flash。醒来后的动作要短:采集、判断、必要时上报、立刻再睡——任何"既然醒了多干点"的顺手事,都是在给占空比放血。

// ESP32 深眠周期:采集、条件上报、RTC 内存记状态 #include <Arduino.h> RTC_DATA_ATTR int bootCount = 0; // 深眠中保留:跨睡眠计数器 #define uS_TO_S 1000000ULL #define SLEEP_S 240 // 睡 4 分钟 void setup() { bootCount++; // 每次唤醒自增,掉电也不丢 float temp = readTemp(); // 醒来第一件事:采集要快 bool urgent = (temp > 45.0f); if (urgent || (bootCount % 15 == 0)) // 报警即报,否则每 15 个周期报一次 { connectWifi(); // 射频只在真要发的时候打开 publishTelemetry(temp, bootCount); enterLightSleepForRadio(); // 关射频,别让 WiFi 空转 } esp_sleep_enable_timer_wakeup(SLEEP_S * uS_TO_S); esp_deep_sleep_start(); // 睡:程序从这里"重启"进入下一轮 } void loop() { } // 深眠架构里 loop 永远不会执行

这段代码的三处要害:RTC_DATA_ATTR 变量跨睡眠存活,是深眠架构的"记忆体";射频按需打开,报警立即发、常态攒批发;深眠醒来后 setup 重新执行,loop 形同虚设——深眠架构的程序形态从"循环"变成"一次次重生",初次接触要把思维扭转过来。

案例:从五天到十四个月的复盘

背景:果园土壤监测节点,2000 毫安时锂亚电池,初版实测续航五天,远低于合同承诺的半年。

操作:第一步画剖面找元凶。实测睡眠电流 18 毫安——深眠名存实亡。逐项排查:LED 电源指示灯常亮(2 毫安)、无线模块未真正断电(待机 8 毫安)、LDO 静态电流高达 5 毫安(选型失误)、传感器偏置电阻常通(3 毫安)。四项加起来恰好 18 毫安——主控的深眠本身没问题,是外围把底线拉爆了。第二步逐项动刀:指示灯改为唤醒后闪一下即灭;无线模块用高侧开关彻底断电;LDO 换成静态电流 1 微安的型号;传感器偏置改为采集前上电、采完即断。第三步优化占空比:采集周期从 1 分钟放宽到 10 分钟(土壤参数本就变化缓慢,与客户确认后放宽),上报攒批每 2 小时一次,射频峰从每分钟一个降到每两小时一个。

结果:剖面复测睡眠电流 6 微安、平均电流 16 微安,续航从五天变为理论十四个月——超过合同承诺的一倍,留足冬季低温的电池衰减余量。

解读:复盘的顺序值得记住:先看睡眠电流,再看占空比。睡眠电流是底数,占空比是乘数,底数不干净时优化占空比是白费劲——18 毫安的底数下,再怎么拉长周期也救不了五天的续航。低功耗优化有明确的优先级:外围偷电、电源选型、唤醒流程、上报策略,从前往后,一层干净了再看下一层。

变式:事件驱动的场景(门磁、水表)连定时唤醒都可以省:让传感器报警脚直接拉醒设备,设备一生只在事件发生时活跃——平均电流逼近电池自放电极限,数年续航由此而来。代价是逻辑从"周期轮询"转为"中断驱动",第 2 章的中断纪律全部适用。

⚠️ 常见坑:用 USB 供电调低功耗代码。USB 一插,LDO 与充电路径的电流全变了,测出的"优化成果"是幻觉——低功耗测量必须在真实供电路径上做,哪怕只是临时焊一根电池线。

💡 关键直觉:续航的账只有两个乘数——底数与占空比。剖面图上每个区域都在这两个乘数里留了名字,找不到优化点时,把图放大再看一遍。

本节要点回顾

  • 先画剖面再动手:深眠区、活跃区、射频峰三类区域,平均电流是占比加权;
  • 睡眠电流是底数:外围偷电、LDO 静态电流、上拉回路,逐一清查后才轮到占空比;
  • 深眠架构是"一次次重生":状态靠 RTC 保留内存,醒来后的动作要短;
  • 射频按需开、攒批发:毫秒级尖峰贡献近半电量的案例比比皆是;
  • 测量必须在真实供电路径上做,USB 供电的低功耗数据都是幻觉。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U