BQ40Z50电量计:保护链路、永久失效与阻抗跟踪实战
发布时间:2026/11/3 3:59:42 锦皓数字建站

简介这份 BQ40z50 数据手册中文版面向电池管理系统BMS开发者、电动车与储能项目工程师及电子相关专业学习者用于快速理解 TI BQ40z50 电量计芯片的保护逻辑与配置要点。压缩包内共 1 个 PDF 文件大小约 8.94MB为中文翻译版技术参考文档适合按章节检索而非线性通读。手册围绕电池低电压、过电压、放电过电流、硬件保护、超载、短路及温度/超温等保护装置展开并涉及 SBS 主机监督保护、预充电与快速充电超时保护、OverChargingVoltage()、OverChargingCurrent()、OverPreChargingCurrent() 等具体条目目录按保护类型分层便于定位寄存器与阈值相关说明。文前还提示 EV2400 调试工具方便联调时对照。已有 8953 人学习说明其在电量计调试与 BMS 入门场景中具有一定参考价值。读者可据此梳理保护策略、核对参数设置并作为项目排错和方案评审的中文资料。1. 一块“还有 30%”的电池为什么会突然关机3 串电池组静置测得 11.6V对着开路电压表一查大约还剩 30%装到设备上跑不到四分钟就欠压保护关机。这种场面在电池调试里并不罕见很多人的第一反应是采样不准、加个校准就好但真正的病根在方法本身用电压推电量这件事只在“静置”这一个工况下成立一旦有负载内阻上的压降就把读数带偏了。BQ40Z50 这类电量计解决的就是这个偏差——它不做“看电压猜剩余”而是把电池当成一个有内阻、有老化、有温度系数的模型来跟踪一边用库仑计数累计电荷一边在静置时用开路电压修正累计误差。中文版数据手册里那一大堆保护、永久失效、阻抗跟踪、充电算法的章节本质上都在描述这个模型的适用边界。搞懂这些边界比记住寄存器地址有用得多配一个 EV2400 调试器能让你看到边界被跨越的瞬间但看不看得到取决于你知不知道去哪里看。2. 保护链路从采样电阻上的毫伏到 FET 栅极被拉低保护是电量计最容易被低估的部分。很多人以为保护就是“设个阈值超了就关”真到现场才发现同一个过流事件有时候 200μs 就断了有时候 30ms 才动还有时候干脆不动。差别不在阈值而在一条完整链路上每一级的分工。2.1 一条过流保护动作要经过几级采样电阻通常放在电芯负极与 Pack 负极之间阻值在 12mΩ 量级。20A 放电电流流过 1mΩ压差只有 20mV这个信号要送到 SRP/SRN 这对差分输入上。20mV 的共模抑制要求很高所以布线必须是开尔文连接两条取样线从电阻焊盘内侧单独引出不能和功率走线共用铜箔否则焊点电阻和铜箔温漂会直接叠进测量值。信号进芯片之后分成两路走。一路进 ADC由固件周期性采样、做数字滤波、和阈值比较、判断连续超限次数最后写 FET 控制位去拉 CHG/DSG 栅极。这条路上每一步都要时间采样周期、滤波窗口、去抖计数、驱动上升沿。另一路进 AFE 内部的独立比较器判定逻辑是纯硬件的阈值由数据 Flash 配置但判定过程不经过固件比较器翻转就直接作用在栅极驱动上。为什么非要两条路因为安全事件的时间尺度差异太大。短路这种故障回路电感储能在几百微秒内就能把 FET 的沟道烧穿固件还在排队等下一个采样周期硬件比较器已经把管子关了。反过来电芯过压需要长时间确认——充电末端电压本来就会顶到阈值附近来回蹭硬件比较器一抖就断充电永远结束不了。所以典型的分工是需要快的短路、重过流交给硬件需要准的过压、欠压、温度交给固件。# 读 BQ40Z50 的实时电流与状态示意命令码见手册第 12 章 SBS 命令表 import smbus2, struct BUS, ADDR 1, 0x0B # 7 位地址实际以 DF 配置为准 def sbs_word(bus, cmd): raw bus.read_i2c_block_data(ADDR, cmd, 2) return struct.unpack(h, bytes(raw))[0] # 小端、有符号 bus smbus2.SMBus(BUS) volt sbs_word(bus, 0x09) / 1000.0 # Voltage: mV - V curr sbs_word(bus, 0x0A) / 1000.0 # Current: mA - A充电为正、放电为负 rsoc bus.read_i2c_block_data(ADDR, 0x0D, 2)[0] # RelativeStateOfCharge: 单字节 % stat sbs_word(bus, 0x16) # BatteryStatus: 保护位与告警位混在一个字里这段代码读的是“结果”不是“过程”。0x0A返回的是已经过内部滤波的电流值用它去判断保护响应快慢是不准的——硬件比较器看的是滤波前的原始差分信号。0x16里每一位对应一种保护或告警状态触发和恢复的位是分开的读的时候要按位解析别整个字直接判非零。真正要观察保护时序得用示波器同时抓 SRP/SRN 和栅极或者用 EV2400 的寄存器视图连续轮询看状态位在哪一帧翻起来。2.2 阈值、延时、恢复三个参数不能只调一个保护参数从来不是一个数字而是一组三件套检测阈值、触发延时、恢复条件。少调任何一个都会出问题。阈值调得太贴近工作点正常负载波动就误触发延时调得太短浪涌电流就把设备打停恢复条件不设一旦断开就再也回不来。保护项检测量阈值参数延时参数恢复方式电芯欠压 CUV单节电压CUV ThresholdCUV Delay回升到 Recovery 阈值且持续一段时间电芯过压 COV单节电压COV ThresholdCOV Delay回落到 Recovery 阈值以下放电过流 OCD放电电流OCD ThresholdOCD Delay断开负载后自动或需主机命令放电过载 AOLD放电电流低于 OCD 的阈值更长的延时负载撤除后延时恢复放电短路 ASCD电流变化率硬件比较器阈值微秒级固定通常需主机命令或换电充电过流 OCC充电电流OCC ThresholdOCC Delay充电电流回落这张表最值得注意的是 AOLD 和 OCD 的关系。二者测的是同一个量但阈值和延时是反着设的过载的阈值低、延时长达秒级用来对付那种“电机堵转但没到短路”的持续大电流过流的阈值高、延时短用来对付突发的电流尖峰。如果两个参数设成一样那低阈值那条就永远不会先触发等于白设。同样的道理适用于短路保护硬件短路阈值必须高于固件过流阈值留出足够的余量否则正常启动浪涌就被硬件一刀切了用户看到的现象就是“偶尔开不了机”查半天查不到原因。2.3 温度保护与 FET 本体保护为什么常被漏掉电芯温度好理解热敏电阻贴在电芯表面TS1TS4 可以接多路。但真正在实验室里烧过管子的往往是 FET 本体温度。FET 的过热来源不是环境温度是它自己的导通损耗和开关损耗导通电阻随温度上升而变大损耗又随电阻变大而上升这是个正反馈。电芯温度可能只有 40℃而贴在 FET 旁边的热敏电阻已经 100℃ 了。所以数据手册里温度保护分成两套一套按电芯温度OTC/OTD/UTC/UTD一套按 FET 温度OTF。前者保护电芯不被充坏后者保护功率器件不被自己烧掉。很多设计只接了电芯的热敏电阻把 FET 那一路空着或者复用同一个反映到现象上就是“常温测试一切正常夏天满载跑一小时就烧管”属于典型的血泪经验。温度保护还有一个容易忽略的点阈值是按充电和放电分开设的而且充电侧的窗口通常比放电侧窄。低温充电的危害比低温放电大得多锂析出的风险主要发生在低温大电流充电。手册里预充、快充、温度区间这几章连在一起看才能理解为什么充电电流要随温度折让。2.4 二级保护固件死掉之后谁负责主控固件是有可能卡死的——程序跑飞、看门狗没喂、I²C 总线被拉死。这时候固件保护全部失效全靠硬件。硬件保护又依赖 AFE 和栅极驱动本身正常工作如果 AFE 也挂了就需要二级保护器一个独立的保护 IC或者一次性的化学熔断器三端保险丝由独立的触发信号引爆。二级保护的阈值必须设得比一级更宽动作时间更晚。它的定位是“最后一道”不是“更快的一道”。见过有人为了让保护更“灵敏”把二级保护阈值设得比一级还低结果正常工作时的电压尖峰就把保险丝点了整组电池报废。这个器件一旦动作是不可逆的设计时的心态应该是“宁可它一辈子不动”。3. 永久失效为什么有些故障必须“坏一次就锁死”保护断开 FET 是可逆的电流消失、电压回落管子重新打开设备继续用。永久失效PF走的是另一条路一旦触发电池被标记为不可继续使用即使所有测量值都恢复正常。3.1 PF 的设计前提锂析出不可逆这个设计的出发点不是“保护”是“证据保全”。过充到一定程度锂离子会在负极表面以金属锂的形式析出这个过程在电压回落之后并不会逆转。电芯看起来“恢复正常”了实际上内部已经有了枝晶生长的种子下一次充电就可能内部短路。如果系统只是在过压时断开 FET、然后自动恢复用户会以为一切正常继续用这颗已经受损的电芯——这才是真正的风险。所以 PF 的语义是发生了某类事件说明这颗电芯的状态已经不可信系统必须留下记录并拒绝继续服役。它宁可误杀不可放过。这个取舍在消费类产品上可能显得激进但在多串电池组、动力电池这类场景里是底线。3.2 黑盒记录器失效之后还能拿到什么证据PF 触发之后最难受的是没法复现。电池已经锁死了现场没了你只知道“它挂了”不知道为什么挂。黑盒记录器就是为这个场景设计的它在数据 Flash 里划出一块固定区域循环记录 PF 触发前的若干条快照每条包含时间戳、总压、单节电压、电流、温度。这块区域是只读的正常使用改不了只有授权命令才能清除。它相当于给电池装了一个行车记录仪——事情发生之后再回看能看到触发前一瞬间电流是不是有个尖峰、温度是不是已经爬了很久、某节电压是不是先掉下去的。做失效分析时这几条记录的价值远高于事后静态测量的任何数据。理解这一点就会明白为什么手册第 3 章和第 9 章生命周期数据收集要分开写黑盒记录的是“事件前后”生命周期记的是“长期极值”前者用于定位单次失效后者用于评估老化趋势。3.3 PF 的分类与恢复路径PF 不是一个标志位是一组。手册里列的触发源大致可以分成几类类别典型触发源恢复可能性安全类电芯欠压/过压、充放电过流、电芯或 FET 过温一般不可恢复需授权清除一致性类QMax 失衡、电芯压差、静置/活动中的电压不平衡部分可通过重新学习恢复器件类充放电 FET 失效、化学熔断、二级保护动作、PTC不可恢复数据与通信类指令 Flash 校验和错误、数据 Flash 失效、AFE 寄存器/通信异常、热敏电阻开路视配置可设为可恢复这个分类的意义在于安全类和器件类的 PF 一旦触发说明物理层面已经出事软件层面做什么都晚了而数据与通信类的 PF很多时候是上电时序、供电跌落、写入过程被打断导致的假阳性。把所有 PF 一律设成不可恢复产线上会因为一次电源抖动报废一整批电池把所有 PF 都设成可恢复安全事件就变成了“重启试试”。合理的做法是按类配置安全类锁死通信类允许有限次恢复并计数。3.4 PF 触发后 FET 的最终状态PF 触发时芯片会强制关闭 CHG 和 DSG 两个驱动并且锁存。这里有个细节不是所有 PF 都关两个管子。电芯过压类通常只关充电管允许继续放电让用户把电量用掉再返厂而短路、FET 失效这类必须两个都关彻底断开。这个差异在调试时很容易被忽略——看到“PF 触发了但还能放电”别急着判断芯片坏了先去看这个 PF 的配置项。4. 阻抗跟踪QMax 与 Ra 表怎么把误差压住回到第 1 章那个场景。要解决“显示 30% 却突然关机”靠的不是更准的电压采样是一个能同时描述容量、内阻和老化状态的模型。阻抗跟踪就是这套模型的名字。4.1 库仑计数单独用会漂到哪里去库仑计数的原理很朴素电流对时间积分进出多少电荷记多少账。它的误差来源也很朴素电流测量的失调offset会被无限累积。假设采样链路的失调是 1mA一天 86400 秒累计误差就是 86.4mAh。对于一颗 3000mAh 的电芯一天漂 3%。这还没算温度漂移、自放电、以及电池在不同倍率下实际可放出容量的差异。所以纯库仑计数的电量计用久了必然偏而且偏的方向是单向的——失调通常是固定方向的误差只会越积越多不会自己回来。校准只能解决“出厂时准”解决不了“用三个月后还准”。4.2 OCV 校正静置判定的门限修正累积误差的锚点是开路电压。电池静置足够长时间后端电压会趋近于一个只和 SOC、温度有关的值这个关系就是 OCV-SOC 表。一旦判定电池进入静置状态芯片就用当前电压反查 SOC把库仑计数的账“做平”。难点全在“判定静置”这四个字上。刚撤掉负载时电压会因为极化慢慢回升几秒内涨几十毫伏是常事如果这时候就去查表得到的 SOC 会偏低。所以判定条件通常是组合的电流绝对值低于某个门限、持续时间超过设定值、电压变化率小于阈值、温度在允许范围内。这几个参数配得松校正频繁但可能不准配得紧校正可靠但可能几天都等不到一次机会。4.3 QMax 更新与那几道边界检查QMax 是模型里的“最大化学容量”可以理解为这颗电芯在理想条件下能放出的总电荷。它会随着循环和老化缓慢下降是 SoH健康度的物理基础。更新的思路是在两个已知 SOC 点之间记录实际流过的电荷量反推总容量。公式本身很简单难点在于“已知 SOC”这个前提——它依赖 OCV 校正的准确性。所以 BQ40Z50 在真正写入新 QMax 之前会做一串边界检查# QMax 更新的判定流程伪代码参数名对应手册第 6 章的可配置项 def try_update_qmax(s): if s.dod_delta DOD_MIN: # 两个校准点之间的深度差太小分母不可靠 return 拒绝: DOD 变化不足 if not (T_MIN s.temp T_MAX): # 温度越界时 OCV 表本身就不准 return 拒绝: 温度越界 if s.current_ripple RIPPLE_MAX: # 电流波动大说明不是稳定工况 return 拒绝: 电流不稳定 if s.relax_time RELAX_MIN: # 静置时间不够极化未消退 return 拒绝: 未充分弛豫 qmax_new s.passed_charge * 100.0 / s.dod_delta ratio qmax_new / s.qmax_old if not (RATIO_MIN ratio RATIO_MAX): # 单次变化过大大概率是异常而非真实老化 return 拒绝: 变化率超限 return qmax_new这段逻辑最值得琢磨的是最后那道变化率限制。理论上 QMax 每次循环都会掉一点点单次更新幅度很小。如果算出来一次掉了 30%那不是老化是某一端 SOC 点算错了或者中间有电荷漏计。加这道限制等于给模型装了个“合理性审查”宁可这次不更新也不让一个错误值污染整个容量模型。这也是为什么有些电池组用了很久SoH 一直显示 100%——不是没老化是更新条件一直没满足模型在“守旧”。快速 QMax 更新是另一条路径用在上电初期或数据缺失时用更短的窗口、更宽松的条件先给一个初值之后再靠常规更新收敛。它解决的是“新电池组第一次上电时 QMax 完全未知”的问题代价是初值精度差一些。4.4 Ra 表一张随 SOC 和温度变化的阻抗网格QMax 描述“能装多少”Ra 描述“倒出来的时候损耗多少”。电池内阻不是常数它随 SOC 变化低 SOC 时明显变大随温度变化低温时成倍变大还随老化变化。所以 Ra 不是一条曲线是一张二维网格横轴是 SOC 分档纵轴是温度分档每个格子存一个相对阻抗值。这张表的更新发生在放电过程中。负载电流变化时端电压的变化量除以电流变化量就得到当前工况点的阻抗估计再和网格里对应的格子做加权融合。之所以要“加权”而不是直接覆盖是因为单次测量的噪声很大直接覆盖会让整张表抖得没法用。加权系数本质上是在“跟随真实变化”和“抵抗测量噪声”之间调平衡。Ra 表的价值在于预测。设备要显示“剩余可用时间”不能只拿当前电压去除以当前电流得预测“如果继续以这个功率放电电压会在什么时候掉到截止点”。预测需要知道未来各个 SOC 点的阻抗这正是 Ra 表提供的。4.5 FCC、RemCap、RSOC 的计算链与跳变来源三个量的关系可以用一句话概括FCC 是分母RemCap 是分子RSOC 是商。FCCFullChargeCapacity不是 DesignCapacity它是模型算出来的“当前这块电池在當前温度、当前老化状态下满电能用多少”受 QMax、Ra、温度补偿共同影响。RemCapRemainingCapacity是从上一次校正点开始按库仑计数累计出来的剩余电荷。RSOC RemCap / FCC × 100%。理解了这条链就能解释两个常见现象。一是 RSOC 在充电末端跳到 100% 之后不再动因为 RemCap 已经逼近 FCC分子被分母卡住了芯片做了上限截断。二是温度骤降时 RSOC 突然掉一大截不是电荷跑掉了是 FCC 变小了低温下可用容量本来就少分母缩小导致比值下降。这两个现象都不是 bug是模型在正确工作但如果你不知道背后的计算链就会以为是电量计坏了。5. 排查调试现场最容易翻车的五个点前面几章讲的是机制这一章讲机制在现实里怎么失效。下面五条都是“现象看得见、原因看不见”的类型按现象、原因、解决三段来拆。5.1 RSOC 在 100% 附近来回跳现象充满电后拔掉充电器RSOC 显示 100%过一会儿掉到 99%再插上又跳回 100%反复几次。用户看到的是“电量显示不准”实测容量却是对的。原因通常有两个。一是充电终止判定没做干净充电电流在 taper 阈值附近来回穿越芯片反复进入“充满”和“未充满”两个状态每次进入都把 RemCap 重置到 FCC退出时又开始正常积分于是 RSOC 在两个值之间摆。二是 QMax 还在学习过程中FCC 本身在缓慢变化分母一动比值就动。解决办法是先看充电终止的配置taper 电流阈值是否设得太贴近实际终止电流、终止判定的去抖时间是否太短。然后确认 QMax 是否已经稳定——新电池组前几个循环 FCC 会持续变化这时候的 RSOC 跳变属于正常收敛过程不要急着改参数。判断方法是看 MaxError 字段它大的时候说明模型还不确定此时的 RSOC 本来就不该被当真。5.2 保护该动作时不动作现象电子负载拉到 3C 放电OCD 阈值设的是 2.5C理论上早该断了实际电流一直加到了 4C 才断甚至不断。原因一般出在链路上而不是参数上。最常见的是采样路径的滤波电容太大为了抗干扰在 SRP/SRN 之间并了一颗大电容把电流阶跃的边沿磨平了固件看到的峰值远低于实际峰值。其次是开尔文走线没做好取样点和功率路径之间有共享阻抗大电流下取样电压被抬高或压低实际到达前端的信号已经失真。第三种是延时参数设得太长去抖计数需要连续 N 次超限才动作而实际过流是脉冲式的每次都没凑够次数。解决顺序应该是先看波形再看参数用示波器差分探头直接量 SRP/SRN 上的电压和电流探头的结果对照确认前端看到的信号是不是真的。如果前端信号没问题再去核对延时和去抖计数。参数改错可以改回来布线错了只能改板。5.3 PF 误报把电池锁死现象产线上一批电池组测试过程中有几组突然进入永久失效状态读出来是数据 Flash 校验和错误或者 AFE 通信异常但这些电池之前一切正常。原因多半是上电时序和写入过程。数据 Flash 写入需要时间如果写入期间供电跌落或者复位写了一半的数据就会导致校验和不匹配。AFE 通信异常则常发生在低压时刻电芯电压接近欠压点时AFE 的供电裕量不足通信误码率上升连续几次失败就触发了通信类 PF。解决分两步。第一步是把这类“非安全类 PF”的恢复策略配成允许恢复并加上恢复次数上限避免无限重试掩盖真实问题。第二步是查根因产线夹具的供电是否稳定、上电顺序是否符合要求、写入操作是否在电压足够时才发起。把这类 PF 一律设成不可恢复等于让一次电源抖动报废一整组电池代价太大。5.4 关机电流压不下去现象设备关机后测电池组自耗标称应该是几十微安实测几百微安甚至毫安级放一个月电池就空了。原因通常不是芯片本身是外围没关干净。芯片进入睡眠或关机模式的条件没满足——比如某个唤醒源一直被拉高、总线一直有活动、或者电流还没降到进入门限以下。另一个常见原因是 LED 显示电路LED 由芯片直接驱动如果关机时没有显式关闭它就成了常亮的负载。还有一种情况是 FET 没有完全关断漏电流通过体二极管或者驱动电路泄放。排查方法是分步断开先测芯片单独工作时的电流再逐个接上外围。同时确认进入的是哪种低功耗模式——睡眠、关机、运输模式电池组删除模式的自耗水平差一个数量级运输模式才是长期存储该用的。紧急关机的定位不一样它是安全事件时的快速切断不是用来省电的。5.5 上位机连不上、参数写不进去现象调试器接上去能读到部分寄存器但改参数一直失败或者读出来的值和写入的不一致。第一个要确认的是安全状态。芯片有密封、启封、完全访问三种状态密封状态下大部分数据 Flash 是只读的。很多人第一次用会卡在这里以为是通信问题其实是权限问题。启封需要密钥密钥存在数据 Flash 里如果密钥丢了或者被改过只能走特定流程恢复。第二个要确认的是通信本身SMBus 地址是否和配置一致、总线上拉电阻是否合适、有没有其他主机在抢总线。地址冲突的表现很典型——偶尔能通大部分时候 NAK。第三个是写入时序数据 Flash 写入有最小间隔要求连续快速写入会被拒绝表现为“写十次成功三次”。6. 取舍可信度来自“知道自己什么时候不可信”把前面几章连起来看会发现这套设计有一个贯穿始终的态度不追求“永远给出一个数”而是追求“给出的数附带可信程度”。MaxError 字段是这个态度的直接体现——它不告诉你 SOC 是多少它告诉你“这个 SOC 可能偏多少”。QMax 更新前的那一串边界检查、PF 的分类与恢复策略、硬件保护和固件保护的阈值分层本质上是同一个思路在不同层面的展开在信息不足的时候选择保守而不是选择猜。这个取舍有代价。保守意味着响应慢、意味着有些真实故障不被立刻识别、意味着用户可能看到“SoH 一直 100%”这种看起来像 bug 的现象。但它换来的是另一件东西当系统真的报警时那个报警是可信的。一个天天误报的保护等于没有保护。验证这套东西是否按预期工作光看读数不够得做注入。比较踏实的做法是拿可编程电子负载和温箱跑完整循环从满电开始按设定的倍率放到底同时记录 RSOC 和实际放出的安时数两条曲线叠在一起看偏差中途在某几个 SOC 点人为制造静置观察 OCV 校正有没有发生、RemCap 有没有被拉回再用负载制造一次超过阈值的电流阶跃用示波器确认硬件保护在多少微秒内动作、固件保护在多少毫秒内跟上。这套流程跑一遍模型的可信区间基本就清楚了。我早年吃过一次亏一批电池组在常温下循环测试全部通过装到设备上冬季户外使用RSOC 从 60% 直接跳到 5% 然后关机。复盘时才发现低温下的 FCC 补偿和 Ra 表更新条件从来没验证过实验室里所有测试都在 25℃ 做的。从那以后我每次拿到一块新电芯都强制先把它的 QMax 收敛过程和低温 Ra 表跑一遍再谈精度——不然测出来的“准”只是在特定温度下的巧合。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。