1. 项目概述:为什么我们需要一个“聪明”的电量计?
在消费电子、电动工具乃至储能系统里,我们总希望设备能准确地告诉我们:“还能用多久?” 这个看似简单的需求,背后却是一个复杂的工程问题。传统的电量估算方法,比如简单的电压查表法,在电池老化、温度变化或负载波动时,误差会非常大,可能显示还有50%的电,设备却突然关机了。
BQ28Z620这类基于“阻抗跟踪”算法的电池电量计,就是为了解决这个痛点而生的。它不再把电池看作一个简单的电压源,而是将其视为一个动态的、有“内阻”的化学系统。其核心思想是:通过持续监测电池在充放电过程中的电压、电流和温度,并结合一个不断学习的电池阻抗模型,来实时、动态地计算电池的化学荷电状态。这就像一位经验丰富的司机,不仅看油表,还会根据路况、车重和发动机状态,精准判断剩余的行驶里程。
我经手过不少项目,从早期的库仑计到现在的阻抗跟踪方案,最大的体会是:精度和可靠性不是靠单一的高精度ADC换来的,而是靠一套聪明的算法和正确的配置。BQ28Z620作为德州仪器的成熟方案,集成了完整的阻抗跟踪算法和电芯均衡功能,但要把它的潜力完全发挥出来,必须吃透其配置逻辑。本文将结合手册要点和实际调试经验,深入拆解其阻抗跟踪算法的配置精髓与电芯均衡的实现细节,帮你避开那些数据手册里没明说、但实际开发中一定会遇到的“坑”。
2. 阻抗跟踪算法核心原理与配置逻辑
阻抗跟踪算法的目标,是尽可能准确地回答两个问题:1. 电池的总化学容量是多少? 2. 在当前负载和温度下,还能放出多少容量? 这两个值分别对应QMax和FullChargeCapacity。
2.1 算法工作模式的切换:CHARGE, DISCHARGE, RELAX
电量计并非一直在计算,它根据电流状态在三种模式间切换,这是理解其所有行为的基础。
- CHARGE模式:当检测到的电流大于
Chg Current Threshold(通常为正数,表示流入电池)时进入。在此模式下,算法主要进行库仑积分(累计充入的电量),并等待充电终止条件。 - DISCHARGE模式:当检测到的电流小于
(-)Dsg Current Threshold(通常为负数,表示流出电池)时进入。这是阻抗更新的唯一场合。算法通过比较负载下的电压与估算的开路电压,来计算电池在当前SOC点的阻抗。 - RELAX模式:当电流的绝对值小于
Quit Current并持续一段时间(Chg Relax Time或Dsg Relax Time)后进入。这是OCV和QMax更新的唯一场合。电池需要足够“安静”(电压变化率dV/dt < 4 µV/s),才能测得准确的开路电压。
实操心得:
Quit Current、Chg/Dsg Relax Time这三个参数的设置至关重要。Quit Current设得太高,设备待机时微小的背景电流就可能阻止进入RELAX模式,导致长期没有OCV更新,电量计“学不到”新东西,误差会累积。通常建议设置为设计容量的C/50到C/100(例如,对于2000mAh电池,设为20mA到40mA)。Relax Time则需要在“快速响应”和“测量准确”间权衡,通常2-5分钟是个合理的起点。
2.2 负载模式与预测:让估算适应真实世界
设备在实际使用中的负载是变化的,可能是恒流(如LED),也可能是恒功率(如CPU)。BQ28Z620允许你配置Load Mode来匹配主要负载类型,以优化剩余容量预测。
Load Mode = 0(恒流模式):假设未来负载电流恒定。适用于负载特性简单的设备。Load Mode = 1(恒功率模式):假设未来负载功率恒定。适用于电压下降时电流会增大的设备(如DC-DC转换器供电的系统)。
更关键的是Load Select,它决定了算法用哪个电流/功率值来进行“终点预测”。手册中提供了7种方法,但并非所有都实用:
| 方法 | 恒流模式下的含义 (Load Mode=0) | 恒功率模式下的含义 (Load Mode=1) | 适用场景与注意事项 |
|---|---|---|---|
| 0 | 上一完整放电周期的平均电流 | 上一完整放电周期的平均功率 | 适用于负载模式非常固定的应用,如每天执行相同任务的设备。 |
| 1 | 本次放电至今的平均电流 | 本次放电至今的平均功率 | 能适应单次放电内的负载变化,是较常用的设置。 |
| 2 | 实时电流值Current() | 实时功率Current() × Voltage() | 预测会非常“跳跃”,如果负载波动大,会导致剩余时间显示剧烈变化,用户体验差。 |
| 3 | 长期平均电流AverageCurrent() | 长期平均功率AverageCurrent() × Avg Voltage() | 反应较慢,但显示稳定。适合负载变化频繁但无规律的应用。 |
| 4 | 设计容量/5 | 设计能量/5 | 固定值预测。仅当你的应用负载非常接近此固定值时准确,否则误差大。 |
| 5 | AtRate()命令设定的值 | AtRate()命令设定的值(单位10mW) | 由主机动态指定预测负载,最灵活,但需要软件配合。 |
| 6 | 用户自定义的固定电流值 | 用户自定义的固定功率值 | 同方法4,固定值预测,适用场景有限。 |
| 7 | 本次放电的最大平均电流 | 本次放电的最大平均功率 | (默认推荐)这是一种保守但稳健的策略。它预测未来会以本次放电中出现过的最大平均负载运行,这样估算出的剩余容量通常偏保守(即显示时间偏短),但能有效避免因突发重载导致的突然关机。 |
避坑指南:对于绝大多数消费类产品,
Load Mode=1(恒功率) 配合Load Select=7(最大平均功率) 是经过验证最可靠、最不易出错的组合。它模拟了真实世界中“设备可能会以最耗电的方式运行”的保守场景,保证了最坏情况下的用户体验。
2.3 核心参数更新机制:QMax与Ra表
这是阻抗跟踪算法的“学习”部分,决定了电量计的长期精度。
QMax (化学容量) 更新: QMax代表电池在理想无负载情况下的最大化学容量。它的更新需要两个有效的OCV读数(一个在放电/充电前,一个在放电/充电后)。更新条件苛刻:
- RELAX模式:电池必须静置足够久,满足
dV/dt < 4 µV/s,通常满电态需2小时,放电态需5小时。 - 容量变化足够大:两次OCV间的充放电容量差需大于设计容量的37%。
- 温度适宜:通常在10°C至40°C之间。
- 电压不在平台区:对于某些化学体系(如LCO),在3.7V-3.9V附近电压变化很平,OCV对应的SOC误差大,此时会禁止更新(由
GaugingStatus[OCVFR]标志和化学数据中的FlatVoltMax参数控制)。
Fast QMax (快速QMax更新): 这是针对生产或特殊场景的优化。它允许在只有一个有效OCV读数且放电深度大于10% RSOC的情况下更新QMax。这大大缩短了“学习周期”所需的时间。通过设置IT Gauging Configuration[FAST_QMAX_LRN]或[FAST_QMAX_FLD]来启用。
Ra表 (阻抗表) 更新: Ra表存储了电池在不同SOC点(0%-100%,共15个网格点)的阻抗值。它只在DISCHARGE模式下更新。算法通过公式Ra = (OCV - V_load) / I实时计算并更新对应SOC点的阻抗。更新会被禁止的情况包括:学习周期未完成、累计库仑积分误差过大、或计算出负阻抗等异常值。
经验之谈:很多工程师抱怨电量计“不准”,第一步就应该检查
Update Status命令。如果它一直卡在“初始状���”或“学习周期未完成”,那么电量计使用的就是初始的、可能不准确的QMax和Ra表。必须确保电池经历几次完整的“满充-静置-放空-静置”循环,让芯片完成学习。ITStatus2()和ITStatus3()命令是分析学习过程的关键工具。
3. 关键配置选项详解与工程实践
BQ28Z620提供了丰富的配置标志位,用于微调算法行为以适应不同应用。
3.1 终止电压与储备容量
Term Voltage(终止电压):当电池组电压达到此阈值时,RemainingCapacity()会被强制归零。这是硬件保护之前的最后软件防线。Reserve Cap-mAh/cWh(储备容量):这是介于“报告0%电量”和“触发终止电压”之间的一个缓冲容量。例如,你设置储备容量为50mAh,当电量计显示0%时,电池实际还有50mAh电量可供系统进行紧急保存、安全关机或维持一段睡眠时间。这是一个非常重要的安全特性。CELL_TERM标志:当设置为1时,终止判断基于最低的单体电压(Term Min Cell V),而非电池组总电压。这对于电芯不均衡的电池包至关重要,可以防止某个电芯过放而其他电芯还有电的情况。
3.2 算法平滑与收敛优化
SMOOTH标志:强烈建议启用。在温度或负载突变时,计算出的剩余容量可能会跳变,导致电量百分比骤变。启用平滑后,算法会对这种跳变进行滤波,让RSOC的变化更平缓,收敛到真实的终止点,用户体验更好。RSOC_CONV(快速缩放):在低温、大电流放电且接近终止电压时,由于阻抗网格的粒度问题,RSOC可能无法平滑收敛到0%。启用此功能后,算法会在低SOC区域(如低于10%或电压低于3.4V)采用更精细的阻抗插值,帮助RSOC平稳归零。通常需要配合Fast Scale Start SOC或Term Voltage来设定启动阈值。LOCK0标志:放电至0%并达到最终放电电压后,电池电压在静置时会回升。如果不锁定,RSOC可能会随之“反弹”一点。启用此标志可以防止这种反弹,保持RSOC为0%。
3.3 健康度与循环计数
StateofHealth():BQ28Z620的SOH计算进行了改进,它使用固定的25°C环境温度和指定的SOH Load Rate电流来模拟计算一个“标准工况下的满充容量”,再与设计容量比较。这避免了因使用条件不同导致的SOH波动,更能真实反映电池的化学老化。你需要根据应用典型负载设置SOH Load Rate(单位是小时率,例如20表示C/20电流)。CCT标志:决定循环计数阈值是基于FullChargeCapacity()还是DesignCapacity()。设为1(使用FCC)更合理,因为电池老化后容量衰减,每次充放的“相对”循环深度在增加。手册同时说明,即使使用FCC,最小阈值也是设计容量的10%,这是为了防止因FCC异常低而误触发循环计数。
4. 电芯均衡:原理、配置与实战操作
对于多串电池组,电芯之间的不一致性是影响容量和寿命的主要因素。BQ28Z620通过被动均衡(耗散式)来缓解这一问题。
4.1 均衡原理与时间计算
均衡的目标是让所有电芯的荷电状态一致,而不是电压一致。算法在RELAX模式下,通过OCV测量计算出每个电芯相对于最低SOC电芯的电荷差dQ(单位mAh)。
均衡时间的计算是核心:均衡时间(s) = dQ(mAh) × Bal Time/mAh Cell_x
其中Bal Time/mAh Cell_x是一个常数,由硬件电路决定:Bal Time/mAh Cell_x = 3600 / (DUTY × VCELL / (R_VCx + R_cb))
DUTY:均衡MOSFET的占空比,默认为68.75%。VCELL:电芯平均电压,如3.7V。R_VCx:芯片VC引脚到电芯间的外部分压电阻(如100Ω)。R_cb:均衡MOSFET的导通电阻(如150Ω)。
这个值必须在配置电量计时根据实际电路参数计算并准确写入Data Flash,否则均衡时间将是错误的。
4.2 均衡操作模式
- 充电均衡:在CHARGE模式下,只要
Cell Balance Timer不为零,对应的均衡MOSFET就会立即开启。此时,电量高的电芯通过电阻放电,充电电流主要流向电量低的电芯,从而缩小差距。这是最有效的均衡时机。 - 静置均衡:在RELAX模式下,需要满足额外条件才会开启:
Balancing Configuration[CBR] = 1(启用静置均衡)。RelativeStateofCharge() > Min RSOC for Balancing(避免在低电量时无谓耗电)。- 电芯间最大电压差 >
Min Start Balance Delta(避免对微小差异进行均衡)。 - 每隔
Relax Balance Interval时间,且有一次新的OCV测量后,会重新计算均衡时间。
4.3 均衡配置步骤与调试要点
- 硬件检查:确认均衡MOSFET、限流电阻的焊接和选型正确。用万用表测量
R_VCx的阻值。 - 参数计算与配置:
- 根据上述公式计算
Bal Time/mAh Cell_1和Cell_2。 - 在Data Flash中配置
Balancing Configuration:[CB]=1启用总均衡,[CBR]=1启用静置均衡。 - 设置
Min Start Balance Delta(例如,设为10mV,避免对噪声敏感)。 - 设置
Min RSOC for Balancing(例如,设为20%,确保有足够容量进行均衡)。 - 设置
Relax Balance Interval(例如,1小时)。
- 根据上述公式计算
- 触发与监控:
- 让电池包进入充满后静置的状态。
- 使用上位机工具(如TI的BQStudio)发送
Gauging()命令启动电量计算法。 - 监控
OperationStatus()[CB]标志位,为1表示均衡正在进行。 - 读取
CellXBalanceTimer寄存器,查看剩余均衡时间。 - 观察
CellVoltage1/2,电压差应逐渐缩小。
常见问题排查:
- 均衡根本不启动:检查
Update Status是否≥0x06(学习周期已完成)。检查GaugingStatus()[FC]在满电时是否为1。确认Balancing Configuration已正确写入并生效(执行复位或seal命令)。- 均衡速度极慢:核对
Bal Time/mAh参数是否正确。检查均衡MOSFET的栅极驱动电压是否足够,导通电阻R_cb是否过大。测量均衡时VC引脚电压,确认均衡电流通路正常。- 均衡后电压差反而变大:这通常是因为OCV测量不准确,导致SOC计算错误。确保电池在均衡前已静置足够长时间(>5小时),进入真正的RELAX模式,让
dV/dt条件满足。检查温度是否稳定,温度变化会影响OCV。
5. 生产与现场学习流程设计
要让BQ28Z620达到最佳精度,必须经历一个“学习”过程,以更新其内部的QMax和Ra表。
5.1 生产端学习(Learning Cycle)
这是电池包出厂前的关键校准步骤,目的是建立准确的初始电池模型。
- 初始配置:写入正确的化学ID、设计容量、
Bal Time/mAh等参数。确保Update Status为05或06。 - 完整循环: a.满充:在室温下(20°C-25°C)以标准电流充电至充电终止条件(如CV阶段电流降至
Taper Current)。 b.静置:充满后静置至少2小时,确保电压稳定,完成第一次OCV测量和QMax更新。 c.放电:以C/5或C/3的恒定电流放电至终止电压。 d.静置:放空后静置至少5小时,完成第二次OCV测量。此时,如果容量变化>37%,QMax将会被更新。同���,在放电过程中,Ra表会被持续更新。 - 验证:检查
Update Status应变为0E(学习完成)。读取QMax值,应与电池规格书标称值接近(考虑老化因素)。可再进行一次充放电,对比FullChargeCapacity()与RemainingCapacity()的积分误差,应在2%以内。
5.2 现场自适应(In-Field Adaptation)
电池在使用中会老化,其容量和阻抗会变化。BQ28Z620能在设备正常使用中持续学习。
- 确保正常的充放电模式:鼓励用户偶尔将设备充满电并使用到自动关机,这为算法提供了完整的OCV更新机会。
- 利用Fast QMax:在固件中启用
FAST_QMAX_FLD标志,可以在只具备一次OCV读数的深度放电后更新QMax,加快现场学习速度。 - 监控SOH:定期读取
StateofHealth(),当其下降明显(如低于80%)时,可以提示用户电池可能需要更换。
6. 调试工具与命令速查
在实际开发中,熟练使用调试工具和SBS命令是解决问题的关键。
必备调试工具:TI BQStudio。它提供了图形化的Data Flash配置、实时命令发送、寄存器监控和日志记录功能。
关键SBS命令/状态位:
ManufacturingStatus()[GAUGE_EN]:检查阻抗跟踪算法是否已启用。Update Status:最重要的状态之一。指示学习阶段(04=初始化,06=第一次QMax更新完成,0E=学习完成进入正常模式)。GaugingStatus():[REST]:是否处于静置状态并进行了OCV测量。[QEN]:QMax更新是否启用。[FC]:是否达到满充状态。[VOK]:最后一次OCV读数是否有效可用于QMax更新。
ITStatus1(), ITStatus2(), ITStatus3():获取详细的算法内部状态,如最后一次更新的QMax值、DOD、阻抗网格点状态等,用于深度分析。CellXBalanceTimer:查看各电芯的剩余均衡时间。OperationStatus()[CB]:当前是否正在进行电芯均衡。
数据记录与分析:在调试时,务必使用BQStudio的Log功能,记录一次完整的充放电循环过程中的电压、电流、温度、RSOC、FCC等关键参数。将数据导出后绘制曲线,可以直观地判断算法行为是否正常,例如RSOC在放电未期是否平滑收敛至0%,充电结束时是否准确跳转到100%。
最后,我想强调,BQ28Z620是一个功能强大的工具,但它的精度很大程度上依赖于工程师对电池特性、应用场景的理解以及细致的配置。不要期望“默认参数”就能在所有应用中工作良好。花时间理解每个参数背后的物理意义,结合实际的电池测试数据(特别是不同温度、不同倍率下的放电曲线)来微调配置,是获得高精度电量计的唯一途径。每次调试的过程,也是加深对电池这个复杂电化学系统理解的过程。