拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

智能温度计续航差怎么排查?从电池内阻到固件低功耗的完整路径

智能温度计续航差怎么排查?从电池内阻到固件低功耗的完整路径

智能温度计这类小设备,续航翻车是特别常见的一类问题。我前后拆过不下二十款不同方案的智能温度计,从早期用两节7号电池的,到后来用CR2032纽扣电池的,再到内置锂电加充电仓的,几乎每一款在续航上都踩过坑。有意思的是,用户反馈的"续航差"往往不是单一原因,而是电池选型、供电电路、测量策略、固件逻辑这几层问题叠加出来的结果。这篇就把我排查智能温度计续航问题的完整思路拆开讲,从电池内阻、电压测量、供电切换电路,到ADC采样、低功耗策略,一层层往下挖。不管你是做硬件设计的、写固件的,还是单纯想搞明白自己手上那台温度计为什么半个月就没电,都能从里面找到对应的排查路径。

1. 先搞清楚"续航差"到底差在哪一层

很多人一上来就换电池,换完发现还是撑不了多久,然后就怀疑是设备漏电。这个顺序其实是反的。排查续航问题,第一步不是动手换,而是先把问题定位到具体层级,否则你换十次电池也找不到根因。

1.1 把续航问题拆成三个可测量的维度

我习惯把续航问题拆成三个维度来量化:静态功耗、动态功耗、电池实际可用容量。这三个维度对应的是完全不同的排查方向。

静态功耗指的是设备在待机或休眠状态下的电流消耗,单位通常是微安。这个数值直接决定了设备"放着不用能撑多久"。动态功耗是设备在工作状态(比如点亮屏幕、驱动传感器、无线传输)时的电流,单位是毫安。电池实际可用容量则是电池在设备实际工作条件下的放电能力,它和标称容量往往差得很远,尤其是低温环境或者大电流脉冲放电场景。

举个实际例子。我之前测过一款用CR2032供电的温度计,标称待机电流5微安,理论上CR2032的220mAh容量能撑好几年。但实测待机电流是80微安,直接差了16倍。后来发现是休眠时有一个分压电阻网络一直在耗电,这个网络本来是用来做电池电压检测的,设计时没考虑它在休眠状态下的漏电流。这就是典型的静态功耗问题。

1.2 用万用表串联测电流的正确姿势

测静态功耗最直接的方法是把万用表串在电池和电路之间。但这里有个坑:很多万用表的微安档内阻比较大,串进去之后会导致电路供电电压下降,设备可能直接进入欠压保护或者反复重启,测出来的电流根本不准。

我的做法是分两步。第一步用毫安档粗测,确认设备能正常启动和工作。第二步切到微安档,但要在万用表两端并联一个开关,测量时先闭合开关让设备正常上电,等设备进入休眠后再断开开关,让电流全部流过万用表。这样能避免上电瞬间的大电流冲击损坏万用表保险丝,也能保证休眠电流测量的准确性。

注意:有些设备的休眠是周期性的,比如每10秒唤醒一次采样。这种情况下万用表读数会跳变,你需要用带数据记录功能的万用表,或者用示波器配合电流探头来抓平均电流。

1.3 电池内阻才是隐藏的续航杀手

电压测量只能告诉你电池还剩多少电,但内阻测量能告诉你电池还能不能"带得动"负载。智能温度计虽然平均功耗低,但在无线传输或者屏幕刷新瞬间会有几十毫安的脉冲电流。如果电池内阻偏高,这个脉冲电流会在内阻上产生压降,导致MCU瞬间欠压复位。

我遇到过一款温度计,用新电池一切正常,用了两个月后开始频繁重启。测电压还有2.8V,看起来没问题,但一测内阻已经超过50欧姆。脉冲电流一来,电压瞬间掉到1.8V以下,MCU直接复位。复位后重新启动又消耗一波电流,形成恶性循环,续航自然崩了。

电池内阻的测量方法有两种常见思路。一种是开路短路法:先测电池开路电压,然后接一个已知负载电阻,测负载两端电压,通过电压差和负载电流算出内阻。另一种是交流注入法:给电池注入一个已知频率的交流小信号,测响应来算内阻。前者电路简单但精度一般,后者精度高但需要专门的交流激励电路。对于温度计这类低功耗设备,开路短路法基本够用。

2. 供电电路里那些偷偷吃电的设计

定位到功耗层级之后,下一步就是看供电电路本身。智能温度计的供电电路通常包含电池、稳压电路、电压检测电路、以及可能的备用电源切换电路。这里面每一个环节都可能成为漏电点。

2.1 分压电阻网络:最容易被忽视的静态功耗来源

用ADC测电池电压是最常见的方案,但很多人直接用两个电阻分压然后接到ADC引脚。这个分压网络在设备休眠时依然在耗电。假设你用1MΩ和1MΩ分压,电池3V,那么分压网络电流是1.5微安。看起来不大,但如果电池是CR2032,1.5微安意味着每年消耗13mAh,占标称容量的6%左右。如果电阻选得更小,比如100kΩ,电流就是15微安,一年消耗131mAh,直接干掉一半以上容量。

正确的做法是在分压网络和地之间加一个MOS管开关,只在需要测量电压时才导通。或者选用更大阻值的电阻,比如10MΩ级别,但要注意ADC输入阻抗和漏电流的影响。STM32F103的ADC输入漏电流在常温下大约是50nA级别,用10MΩ电阻分压时,漏电流引起的误差大约在0.5mV左右,对于电池电压检测来说完全可以接受。

2.2 外接电源和电池供电自动切换电路的漏电陷阱

有些温度计设计成可以用USB供电也可以用电池供电,这就需要自动切换电路。常见的方案是用两个肖特基二极管做ORing,或者用PMOS做理想二极管。肖特基二极管方案简单,但反向漏电流在高温下可能达到几十微安。PMOS方案漏电小,但如果控制逻辑没设计好,可能出现两个电源同时导通的情况,导致电池被反向充电或者电流倒灌。

我见过一个案例,设备插着USB时一切正常,拔掉USB后电池续航只有标称的三分之一。后来发现是切换电路里的PMOS栅极驱动电阻选得太小,导致PMOS没有完全关断,电池通过PMOS的体二极管持续漏电。把栅极电阻从10kΩ改成100kΩ,并增加一个下拉电阻确保关断,漏电从200微安降到了2微安以下。

2.3 LDO的静态电流:规格书上的数字和实际差多少

LDO的静态电流(Quiescent Current)是另一个关键参数。很多LDO规格书上写着静态电流几微安,但那是特定条件下的典型值。实际应用中,如果LDO的输入输出压差大、负载电流变化范围宽,静态电流可能会显著上升。

更隐蔽的问题是LDO的关断电流。有些LDO标称关断电流只有0.1微安,但那是EN引脚拉低、输入电压在特定值下的测量结果。如果你的电路里EN引脚没有干净地拉低,或者输入电压高于规格书测试条件,关断电流可能达到几十微安。我习惯在选型时直接看规格书里的"Ground Current vs. Load Current"曲线,并且留出至少3倍的余量。

3. 电压测量与ADC采样中的续航陷阱

电压测量本身不耗电,但测量策略和ADC配置会直接影响功耗。很多温度计的续航问题,根源就在电压测量的实现方式上。

3.1 STM32F103的ADC采样时间与功耗权衡

STM32F103C8T6是这类设备里非常常见的MCU。它的ADC在采样时消耗的电流和采样时间直接相关。采样时间越长,ADC内部采样保持电容充电越充分,精度越高,但功耗也越大。很多人在配置ADC时直接用了最长的采样时间,觉得精度优先,结果每次采样多消耗几百微安。

我的经验是,对于电池电压这种变化缓慢的信号,采样时间可以适当缩短。STM32F103的ADC采样时间从1.5周期到239.5周期可调。在12位精度下,如果信号源内阻小于10kΩ,用13.5周期或28.5周期就能达到足够的精度。实测下来,采样时间从239.5周期降到28.5周期,单次采样电流从大约1.2mA降到0.8mA,虽然看起来差别不大,但如果你的设备每秒采样一次,一年下来就是好几毫安时的差距。

3.2 电压跳变问题:是电池问题还是采样问题

电压跳变是排查续航时经常遇到的现象。设备显示电池电量忽高忽低,或者MCU在电压看起来正常的情况下突然复位。这时候要区分是电池真实电压在跳,还是采样电路引入了噪声。

区分方法很简单:用示波器直接测电池两端电压,同时用MCU的ADC读电压,对比两者的波形。如果示波器上电压平稳但ADC读数跳变,那就是采样电路或者软件滤波的问题。如果示波器上电压本身就在跳,那就是电池内阻或者负载突变的问题。

我遇到过一次典型的采样问题:ADC读数每隔几秒跳一次,幅度大约0.3V。查了半天发现是ADC参考电压用的VDDA,而VDDA上并联的滤波电容容量不够,无线模块发射时引起的电源波动耦合到了参考电压上。把滤波电容从100nF增加到10微法,跳变就消失了。

3.3 用电压跟随器隔离采样电路

如果分压电阻网络阻值较大,ADC采样时的输入电流会导致分压点电压下降,测量就不准了。这时候可以在分压点和ADC之间加一个电压跟随器。电压跟随器输入阻抗极高,几乎不取电流,输出阻抗极低,能很好地驱动ADC输入。

但电压跟随器本身也有静态电流。运放的静态电流从几百纳安到几毫安不等。选型时要选低功耗运放,比如静态电流在1微安以下的型号。另外,运放的供电也要考虑,如果运放一直供电,它的静态电流就会持续消耗电池。更好的做法是用一个MOS管控制运放的供电,只在测量时给运放上电。

4. 固件层面的低功耗策略与常见反模式

硬件排查完之后,固件层面的策略往往才是决定续航的最后一公里。同样的硬件,固件写得好和写得差,续航可能差好几倍。

4.1 休眠模式选对了,电流差一个数量级

STM32F103支持三种低功耗模式:Sleep、Stop、Standby。Sleep模式下内核停止但外设还在跑,电流大约几毫安。Stop模式下所有时钟停止,保留寄存器和SRAM,电流大约20微安。Standby模式下除了备份域全部断电,电流大约2微安。

很多温度计的固件只用了Sleep模式,因为唤醒快、代码改动小。但Sleep模式的电流是Stop模式的几百倍。如果设备大部分时间都在待机,用Stop模式能把平均功耗降下来一个数量级。代价是唤醒后需要重新配置时钟和外设,代码复杂度会增加。

我的建议是:如果采样间隔大于1秒,果断用Stop模式。如果采样间隔在几百毫秒级别,可以评估一下Stop模式的唤醒开销是否可接受。Standby模式虽然最省电,但每次唤醒相当于复位,RAM数据全丢,适合那种完全不需要保留状态的场景。

4.2 无线传输的功耗优化:不是传得越快越好

带无线的温度计,无线传输往往是最大的功耗来源。很多人觉得传输时间越短越省电,所以拼命提高速率。但实际上,无线芯片的功耗和传输速率不是线性关系。高速率虽然缩短了传输时间,但射频前端的功耗会显著上升,而且高速率对信号质量要求更高,重传概率也更大。

更有效的优化是减少传输次数和数据量。比如温度变化缓慢,没必要每秒传一次,可以设置成温度变化超过0.5度才传,或者固定每5分钟传一次。数据包也可以压缩,把温度值从浮点数转成定点数,一个包就能多塞几个采样点。

4.3 那些看起来省电实际上费电的固件写法

有几个常见的固件反模式,我在排查续航时经常遇到。

第一个是忙等待延时。用for循环做延时,CPU一直在跑,电流下不来。正确做法是用定时器或者RTC唤醒,让CPU在等待期间进入低功耗模式。

第二个是频繁唤醒。有些固件用RTC每10毫秒唤醒一次检查按键或者传感器状态。10毫秒的唤醒周期意味着CPU大部分时间都在唤醒和休眠之间切换,而每次切换本身就有功耗开销。如果按键响应要求不高,把唤醒周期改成100毫秒甚至500毫秒,续航能明显改善。

第三个是外设没关。ADC采完不关、SPI接口用完不关、GPIO配置成输出但状态不对导致漏电。这些细节在调试时不容易发现,但累积起来很可观。我习惯在进入休眠前把所有外设时钟关掉,GPIO配置成模拟输入或者带上拉的输入,避免悬空引脚漏电。

5. 电池选型与BMS思路在小型设备上的简化应用

温度计这类设备虽然不需要完整的BMS,但BMS里的一些核心思路可以借鉴,尤其是电池保护和电量估算部分。

5.1 CR2032、AAA、锂电:不同电池的放电特性差异

CR2032标称3V,容量大约220mAh,但它的内阻比较大,通常在10到40欧姆之间,而且随着放电会快速上升。这意味着CR2032不适合有大脉冲电流的应用。如果温度计有无线功能,CR2032可能撑不了多久。

AAA电池标称1.5V,容量大约1000mAh,内阻小得多,通常几百毫欧。但需要两节串联才能达到3V,体积也大。锂电标称3.7V,容量可以做得很大,内阻也小,但需要充电电路和 protection IC,成本和复杂度都上去了。

选型时要根据设备的峰值电流和平均电流来算。如果峰值电流超过10mA,CR2032就要慎重。如果峰值电流超过50mA,基本只能选锂电或者AAA。

5.2 电池等效电路模型:理解内阻和容量的关系

电池可以等效成一个理想电压源串联一个内阻,再并联一个自放电电阻。理想电压源代表电池的开路电压,内阻代表电池对电流的阻碍,自放电电阻代表电池自己慢慢放电的特性。

这个模型能解释很多现象。比如为什么电池用了一段时间后电压看起来还有电但设备已经带不动了——因为内阻变大了,负载电流在内阻上的压降变大,负载两端电压就不够了。再比如为什么低温下续航变差——低温下内阻增大,自放电也加快。

对于温度计这种低功耗设备,自放电电阻的影响在长期待机时不可忽视。CR2032的自放电率大约是每年1%到2%,但如果设备本身静态功耗就有几十微安,自放电反而是小头了。

5.3 防止电池并联短路环流的思路

有些设计为了增加容量会把电池并联。并联电池如果电压不一致,高压的会给低压的充电,形成环流。这个环流可能很大,轻则浪费电量,重则发热甚至损坏电池。

防止环流的方法是在每节电池上串联一个MOS管做理想二极管,或者用专用的电池并联管理芯片。对于温度计这种小设备,最简单的做法是不要并联,直接用一节容量更大的电池。如果非要并联,确保两节电池来自同一批次、电压差小于50mV,并且在每节电池上串联一个小的均流电阻。

6. 一套可复现的续航排查流程

把上面的内容串起来,我整理了一套实际排查时用的流程。这套流程从现象出发,逐步缩小范围,最后定位到具体原因。

6.1 从现象到根因的排查链路

第一步,记录现象。设备能撑多久?是突然变短还是逐渐变短?换新电池后能撑多久?这些信息能帮你判断是电池老化还是电路问题。

第二步,测静态电流。用前面说的方法测休眠电流,和设计值对比。如果静态电流超标,重点查分压网络、LDO关断电流、GPIO漏电。

第三步,测动态电流。用示波器抓工作时的电流波形,看峰值电流和持续时间。如果峰值电流超过电池的承受能力,考虑增加电容缓冲或者换电池。

第四步,测电池内阻。如果静态和动态电流都正常但续航还是短,测电池内阻。内阻高的电池直接换掉。

第五步,检查固件策略。确认休眠模式、唤醒周期、外设关闭逻辑是否正确。

6.2 常见问题与对应解决方案速查

现象可能原因排查方法解决方案
待机电流大分压电阻网络持续耗电断开分压网络测电流加MOS开关或增大电阻
频繁复位电池内阻大导致脉冲压降示波器抓复位瞬间电压换低内阻电池或加缓冲电容
电压读数跳变ADC参考电压受干扰示波器测VDDA增加滤波电容或改用内部参考
无线传输后续航骤降传输电流超出电池能力测传输时电池电压降低传输功率或换电池
休眠后电流不降外设未关闭或GPIO漏电逐个关闭外设测电流关闭时钟、配置GPIO状态

6.3 几个我踩过的坑和对应的经验

第一个坑是忽略温度对电池的影响。有一次冬天测一款温度计,续航只有夏天的三分之一。查了半天发现是CR2032在低温下内阻急剧上升,导致MCU在无线传输时欠压复位。后来在电池两端并联了一个100微法的电容,复位问题解决了,但续航还是短。最终方案是换成锂电,问题彻底解决。

第二个坑是ADC采样时间配置错误。有一次为了省电把采样时间设到最短,结果电压读数偏差很大,导致电量显示不准,用户以为还有电结果突然关机。后来发现是采样时间太短,采样保持电容没充满。把采样时间加长到28.5周期后,精度和功耗都满意。

第三个坑是LDO选型只看静态电流。选了一款静态电流0.5微安的LDO,但没注意它的关断电流在输入电压4V时是10微安。而电池满电时电压正好是4V左右,导致刚换电池时关断电流偏大。后来换了一款关断电流在全电压范围内都小于1微安的LDO。

6.4 用SPWM思路理解电压调节的稳定性

虽然温度计里一般用不到SPWM,但SPWM电压环的稳定性思路对理解供电电路有帮助。SPWM通过调节脉冲宽度来控制输出电压,本质上是一个闭环系统。如果环路带宽设计不当,输出电压会振荡。

温度计里的LDO或者DC-DC虽然没有SPWM那么复杂,但同样存在稳定性问题。LDO的输出电容ESR不合适会导致振荡,DC-DC的反馈电阻和补偿网络设计不当也会振荡。振荡时功耗会上升,因为电路在反复调整。我遇到过一款温度计,DC-DC在轻载时进入PFM模式,但PFM的阈值设置不当,导致在某个负载区间频繁在PWM和PFM之间切换,功耗反而比纯PWM模式还高。后来调整了PFM阈值,问题解决。

排查智能温度计的续航问题,说到底是一个系统性的活。电池、供电电路、ADC采样、固件策略,每一层都可能有问题,而且往往是多层问题叠加。我的经验是不要跳步,按流程一层层测,用数据说话。静态电流、动态电流、电池内阻这三个数据拿到手,大部分问题都能定位。剩下的就是针对具体原因做优化,该加开关的加开关,该换电池的换电池,该改固件的改固件。最后再分享一个小技巧:如果你手头没有高精度电流表,可以用一个已知阻值的采样电阻串联在电池回路里,用示波器测电阻两端电压,通过欧姆定律算电流。这个方法虽然精度不如专用电流表,但能抓到脉冲电流的波形,对于排查动态功耗问题特别有用。

返回列表