关键词: 智能接口系统 蓄电池组 EPP-CAN MCP2510
1 引言
蓄电池组是由一定数量的单体电池串联组成的,某个单体蓄电池的故障就会导致整个蓄电池组的故障和损坏。因此,需要对蓄电池充放电过程进行控制,并在线实时检测蓄电池组充放电过程中各单体电池的充放电电压,电流,电池体温度等参数。及时找出损坏或性能显著降低的单体蓄电池,对于延长蓄电池的使用寿命,提高直流供电系统的可靠性至关重要。鉴于上述情况,研制了蓄电池组智能化成检测系统,使用CAN总线这种多主节点、高可靠性以及易于扩充的总线系统实现每个单体电池检测模块与主控制器之间的数据通信。
2 设计思想及方案
由于单体电池负载性能测试过程所需时间较长,且同时检测的节点模块数量较多,每个模块的检测数据包括电压、电流、温度、报警、中断等,普通的主控制器由于存储空间有限,很难将所有这些数据都完整的保存下来,故希望能够将检测的数据保存于存储容量充足的PC机中,利用
(1) 是直接利用PC机主板的总线,如PCI,ISA,USB等将CAN控制器作为CPU的一个外设;
(2) 利用PC机串行口RS-232实现和单片机的通信,再由单片机与CAN控制器通信;
(3)利用PC机提供的并行口(打印机接口)实现和CAN控制器的通信。前两种方案存在着一些缺陷,如结构复杂,价格昂贵,应用不方便或传输速率慢等。
综合以上考虑,本系统选用计算机上普遍具备的并行打印机端口,利用并口的EPP模式与CAN控制器实现数据通信。因下位机检测模块中所使用的CAN控制器为Microchip公司的带有SPI接口的独立CAN控制器MCP2510,故EPP-CAN接口卡中的CAN控制器也采用MCP2510,这需要使上位机应用软件模拟SPI总线的时序,通过EPP来控制MCP2510,实现对MCP2510的寄存器初始化,总线数据的发送和接收等。使用该模式的最大特点:一是结构简单,利用计算机都具有的并口构建总线,只需要一片独立的CAN控制器实现协议转换,一片总线驱动控制芯片PCA82C250,外加一片锁存器实现时序控制;二是软件灵活性强,这种方案下智能接口卡的控制,数据传输都由计算机并口总线控制实现,而计算机并口的驱动控制非常简单成熟,驱动软件的改变可以适应不同的通讯模式,同时也方便了软件的二次开发;三是无需独立的微控制器和电源模块,控制信号可由构建的并行总线完成,而电源的供电方案,由于使用芯片少,功耗低,完全可从下位机电路上获得;四是体积小巧,应用灵活。
3 控制系统整体结构及工作原理
系统由上位机,EPP-CAN智能接口卡,n个单体电池参数采集节点单元构成(n可根据蓄电池组中单体电池个数及同时充放电的蓄电池组个数共同决定。本系统检测的蓄电池组输出电压为48V,单体电池标准电压为1.70~2.20V,为控制节点数不超过总线收发器物理信号的驱动能力限制,PC机最多可同时接收4组蓄电池组的数据参数)。系统的整体结构框图如图1所示:
图1 系统整体结构框图
单体电池数据采集节点由Philips公司单片机P89LPC938,Microchip公司CAN总线控制器MCP2510,CAN总线收发器PCA82C250,ON公司温度传感器LM75,金升阳B0505LS,DC/DC电源隔离模块等器件组成。单片机P89LPC938将采集到的电压、温度信号通过处理之后,控制MCP2510将需要传送的数据以CAN总线协议的格式发送给PCA82C250,经它驱动放大后将数据发送到CAN总线网络中。PC机利用应用软件模拟SPI总线时序驱动EPP-CAN智能接口卡,采用轮询的方式依次要求每一个单体电池检测节点传送数据给上位机,然后上位机再将所有数据保存到数据库中,方便用户的查询,并就查询结果进行数据曲线的显示。上位机对检测的数据进行分析后,可以控制主控制单元对蓄电池的充放电工艺流程进行在线的配置,实现最佳的充电效果(关于主控制单元的软硬件设计在本文中将不作详细介绍)。
4 硬件设计
4.1 节点单元硬件设计
&
nbsp; 本系统中的所有单体电池采集节点都只用对电池的电压和温度值进行数据采集,所有节点电路相同。节点单元结构框图如图2所示。蓄电池充放电过程中,单体电池的电压信号经过滤波,整流后经过运算放大器TLC2262进入单片机内的模拟采样通道,经过A/D转换后,再由单片机进行精度补偿和线性补偿;LM75为2线串行温度传感器和监视器,在环境温度超过用户编程设置值时通知单片机,其工作范围为+55℃至+125℃,温度感应精度为0.5℃,单片机可通过I2C总线以查询方式读取其寄存器中的数据,从而得到单体电池的温度值。在采集完电池的电压,温度值之后,单片机通过SPI接口将数据写入到CAN控制器MCP2510,MCP2510将要发送的数据转换成CAN总线协议的数据帧,数据帧通过光电隔离器6N137将数据传送给CAN总线收发器PCA82C250,它通过将信号进行驱动放大后将总线的物理信号发送到CAN总线上,由EPP-CAN智能接口卡接收后将数据传送给上位机。点击看原图 4.2 EPP-CAN智能接口卡硬件设计 MCP2510是Microchip公
司的一款CAN协议控制器,完全支持CAN总线V2.0A/B技术规范,能够发送和接收标准和扩展报文。它还同时具备验收过滤以及报文管理功能。该器件包含3个发送缓冲器和两个接受缓冲器,减少了单片机的管理负担。单片机的通讯是通过行业标准串行外设接口SPI来实现的,其数据传输速率高达5Mbps。CAN总线上可编程位传输速率最高可达1Mbps。
PC机中,每个并行口占用3个I/O端口地址,分别对应着各自的数据寄存器,控制寄存器和状态寄存器。数据寄存器地址为378H,用来暂存传送的数据,在双向通信环境中,包含读入和读出两个寄存器的双缓冲寄存器,对应AD0~AD7双向数据/地址端口,输入操作时使用输入寄存器,输出操作时使用输出寄存器;状态口寄存器地址为379H,它提供线路和外部设备的当前状态;控制口寄存器地址为37AH,它提供传送数据的时序控制信号。
利用三态输出锁存器74HC373作为PC机EPP并行口与MCP2510之间的接口,利用并行口的控制信号来控制锁存使能信号LE和输出使能信号OE,实现计算机并行数据与MCP2510中SPI总线之间的数据交换。
关键问题要通过系统调用主板上EPP芯片里的微程序在并行口的nWrite, nAddStb, nDataStb,nReset等引脚产生相应的读写周期时序,使得对寄存器的读写产生互锁信号。当nWrite信号为低电平时,数据由EPP向SI引脚逐位写出,当nWrite信号为高电平时,数据由EPP从SO逐位读入;当nDataStb引脚为高电平时,Q0~Q7的数据随着D0~D7的变化而变化,当nDataStb引脚为低电平时,锁存使能信号有效,将D段的数据锁存入Q端,通过对Q端的数据的改变,实现对MCP2510中SPI信号的模拟。其具体的硬件电路如图3所示。
点击看原图 图3 EPP-CAN智能接口卡硬件电路图 5 Delphi应用软件设计 系统所使用的应用软件由面向对象的高级语言Delphi实现。利用Delphi语言实现计算机并口的控制,数据的保存和查询,数据曲线的绘制,报警及报表打印等功能。其中对于计算机并口的控制是整个系统的关键。 但在Win2000/XP中,由于系统加强了对硬件设备的保护,如在程序中直接用IN与OUT指令访问并口,则会引发系统的非法操作;而并口访问又不像串口,直接可以使用Windows
在Win98中对并口的编程比较简单,通过在Delphi中内嵌汇编,使用IN与OUT指令访问与并口相对应的端口,设置相对应端口的值中的位就可以控制相应并口引脚的高低电平值。例如:要将计算机并口1的第2引脚先置高再置低,汇编语言可以这样写:
mov dx,0x378 ;设置端口地址
mov al,1 ;将带写入的位0的值写入al中
out dx,al ;将值送到相应端口
mov al,0
out dx,al
API函数,因而就必须使用驱动程序。为了减少开发的复杂程度,在应用中取消了对端口的访问屏蔽,这样应用程序可以在任何Windows平台下对并行端口操作。
可以在Delphi中编写底层的两个函数O
Procedure Outb (Y: Integer; DPort: Integer);
asm
mov dx,DPort {设置端口地址}
mov al,Y
out dx al {从端口地址Port输出数据al}
end;
Function Inb ( DPort: Integer) : Byte;
asm
mov dx, DPort {设置端口地址}
in al, dx {从端口中读入数据到al }
end;
以这两个函数为基础组成WrB_2510和RdB_2510程序(WrB_2510和RdB_2510程序如下),并在其中按照MCP2510中SPI指令的时序添加适当的延时指令,即可实现MCP2510的所有指令集,这些指令包括:复位,读,写,请求发送,状态读和位修改。使用这些指令,即可完成PC机对MCP2510的初始化、发送命令给下位机、接受来自下位机的数据等。PC机通过接口卡实现对所有节点的控制,并将所有单体电池的电压和温度数据保存入数据库中,操作
Procedure
WrB_2510(si_2510:Byte);{由PC机写一个字节数据至MCP2510的程序}
var
i:Integer;
temp:Byte;
begin
for i:=1 to 8 do {逐次写出一个字节的8位}
begin
temp:= si_2510 and byte($80);
{每次取欲发送数据的最高位}
data:=data or (temp shr 5);
{将发送的位赋给SI对应的锁存器端口}
OutEn;
{置nWrite为低,使74HC373输出使能}
sck_low; {将SCK置为低电平}
Outb(data, PortD);{发送数据至数据端口}
sck_high; {将SCK置为高电平}
si_2510:= data shl 1;
{欲发送数据左移一位,准备发送下一位}
end;
end;
Procedure RdB_2510;
{读MCP2510的一个字节数据至PC机的程序}
var
i:Integer;
temp, so_2510:Byte;
begin
for i:=1 to 8 do {逐次读入一个字节的8位}
begin
OutEn;
{置nWrite为低,使74HC373输出使能}
sck_low; {将SCK置为低电平}
so_2510:=so_2510 shl 1;
{so_2510中装入来自MCP2510的一个字节数据}
sck_high; {将SCK置为高电平}
OutDis;
{置nWrite为高,使74HC373读入使能}
temp:=Inb(PortD) and byte($80);
{读入数据得最高位对应so引脚}
so_2510:=so_2510 or (temp shr 7);{每读入一位放入so_2510的最低位}
end;
end;
6 结束语
本系统借助智能接口卡实现了蓄电池分布式检测节点与PC机的相互通讯。蓄电池检测节点的数据传输实时性好,抗干扰能力强且易于扩充,能提高直流供电系统的可靠性。智能接口卡结构简单,成本低廉,工作可靠,实现了大量参数在PC机中的保存和处理。目前,该系统的软硬件开发已经完成,并成功地应用于相关企业。