引言
电池管理系统,主要借助微处理器来解决不同电池由于制作工艺、充电电压和电池的容量不同引起的充电问题。该系统可根据电池种类的需要产生充电电压,利用高分辨率的A/D转换器实时采集和监控充电过程中电池的状态,进而实现多种电池充电过程的智能化管理。电池管理系统能够有效保护电池并延长电池寿命,提高充电效率和使用安全性,并且可以实时监测电池的状态[1]。
目前,电池管理系统主要存在的问题:一是管理系统的可移植性较差;二是不方便对其进行功能扩展。辛喆[2]等人采用单片机进行控制,实现了对电源电压、电流和温度的实时监控,但系统的可移植性有待提高。蒋忠伟[1]等人通过向串口发送指令的方法对系统进行控制,但是系统对后续功能的扩展不完善。针对以上问题,本文采用国产嵌入式实时操作系统RTThread,选用STM32F103作为主控制器芯片,能够在很短的周期内开发出可应用于多种场合、功能完备的智能电池管理系统。另外,该系统也便于操作系统的移植,能够轻松实现串口通信、实时数据记录和监测,实现充电器的智能化。
简而言之,智能电池管理系统应该具有如下功能:精确提供(或者显示)电池状态数据(包括电池当前的端电压、实时温度、充电电流),提供必要的保护与报警功能,在充电过程中有保护报警措施(如过压保护、超温报警等)。
1系统设计
1.1控制器芯片选择
本系统采用STM32F103作为主控制器芯片,STM32F103有20 KB内存、72 MHz 主频、各种外设支持[4-5],其控制器的固件库具备通用性,比较容易切换到其他的产品线。STM32F103拥有1~3个ADC,这些ADC可以独立使用,也可以使用双重模式。STM32F103的ADC 是12 位逐次逼近型的模拟/数字转换器,有 18个通道,可测量 16个外部和2个内部信号源[6];各通道的A/D转换可以单次、连续、扫描或间断模式执行,ADC 的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
1.2系统硬件设计
为了实现电池的充电管理和控制功能,系统包括电池电压和电流信号采集电路、充电环境温度检测电路、电池充放电控制电路。其硬件框图如图1所示。
图1 系统硬件框图
图1中,电池的电压、电流和温度通过其ADC接口和传感器将模拟量转换为数字量,STM32F103控制芯片再根据采集到的数据和预设值进行比较,若超过限定值,则停止PWM,从而实现对电池的充放电控制。电池的充放电及工作参数采集系统如图2所示。
图2 充放电及工作参数采集系统
图2中,VBAT1、IBAT1、TBAT1分别为电池的采集电压、电流、温度参数的输出信号,通过调节PWM1和PWM2占空比来进行充放电的控制,直至电池完全充满。
电池的温度检测使用DS18B20数字温度传感器。DS18B20是一种具有单总线接口的数字温度传感器,具有体积小、功耗低和接口简单等特点,特别适合作为本系统的温度采集传感器。
2电池安全因素
电池的安全因素包括充电电流、充电电压和充电温度。电池最大的充电电流与电池的容量(C)相关,最大的充电电流用电池容量的数值来表示。例如,电池的容量为750 mAh,充电电流为750 mA,则电池的充电电流为1C(1倍的电池容量)。在电池充电的过程中,当充电电压超出电池典型值上限的时候就要停止充电,实现过充电压保护。
电池充电时,是将电能转化为化学能储存起来,但并不是所有的电能都被转化为化学能,一些化学能转化为热能,对电池起到了加热的作用。如果在充电的过程中,电池持续的升温导致电池过热,且不能及时停止充电就会导致电池损坏。在进行温度判定时,当电池温度超过一定限定时,就需要停止充电。当环境温度极低的时候,也需要采用充电温度与环境温度差值的方法来判定是否停止充电。
电池常用的充电方法有恒定电压法和恒定电流法。对于采用恒定电压法充电的电池,在充电过程中要进行相应的电流检测,以便限流。当采用恒定电流法充电时,就要对电池的电压进行检测,以便对电压进行限制。采用恒定电流法与恒定电压法进行充电时,其电压和电流随时间变化的典型曲线如图3所示。
图3 电流、电压变化曲线
3系统软件设计
本系统采用国产嵌入式实时操作系统RTThread来进行电池的充放电控制。RTThread实时操作系统核心是一个高效的硬实时核心,它具备非常优异的实时性、稳定性、可裁减性。在RTThread中,线程是最小的调度单位,支持256个线程优先级[7]。当内核进行最小配置时,内核体积只有3 KB的ROM占用、1 KB的RAM占用[8]。该操作系统支持在ARM7TDMI、ARM CortexM3、ARM920T、x86等多种嵌入式平台上的移植。操作系统的引入,可以加强电池充放电控制系统的快速性、实时性和稳定性,增强了该电池管理系统的可移植性,并且方便做后续的功能扩展。
3.1RTThread的finsh shell系统搭建
首先,将系统的内核源码进行解压,打开其STM32F103分支的MDK工程文件。接着,向工程中添加finsh组件。finsh shell系统是RTThread操作系统中的命令行操作系统,方便用户进行调试、查看系统信息。要开启finsh工程,首先要在系统配置文件中添加finsh的宏定义,接着指定作为调试接口的串口号,最后使console设备与相应的串口相关,其配置语句如下:
#define RT_USING_FINSH//打开finsh
#define RT_USING_UARTx//指定串口
#define STM32_CONSOLE_USART1//设备关联
所有的配置完成之后,使用Keil MDK进行编译,编译通过之后再运行。如果串口打印出RTThread的logo和“finsh>>”字样,则表示finsh shell系统搭建成功,可以进行调试工作。其串口打印的信息如图4所示。
图4 串口打印信息
3.2设备注册
在搭建好RTThread的finsh shell系统之后,需要对相应的接口和设备进行注册。首先要完成相关I/O口的配置,并通过写控制寄存器的方式初始化相关寄存器,然后再来定义相关设备。在RTThread操作系统中,设备被认为是一类对象,每个设备对象都由基类对象派生而来,继承了父类对象的属性[9]。这里,需要定义系统的ADC设备,设备的定义通过RTThread内部结构体rt_device来完成。该结构体的主要成员如下:
srtuct rt_objectparent; //从rt_object基类继承
enum rt_device_class_type type;//设备类型
rt_uint16_tflag; //设备标记
rt_uint16_topen_flag; //设备打开标记
rt_uint8_tdevice_id; //设备id
RTThread操作系统的rt_device结构定义了大多数设备的结构模型。所有系统支持的设备驱动实现的过程,就是实现该结构体内部接口函数的过程,这也是rt_device结构体的细节。其具体的接口函数如下:
rt_err_t (*init) (rt_device_t dev);//设备的初始化
rt_err_t (*open) (rt_device_t dev ,rt_unit16_t oflag);//设备的打开
rt_err_t (*close) (rt_device_t dev);//设备的关闭
rt_size_t (*read) (rt_device_t dev, rt_off_t pos, void*buffer, rt_size_t size);//设备的读操作
rt_size_t (*write) (rt_device_t dev, rt_off_t pos, constvoid*buffer, rt_size_t size);//设备的写操作
以上init、open、close、read、write等接口函数都需要用户进行补充和完成,通过操作以上函数,便可以对设备进行相应的操作。
经过I/O口配置和定义相应的结构体之后,系统的设备驱动已经建立完毕,最后需要调用rt_device_register函数向系统注册相应的设备。注册并编译成功之后,用命令list_device()便可查询到该设备,效果如图5所示。
图5 设备查看情况
图5中,通过串口打印出了系统现在所支持的设备。ADC属于“Chrarcter”型设备。RTThread操作系统还支持多种类型的设备,如“Block Device”、“Network Interface”、“MTD Device”等,这样就使得系统的功能扩展变得非常方便。如果要添加新的设备,用户只要定义相应设备的结构体并进行注册,便可完成系统功能的扩展。
3.3应用软件设计
系统的软件设计主要实现以下几个功能。首先,进行系统的初始化,然后启动PWM,接着启动定时器,设定系统的采样时间。在充电过程中,经过一段时间之后,系统便进行采样,根据其采集到的充电电流、电压、温度与预设值进行判断,过满则判停,关闭PWM。其软件流程图如图6所示。
图6 软件流程图
4测试
首先,设定好判定的初始值和采样的时间间隔,并设定每30 s向串口输出一次采样结果。本次测试在室温条件下进行,在3.3 V的电压下采用恒定电压法进行充电,可以将整个系统通过相应串口连接至PC机,通过串口工具来调试充放电的过程,并可以观察电池相应的状态,如图7所示。
图7 串口打印信息
可以看到,每到设定的时间,系统便会将采集到的电池的温度、电压、电流等数据通过串口显示出来,这样便实现了对电池充电状态的实时监控。前10次的采样结果如表1所列。如表1所示,在3.3 V的恒定电压下,电池的充电电流变化基本符合采用恒定电压法充电时电流的变化曲线。
继续进行测试,电池的充电电流和温度的变化曲线如图8所示。电池的温度在充电的过程中先升高,达到32 ℃左右的时候开始下降。电流的变化曲线则符合按照恒定电压法充电的典型曲线,当电池的充电电流过小时,系统便停止充电,从而实现对电池的过充保护。
图8 电流和温度曲线
结语
本文设计的智能电池管理系统,选用STM32F103芯片作为主控制芯片,采用国产实时操作系统RTThread作为控制系统,增强了系统的实时性和可扩展性,可以实现对电池充放电过程的监控及保护。在以后的研究中,可以对该系统做出功能扩展,使其适用于更加复杂的环境。