基于FPGA的VRLA蓄电池测试系统设计
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, //发送命令数据
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断点数据
4、 结语
基于FPGA的VRLA蓄电池测试系统充分利用固件编程调试灵活,开发成本低,片上资源丰富等优势,能方便的实现多组输入模拟量的扩展。可实现对单体电压0~15V、整组电压0~500V,电压测量精度:±0.5%;温度测量范围:-20℃~+80℃;内阻测试范围:0~99mΩ等高精度的参数测量。
- 用大电流LDO为FPGA供电需要低噪声、低压差和快速瞬态响应(08-17)
- 基于FPGA 的谐波电压源离散域建模与仿真(01-30)
- 降低从中间总线电压直接为低电压处理器和FPGA供电的风险(10-12)
- FPGA和功能强大的DSP的运动控制卡设计(03-27)
- DE0-Nano-SoC 套件 / Atlas-SoC 套件(10-30)
- Xilinx Virtex UltraScale 开发平台(06-12)