标题:
基于MATLAB的蓄电池充放电监测系统 (1)
[打印本页]
作者:
forsuccess
时间:
2012-3-8 23:20
标题:
基于MATLAB的蓄电池充放电监测系统 (1)
随着石油价格的不断调高,人们承担了越来越多的燃料成本压力。多数人开始关注以其他能源为能量的交通工具,以电池为能量来源的出行工具越来越多。而电池的安全、寿命等性能也日益引起人们的关注。目前能够被电动自行车采用的有以下三种:铅酸蓄电池、镍氢蓄电池和锂离子蓄电池。因为铅酸蓄电池成本低,性价比高,现在的电动车上绝大多数装的是铅酸蓄电池。本文就针对单节铅酸蓄电池设计的充电特性监测系统。
1 系统概述
与电池充放电有关的参量包括:电池端电压、充电电流、电池温度等。因此,系统需要实现这三个参数的准确采集。系统框图如图1所示,系统南MCU、模拟采样电路、温度采集电路和上位机组成。MCU采集电池充放电时端电压、电流和温度信息,然后信息通过串行通信接口发送到上位机,再由MATLAB接收处理,并绘制曲线。电流和电压每秒采集10次,温度每秒采集1次。MCU每秒向上位机传递一组数据,MATLAB跟踪更新数据,达到动态显示电压、电流、温度的效果。
2 硬件设计
2.1 MCU选择
本监测系统的MCU选用了STC12C5A60S2,芯片资源有:60K的flash,1280字节高速RAM,8通道10位A/D、2通道UART、2通道16位定时器、1通道内部看门狗定时器。晶振选择为11.0592MHz。
2.2 温度采集芯片选择
温度采集的电路芯片选用Dallas公司生产的DS18B20,它是DALLAS公司生产的线式数字温度传感器,采用3引脚T0-92型小体积封装;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字方式串行输出。具有直接输出数字信号,不存在信号传输过程干扰、扩展方便、不需要设计另外的信号调制电路等优点。
为了使温度的采集更准确,本系统使用两片DS18B20,A/D转换精度选择为12位,贴在电池壁的不同位置。
2.3 电流和电压检测电路设计
电压检查使用电阻分压,经电压跟随电路到A/D转换接口。运放的作用是提高输入阻抗,减小检测电路对充电电路的影响,提高测量精度。
电流检测有两种方法:高端检测和低端检测。低端检测实现起来比较容易,但是这种方案的坏处是负载会比实际地线抬高一个直流电压,测量不准确;另外,电源和负载具有不同的参考地,对EMI的控制不利。高端检测的难点在于输入端存在共模电压,测量电路复杂。本系统采用Maxim的MAX4173来测量差模电压,其内部包括一个差分放大器。选择两片MAX4173能够实现电流的双向采样,电流检测电路如图2所示。
3 MCU软件设计
MCU完成功能包括读两路A/D转换(电压、电流);读两路DS18B20转换结果;串口通信。电压、电流变化较为剧烈,采样周期要短,但周期短会造成数据量大,加重传输和数据分析负担,经权衡,取电压、电流的采样周期为0.1s。温度是一个时间参数较长的物理量,可以放宽采样时间,这里取采样周期为1s。
3.1 MCU程序
为协调各个功能的实现,本文参考了多任务调度算法和时间片轮转算法。多任务调度算法,是按照实际要求将单片机要实现的功能划分成多个任务模块,并规定优先级别,由一个任务调度模块统一控制执行顺序。CPU的控制权按不同优先级分配给不同的任务模块,各个模块分别在自己的执行时间内访问CPU,形成微观上轮流执行,宏观上并发运行的多任务效果,如图3所示。
本系统中的几个任务对时间要求比较敏感,单纯使用多任务调度不能满足需求。结合时间片轮转算法,在任务分配时考虑时间限制,并将任务区分优先级。优先级高的任务先执行。为保证采样周期的稳定,A/D转换和启动温度转换的优先级较高,串口发送晚几十毫秒不会造成不良影响,所以优先级较低。程序简要流程如图4所示。
其中,任务调度模块包含各任务的时间信息,如A/D转换0.1s一次,启动温度检测1s一次,读温度则40ms一次,串口发送0.1s一次。若任务中包含多个子功能快,借鉴有限状态机(FSM)算法,每次执行一个子功能,直到本任务执行完成。
其中A/D转换比较简单,不再赘述。主要注意一点,启动A/D后要等待转换完成再读结果,否则读出的是将上次转换结果。
3.2 DS18B20程序
DS18B20的操作分为3个步骤:初始化、ROM命令和DS18B20功能命令。DS18B20的操作时序如图5所示。从时序图中可以得出,DS18B20对操作时序要求比较严格,否则将导致操作失败。
根据时序图所示,每读一位数据需要60us延时,为了延时精确,采用的方法是查看汇编语言,计算需要加入的空指令(NOP)个数。
根据时序要求编写代码后,有如下统计,启动温度转换时间约为2.5ms,读温度时间约为10.25ms,这些时间量都远小于一个时间片(20ms)的长度,符合要求。为达到12位精度,器件手册要求两次启动温度转换时间问隔不得低于750ms。温度采集1s一次可以实现。读取温度任务流程图如图6所示。
图6中,SenseNo是指DS18B20的序号,SENSE CNT为器件总数。读取不同DS18B20的方法是器件自身的ID,这个ID可以通过程序读出,但较为繁琐。为了减轻程序的负担,我们事先通过其他方式读出每个器件的ID,读温度时直接使用,简化了任务。
3.3 通信规约
系统每1s将采样的数据传递给上位机,为了保证传输可靠,制定如下通信规约:
共4组数据,电压(24Byte)、电流(24Byte)、温度1(6Byte)、温度2(6Byte)波特率取19200bps时,最长的一组传输时间约为12ms,小于一个时间片长度,满足要求。任务中,每次发送一组数据,算法类似读温度任务。
4 MATLAB程序设计
为了便于作图和数据分析,我们采用MATLAB作为上位机开发工具。主要任务包括与MCU串可通信;数据的尺度变换;并存同一界面上画出4条曲线。
4.1 串口通信及数据处理
从Matlab6.0版本开始,Mathworks公司在软件中增加了设备控制箱(instrument control toolbox),提供了对RS-232/RS-485通信标准的串口通信的正式支持。利用该工具箱的Serial类及instrcallback回调函数,能可靠地进行实时串行通信。
串口操作的顺序是(1)创建串口并没置属
性;(2)打开串口;(3)读写串口操作;(4)关闭并清除串口没备对象。
读取数据后,根据规约提取电乐、电流和两路温度数据。由于这些数据为原始的A/D转换数据,没有实际的物理意义,所以需要进行尺度变换。即将数据代表的物理意义表示出来。比如,电压检测,A/D参考电压为5V,那么对于10位ADC来说,转换结果N代表的电压值为:N*5/1024。尺度变换完成后存入缓冲区。
4.2 句柄绘图
系统需要显示3个物理量,电压、电流和温度。由于物理单位、采样周期不同,需要绘制3个坐标系分别显示。MATLAB中并没有提供这样的绘图函数,这里用到了MATLAB的句柄绘图功能。
MATLAB在创建每一个图形对象时,都为陔对象分配唯一的一个值,称其为图形对象句柄(Handie)。句柄是图形对象的唯一标识符,不同对象的句柄不可能重复和混淆。图形埘象包括根屏幕、窗口、坐标轴、线等。所谓的句柄作图就是利用底层绘图函数,通过对对象属性的设置(Handle Graphics)与操作实现绘图。
5 运行实例分析
使用该系统对一节铅酸蓄电池(12V)充电进行监控,电脑效果如图7所示:
图7中,横坐标为时间轴,每秒更新一次;纵坐标有三个,分别是左侧坐标电流和电压,右侧坐标温度;电流曲线为红色,电压为黑色,温度1为蓝色实线,温度2为蓝色虚线,4条曲线分别对应各自的坐标。
一般情况下,由于蓄电池内阻,电化学反应速度等因素影响,充电时的端电压要比静置时高,放电时要比静置时低。蓄电池使用时间越长内阻越高,对充放电电流也就越敏感。如图所示,充电电流的微小变化(0.1A左右)引起了端电压的剧烈波动(9V左右)。蓄电池端电压对充电电流及其敏感,说明蓄电池内阻很大。另外,对于一节性能较好的的铅酸蓄电池,静置时电压在11V~13V之间,而该电池静置端电压不到6V。能够推断该蓄电池已经严重损坏。
6 结束语
通过该系统,我们能够非常直观地监控蓄电池端电压和充放电电流的关系,以及温度的变化,有助于研究蓄电池充放电特性,更加科学、高效地管理蓄电池,为电动汽车电源管理提供依据。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0