1. 一块温度计引发的续航排查战智能温度计这东西看着简单真用起来续航拉胯的时候能把人折腾得够呛。我手上这个项目客户反馈是“新换的电池用了不到两周就报低电量”但拆开测电池电压空载还有2.9V以上看着不像没电。这种“电压看着够、实际带不动”的情况十有八九是电池内阻上来了或者供电链路里某个环节在偷偷吃电。智能温度计本身功耗不高主控加传感器加显示正常设计下两颗纽扣电池撑半年到一年是常态如果两周就趴窝那一定是有地方出了问题。这篇文章适合谁看如果你正在做低功耗电池供电的温湿度采集设备或者手头有个智能温度计、电子标签之类的产品续航不达标又或者你只是好奇“为什么万用表量着有电、装上去就不行”那这篇排查记录应该能帮到你。我会从供电架构、电池内阻、电压测量方法、低功耗设计几个角度把这次排查的完整思路和实操过程拆开讲包括我踩过的坑和最后怎么定位到根因的。核心关键词就几个智能温度计、续航、电池、内阻、电压围绕这几个词把问题讲透。先交代一下背景。这个温度计用的是两颗CR2032纽扣电池串联标称3V供电主控是一颗低功耗MCU带段码LCD屏温度传感器是I2C接口的数字传感器另外还有一个蜂鸣器做超温报警。整机正常工作电流在十几微安左右刷新间隔5秒蜂鸣器不常响。按这个功耗算CR2032的容量大概220mAh理论续航应该在一两年。但实际客户反馈是两周左右就低电量报警差距太大必须系统性排查。2. 供电链路拆解与问题定位思路2.1 从电池到负载的完整路径排查续航问题第一步不是急着换电池而是把整条供电链路画出来。这个温度计的供电路径是这样的CR2032串联电池组 → 电池座弹片 → PCB走线 → 一个PMOS做电源开关 → LDO稳压到2.8V → MCU和传感器。另外还有一路直接从电池电压分压后进MCU的ADC用来做电量检测。蜂鸣器是挂在LDO输出上的通过三极管驱动。这条链路里每一个环节都可能出问题。电池本身的内阻、电池座接触电阻、PMOS的导通电阻、LDO的静态电流、分压电阻的漏电流甚至PCB表面的助焊剂残留导致的微短路都会影响续航。我的思路是先分段测量把问题范围缩小再逐个深挖。注意不要一上来就换新电池然后观察几天那样效率太低。先用可调直流电源模拟电池电压串一个电流表看整机静态电流这是最快的初筛方法。2.2 为什么电压正常不代表电池健康很多人判断电池有没有电就是拿万用表量一下空载电压看到2.9V就觉得电池没问题。这个做法在低功耗设备上非常不可靠。电池的等效电路模型可以简单理解为一个理想电压源串联一个内阻。空载时没有电流流过内阻所以万用表读到的是接近理想电压源的值。但一旦带上负载电流在内阻上产生压降实际加到电路上的电压就会低于空载值。CR2032这种纽扣电池新电池内阻一般在10到20欧姆左右随着放电和老化内阻会逐渐升高有些劣质电池或者存放时间长的电池内阻能到50欧姆甚至上百欧姆。假设整机平均电流是20微安50欧姆内阻上的压降只有1毫伏看起来可以忽略。但问题在于温度计不是一直处于微安级睡眠状态它每隔5秒要唤醒一次唤醒时MCU全速运行、传感器采集、LCD刷新瞬时电流可能冲到几毫安甚至十几毫安。这时候内阻上的压降就是几十毫伏甚至上百毫伏如果电池内阻再大一点瞬间电压可能直接跌到MCU的欠压复位阈值以下导致设备反复复位或者工作异常。更隐蔽的是有些MCU在电压跌落时会进入一种“半死不活”的状态电流反而比正常工作时大很多形成恶性循环。所以续航崩了不一定是电池容量没了很可能是内阻大了导致带载能力下降。2.3 排查工具与最小测试系统搭建这次排查我用到的工具清单如下工具用途备注可调直流电源模拟电池供电带电流显示分辨率到微安六位半万用表精确测量电压和电阻普通四位半也够用示波器看唤醒瞬间电压跌落带宽100MHz以上电子负载测电池内阻和带载能力支持恒流模式热风枪和烙铁拆焊电池座和元件可调温无水酒精和棉签清理PCB去除助焊剂残留最小测试系统很简单把可调电源调到3V串入万用表电流档接到温度计的电池正负极输入端。注意电源的负极要和温度计的地连在一起。然后观察睡眠电流和唤醒电流。如果睡眠电流明显高于设计值比如超过50微安那就有漏电或者某个器件没进入低功耗模式。如果睡眠电流正常但唤醒电流异常大那就要查唤醒期间的负载。我实测下来这个温度计睡眠电流在18微安左右算是正常范围。但唤醒电流峰值到了8毫安而且持续时间有200毫秒这就有点长了。正常设计下唤醒后MCU处理加传感器采集加LCD刷新应该在50毫秒内完成然后迅速回到睡眠。200毫秒的8毫安平均下来每次唤醒消耗的电量是8mA × 0.2s 1.6mAs每5秒一次一天就是17280次总电量约27648mAs换算成mAh是7.68mAh。光唤醒这一项一天就吃掉7.68mAhCR2032的220mAh容量理论上28天就没了。这还没算睡眠电流和其他开销。所以问题很可能出在唤醒时间过长或者唤醒电流过大上。3. 电池内阻与电压测量的实操细节3.1 电池内阻的两种测量方法测电池内阻常见的有两种方法交流注入法和直流负载法。交流注入法需要专用内阻仪比如常见的电池内阻测试仪原理是给电池注入一个1kHz左右的交流小信号测交流压降来算内阻。这种方法精度高不受极化影响但设备贵。直流负载法更接地气用电子负载或者功率电阻让电池放一个已知电流测电压跌落然后算内阻。具体操作先测电池空载电压V1然后接一个已知阻值的负载电阻R测负载两端电压V2同时测流过负载的电流I。内阻r (V1 - V2) / I。注意负载电阻的选择要让电流在合理范围对于CR2032可以用100欧姆左右的电阻电流大概30毫安测完立刻断开避免过度放电。我手头没有专业内阻仪就用直流负载法。拿了一颗客户退回的温度计里的CR2032空载电压2.91V接100欧姆电阻后电压跌到2.62V电流约26.2毫安。算下来内阻r (2.91 - 2.62) / 0.0262 ≈ 11欧姆。这个内阻其实不算大新电池水平。那问题可能不在电池本身而是电池座接触电阻或者PCB上的漏电。实操心得测纽扣电池内阻时接触压力很关键。电池座弹片如果氧化或者变形接触电阻可能比电池内阻还大。我遇到过电池座弹片氧化导致接触电阻超过50欧姆的情况表现和电池没电一模一样。3.2 电压测量中的隐藏陷阱用万用表测电压看起来简单但在低功耗设备排查中有几个坑很容易踩。第一个坑是万用表输入阻抗。普通万用表直流电压档输入阻抗是10兆欧这个阻抗并联在电路上对于高阻抗节点会有明显影响。比如电池电压分压到ADC的电路分压电阻如果是1兆欧级别万用表一搭上去分压比就变了读到的电压不准。第二个坑是测量点选择。测电池电压要在电池座输出端测不要直接在电池表面测。电池座弹片和PCB焊盘之间的接触电阻在带载时会产生压降这个压降在空载时测不出来。正确做法是让设备处于唤醒状态用示波器探头点在MCU的VDD引脚上看唤醒瞬间的电压波形。如果看到明显的跌落和振铃说明供电链路阻抗偏大。第三个坑是地线回路。用示波器测电压时探头地线夹的位置很重要。如果地线夹在远离被测点的地方地线回路上的压降会叠加到测量结果里。我一般把地线夹在MCU的GND引脚附近探头尖端点在VDD引脚这样测到的才是MCU真正看到的电压。这次排查中我用示波器在MCU的VDD引脚上抓唤醒瞬间的波形发现电压从2.8V瞬间跌到2.3V持续大概50微秒然后慢慢恢复到2.8V。这个跌落幅度已经接近MCU的欠压复位阈值了。但电池内阻只有11欧姆按8毫安电流算压降应该只有88毫伏不至于跌500毫伏。说明供电路径上还有额外的阻抗。3.3 从电压跳变定位到接触电阻顺着电压跌落这个线索我分段测量。先测电池座输出端到PCB走线之间的压降发现电池座弹片两端的压降在唤醒瞬间有200多毫伏。拆下电池座用放大镜看弹片表面发现有一层淡淡的氧化层用酒精擦洗后重新装上压降降到50毫伏以内。但总压降还是有400多毫伏说明还有别的地方。继续查发现PMOS电源开关的导通电阻偏大。这个PMOS是SOT-23封装的型号标称导通电阻在4.5V驱动下是50毫欧但这里是3V驱动导通电阻会大很多。查数据手册3V驱动时导通电阻大概200毫欧。8毫安电流下压降只有1.6毫伏可以忽略。那问题在哪最后把怀疑点放到LDO上。这个LDO是低静态电流型号但它的负载瞬态响应比较差。当负载电流从微安级突然跳到毫安级时LDO的输出电压会有一个跌落恢复时间取决于输出电容。我查了输出电容只有0.1微法太小了。正常应该用1微法以上。把输出电容换成1微法后唤醒瞬间的电压跌落从500毫伏降到150毫伏左右效果立竿见影。注意LDO的输出电容不是越大越好要看数据手册的稳定区间。有些LDO要求输出电容在特定ESR范围内才稳定盲目加大可能引起振荡。这个项目用的LDO手册推荐1到10微法我选了2.2微法实测稳定。4. 低功耗设计与唤醒时间优化4.1 唤醒时间为什么这么长电压跌落问题缓解后续航有所改善但客户反馈还是不到一个月。说明还有别的问题。回到之前测到的唤醒时间200毫秒这个太长了。正常低功耗设计唤醒后应该尽快完成采集和显示然后回到睡眠。我逐段测量唤醒后的时间分布MCU内核启动和时钟稳定花了20毫秒传感器上电和第一次转换花了80毫秒LCD刷新花了60毫秒剩下40毫秒是蜂鸣器自检和逻辑处理。传感器第一次转换慢是因为它上电后需要一段稳定时间而且默认配置是最高精度转换时间本身就长。我把传感器配置改成低功耗模式转换时间从80毫秒降到15毫秒精度损失在温度测量上只有0.1度完全可以接受。LCD刷新60毫秒是因为用了软件模拟的段码驱动改成硬件LCD驱动后降到10毫秒以内。MCU启动时间可以通过优化时钟配置来缩短比如直接用内部高速时钟跳过外部晶振稳定等待但这样会影响时间精度需要权衡。优化后唤醒时间从200毫秒降到45毫秒左右唤醒电流还是8毫安但持续时间短了每次唤醒消耗的电量从1.6mAs降到0.36mAs一天下来从7.68mAh降到1.73mAh。加上睡眠电流18微安一天0.43mAh总功耗约2.16mAh每天CR2032的220mAh容量理论续航超过100天。实际因为电池自放电和温度影响打个七折也有70天左右比之前的两周好太多了。4.2 电量检测电路本身的功耗这个温度计有一个电量检测功能用两个电阻分压后进ADC。分压电阻是1兆欧和1兆欧分压比1比1电池电压3V时分压点电压1.5V流过电阻的电流是1.5V / 2兆欧 0.75微安。这个电流看起来很小但它是持续存在的一天24小时不停一天消耗0.75微安 × 24小时 18微安时也就是0.018mAh。相对于总功耗2.16mAh每天占比不到1%可以接受。但有些设计为了省事分压电阻用得比较小比如100千欧和100千欧那电流就是15微安一天0.36mAh占比就大了。更合理的做法是用MOS管控制分压电路的通断只在测量电量的时候接通测完就断开。这样平均电流可以降到纳安级。这个项目里我没改因为0.018mAh每天的影响很小改电路要动PCB不划算。实操心得电量检测的分压电阻能大则大但要注意ADC输入阻抗和漏电流。如果分压电阻太大比如10兆欧级别ADC的输入漏电流和PCB表面的漏电流都会影响精度。一般1兆欧到2兆欧是比较平衡的选择。4.3 电池供电自动切换与防倒灌这个温度计没有外接电源所以不需要自动切换电路。但我在排查过程中想到一个问题如果客户用可调电源模拟电池电源和电池同时接在电路上会不会有倒灌答案是会。如果电源电压高于电池电压电流会倒灌进电池不仅测不准还可能损坏电池。所以测试时要么断开电池要么在电源和电池之间串一个理想二极管电路。理想二极管电路可以用PMOS加比较器实现也可以用专用的理想二极管芯片。原理很简单比较器检测输入和输出端的电压如果输入端电压高于输出端就打开PMOS让电流通过如果输入端电压低于输出端就关断PMOS防止倒灌。这个电路在电池和外部电源共存的设备里很常见比如BMS电池管理系统里就有类似设计。对于这个温度计的排查我直接用可调电源替代电池没有同时接电池所以不存在倒灌问题。但如果读者要复现这个排查过程建议用电池座加假电池就是两端是金属的塑料棒来接电源避免直接焊线到电池座弹片上那样容易导致弹片变形。5. 常见问题速查与避坑指南5.1 续航问题排查速查表现象可能原因排查方法解决措施新电池两周就没电唤醒时间过长示波器测唤醒电流持续时间优化传感器配置和LCD驱动电压正常但设备不工作电池内阻大直流负载法测内阻更换低内阻电池或改善电池座接触唤醒瞬间复位电源跌落过大示波器测MCU VDD引脚加大LDO输出电容或优化供电路径睡眠电流偏大某个器件未进低功耗分段断开负载测电流检查上拉电阻、分压电阻、传感器配置电量显示不准分压电阻或ADC基准问题万用表对比分压点电压校准ADC或改用内部基准低温下续航骤降电池低温性能差低温箱测试改用低温电池或增加加热措施5.2 我踩过的三个坑第一个坑是迷信万用表电压。前面说过空载电压正常不代表带载正常。我一开始就是被2.9V的空载电压骗了以为电池没问题白白浪费了一天时间。后来用示波器看唤醒瞬间波形才找到真正的问题。第二个坑是忽略PCB清洁度。这个温度计是手工焊接的样品PCB上残留了不少助焊剂。助焊剂在潮湿环境下会轻微导电导致漏电流。我用酒精清洗后睡眠电流从25微安降到18微安。虽然降幅不大但对于微安级功耗的设备每一微安都很重要。第三个坑是LDO输出电容选型。我一开始换了一个10微法的电容结果LDO振荡了输出电压反而更不稳。后来查手册才知道这个LDO要求输出电容ESR在0.1到10欧姆之间10微法陶瓷电容的ESR太低不满足稳定条件。换成2.2微法后正常。所以换电容前一定要看数据手册的稳定区间。5.3 电池选型与使用建议CR2032电池品牌很多质量参差不齐。我实测过几个常见品牌内阻从10欧姆到80欧姆都有。对于低功耗设备建议选内阻低、自放电小的品牌。另外电池的存放时间也很关键库存超过两年的电池内阻会明显升高即使没用过容量也会下降。如果设备工作温度范围宽比如零下20度到零上60度那CR2032的低温性能会是个问题。低温下电池内阻急剧升高带载能力大幅下降。这种场景建议用宽温电池或者改用超级电容加电池的组合方案。超级电容负责提供唤醒瞬间的大电流电池负责长期供电这样可以避开电池内阻的影响。提示超级电容加电池的方案需要注意超级电容的漏电流和均压问题。如果超级电容串联使用必须加均压电路否则电压不均会导致某个电容过压损坏。6. 从这次排查中沉淀下来的经验这次排查前后花了大概一周时间从最初的怀疑电池到定位到LDO输出电容和唤醒时间中间走了不少弯路。最大的体会是低功耗设备的续航问题不能只看电池要把整个供电链路和负载行为结合起来分析。电池内阻、接触电阻、LDO瞬态响应、唤醒时间、分压电阻漏电任何一个环节出问题都会在续航上放大。另外测量工具的选择很重要。万用表适合测静态值示波器才能抓到瞬态行为。对于低功耗设备唤醒瞬间的电压跌落和电流波形往往藏着最关键的信息。我现在的习惯是拿到一个低功耗设备先用可调电源加电流表看睡眠和唤醒电流再用示波器看电压波形基本能快速判断问题方向。最后分享一个小技巧如果你手头没有专业的内阻仪可以用一个简单的电路来测电池内阻。找一个100欧姆的电阻和一个开关串联后接电池用示波器或者带峰值保持的万用表测开关闭合瞬间的电压跌落然后算内阻。这个方法精度不如专业仪器但足够判断电池能不能用。我试过和电子负载测出来的结果偏差在20%以内对于现场排查够用了。这个温度计后续还可以做进一步优化比如把蜂鸣器改成压电陶瓷片降低驱动电流把LCD背光去掉用反射式段码屏MCU在睡眠时把不用的外设时钟全部关掉。这些措施叠加起来续航还能再提升一截。不过那是另一个项目的事了这次先把续航从两周拉到两个月客户已经满意了。