尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

ESP32-S3智能温度计续航短?电池内阻与ADC采样排查实录

发布时间:2026/9/30 1:22:45

资讯中心
01
ARTICLE

ESP32-S3智能温度计续航短?电池内阻与ADC采样排查实录

ESP32-S3智能温度计续航短?电池内阻与ADC采样排查实录
1. 从一块“短命”的温度计说起智能温度计这玩意儿看着简单真做起来坑不少。我手上这个项目用的是 ESP32-S3 做主控锂电池供电平时挂在墙上测室温通过无线把数据传到网关。功能跑通了样机也装出去了结果用户反馈最多的问题不是精度、不是连接稳定性而是——电池怎么这么快就没电了。标称 2000mAh 的电池理论上待机几个月没问题实际有的撑两周有的撑一个月差异大得离谱。这个问题逼着我把整条供电链路从头到尾扒了一遍。排查过程涉及电池内阻、电压测量、ADC 采样、低功耗设计、电源切换电路等一堆东西踩的坑比我预想的多得多。这篇文章就把整个排查思路、用到的工具、具体的测量方法和最终定位到的原因完整记录下来。如果你也在做电池供电的物联网设备尤其是带 ADC 电量检测的方案这篇应该能帮你少走不少弯路。内容会从整体设计思路讲起然后拆解电池等效模型、内阻测量、电压采集电路、固件层面的电量算法再到实际排查中遇到的各种诡异现象和解决办法。不管你是刚接触电池供电的新手还是已经做过几个项目的老手应该都能找到有用的东西。2. 整体设计思路与供电架构拆解2.1 为什么续航问题不能只看电池容量很多人一遇到续航短第一反应是“电池容量不够换个大电池”。这个思路在智能温度计这种产品上基本是错的。原因很简单电池容量只是续航公式里的一个变量而且往往不是主要矛盾。续航时间的粗略估算公式是续航时间小时 电池有效容量mAh / 系统平均功耗mA注意这里写的是“有效容量”不是标称容量。一块标称 2000mAh 的锂电池在低温环境下有效容量可能只有 1400mAh如果放电截止电压设得偏高比如 3.5V 就关机那可能又少用 20% 的电量。而平均功耗这一项才是真正容易被忽视的大头。智能温度计的工作模式通常是间歇性的大部分时间在深度睡眠每隔一段时间唤醒一次采集温度、通过无线发送数据然后继续睡。假设深度睡眠电流是 20μA唤醒工作电流是 80mA每次工作持续 2 秒每 5 分钟唤醒一次。算一下平均功耗睡眠占比(300 - 2) / 300 ≈ 99.33%平均电流 20μA × 0.9933 80mA × 0.0067 ≈ 0.02mA 0.536mA ≈ 0.556mA按 2000mAh 有效容量算续航约 3597 小时差不多 150 天。这个数字看起来还行。但如果唤醒频率提高到每 1 分钟一次平均电流就变成约 2.7mA续航直接掉到 740 小时约 30 天。所以唤醒策略对续航的影响是指数级的比换电池管用得多。但实际排查中发现的问题比这更隐蔽——有些设备的平均功耗算下来明明不高电池却掉得很快。这就引出了下一个关键点电池本身的特性。2.2 电池等效电路模型理解问题的底层框架要搞清楚电池为什么“不耐用”得先理解电池在电路里到底是个什么东西。最常用的电池等效模型是理想电压源 内阻 极化电容/电阻网络的组合。简化版可以写成V_terminal V_ocv - I_load × R_internal其中 V_terminal 是电池端电压V_ocv 是开路电压跟剩余电量相关I_load 是负载电流R_internal 是电池内阻。这个公式看起来简单但它解释了很多现象。比如为什么电池快没电的时候一加载电压就掉得厉害——因为内阻上的压降变大了。再比如为什么旧电池“虚电”严重——内阻增大后小电流下电压看着还行一大电流就崩。对于智能温度计这种应用负载电流是脉冲式的睡眠时几乎为零唤醒时瞬间拉到几十甚至上百毫安。这种脉冲负载对内阻特别敏感。如果电池内阻偏大每次唤醒的瞬间电压都会有一个明显的跌落严重时可能触发低压复位导致设备反复重启反而更费电。我在排查中就遇到过这种情况一块看起来还有 3.7V 的电池设备一唤醒就重启用示波器抓电压波形才发现唤醒瞬间电压跌到了 2.9V 以下触发了 Brown-out Reset。换了块新电池就好了但问题是——怎么在不拆电池的情况下判断内阻是否偏大这就涉及到后面的内阻测量方案。2.3 供电架构的选型考量智能温度计的供电架构一般有几种方案纯电池供电最简单但电池电压随电量下降需要 LDO 或 DC-DC 稳压。电池 外接电源自动切换适合有固定安装位置、可以接 USB 供电的场景。电池 能量收集比如太阳能适合特殊场景但成本高、复杂度大。我这个项目用的是第一种锂电池直接接 LDO 给 ESP32-S3 供电。选 LDO 而不是 DC-DC 的原因是ESP32-S3 在深度睡眠时电流只有几十微安DC-DC 的静态电流往往比 LDO 大而且 DC-DC 在轻载时效率可能很差。LDO 虽然压差损耗大一点但在这种低平均电流的场景下反而更合适。不过 LDO 的选择也有讲究。我一开始用了一颗静态电流标称 1μA 的 LDO实测发现输出端有周期性波动后来查手册才发现它的动态响应比较慢在负载跳变时恢复时间较长。换成另一颗静态电流稍大但响应更快的型号后电压稳定性明显改善。所以选 LDO 不能只看静态电流还要看负载瞬态响应这个参数在数据手册里通常叫“Load Transient Response”。3. 核心细节解析电池内阻与电压测量的门道3.1 电池内阻到底怎么测才靠谱内阻测量是这次排查的核心。市面上有专门的内阻仪比如常见的交流内阻测试方案原理是给电池注入一个交流信号测量电压响应算出阻抗。但这类设备价格不低而且对于已经装在设备里的电池没法直接测。我试过几种方法最后总结出一套适合嵌入式场景的方案方法一直流脉冲法这是最实用的方法。原理很简单给电池加一个已知的负载电流测量电压跌落用欧姆定律算内阻。R_internal (V_ocv - V_load) / I_load具体操作先测开路电压 V_ocv然后接一个已知阻值的负载电阻比如 10Ω快速测量负载下的端电压 V_load同时测量负载电流 I_load。计算得到内阻。这个方法的难点在于测量速度要快。因为电池在持续放电时极化效应会导致电压继续下降测到的就不只是内阻压降了。一般要求在加载后几十毫秒内完成测量。我用的是 STM32F103C8T6 的 ADC 配合一个 MOSFET 开关固件里控制 MOSFET 导通 50ms在这期间采样电压和电流然后关断。实测下来这个方法测出的内阻跟专业内阻仪的结果偏差在 10% 以内足够用来判断电池健康状态。方法二双电流法如果设备本身有可调负载比如可以通过 PWM 控制加热丝或者无线发射功率可以用两个不同的电流点来测。分别测量 I1 下的 V1 和 I2 下的 V2则R_internal (V1 - V2) / (I2 - I1)这个方法不需要知道开路电压但需要两个稳定的电流点。在智能温度计上可以利用无线发射的不同功率档位来构造两个电流点。方法三交流注入法用运放搭一个交流信号源通过隔直电容注入电池测量交流电压响应。这个方法精度高但电路复杂适合做专用测试工装不适合集成到产品里。我最终在产品固件里集成了直流脉冲法的简化版利用设备已有的 ADC 和一路可控负载一个 MOSFET 电阻定期自动测量内阻当内阻超过阈值时上报“电池老化”告警。这个功能后来帮用户提前发现了好几块即将失效的电池。3.2 电压采集电路的常见坑电压测量看起来简单ADC 接个分压电阻就完事了。但实际做下来坑一个接一个。第一个坑分压电阻的阻值选择分压电阻太大ADC 输入阻抗不够高会导致测量偏低分压电阻太小又会持续耗电。我一开始用了 1MΩ 1MΩ 的分压结果发现测量值比实际电压低了 0.15V 左右。查了半天才发现 ESP32-S3 的 ADC 输入阻抗在采样时并不是无穷大而是跟采样时间和内部电容有关。后来改成 100kΩ 100kΩ并在 ADC 输入端加了一个 100nF 的电容做缓冲测量就准了。但 100kΩ 100kΩ 意味着分压支路一直有约 18μA 的电流3.7V / 200kΩ对于平均功耗只有几百微安的系统来说这 18μA 不能忽视。解决办法是用一个 MOSFET 控制分压支路的通断只在测量时导通测完就关断。这样平均下来功耗可以忽略不计。第二个坑ADC 参考电压的稳定性ESP32-S3 的 ADC 参考电压内部是 1.1V 左右但这个值个体差异很大而且随温度变化。如果直接用内部参考测量精度可能只有 ±5%。对于电量检测来说这个精度勉强够用但如果你想做精确的电压监测最好用外部基准比如 TL431 或者 REF3030。我试过用 TL431 产生 2.5V 基准然后分压到 ADC 量程内。这样测量精度可以做到 ±1% 以内。但 TL431 本身需要约 1mA 的工作电流对于低功耗场景又是个负担。最后折中方案是用一颗低功耗基准比如 LM4040工作电流可以低到 60μA精度也够用。第三个坑电压跳变问题这是我在排查中最头疼的问题。现象是ADC 读到的电压值偶尔会跳变比如从 3.72V 突然跳到 3.45V下一帧又跳回来。一开始以为是 ADC 噪声加了滤波电容、做了软件平均还是偶尔出现。后来用示波器长时间抓波形才发现跳变发生在无线发射的瞬间。ESP32-S3 在无线发射时电流会瞬间拉到 200mA 以上如果电池内阻偏大或者走线阻抗偏大就会在电源线上产生一个电压跌落。这个跌落通过分压电阻耦合到了 ADC 输入端导致测量值偏低。解决办法有两个一是在 ADC 采样时避开无线发射窗口等发射完成后再采样二是在分压电阻上并联一个小电容比如 1μF滤掉高频跳变。我两个都做了问题基本消失。3.3 电量计算法的选择与调优有了电压和内阻数据接下来就是算剩余电量。常见的方法有几种开路电压法OCV根据电池的开路电压查表得到剩余电量。简单但需要电池静置一段时间才能测准。库仑计法通过测量电流对时间积分来算电量。精度高但需要电流检测电路成本高。电压 内阻补偿法结合电压和内阻对负载下的电压进行补偿估算开路电压再查表。智能温度计这种低成本产品一般用第一种或第三种。我一开始用纯 OCV 法但发现设备工作时电池电压被负载拉低直接查表会低估电量。后来改成测量电压的同时测量电流通过已知的负载电阻或者采样电阻用内阻补偿公式反推开路电压V_ocv ≈ V_measured I_load × R_internal然后用 V_ocv 查表。这样电量显示就准多了。内阻值可以定期自动测量更新也可以根据电池老化模型估算。这里有个细节内阻不是常数它随温度、电量、放电电流变化。低温下内阻会显著增大所以冬天户外设备的电量显示往往偏低。我在固件里加了一个温度补偿系数根据温度传感器读数对内阻进行修正效果好了不少。4. 实操过程从现象到根因的完整排查记录4.1 现场数据采集与初步分析拿到用户反馈后我先做了两件事一是收集了一批“短命”设备的运行日志二是拿了几块问题设备回实验室做实测。日志里记录了每次唤醒的时间、工作时长、电池电压、内阻估算值。分析下来发现一个规律续航短的设备内阻估算值普遍偏高而且内阻增长速度快。新电池内阻约 80mΩ用了两周就涨到 200mΩ 以上而正常电池用两个月也就 120mΩ 左右。这让我怀疑是电池本身的问题或者是充电电路有问题。但设备用的是不可充电的一次性锂电池不存在充电电路。那就只剩电池本身或者放电电路的问题。4.2 实验室实测用示波器抓唤醒瞬间的电压波形我把一块问题设备接上示波器探头放在电池端抓唤醒瞬间的波形。结果很明显唤醒前电压 3.68V唤醒瞬间跌到 3.21V持续约 30ms 后恢复到 3.65V。跌落幅度接近 0.5V。用公式反推假设唤醒电流是 150mA则内阻 0.47V / 0.15A ≈ 3.1Ω。这个内阻值大得离谱正常锂电池内阻应该在 100mΩ 量级。说明电池要么已经严重老化要么存在接触电阻。检查电池连接器发现弹片有轻微氧化痕迹。用酒精擦拭后重新测试内阻降到 400mΩ 左右但还是偏高。换了一块新电池内阻降到 90mΩ电压跌落只有 15mV。问题定位到电池本身。4.3 电池拆解与内阻增长原因分析我把问题电池拆开注意锂电池拆解有风险非专业人员不要尝试发现电芯外观正常没有鼓包。用专业内阻仪测量确认内阻确实在 2Ω 以上。这种一次性锂电池的内阻增长通常跟以下几个因素有关存储时间过长电池在高温环境下存储会加速老化。放电倍率过高如果设备唤醒电流过大长期大倍率放电会加速内阻增长。电池品质问题不同厂家的电池一致性差异很大。我对比了几家供应商的电池发现其中一家的电池在同样测试条件下内阻增长明显更快。换供应商后问题大幅减少。所以电池选型不能只看容量和价格内阻和一致性同样重要。4.4 固件层面的优化措施定位到电池问题后我在固件层面也做了一些优化进一步降低对电池内阻的敏感度优化一降低唤醒峰值电流ESP32-S3 在无线发射时电流最大。我把发射功率从默认的 20dBm 降到 10dBm峰值电流从约 250mA 降到约 150mA。虽然通信距离缩短了一些但在室内场景完全够用而且电压跌落明显减小。优化二增加软启动逻辑在唤醒后先让 MCU 以低功耗模式运行一小段时间比如 10ms等电源稳定后再启动无线模块。这样避免了多个模块同时启动导致的电流叠加。优化三动态调整唤醒间隔根据电池内阻和电压动态调整数据上报频率。内阻高或者电压低时自动延长上报间隔优先保证设备存活。优化四低压保护策略调整原来的低压保护阈值是 3.3V但考虑到内阻导致的电压跌落我把阈值改成“连续三次测量低于 3.3V 才触发保护”避免因为瞬时跌落误触发。这些优化做完后同样一批问题电池的续航从两周延长到了一个月以上虽然不如新电池但至少可用了。5. 常见问题与排查技巧实录5.1 电压测量跳变问题速查表现象可能原因排查方法解决办法电压偶尔跳变无线发射时电流冲击示波器抓电源波形避开发射窗口采样加滤波电容电压持续偏低分压电阻阻值过大计算 ADC 输入阻抗影响减小分压电阻加缓冲电容电压随温度漂移ADC 内部参考不稳定对比外部基准测量改用外部低功耗基准电压读数噪声大电源纹波大示波器看电源纹波增加 LDO 输入输出电容电压跳变与负载相关电池内阻大测量内阻更换电池或降低负载电流5.2 内阻测量的注意事项测量时间要短加载时间控制在 50ms 以内避免极化效应影响。负载电流要稳定用恒流负载或者已知阻值的电阻避免电流波动。多次测量取平均单次测量噪声大建议连续测 5 次取中位数。温度补偿低温下内阻会增大测量时记录温度后续做补偿。不要在线测量充电电池充电状态下内阻测量不准确而且有安全风险。5.3 低功耗设计的几个反直觉经验经验一LDO 的静态电流不是越小越好我试过一颗静态电流 0.5μA 的 LDO结果发现它在轻载时输出不稳定导致 MCU 偶尔复位。后来换成静态电流 2μA 但负载响应更好的型号整体功耗反而更低因为避免了复位带来的额外消耗。经验二上拉电阻是隐形杀手I2C 总线的上拉电阻、按键的上拉电阻这些看似不起眼的东西如果阻值选小了会持续耗电。比如 4.7kΩ 的上拉电阻在 3.3V 下会产生 0.7mA 的电流如果这个上拉一直存在一天就耗掉 16.8mAh。我的做法是能用 100kΩ 就不用 10kΩ能在不需要时关断的就加 MOSFET 控制。经验三ADC 分压电阻的功耗容易被低估前面提到的 100kΩ 100kΩ 分压18μA 的电流看起来不大但一年下来就是 157mAh相当于 2000mAh 电池的 8%。所以一定要加开关控制。经验四电池自放电不可忽视即使设备完全不工作锂电池也会自放电。好的电池自放电率约 2%/月差的可能 5%/月以上。如果产品要求长待机电池自放电率是一个必须关注的参数。6. 写在最后的几句实在话这次排查前后花了将近一个月从最初怀疑固件问题到怀疑电路设计最后定位到电池本身中间走了不少弯路。回过头看最有价值的经验其实是不要假设任何环节是“没问题”的。电池这种看起来最简单的部件恰恰是最容易出问题的。另外内阻测量这个功能后来成了我们产品的标配。它不仅能帮用户提前发现电池老化还能在售后环节快速判断问题归属——是设备的问题还是电池的问题。这个功能加进去的成本很低一个 MOSFET 加一个电阻几毛钱的事但带来的价值很大。如果你也在做类似的项目我的建议是在样机阶段就把内阻测量和电压监测做进去不要等到量产了再补。早期发现电池一致性问题比后期批量召回划算得多。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。