简介:基于TI BQ76920芯片的锂电池管理系统硬件设计项目,适用于电动汽车、储能设备、便携电子等场景。面向嵌入式软硬件工程师与电池管理学习者,提供从原理图、PCB布局到C语言驱动和示例代码的完整参考。包内共240个文件,压缩包84.57MB,主要包含原理图(sch)、PCB设计(kicad_pcb)、固件源码(c/h)、编译文件(o/map/elf)、PDF文档及EDA工程配置等,便于直接查看电路连接、修改板级设计或编译烧录。已有925人学习。通过该设计可掌握BQ76920的过充/过放保护、温度检测、电流测量等核心功能,也能熟悉嵌入式SPI/I2C通信和低层驱动编写方法。项目还附带Kicad工程与CubeMX配置,适合作为BMS开发入门或产品原型参考。
1. 项目概述与整体设计思路
1.1 为什么选BQ76920这颗料
BQ76920是TI(德州仪器)旗下BQ769x0家族里串数最低的一颗——支持3到5节锂离子/磷酸铁锂电芯的采集与保护。做小容量电池包项目(比如电动工具、便携储能、轻型两轮车、备用电源)的时候,这颗料的性价比和上手难度堪称平衡点。
我之前在项目里用过的方案有分立元件搭建的保护板(用运放+比较器做电压比较),也有集成度更高的BQ76940(支持9-15串)。但真正落实到“做一个bq76920_board”这种级别的项目时,我个人的判断是:BQ76920在5串以内几乎是绕不开的主力选项。
原因有三:
- 单芯片集成电芯电压采集、过压/欠压保护、过流保护、温度保护,不需要外挂ADC和比较器网络,硬件设计能省掉一大片电阻电容。
- 通过I2C接口与MCU通信,寄存器配置灵活,保护阈值、延时、恢复条件都能在软件里调,不像纯硬件保护板那样只能靠换电阻改参数。
- 芯片自带均衡功能(虽然只是被动均衡),对小容量电池包来说够用了,不需要额外设计均衡电路。
所以这个板子的定位很清楚:基于BQ76920做一个5串锂电池BMS控制板,MCU选用常见的STM32或GD32,预留I2C接口、LED指示、充放电控制脚,并且留出扩展接口,方便后续接通讯模块或上位机调试。
1.2 板子的功能边界与应用场景
这块板子解决什么问题?说白了,就是给一个5串锂离子电池包当“管家”——实时盯着每节电芯的电压、包络温度、回路电流,一旦出现异常(单节过压、欠压、过流、短路、过温),立刻断开充放电回路,保护电芯也保护负载。
我在设计的时候把功能边界划得很清楚:
- 采集功能:5路电芯电压(精度±10mV以内),1路芯片内部温度,2路外部NTC温度(通过芯片TS1/TS2引脚)。
- 保护功能:过压OV、欠压UV、放电过流OCC/OCD、短路SCD、过温OT/UT,全部由BQ76920硬件检测并触发,延时参数和阈值通过寄存器配置。
- 控制功能:CHG/DSG引脚控制外部充放电MOS,MCU也可以软件强制关断。
- 均衡功能:被动均衡,内部开关+外部均衡电阻实现,每节电芯均衡电流约50mA(取决于均衡电阻阻值)。
- 接口功能:I2C调试口(板载排针引出)、状态LED、唤醒按键、扩展UART口。
适合谁来参考?如果你是做嵌入式硬件/单片机开发,想自己动手做一个真正能用的BMS板子;或者你在做小储能/电动工具项目,需要一个可控、可调参的电池管理方案——这篇文章的内容基本都是可以直接抄作业的。
2. 硬件设计核心细节解析
2.1 BQ76920外围电路的关键引脚
BQ76920有20个引脚,TSSOP封装,实际设计时核心的几个引脚必须搞明白:
| 引脚名 | 功能 | 设计要点 |
|---|---|---|
| BAT | 芯片供电正极输入 | 通过电阻从电池组最高电位取电,串10Ω-100Ω+100nF滤波 |
| REGOUT | 内部稳压输出(3.3V/2.5V可配) | 给MCU或其他逻辑供电,需接1μF-10μF陶瓷电容 |
| VC0-VC5 | 电芯电压采集引脚 | 从VC5到VC0逐节连接,每路串1kΩ电阻+100nF电容滤波 |
| TS1/TS2 | 温度传感器输入 | 接10kΩ NTC到BAT,内部有可配置的上拉电流源 |
| CHG/DSG | 充放电MOS驱动输出 | 经过电平转换电路驱动外部NMOS |
| SCL/SDA | I2C通信引脚 | I2C地址由引脚电平配置,注意电平转换 |
| RST | 复位引脚 | 建议接10kΩ上拉到REGOUT |
| ALERT | 中断输出 | 开漏输出,接MCU外部中断,用于实时状态上报 |
一个很多人容易犯的错:VC0这个引脚不是参考地,它连接的是最低一节电芯的负极,也就是电池组的B-(但B-不一定等于系统地)。芯片的GND引脚才是系统地。如果直接把VC0当成GND接PCB的地平面,轻则采样偏差,重则芯片工作异常。
我在第一版板子里就踩过这个坑——当时为了走线方便,在VC0引脚旁边铺了地铜皮,结果第1节电芯电压比其他几节高了几十毫伏,后来查了半天才意识到是VC0和AGND之间的差分走线被地平面干扰了。
2.2 充放电MOS驱动电路设计
BQ76920的CHG和DSG引脚输出的是相对芯片BAT引脚的逻辑信号,不能直接驱动外部的NMOS功率管。必须先做一级电平转换,把控制信号拉到MOS管的栅极驱动电压。
推荐的做法是用两个小信号NMOS+两个电阻组成的经典电平转换电路:
- CHG引脚接一个小NMOS的栅极,小NMOS源极接地,漏极通过一个10kΩ电阻上拉到充电MOS的栅极。
- 充电MOS的栅极再接一个10kΩ电阻到源极(防止误触发)。
- 当CHG为高时,小NMOS导通,把充电MOS栅极拉低,MOS关断;CHG为低时,小NMOS关断,充电MOS栅极被10kΩ上拉到源极(电池正极电位),MOS导通。
为什么不用PMOS?因为电池电压范围是12V-21V(5串磷酸铁锂或三元),PMOS在这个电压等级下可选型号少、内阻大、散热差。NMOS的RDS(on)能做到几毫欧甚至更低,配合低压差驱动电路,大电流工况下板子不会发热严重。
2.3 布局布线的实战经验
BQ76920是模拟前端芯片,ADC采样精度直接受PCB布局影响。这里分享几条实测有效的布局布线规则:
- 模拟地和功率地分开:VC采样网络、TS网络、芯片GND属于模拟地;充放电MOS回路、检流电阻走线属于功率地。两地在芯片GND引脚附近单点汇合。
- VC采样线走等长等距:5路VC线尽量等长,且避免与开关节点(MOS驱动、电感、PWM线)平行走线。我在板子上加了包地处理,但包地要小心——距离过近又会引入寄生电容影响采样稳定。
- 检流电阻用开尔文接法:BQ76920的SRP/SRN引脚必须直接连接到检流电阻两端,不能有额外走线并入大电流路径,否则会把功率回路的压降误差引到电流检测放大器里。
- 去耦电容就近放置:BAT引脚到GND的100nF+10μF电容、REGOUT的电容都要靠近芯片引脚放,过孔直接打到引脚旁边,不要绕。
另外一个细节:NTC温度传感器和TS引脚之间的走线如果过长,建议加一个100nF电容在芯片端滤波,防止噪声耦合导致温度读数跳变。
3. 固件设计与“run on board”的启动过程
3.1 板级启动初始化流程
这块板子的MCU固件我用的是一套很干净的裸机代码结构(不跑RTOS,逻辑不复杂,没必要)。上电后的初始化顺序是:
- MCU时钟和GPIO初始化(I2C引脚、LED、ALERT中断脚)。
- I2C外设初始化,速率100kHz(BQ76920支持最高400kHz,但出于抗干扰考虑,首版保守一点)。
- BQ76920芯片唤醒——通过I2C发送0x00地址探测设备是否在线,如果无响应,检查RESET引脚时序和供电。
- 配置BQ76920寄存器(保护阈值、延时、均衡参数、ADC采样模式)。
- 读取电芯电压和温度进行自检,确认采样数据合理。
- 置位CHG/DSG控制位,打开充放电通路。
整个流程大约100ms以内完成。这里要特别说一句:BQ76920在上电后默认是关闭充放电的(CHG/DSG输出无效),必须由MCU配置完寄存器后主动开启,这是安全设计,避免MCU跑飞时光MOS通路仍然打开。
3.2 寄存器配置的核心参数
BQ76920的寄存器配置是整个固件里逻辑最复杂的部分。我整理了一份关键配置表:
| 寄存器 | 地址 | 配置值 | 说明 |
|---|---|---|---|
| OV | 0x01 | 0x6A | 过压阈值(约3.65V,磷酸铁锂) |
| UV | 0x02 | 0x8A | 欠压阈值(约2.5V) |
| OCC | 0x03 | 0x41 | 充电过流阈值+延时 |
| OCD | 0x04 | 0x66 | 放电过流阈值+延时 |
| SCD | 0x05 | 0x0E | 短路阈值+延时 |
| OTC/UT | 0x06/0x07 | 0x32/0x0A | 过温/欠温阈值 |
| CONFIG | 0x09 | 0x02 | 使能温度检测、均衡功能等 |
需要说明的是,不同电芯体系(三元、铁锂、钛酸锂)的保护阈值完全不同,这些值不能直接照搬。我从TI官方的BQStudio工具导出一份配置后,会根据实际电芯规格书重新计算,而不是直接采用默认值。
比如过压阈值的计算公式是:VOV = 1.0V × (ADCOV + 1) × 3.2(此公式基于该芯片内部的模拟比较器分压比例),要反推ADCOV寄存器值,就得先确定电芯的充电截止电压;磷酸铁锂一般3.65V,三元一般4.2V,这个不能含糊。
3.3 “run on board”遇到sysloader问题的处理
做板级调试时最头疼的一类问题就是程序跑不起来,或者跑起来后芯片不响应。我在这个项目里遇到过一次比较典型的“run on board”启动问题,现象是:MCU能正常复位,I2C扫描也能看到设备地址,但BQ76920就是不响应寄存器写入。
排查了很久,最后发现是MCU固件的sysloader阶段(也就是MCU内部的Bootloader跳转逻辑)在启动时先把I2C引脚配置成了复用功能,但配置了错误的复用编号,导致I2C引脚没有被正确连接到I2C外设上,而是被拉成了GPIO输出模式。BQ76920芯片本身没毛病,是MCU侧的启动代码有问题。
这次排查给我的经验是:遇到“run on board”阶段的问题,先怀疑初始化代码,再怀疑硬件连接。很多人习惯性地拿万用表量电压、查虚焊,但很多时候问题就出在MCU的引脚复用和时钟配置上。建议大家在boot代码里加一个延时200ms的等待逻辑,确保BQ76920自身完成上电初始化后再进行I2C通信——这颗芯片上电后需要几毫秒才能稳定响应外部指令。
另外,如果I2C通信仍然异常,可以用逻辑分析仪抓一下SCL/SDA波形。正常地址帧应该是0x08(BQ76920的7位地址,配合R/W位后是0x10/0x11)。如果波形上压根没有地址帧,那就是MCU侧的问题;如果有地址帧但没有ACK位,多半是芯片没醒来或者SCL/SDA电平不对。
4. 实操过程与核心功能实测
4.1 焊接与上电验证的注意事项
BQ76920是TSSOP-20封装,引脚间距0.65mm,手工焊接有一定难度但并非不可完成。我的经验是:先用助焊剂均匀涂抹焊盘,然后用刀头烙铁拖焊,最后用洗板水清理残渣。焊接温度控制在330℃左右,不要超过350℃,时间不要超过3秒/脚,否则芯片内部晶圆可能受损。
上电之前必须做三件事:
- 目检:重点确认VC0-VC5的焊接顺序是否与电芯连接顺序一致,这里一旦焊错或者接错线,分分钟烧芯片。
- 短路测试:用万用表二极管档位测量BAT对GND、REGOUT对GND是否有短路。
- 限流上电:第一次上电建议用可调电源,限流100mA,电压先给到电池组满电压的一半左右,观察电流是否异常。
如果上电后电流超过50mA且无法降低,基本可以断定芯片已经损坏,常见原因是BAT极性接反或VC采样线顺序错误。
4.2 电芯电压采集精度实测
我实测了这块板的5路采样精度,用六位半台式万用表作为参照。数据如下:
| 通道 | 万用表读数(V) | BQ76920采样值(V) | 偏差(mV) |
|---|---|---|---|
| VC1 | 3.3148 | 3.316 | +1.2 |
| VC2 | 3.3022 | 3.305 | +2.8 |
| VC3 | 3.2986 | 3.294 | -4.6 |
| VC4 | 3.3155 | 3.319 | +3.5 |
| VC5 | 3.3281 | 3.325 | -3.1 |
整体偏差在±5mV以内,对于这种没有校准流程的板子来说已经很理想了。如果你发现某一节电芯的采样值明显偏离其他节(偏差超过50mV),大概率不是芯片精度问题,而是对应的VC滤波电容虚焊或走线受到了干扰。
4.3 均衡与保护功能实测
均衡功能实测时我用一个20Ω的均衡电阻,实测均衡电流约48mA,和理论计算的50mA很接近。这里注意:均衡电阻的功率要选1/2W以上,否则长时间均衡会烧电阻。板子测试时我特意让电芯电压差达到30mV以上,开启均衡后约40分钟电压差缩小到10mV以内。
保护功能实测我做了两组:
第一组是过压保护,把充电电压调到最高的那节电芯4.0V(三元的过压阈值我设3.9V以上),触发后芯片在12ms内(配置的延时时间)关闭了CHG输出,充电MOS断开。
第二组是放电过流保护,用电子负载拉大电流(比配置的OCD阈值高约20%),芯片同样在配置的延时内触发,DSG输出关闭。
两组测试的响应时间和配置延时基本一致,说明整个保护链路(采样→比较→输出)工作正常。
5. 常见问题与排查技巧实录
5.1 “芯片唤不醒”类问题
现象:I2C扫描不到BQ76920,或者偶尔能扫到但寄存器读写无响应。
排查思路:
- 先检查BAT引脚到电池组正极的供电是否正常,用万用表量BAT对GND电压(注意电池组负极端子不一定是系统地,量的时候需要找准参考点)。
- 检查RESET引脚电平——如果被拉低,芯片一直处于复位状态,无法响应I2C。正常工作时该引脚应被上拉到REGOUT。
- 检查芯片的REGIN引脚供电。BQ76920内部有一个低压差稳压器,REGIN必须接入有效电压,REGOUT才有输出。如果REGOUT没有电压,芯片根本没有进入工作状态。
- 用示波器量SCL/SDA波形,确认是否有正确的启动信号和地址帧。
5.2 电压采样跳变问题
现象:某一节电芯电压读数快速跳动,变化幅度几十毫伏。
排查思路:
- 最常见的原因是VC采样线靠近了MOS的开关节点,高频开关噪声耦合进ADC输入。解决方法是调整走线,或者在VC引脚就近加100nF电容(如果原本没加的话)。
- 其次是电芯连接器接触不良——振动或温度变化导致连接阻抗漂移,影响了采样稳定度。建议把电芯连接线做成焊接形式而不是插接件。
- 还有可能是BQ76920的ADC滤波配置问题。可以通过修改ADCOPT寄存器,改变ADC采样模式(连续采样/单次采样)和滤波深度,对比读数稳定性。
5.3 充放电MOS异常发热
现象:MOS管在大电流下严重发热,甚至冒烟。
排查思路:
- 先确认MOS管的驱动电压是否足够,栅极电压低于10V会导致MOS不能完全导通,进入线性区,内阻变大,发热剧增。
- 检查MOS管的RDS(on)选型:5串电池包的充放电电流通常10A-30A,选择RDS(on)在10mΩ以下的MOSFET比较稳妥。
- 如果发热只发生在充电或放电一个方向,检查CHG/DSG两路驱动电路是否不对称——比如一边的电平转换电阻焊错或虚焊。
5.4 I2C通信偶发失败
现象:上电后通信正常,运行一段时间后I2C读取超时,重新上电又恢复。
排查思路:
- 这是典型的信号完整性问题。I2C线(尤其是SCL)如果走线过长且没有上拉电阻或上拉电阻阻值过大,上升沿变缓,在高频干扰下容易误判。
- 解决办法:把I2C上拉电阻从10kΩ减小到2.2kΩ-4.7kΩ,同时缩短I2C走线长度。
- 如果MCU和BQ76920之间的距离无法缩短,可以尝试降低I2C速率到50kHz试试。
6. 实测总结与后续扩展方向
板子从画原理图到调试完成,前后大概花了两周时间。第一版遇到的最大问题不是硬件设计,而是对BQ76920寄存器体系的理解——这颗芯片的寄存器虽然不多,但保护阈值、延时参数、恢复条件之间环环相扣,改一个参数可能影响其他功能的触发逻辑。
我的建议是:无论做什么BMS板子,第一版务必配一个可调的调试工具,比如用USB转I2C适配器直接连BQ76920,配合TI官方的BQStudio上位机修改寄存器迅速验证功能。等所有保护功能验证没问题了,再让MCU接管寄存器配置。这个顺序能帮你把“芯片功能调试”和“MCU软件调试”两步分开,问题定位会清晰很多。
最后再分享一个我在这个项目里用得很顺的小技巧:BQ76920的ALERT引脚接到MCU的外部中断后,可以配置芯片在保护触发时主动拉低ALERT引脚通知MCU。这样MCU不用每次循环都轮询寄存器,功耗降下来了,实时性也更好。后续如果在这个板上加蓝牙模块做手机端监控,这个ALERT中断机制正好可以作为低功耗唤醒源。
本文还有配套的精品资源,点击获取