构建一个智能电池监控器
智能电池能够持续测量电压、电流和温度,估算剩余容量,统计充放电循环次数,并将这些信息传输至主机系统。智能电池系统规范定义了包括温度、电压、电流、相对充电状态、剩余容量、满电容量、电池状态和循环次数等参数的命令。
我想要开发一个小型实验工具,无需修改电池固件即可直观显示这些信息。
其中最有趣的是BQ9003芯片。与拥有详尽公开文档的常见TI电池管理IC不同,BQ9003作为一款新型设计的组件难以直接处理。但通过公开的逆向工程研究,已发现其在DJI智能电池中的应用,并记录了其通过SMBus进行通信的方式。据报道,某些DJI的实现方式会通过与BQ40Z307系列相关的固件行为暴露控制器。这使得该设备对从事以下工作的工程师尤为有价值:
•能电池诊断
•无人机电池维修与分析
•嵌入式电池接口开发
•SMBus开发
•电池遥测
•电池管理系统(BMS)逆向工程
•连接USB的实验室仪器
本项目并未尝试重新编程BQ9003,而是采取了更安全的方法。
电池的SDA和SCL线路连接至CP2112-F03-GM USB转SMBus桥接器,随后由一台PC充当SMBus主机。Python程序定期发送标准的智能电池读取命令,并记录返回的数据。
例如,标准的SBS命令表规定:
•0x08 — 温度
•0x09 — 电压
•0x0A — 电流
•0x0D — 相对充电状态
•0x0F — 剩余容量
•0x10 — 充满电容量
•0x16 — 电池状态
•0x17 — 循环次数
•0x18 — 设计容量
•0x19 — 设计电压
这些命令编号属于智能电池数据规范的一部分,而非针对未公开的BQ9003特定寄存器的声称。
最终结果实际上是一个小型的USB智能电池诊断仪器。
一旦基础读取器运行正常,便可使用相同的硬件在受控放电测试期间记录电池行为。电压、报告的充电状态、剩余容量和温度等数据随后可随时间绘制图表。
这为我们提供了比单纯显示电池百分比更有用的信息:我们可以观察到电池管理系统在电池组实际使用过程中如何报告电池状态。
该项目有何用途?
该项目展示了三个不同工程层次之间的实用接口:
电池 → SMBus → USB → Python
电池仍负责测量和电池管理决策,而计算机则成为便捷的可视化和数据记录平台。
这对于开发电池服务设备、研究传统智能电池或学习基于SMBus的电池遥测工作原理尤为有用。
测试流程
1. 验证电池
使用已知正常的电池组,并确定其确切的连接器引脚排列。
不要假设所有包含BQ9003的电池都采用相同的连接器或引脚分配方式。
2. 验证SMBus电压
在连接CP2112之前,测量SDA和SCL相对于GND的电压。
确认电压与CP2112接口兼容。
3. 仅连接通信信号
开始时:
不要将PACK+连接到CP2112。
4. 捕获第一条交易
使用逻辑分析仪确认主机生成SMBus事务,并且电池已对此作出响应。
5. 阅读标准SBS信息
从以下内容开始:
这些信息特别有用,因为它们能立即显示电池的报告运行状态。
6. 记录数据
Python 程序将数据写入:
CSV 文件。
7. 绘制放电曲线
并与以下内容进行比较:
这使用户能够看到在受控测试期间,BMS报告的SOC变化与实际电池组电压之间的差异。
重要工程说明
首先,不应将BQ9003视为TI目前提供标准公开数据手册和完整编程参考文档。目前可获取的公开信息主要来自对大疆电池的逆向工程分析。例如,已记录的WM240设计中明确指出BQ9003为电池管理系统芯片,并显示其SMBus接口连接至主机。
其次,标准SBS命令不应被自动解释为证明每个BQ9003固件版本都完全一致地实现所有命令。厂商固件可能修改其行为。《智能电池》规范本身定义了标准命令集,而大疆的逆向工程文档则指出SBS/SMBus行为存在修改。
这种区分使得项目在技术上更具可信度,避免将未记录的BQ9003功能声称为事实。
本文编译自hackster.io





