微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > FPGA的VRLA蓄电池测试系统设计

FPGA的VRLA蓄电池测试系统设计

时间:07-29 来源:互联网 点击:
1、 引言   

阀控式铅酸蓄电池(VRLA)在实际使用中会出现电池壳变形、电解液渗漏、容量不足、电池端电压不均匀等现象,实践证明,整组电池的容量是以状况最差的那块电池的容量值为准,而不是以平均值或额定值(初始值)为准,当电池的实际容量下降到其本身额定容量的90% 以下时,电池便进入衰退期,当电池容量下降到原来的80%以下时,电池便进入急剧的衰退状况,衰退期很短,此时电池组已存在极大的事故隐患,所以对VRLA蓄电池的定时检测和在线监测是非常重要和必须的。  

2、 硬件电路设计  

VRLA蓄电池在线监测系统主要功能是对直流电源VRLA蓄电池组中每一个VRLA蓄电池的端电压进行巡检,其工作方式分为实时监测和定时监测两类,定时监测的时间间隔由用户根据实际需要设定,用户可随时切换实时与定时监测两种工作模式,通过监视器显示电压、温度、内阻曲线实现对单个及整体VRLA蓄电池的监控操作。可完成图表打印,图形保存,曲线显示,历史数据回放多种管理功能,并缺省设置越限报警电压及温度范围限,如有异常情况立即发出报警信号。  

2.1 测试系统硬件结构  
  
  
图1 整机系统框图  

本例FPGA开发系统采用Xilinx FPGA控制模块Spartan-II(XC2S200)、差动式多路模拟开关(包括模拟开关CD4051及光耦合器TLP181)、A/D转换AD0809芯片、Philips公司PDIUSBD12通用串行接口芯片、Winbond公司W29C020C并口Flash存储器及SRAM W24257、2×4键盘阵列、越限报警器件等构成。理想的VRLA蓄电池测试系统,通过实时监测VRLA蓄电池组内单节VRLA蓄电池的电压,内阻和温度能够有效的识别单节VRLA蓄电池的性能差异和安全临界点,有效控制单节VRLA蓄电池的过充,过放和热失控,实现均衡放电和均衡充电的理想功能;同时准确计算出单个VRLA蓄电池电量,根据充放电曲线,建立最佳充放电方法,并与控制器智能化配合,确定VRLA蓄电池负载特性参数选择,延长VRLA蓄电池使用寿命。  

2.2 差动式多路模拟开关设计  

数据采集电路设计采用差动式多路模拟开关可以避免常规双刀式继电器模拟开关对大型VRLA蓄电池组测量时需要的继电器太多,仪器的体积过大,功耗、成本及故障率高等众多缺点,如图示差动式模拟开关工作电源由所测VRLA蓄电池组提供,并采用光耦合器隔离采样开关与低压系统,以解决VRLA蓄电池组的电池数目多,电压高,难以测量等问题。差动式模拟开关工作过程为:FPGA控制器通过控制端CA,CB来同时控制U1,U2八选一模拟开关,如果控制端同时选中输入端B1,则模拟开关U1输出端OUT1输出VRLA蓄电池B1的正端电压,而模拟开关U2的输出端OUT2输出则是B1的负端电压,如果将OUT2接到测量系统的地电平,OUT1接到测量系统信号输入端,则便可测得VRLA蓄电池B1的各项数据值。同理,只要控制CA,CB就可完成对B1~B4各个单体电池数据的量测,继而得出整组电池的各项参数数据。  

  
图2 差动式模拟开关电路原理图  

3、 软件设计  

系统软件采用模块化设计,底层固件程序由VHDL语言编程的若干子程序块组成,包括主 控制程序,数据采集子程序,超限判断及报警子程序,USB端点通信子程序,中断处理子程序;上位机应用程序在Visual Basic环境下开发,可完成图表打印,图形保存,曲线显示,历史数据回放等管理功能。  

3.1 主控制程序  

用于完成FPGA及外部模块的上电自检和初始化,初始化flash存储器,SRAM工作区,A/D转换器及差动模拟采样通道设置、USB端口及周边接口的上电复位。初始化将对初始状态给予设定,包括定时器、中断器的开放等。其中外部中断用于响应键盘信号及USB口中断响应与上位机通信等操作。  

3.2 USB控制端点中断服务程序流程图  

USB控制端点中断服务程序功能是在USB通信口发出中断响应后把当前选定的单节蓄电池的电压、温度等数据存入相应数据区,为系统显示、报警、通信等功能提供原始数据,之后根据用户设置的蓄电池组数、每组蓄电池节数及设定电压、温度值,将原始数据作相应修正即可在上位机应用程序处显示每组蓄电池的单节电池电压及整体蓄电池的电压、温度、内阻曲线。  

  
图3 USB控制端点中断服务程序流程图  

3.3 USB控制端点通信建立初始化程序  

参考Philips公司PDIUSBD12数据手册,PDIUSBD12的命令字分为三种:初始化命令字、数据流命令字和通用命令字,FPGA先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用相关函数即可。FPGA内部USB控制端点与PDIUSBD12通信初始化程序清单:  
  
constant D12_CONNECT_DATA: REG8x8:= //配置命令和数据  
( D12_COMMAND_SET_DMA, //设置DMA命令  
D12_DMA,&nbs p; //发送命令数据  
D12_COMMAND_SET_MODE, //发送设置模式命令  
D12_MODE_CONFIG, //发送模式设置   
D12_MODE_CLOCK_div, //发送分频率模式  
others => X"00" );   
constant D12_CONNECT_DATA_TYPE: REG8x1:= //命令、数据执行顺序  
( D12_COMMAND,  
D12_DATA, //发送数据  
D12_COMMAND,  
D12_DATA, //发送数据     
others => '0' );   
constant D12_CONNECT_DATA_LENGTH: INTEGER8 := 5; //配置参数总长度  
constant D12_EP0_ACK_DATA: REG8x8:= //配置0断点命令  
( D12_COMMAND_SEL_EP0_OUT,; //发送0断点选择  
D12_COMMAND_ACK_SETUP, //确认建立  
D12_COMMAND_CLEAR_EP_BUFFER, //清寄存器  
D12_COMMAND_SEL_EP0_IN, //接收0断点选择  
D12_COMMAND_ACK_SETUP, //确认建立   
others => X"00" );   
constant D12_EP0_ACK_DATA_LENGTH: INTEGER8 := 5; //配置0断点总长度  
constant ep0_ack_data: REG8x8 := D12_EP0_ACK_DATA; //发送0断点数据  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top