首页-达尔闻    全部    毕业设计| STM32+TI BQ76940设计48V BMS方案(资料分享)

毕业设计| STM32+TI BQ76940设计48V BMS方案(资料分享)

今天分享的是采用STM32 MCU+TI的BQ76940AFE+BQ34Z100-G1电量计+BQ76200高端驱动设计的48V BMS方案,作为毕设较为少见,但建议对电源设计感兴趣的小伙伴可以自己自制一个,相关资料在“达尔闻说”回复:BMS资料。
收藏
  • 今天分享的是采用STM32 MCU+TI的BQ76940AFE+BQ34Z100-G1电量计+BQ76200高端驱动设计的48V BMS方案,作为毕设较为少见,但建议对电源设计感兴趣的小伙伴可以自己自制一个,相关资料在“达尔闻说”微信公众号回复:BMS资料。项目制作者是johnsbark,可以在文末查看原文链接。

     

    成品介绍

    这是根据TI官方那个方案改:精确监测和 50μA 待机电流、13S、48V 锂离子电池组参考设计TIDA-010030,链接如下:https://www.ti.com.cn/tool/cn/TIDA-010030#technicaldocuments

    原方案里的MCU用的是TI自家的MSP430,由于没用过,我自己改成了STM32F103C8T6。

    除了电量计这块没有进行充放电学习过程外,基本实现要求功能,自定义的过流,短路,过放,过温都行。可以自动识别充放电,充电过程进行电池均衡(这里设置了一节),防充电器倒冲(程序存在BUG我最后只做到了10V,如果一上来就低于10V就不管用了),CAN总线传输数据也整上了。BQ7718我买错型号了,所以这个冗余保护部分就没测试过,不过这部分所在的第二块儿PCB很简单,直接改官方的PCB也行,我就是这么干的。

    本文只对关键部分进行赘述,能力有限,欢迎大佬分享经验,先上成品图:

     

    具体方案

    原理框图:

    总览原理图:

    STM32我是用Cubmx进行的快速开发,配置起来很方便,具体流程我也是根据网上各种Cubemx教程一点一点来的,在此之前完全没用过,软件一直在吃灰。。。。。。配置如下。

     

    注意事项

    1)电流采样部分的PCB布线

    这块儿很重要,硬件不行直接影响后面的软件程序设计。电流采用回路没设计好直接导致采集回来的电流老飘,然后误动作,因此我重打了一块板子,唉。

    这里分享一个ADI的设计方法,可以借鉴学习:https://www.analog.com/en/analog-dialogue/articles/optimize-high-current-sensing-accuracy.html

    第一次给这种板子布线,傻傻的,光顾连线了,额。程序开发到一半发现电流怎么都归不了零,明明什么负载都没接,它却处于一个较高的波动,极其蛋疼。没法设计自动识别充放电了。于是第二次我参照官方的PCB进行了以下改进,做出来终于正常了。

    所以布线要认真,我这一共弄了三版,第一版直接封装搞错好几个。。。。。。

     

    2)与BQ76940的IIC通讯

    Cubemx的硬件IIC下,我用的BQ7694003的IIC地址是0X08,实际上要写0X10。

    由于我用的是Cubemx的硬件IIC,所以玩过这个硬件IIC的想必都碰过坑,我还行,做足了前期准备。幸运的是我参考了这篇博文:STM32F103硬件IIC在HAL库下入坑指南 https://blog.csdn.net/niushijia007/article/details/99671761

    同时我还在网上搜刮到了BQ76940和BQ34Z100-G1的相关程序。

    在刚开始测试与BQ76940进行IIC通讯时,发生了无法通讯的问题,其根源在于BQ76940使用的是7位IIC地址:0X08。而STM32的硬件IIC是取8位地址中的前7位(从左往右数),然后直接将其最低位强制改为0(表示写操作)或1(表示读操作),最后最高位补0。这样导致我输入的从机地址是0X08,实际上发送出去的是0X40,BQ76940根本不响应,通过逻辑分析仪才看出来。

    之后通过将从机地址手动左移一位后变为了0X10,这一次终于正确了,发送出的是0X08。可是,IIC读操作回来的数据仍然对不上。经过逻辑分析仪比对,人工CRC计算,发现CRC校验没过。校验时需要用到从机地址。虽然逻辑分析仪中显示的发送地址是0X08,但从机计算时采用的却是0X10加上读操作1(即0X11)。因此主机在进行CRC计算时就需要手动在原从机地址上+1处理,修改后读操作就能成功通过CRC校验。(PS:读操作即使不进行CRC计算流程也行,不过嘛,带CRC更保险)具体原因可以看BQ76940的官方CRC通讯手册。

    补一张读操作时的图片,用下面的工具选择CRC-8,然后输入“11 FF”即可计算出从机BQ76940返回的CRC值:“B1”。

    3)与BQ34Z100-G1的IIC通讯

    BQ34Z100-G1这款电量计是阻抗跟踪的,比较准,不过对于新手来说也坑,它得预先配置文件,我是咸鱼专门买了个自制的EV2400然后用BqStudio配置的,要不真的很难整。

    好在网上程序也好找,直接搬然后改一改就行。我只搬了后续的读取部分,初始化有些麻烦,还是老老实实用BqStudio配置吧。

    还有它的IIC地址,搞得我很方,在Cubemx的硬件IIC上你写0XAA它实际输出的是0X55,就能用了,和之前那个BQ7694003的0X08你得手动左移一位不一样。

    不过,芯片调试这里TI官方可是给了现成的调试软件,BQ76940有专门的上位机程序,BQ34Z100-G1有BqStudio,建议咸鱼卖个便宜的EV2400一步到位,省很多麻烦。

    最后的成品我只进行过短路测试,没有进行过长期的实际使用。能力一般,水平有限。肯定有很多漏洞,还有改进空间。我看这类程序网上不多,如果需要相关资料,可以在“达尔闻说”微信公众号微信回复:BMS资料,获取。

     

    如果想和johnsbark交流,可以到他的博客,即本文原文链接:

    https://blog.csdn.net/johnsbark/article/details/107965459

Control Render Error!ControlType:productSlideBind,StyleName:Style1,ColorName:Item0,Message:InitError, ControlType:productSlideBind Error:未将对象引用设置到对象的实例。