4.1锂电池管理系统的软件框图4.2锂电池管理系统的软件实现
硬件电路确定以后,控制系统的主要功能将依赖于系统软件的实现。控制系统能否正常可靠的工作,除了与硬件的合理设计外,与功能完善的软件设计也是分不开的。在软件设计时,首先要根据控制系统要求分析软件要实现的任务,然后进行软件的总体设计,包括程序总体结构设计和对程序进行模块化设计。按整体功能分成多个不同的模块,单独设计、编程、调试,然后将各个模块组合调试,实现软件的全部功能。
本系统软件是基于ATMEGA8L的C语言实现的,其中:电压测量模块,由单片机控制模拟开关,通过单片机的10位A/D模块测量单节电池电压值。为了提高测量的精度,软件采用“筛值平均”的软件虑波方法。在对每一节电池的模拟量测量时,连续测量多次,然后筛去最高值和最低值,再对剩余的测量值取平均,获得最佳的测量结果。然后根据电压的计算方式,获得电池的电压。在电压测量完成后,要运行“冒泡排序”的程序,对所有的电池电压进行排序,标记最低、最高电池,为均衡模块服务。充电管理模块,通过检测到的单节电池电压判断电池所在的充电阶段,并利用单片机的脉宽调制输出(pWM)控制MOSFET实现预充阶段的小电流充电和保持充电阶段的脉冲充电。当检测到电池充电完毕后,自动断开充电回路,点亮充电完毕提示灯。充电管理模块通过检测到的电压,电流,温度值判断电池是否工作在正常状态,如出现过压,过流,温度过高等情况,马上通过MOSFET关闭充放电回路,并点亮故障提示灯。剩余容量估计包括检测开路电压,通过开路电压与电池电量的对应关系计算,另外主要依靠安时积分法在充放电时对实时检测到的电流值作积分,这通过单片机的定时器产生定时中断来实现。串口通信利用单片机的串口USART与pC机的RS232通信。在上位pC机中,主要完成的是对串口设置的选择控制、采集数据的读取显示,并对采集的数据存储。我们选择了VC++6.0完成界面设计,通讯串口设置和存储数据。VC++6.0开发串行通信程序主要有两种方法:
1、利用VC++6.0提供的MSComm控件;
2、利用专门的Windows的SDK提供的ApI函数。
本文采用了MSComm控件。MSComm控件在串口编程时非常方便。程序员不必花时间去了解较为复杂的ApI函数,只需要在串口通信资源的属性(properties)一项中配置串口。串口通信的波特率、数据位数、停止位数、奇偶校验、发送缓冲区大小、接收缓冲区大小以及超时设置等均在此时进行配置。完成串口配置之后即可打开串口,进行数据读写。它只有一个事件,即OnComm事件。通过事件驱动,对时间的发生进行跟踪和处理,从而检测和处理通信错误以及进行对数据的处理显示等。
5系统调试系统的现场调试在实验室进行,下图为锂电池管理系统的现场运行实验证明系统能进行较为精确的数据采样,电压测量精度可以达到0.05V,可实现对锂电池的分阶段充电控制,SOC估算基本可靠。下图为电路板和上位机的数据显示:
6总结与展望
本文针对水下机器人的动力源——锂离子电池组提出一种电池管理系统的设计方法。该电池管理系统可直接检测及管理储能电池工作的全过程,包括电池充放电过程管理、电池温度检测、电池电压电流检测、电量估计、单体电池间的均衡、电池故障诊断等几个方面。在单电池电压测量、总电压、总电流、温度测量及SOC估计和其他功能方面均达到了要求。系统不可避免地存在一些不足,对进一步的研究工作有如下展望:
(1)增加CAN通信模块,CAN(ControlAreaNetwork)总线是德国BOSCH公司在80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议,具有实时性强、抗干扰能力强、结构简单、应用方便、价格低廉等特点,在现场总线中有一定的优势。通过CAN总线组成具有两级控制结构的可同时管理多组锂电池组的分布式锂电池管理系统。系统采用1个CECU(centralelectriccontrolunit)和5个LECU(localelectralcontrolunit)组成,原理图如图6-1所示,8节锂电池为1个电池组,每个电池组由1个LECU管理,本文设计的锂电池管理系统只作为1个LECU管理1组电池组。CECU接收各LECU数据并对数据进行处理。(2)对于SOC估测方案的研究还没有达到较为理想的状态,需要进一步深入下去,把一些没有考虑到的对SOC有影响的因素引入到算法中来,如:电池老化引起电池容量的变化,单体电池对电池组的影响,温度和电池容量对自放电的影响等。