小型电动物流车BMS的软件设计与实现

2022-06-21 06:00程良燕
北部湾大学学报 2022年2期
关键词:电池组报警程序

程良燕

(安徽城市管理职业学院 轨道交通学院,安徽 合肥 230011)

随着我国物流快递行业的快速发展,小型电动物流车应用越来越广泛,如何降低其成本并实现安全、信息化管理,是小型电动物流车生产企业亟待解决的问题[1]。这就要求设计一种高性价比的智能化电池管理系统(battery management system,BMS),即该BMS不仅应具有硬件成本低的特点,还应具有软件开发成本低且运行效率高的特点[2-3]。本文的低成本BMS自制样机以STM32F072为主控芯片,通过设计相应的软件,以实现对小型电动物流车锂电池的安全和信息化管理。

1 BMS结构与功能

本文的BMS结构如图1所示,由主控单元(main control unit,MCU)、模拟前端(analog front end,AFE)、库仑计/电流采样单元、均衡电路、充放电单元、系统电源休眠及待机唤醒单元、电池电加热单元、液晶显示器(liquid crystal display,LCD)触控屏单元及外围接口单元等组成。

图1 BMS结构

MCU负责对系统所有开关量及模拟量进行采集与计算,并结合预先标定的参数及控制逻辑,对系统进行安全管理与通信,控制电池组的充放电、均衡电路、系统电源休眠和待机唤醒以及系统荷电状态(state of charge,SOC)的计算等。AFE实现对电池电压和温度的采集,与库仑计/电流采样单元共同作用以实现对电池电流的采集,并通过I2C与MCU进行通信,用以实现对电池电压、温度、电流的计算及测量。均衡电路实现电池组的充电均衡和放电均衡,并结合均衡控制策略对电池组各串联电压进行均衡,避免短板效应,从而保持电池组处于最佳状态。电池电加热单元可在低温环境下提高电池能量利用效率。带协议的RS485、CAN及LCD触控屏与MCU通信,实现对系统所有参数和状态的查看及设置。

2 BMS的软件设计

2.1 开发工具与平台

本设计采用嵌入式编程软件MDK5为主要编程软件平台,STM32CubeMX软件为系统初始化工具平台。MDK5软件针对STM32F系列,具有完善的基于HAL库的软件包,底层程序对STM32F系列芯片的兼容性好,且兼容J-Link等多种在线调试工具[4]。STM32CubeMX软件根据功能需求及系统配置条件,可配置生成基于HAL库的系统框架程序,其生成的工程程序文件包括内核程序、各API函数及系统框架程序的初始化函数,并与MKD5兼容。本设计在MDK5上通过调用基于HAL库的API函数进行功能算法和逻辑程序设计,即可实现BMS的功能及算法要求。

2.2 整体程序架构

本软件架构可分为底层、中间层及接口层,如图2所示。底层由API函数和时间片轮询程序组成,其中,API函数是直接访问硬件的接口。中间层基于底层API函数及时间片轮询程序,实现BMS各功能任务,包括对系统采集到的各种模拟量及状态量进行处理转换、中断源发生后的实时处理、各种状态及报警指示、休眠及唤醒工作的处理、显示屏多级菜单页的处理、系统各种状态信息的存储及数据输出、系统逻辑功能的实现及SOC的计算等。接口层主要实现BMS与所有外设设备通信信息的处理及转换,从而保证BMS能够与上位机、LCD触控屏以及智能手机进行通信,实现智能化管理。

图2 BMS设计的整体程序架构

2.3 底层程序设计

2.3.1 API函数

本设计使用的API函数全部由STM32 CubeMX软件生成,API函数种类由所需的功能模块决定,主要包括系统时钟函数、I/O控制函数、ADC函数、温度传感器、中断服务函数、RTC函数、2个串口函数、DMA处理函数等。

2.3.2 时间片轮询程序

时间片轮询程序,用以实现对除中断程序及初始化程序外的所有程序模块高效有序的组织运行。传统的顺序执行结构具有程序简单、硬件调试方便等特点,但大中型嵌入式系统为了协调各功能函数,通常会加入大量的阻塞式延时函数,最终导致程序臃肿,执行效率严重下降[5-6]。实时操作系统,如μClinux、μC/OS-Ⅱ,可以实现多任务、多线程、多级软中断等功能,但其系统内核结构复杂,占用程序空间大,且调试过程复杂[7-8]。因时间片轮询程序占用空间小,且可以实现多任务处理,系统调试简单,除主程序在系统初始化阶段会用到个别阻塞式延时程序外,其他程序中不用加入任何阻塞式延时,而是通过轮询周期实现延时。最终系统既保证了程序执行的效率,也保证了程序代码占用的空间在限定的范围内,故本设计采用时间片轮询程序结构。

BMS的各功能任务模块通过时间片轮询法进行调用,且可以根据不同的程序结构要求初始化出多个时间片。本设计将时间片分为4种轮询周期,分别为1 ms、10 ms、0.5 s和1 s。

1 ms时间片:主要用于各种信息和状态的采集,将采集的数据存入系统的状态寄存结构体及临时数组中,并不做状态及数据处理,以保证数据及状态的实时性。由于AFE的BQ769XX系列专用锂电池管理芯片的数据刷新周期为250 ms[9],因此 可保证在1 ms的高刷频率下,不会漏采数据。

10 ms时间片:主要进行逻辑状态的处理、通信处理、状态和信息的指示及显示等对实时性要求不太严格的任务。

0.5 s及1 s时间片:主要处理无实时性要求的任务,如系统参数的更新、状态信息的存储、系统待机任务、BMS加密、刷新开门狗、时间校准等。

2.4 中间层典型程序设计

2.4.1 初始化程序

初始化程序只在第一次开机或从休眠状态唤醒后运行一次,流程图如图3所示。主要包括:(1)系统API函数的初始化,如STM32F 072芯片的系统时钟、GPIO、DMA、串口、ADC、I2C、看门狗、RTC等;(2)用户程序的初始化,内容包括系统时间片轮询程序初始化、对AFE芯片初始配置、将系统休眠前或系统第一次上电的各状态标志位对应的数值存入寄存器、使系统从第一次开机或休眠状态平顺过渡到正常工作状态。

图3 中间层初始化程序流程图

系统时间片轮询程序初始化设计为:时间片轮询函数的总计数器首先清零,针对1 ms、10 ms、0.5 s和1 s四个时间片,分别进行配置,包含任务指针、是否循环、任务开始的计数数值等内容,配置完成后使四个时间片进入工作状态。

AFE芯片初始化设计为:首先,MCU通过外部电路对AFE进行硬件唤醒,唤醒成功后再通过I2C与AFE通信。其次,MCU通过判断系统RTC备份存储器预先设置的标志位,将BQ769XX系列AFE芯片的初始化过程分为两种:一是当标志位为1时,即为系统第一次上电情况,MCU从系统的FLASH片区读取预置的默认参数,包括充放电单体电压的报警及保护阈值、总电压的报警及保护阈值、电流的报警及保护阈值,温度的报警及保护阈值等,并保持充放电回路为开路状态,置位等待第一次用户配置的状态位;二是当标志位为0时,即为系统休眠状态唤醒,系统把休眠前备份的所有标定参数,包括报警及保护阈值写入AFE中,并查看是否有保护状态字被置位,若没有,则打开充放电回路。

2.4.2 数据采集程序

本设计需要采集的数据有两大类:一类为AFE每250 ms更新一次的电池单体电压、电池组总电压、充放电电流、负温度系数(negative temperature coefficient,NTC)数据;另一类为MCU内置的ADC通过DMA方式采集到的NTC数据、电池总电压通过高精度电阻进行分压的数据。

设计中,系统在对AFE芯片初始化完成后,AFE芯片就以250 ms为周期进行数据采集,每次采集完成后通过Alert引脚向MCU发出中断信号,MCU接收到该中断信号后检查报警类型,如果当前为数据读取就绪状态,则开始一次数据采集过程,并依次读取所有AFE寄存器内采集的数值并写入指定数组中。

电池电流的采集实际上是对电流采样电阻两端电压差值的读取,然后再进行计算处理,AFE芯片的电流采样是一个高精度的16 bit并带有正负符号的ADC,其最小采样电压范围为±8.44 μV,若电流采样电阻为R,采样到的十进制数据为N,则采样的电流值设计为:I=N·8.44/R。

AFE芯片BQ769XX支持一定串数范围的电池组,但对于不同串数的电池组其采集的通道并非连续,从而导致AFE芯片内的电池串联电压的数据也非连续。故设计一个函数,实现在不同电池组串数的情况下,保持电压采集数据数组的连续性,从而保证程序运行高效且节约存储空间。

2.4.3 SOC与电池循环次数计算程序

SOC与电池循环次数计算的程序流程如图4所示。本设计采用安时积分法结合温度补偿法[10-12]对SOC进行计算。设计中,通过自主学习获得电池组实际容量,以确保其准确性。当系统第一次开机或强制进行自主学习时,通过对电池组进行一次完全的充放电循环,实现电池组的容量自主学习。该循环过程为:触发电池组或单体电池欠压保护,之后触发电池组或单体电池的过压保护,再次触发电池组或单体电池的欠压保护。

图4 SOC与电池循环次数计算流程图

锂电池的性能随着工作时间及次数的增加而逐渐下降[13],对其进行实时的剩余寿命预测[14],对提高小型电动物流车的可靠性具有重要意义。本设计通过计算电池充放电的循环次数,来预测电池的剩余寿命。需要注意的是,电池组容量自主学习完成之后,一次充放电循环过程定义为:当电池组电量低于10%时,通过充电达到80%以上,再通过放电回到10%以下。

2.4.4 报警及保护程序

(1)各种系统报警及保护状态位的设置

各种系统报警及保护状态位的设计对应程序状态数组的各个数据位,在程序中以结构体结合共同体的形式体现,该数组各状态位的设置处理程序位于1 ms时间片内,以实现快速的设置处理。

在AFE数据采集完成或预设的报警阈值被触发时,触发AFE芯片BQ769XX的Alert变为高电平,并向MCU发出中断信号,MCU收到中断信号后,程序中的总故障位置位,从而使1 ms时间片内的系统状态及AFE数据采集程序被激活。此时MCU通过I2C总线与AFE进行通信,读取AFE转换完成的各串电池的电压数据并存入电池串临时数组中,同时采集AFE的所有状态寄存器并检查、更新各种报警及保护状态位。若任意保护或报警状态发生,则总故障位都被置位为1,反之,则清零。

(2)系统各种状态的逻辑处理

系统逻辑处理程序设计主要实现系统的报警及保护处理功能,其位于10 ms时间片内。若状态数组内相应的位被置为1,则进入系统逻辑处理程序,而后检查是否发生了置位,如果发生则按照报警及保护的优先级逐个检查,检查过程中如果发生报警或保护,则立即进入相应的报警或保护处理程序,同时置位对应的报警及保护状态位,并对声光报警处理函数置位,实现声光报警。检查的优先级由高到低设计为:短路、放电过电流、充电过电流、电池掉线、过电压、欠压、温度保护及报警等。

各报警及保护发生后的处理程序不尽相同,但基本的处理过程设计为:先断开充电或放电回路,置位记录当前信息位,延时一段时间后,再次检测置位状态是否还存在,若存在则继续进行报警或保护,若不存在则打开放电或充电回路,返回正常工作状态。

2.5 接口层程序设计

接口层程序主要为通信处理程序。上位机与BMS通信主要实现数据监测和非实时性控制,因其通信过程频繁,设定为正常监测时每秒传输一次数据,使用半双工UART和RS485,以小端方式传输,应答机制为:上位机发出询问指令后,从机应答指令要求的内容。

设计中,BMS与上位机通信采用的是RS485半双工隔离模式[15],其协议为状态机方式的帧通信。设定BMS工作在从机状态,当收到上位机发出的命令帧后,系统解析命令帧的命令,并根据命令类型及系统采集的数据,组合成正确的数据帧或应答指令,再发送回上位机。

BMS与LCD触控屏通信采用的是全双工模式[16]。设计中,MCU每0.5 s发送一次数据至LCD触控屏,以实现数据的更新,同时MCU的串口接收中断,处于打开状态,等待来自LCD屏的触控操作命令帧。

BMS与手机端通信采用的是串口蓝牙透传方式,将其设计成与上位机通信相同的模式及帧结构。

3 试验测试

所设计的软件经调试验证完成后,下载到自制的BMS试验样机,在实验室环境下,验证BMS的性能。测试平台采用3并15串16 Ah的磷酸铁锂电池组和100 V/50 A的电池测试柜,测试工具含高精度数字万用表和钳形交直流电流表。

测试过程:

(1)对所有单体电池的电压模拟量、温度模拟量、电流模拟量的采集功能进行测试。BMS电压采集数据结果如表1所列。由表1可看出,电池单体电压测量误差在±10 mV以内,满足设计要求。

表1 BMS电压采集数据表

(2)对SOC计算功能进行测试,所得数据如表2所示,误差小于4%,满足SOC计算精度要求。

表2 BMS荷电状态测试数据(充电模式下BMS原始容量值为10.3 Ah)

(3)分别进行与上位机的通信功能测试、与手机App的通信功能测试、与触控LCD屏的通信功能及驱动功能测试,以验证其智能化。基于Qt开发平台的BMS上位机界面如图5所示,可通过此界面设置相关参数,并监测电池的各种状态,满足功能要求。

图5 BMS上位机界面

(4)对回路的通断能力测试,对过压、欠压、过流、短路及充放电过温等情况下的报警及保护功能进行测试,均满足设计要求。

4 结论

本文介绍了以STM32F072为主控芯片的BMS结构与功能,在此硬件平台上,结合时间片轮询法,设计了BMS软件架构、系统初始化程序、数据采集程序、SOC与电池循环次数计算程序、报警及保护程序、通信程序,并给出了部分程序流程图。以3并15串16 Ah的磷酸铁锂电池组为测试对象进行测试,验证了所设计的BMS的性能。由此,得到一种面向小型电动物流车的智能化BMS。其具有硬件成本低、软件开发成本低且运行效率高的特点。

猜你喜欢
电池组报警程序
纯电动汽车动力电池组布置效率提升方法
填充电池组的耐撞安全性
蔚来部署第二代换电站最大容量13块电池
给Windows添加程序快速切换栏
试论我国未决羁押程序的立法完善
小心,墙纸在报警
鞋子摆放透露的信息
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
死于密室的租住者