ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

电量计如何追踪锂离子电池自放电?原理、算法与工程实践

电量计如何追踪锂离子电池自放电?原理、算法与工程实践 这是一个挺典型的售后场景一批带定位功能的物联网设备在仓库里囤了大半年出货前抽检屏幕上报“剩余电量85%”客户签收后装到现场不到两个小时就提示低电量关机。经销商第一反应是电芯坏了电池厂的人拿回去一测电芯本身没坏问题出在电量计上。罪魁祸首就是锂离子电池的自放电——电芯内部每天都在悄悄消耗电荷而普通电量计ICFuel Gauge IC绝大部分时间里根本感知不到这种内部消耗。这篇文章就是围绕“电量计如何追踪自放电”这件事展开的。我会从自放电的物理机理讲起重点拆解现代电量计IC在做自放电补偿时的算法思路、关键参数配置以及我在实际项目里踩过的坑和验证方法。内容偏向硬件工程师、电池Pack设计者和BMS相关从业者如果你是刚接触电量计的新人也能从这篇文章里建立一套完整的概念框架。1. 自放电的本质与电量计的测量盲区1.1 锂离子电池自放电到底在放什么锂离子电池不是一瓶“封死”的汽油它是一个处于微弱动态平衡的电化学体系。即使你不接负载、不装保护板电芯内部也在持续发生各种副反应。宏观上就表现为放置一段时间后开路电压下降可放出的容量减少这个现象就是自放电。从机理上分自放电主要有四类来源SEI膜持续生长。负极表面的钝化膜不是一次成型的它在整个生命周期内会缓慢变厚每次成膜反应都会消耗一部分活性锂。这部分损失基本不可逆直接表现为容量衰减。电解液分解与副反应。正极在高电位下会促进电解液氧化产生副产物消耗锂盐和溶剂也是不可逆的容量损失。内部微短路。电芯制造过程中若混入金属杂质颗粒或隔膜在长期应力下出现缺陷就会在正负极之间形成极微小的电流通路。这种自放电的特征是电压下降比较线性往往表现为“存储后掉电特别快”。可逆的部分。有一部分电荷损失在重新充电或温度变化后能够部分恢复这一部分会让测试人员很头疼因为一次测到的自放电率并不能完全代表日历寿命损失。衡量自放电最常用的指标是自放电率。商用锂离子电芯在常温25℃下月自放电率通常在1%到3%之间好一点的能做到1%以下。温度每升高10℃自放电速率大约会翻倍60℃环境下存放一个月容量损失可以到5%以上。这个特性决定了长期仓储的设备出库前必须对电量估计算法做特殊处理。可能有朋友会问既然自放电会导致电压下降那出货前测一下电压不就能判断了吗问题恰恰出在这里——电压下降的幅度很小而且它和设备的静态功耗、保护板功耗、电量计自身功耗全都混在一起常规产测手段极难分辨。只有把电芯放在恒温环境里用高精度电压表长期跟踪电压曲线才能比较准确地推出自放电量这种测试成本在产线上根本没法铺开。所以真正能解决问题的还得靠电量计本身的算法。1.2 主流电量计架构对比目前市面上常见的电量计按测量原理大致分三类库仑计、开路电压法OCV法以及把两者结合的混合估算方案比如TI的Impedance Track算法、Maxim/ADI的ModelGauge m5。库仑计是大家最熟悉的思路。电芯的充放电电流全部流经采样电阻电量计以固定周期采样电流对时间积分得到“已流过的电量”。这个方案对动态负载的瞬时精度很好但它的前提假设是所有进出电芯的电荷都要经过采样电阻。很不巧自放电恰好不满足这个前提。电芯内部微短路也好、SEI生长偷走锂离子也好这些电流发生在电芯内部根本不会从正负极的外部端子流出所以采样电阻上看不到任何痕迹。库仑计对自放电天然就是“睁眼瞎”。开路电压法的思路是把电芯静置足够久测量空载端电压再用标准的OCV-SOC曲线反推当前电量。这个方案能间接感知自放电因为自放电会让电压下降映射到SOC时电量就会变小。但问题在于OCV曲线在中段3.7V到3.9V附近非常平电压一点点噪声对应SOC很大变化而且锂离子电池存在电压滞后现象同一个SOC下充满后静置和放空后静置的电压能差几十毫伏。自放电导致的电压偏移量很可能淹没在这种“正常噪声”里。因此纯OCV法只适合低功耗、长时间静置的场合比如很多一次性电池的寿命计量。混合方案是目前中高端可充锂电的主流。它在库仑计的基础上每当电芯进入静置状态就采样一次稳定的OCV结合当前温度修正化学容量Qmax和阻抗表。自放电产生的电压偏移会被“电压修正”环节捕捉到再转换成DOD深度放电百分比补偿。这样一来库仑计负责短期精度OCV负责长期漂移校正两者配合自放电才能真正被纳入估算。当然想让它工作得准必须给算法提供电芯级别的自放电率基准也就是后面要重点说的参数配置。1.3 自放电是怎么“骗过”电量计的回到开头那个场景。设备在入库时电量计把当时的50%电量写进了库仑积分器。之后电芯的电流通路基本没有建立——设备休眠系统侧功耗可以忽略保护板处于低功耗状态采样电阻上没有电流流过。库仑计就认为“没有消耗”。但电芯内部的自放电一直在持续半年下来真实可放出电量可能只剩40%不到。等到客户真机开机系统电流突然出现电量计从“静态库仑值”切换到“电压/阻抗估算”时才发现两者的偏差已经超过20%于是表现为开机电量跳变、使用几十分钟就崩溃。如果电量计一直不做OCV修正它就会一直基于“没有电流等于没有消耗”这个错误前提工作。这就是自放电能“骗过”经典库仑计的根本原因电量计的测量对象是外部端子电流而自放电是发生在电芯内部的电流两者在物理上就不在同一个回路里。理解了这一层再看各大厂商宣传的“自放电追踪”能力就能分辨出哪些是真正的算法补偿哪些只是营销话术了。2. 现代电量计IC追踪自放电的几条技术路线2.1 双通道方案OCV采样叠加库仑积分既然库仑计测不到内部电流那就要靠电压来“看穿”内部状态。现代主流电量计的跟踪逻辑一般是三条线并行跑电流采样通道负责短期高精度。设备激活后的动态负载包括脉冲、快充、待机电流都由这条通道负责积分。电压采样通道负责长期校正。电量计通过片上ADC周期性读取电芯端电压尤其在系统进入低功耗或静置状态后每隔几小时到24小时醒来一次测一次稳定的OCV。电化学模型负责把“电压偏差”翻译成“DOD变化”。OCV-SOC曲线、温度系数、阻抗表都存放在模型里一旦实测OCV与估算SOC对应的预期电压不一致算法就会把差值折算成自放电或老化造成的偏移量更新DOD和Qmax。这里有一个关键细节不是每一次电压测量都能当作有效数据。电量计通常要求电芯处于静置状态至少30分钟到2小时电压达到“准平衡态”才会使用如果电压还在剧烈波动或者温度变化超限这次采样会被丢弃。这样做的目的是保证电压修正确实是来自电化学状态的改变而不是被瞬态噪声干扰。所以实际操作中用户会看到电量计在长时间休眠后第一次唤醒时SOC往往会有一次小幅调整调整幅度越接近真实自放电量说明算法训练得越好。2.2 自放电率参数给算法一个可参考的DOD基准线大多数工程师在数据手册里看到的自放电相关配置项名称通常是类似“DOD Self Discharge Rate”的样子单位是%/天有些器件的寄存器里用0.01%/天表示。比如某款主流电量计评估套件中这个参数默认值是0代表自放电补偿关闭只有你根据电芯厂商提供的实测自放电率或者自己实验室测出的数据把值写进配置算法才会在休眠计时中按日计提DOD损失。为什么算法需要一个外部给进去的参数而不能完全依赖OCV修正因为OCV修正存在天然局限。电芯在长期静置时电压下降和容量损失之间的关系受老化状态、温度、时间多重因素影响单纯靠一两个电压点很难精确反推自放电到底消耗了多少容量。算法需要一个先验的“自放电速率”作为基准线再结合间隔时间算出“预期DOD损失”。大致逻辑是这样的电量计记录上次更新以来经过的时间通常以天为单位。用配置的DOD Self Discharge Rate乘以天数得到这一期间应该发生的自放电DOD增量。当电量计从深度休眠中恢复、做一次性SOC评估时预先扣除这个增量再叠加OCV修正带来的残余偏差。如果实测OCV与预期不符残余偏差被用来更新模型的长期漂移逐步逼近真实自放电率。这个参数对产品设计的意义非常直接。如果一台设备可能在全生命周期里被长时间存放在仓库那么给电量计喂一个准确的自放电率比单纯依赖“出货前校准”可靠得多。物流和仓储环节的时间不可控但算法可以在休眠中持续累计自放电损失一开机就能给出相对真实的状态。当然这个值的准确性直接决定补偿效果。我见过有项目图省事把自放电率拍脑袋填成0.1%/天实际上电芯只有0.05%/天结果设备在客户手里闲置一个月后电量反而显示偏低一两个百分点。所以自放电率绝对不能随便填宁可多花几天测也不要靠估算。2.3 温度修正与Qmax更新自放电率和温度的关系非常密切甚至可以说温度是决定自放电速度的第一因素。如果电量计只用一个固定的常温自放电率在温度大幅波动的仓储环境下依然会偏。成熟的做法是做成“自放电率温度系数”的二维模型常温基准值来自配置低温时折算系数下降高温时上升每隔若干小时重新评估一次平均温度再计算累计损失。这里要特别提醒自放电补偿不能替代Qmax更新。Qmax是电芯当前能放出的最大化学容量会随日历老化逐渐变小自放电只是让“电荷存量”减少而Qmax是“总刻度”。一个容量已经衰减到90%的电芯即使自放电率为0它的SOC曲线也会整体偏移。所以电量计在生命周期训练里Qmax更新与自放电补偿是两条独立的链路。只有定期完成放空-充满的学习循环让电量计通过实际进出电量重估Qmax自放电补偿才有准确的基准。指望自放电参数能修复一个从未做过学习循环、Qmax还停留在出厂值的电量计是不现实的。还有一个容易被忽略的点高温存储会导致自放电率动态增大而电量计在过热环境中本身也不适合频繁唤醒测量因为温度梯度会让OCV采样严重失真。所以工程实现上许多电量计的休眠策略是“低电量高温时加密自放电计提但不做电压修正”等温度回落后再补一次完整OCV采样。这套机制做得好不好直接决定了在苛刻仓储环境下的客户体验。2.4 面向长期无人值守的纯电压计时方案除了混合双通道方案还有一条很有意思的路线适用于智能电表、烟感探头、固定资产追踪器这类低功耗、长时间在线、不常被访问的场合。这类设备对电量计的诉求不是“动态负载下精确到1%”而是“几年内不开机维护也能知道还有多少电”。用传统库仑计做长期监控很难因为设备自身电流极小自放电反而成了消耗大头。这时候专用的计量IC会采用更激进的“电压计时”策略不依赖采样电阻而是在极低的睡眠电流下持续记录时间周期性测量电芯OCV按照电压下降量和实测时间推算容量损耗。这类方案把“长期校准”做成默认策略用时间维度补偿掉库仑计天然测不到的那部分内部消耗。我接触过的BQ35100就是这类定位它在表计市场很常见支持多种电池类型对自放电的追踪思路和本文的核心机制其实是一致的。代价也很明显这种方案对动态电流的瞬时响应精度有限不适合跑复杂负载协议的产品。如果既要动态负载管理又要长期静置准确那就只能用混合方案加低功耗休眠策略。选型的时候最忌讳的就是什么东西都想要结果哪个方向都没做好。3. 实操从学习循环到自放电参数配置3.1 需要的工具和初始准备如果你想在自家产品上把自放电追踪做起来我的建议是不要一开始就去改寄存器。先把硬件环境搭好以TI电量计加EV2400调试器的常见组合为例准备这几样东西一套电量计评估板或接近量产的样板板载采样电阻和电量计IC。调试工具USB接口连电脑另一头接评估板的SMBus/I2C接口能读到各电芯电压和温度。上位机软件比如bqStudio用来读寄存器、配置Data Flash、跑自动学习流程。一台能恒温的电池测试环境至少在室温下把整个测试流程跑一遍。待测电芯至少两颗最好是同一批次、做过分容的避免电芯自身差异干扰判断。在开始调自放电参数之前先把电芯容量、充电电压、终止电压配置好然后选择配套的化学ID。化学ID是电量计算法匹配OCV曲线和阻抗表的关键索引选错了会直接污染所有基于电压的修正。不确定怎么选时用厂商提供的匹配工具扫描电芯的放电/静置数据比手工试要快得多。3.2 先跑一遍完整学习循环自放电补偿的准确度依赖一个已经学好的“基线模型”所以第一步永远是让电量计完成至少一次完整的学习循环。流程大致如下用标准充电流程把电芯充到满充电压保持到电流降至截止电流确认电量计抬起满电标志位。静置2小时以上让OCV稳定电量计会把这一时刻记录为“满电状态”。以0.2C到0.5C的电流恒流放电到厂商规定的终止电压。再静置至少2到5小时让电压回到准平衡态。重新充满到满观察Update Status状态位是否进入0x05或0x06并确认Qmax被更新。这个过程中电量计会学到“满电到底能放多少mAh”也就是Qmax以及不同SOC区间的电芯阻抗。只有基线正确了后面设置的自放电率才能被正确翻译成SOC偏移。学习循环里如果温度波动太大或者静置时间不足学出来的Qmax可能偏差几个百分点再叠加自放电补偿就会乱上加乱。这一步宁可放慢也不要赶进度。3.3 配置DOD Self Discharge Rate学习循环跑完进入配置环节。以bqStudio界面为例进入Gauge的Data Flash页面找到Gas Gauging类目里面有DOD Self Discharge Rate参数。常见单位是0.01%/day也就是说如果你按0.08%/天写入就需要填8如果电芯厂商给的是月自放电率2%折算成日自放电率约为0.067%/天可以填6或7。不同IC的字段名和单位有差异有的直接就是%/day请以具体器件手册为准。填完之后不要急着量产至少做一次“存储模拟测试”把配置好的电芯放到恒温室以实际仓储温度存放一到两周然后唤醒读取剩余电量RSOC和预期值对比。一两天内的自放电量太小电压法和库仑计都不容易分辨最好用一个月或高温加速条件来验证。如果偏差明显就要重新确认自放电率数值和温度补偿系数。这里有一条很重要的原则DOD Self Discharge Rate填的是电芯本身的自放电率不是整个Pack的静态功耗。有些产品在存储状态下的静态电流主要来自保护板和电量计本身这部分消耗是流过采样电阻的库仑计能正常计入。如果你把整个Pack的静态功耗也折算成自放电率填进去电量计就会重复扣减SOC持续偏低。这个坑我见过不止一次而且一旦批量出货后才暴露后果相当难处理。3.4 验证效果与数据读取配置完成并放置一个周期后通过SMBus或I2C把电量计内部状态读出来。SBS标准协议里相对剩余电量、电压、电流等都有标准寄存器地址。下面是一段示意代码用于在Linux主机上用SMBus读取几个关键值# 示例通过SMBus读取SBS兼容电量计关键寄存器示意伪代码 import smbus2 bus smbus2.SMBus(1) ADDR 0x0B # 取决于板卡上的地址配置 def read_word(reg): return bus.read_word_data(ADDR, reg) # 电压(0x08), 电流(0x0A), 剩余容量(0x0F), RSOC(0x0D) voltage_mv read_word(0x08) current_ma read_word(0x0A) # 注意符号位与SBS规则 rem_cap_mah read_word(0x0F) rsoc read_word(0x0D) print(fVoltage{voltage_mv}mV, Current{current_ma}mA, fRemCap{rem_cap_mah}mAh, RSOC{rsoc}%)读取结果时要重点看RSOC和剩余容量是否与真实可放出容量接近。更严谨的做法是在存储前后分别做一次小电流放电对比存储前以0.2C放电测出实际容量存储一个月后再放一次两次容量差就是自放电加静态功耗的总损失然后和电量计上报的消耗比对。这个流程耗时但它是唯一能拍板判断算法是否生效的办法。如果时间紧可以把高温存储作为加速手段但要注意温度不能超过电芯规格书允许的最高存储温度否则测出来的是加速老化数据不是正常自放电率。4. 设计与选型中的常见问题4.1 常见问题排查表实际项目里自放电追踪相关的翻车问题主要集中在下面这几个场景现象可能原因排查方向长期存储后RSOC仍然100%自放电补偿未开启或DOD Self Discharge Rate为0检查Data Flash配置开启自放电率存储后开机电压正常但电量几分钟内掉10%自放电导致真实SOC偏低电量计从库仑切换OCV时集中修正做学习循环更新Qmax/Ra表确认自放电率准确召回后的设备电量普遍偏低DOD Self Discharge Rate填错把Pack静态功耗算成了自放电重新评估采样电阻上的真实待机电流和电芯自放电分开温度变化大时SOC乱跳缺少温度补偿或休眠策略不佳检查温度系数参数、唤醒/电压采样策略学习循环跑完Qmax更新异常静置时间不够或化学ID匹配偏差延长静置时间重新匹配化学ID这些问题在评估阶段几乎都会遇到。我自己的习惯是每一个新电芯批次进厂都先在电量计评估板上做一轮“存储激活”测试把偏差
返回列表