摘 要:设计了一种适用于列车控制网络的CAN-485协议控制器来实现RS-485网络与CAN网络互联,对于研究CAN总线在列车控制网络中的应用具有一定的价值。
CAN总线是一种双向、串行、多节点网络,被广泛应用于各种分布式和实时控制系统中,被认为是一种很有发展前景的现场总线。
列车控制网络就是一种分布式计算机系统,它通过车辆总线来传递控制、监测及故障诊断等信息。由于列车控制网络对于安全性的要求极高,为排除单一故障影响系统功能的可能性,对于控制系统的重要部分要求采取冗余设计[1]。CAN总线是一种支持构成多主结构或冗余结构的现场总线,对于实现提供多机备份、提高系统可靠性、简化系统结构和降低安装难度具有十分积极的作用。这种特性正好符合了列车上对于监测控制系统布线精简的要求,非常适合应用于列车控制网络的设计。
与RS-485总线相比,CAN总线有其自身不可替代的优势。CAN总线发送、回收电平都需相互校验,而且每一帧都有响应位,再加上硬化的CRC校验,使得CAN总线在强噪声环境下较RS-485总线的安全性更高。CAN总线系统还具有良好的故障隔离能力,在任意时刻CAN_H的电平只能处于高电平和悬浮状态,而CAN_L端的电平则只能是低电平和悬浮状态。基于这种电平特性,当多个节点向总线发送数据时,不会呈现RS-485总线那样的低电平短路状态。此外,当总线节点在发生严重错误时能够及时关闭与总线的连接,即当有节点损坏时,不会导致整个总线停止工作,保证了列车通信的安全性,降低了故障风险。
但是在实际应用中,由于RS-485是一种相对经济的、传输速率高、传输距离远和宽共模范围的总线技术,仍广泛地应用于工业现场。由于列车上大多数的PLC或微控制器,特别是中小型PLC还不具备与CAN直接通信的能力,但一般的PLC或微控制器都具有RS-232/RS-485串行通信口,因此开发一款适用于列车通信接口的CAN-485协议控制器对于搭建CAN通信网络显得极为重要。控制网络示意图如图1所示。
1 硬件电路设计
传统的CAN-485协议控制器设计一般采用SJA1000和51单片机来实现,但是由于其硬件电路较为复杂,不利于系统集成化。本文介绍的协议控制器以PIC18F258为核心处理芯片,该芯片自带CAN收发接口,是一款高性能的PIC系列单片,有着先进的精简指令集构架、增强型内核、32级堆栈,片内具有Flash程序存储器、EEPROM数据存储器、自编程功能、在线调试器(ICD)和多种内部、外部中断源[2],应用十分广泛。与传统的设计方式不同,它并不需要通过访问外部设备的方式来对CAN模块进行控制,而只需对芯片内部的寄存器进行操作即可,降低了设计难度。
此外,为减少分立元件的数量,精简电路设计,系统采用了ZLG公司带隔离的485模块RSM485C和高速CAN隔离收发器CTM1050。RSM485C和CTM1050模块在内部集成了高速光耦合器6N137及DC隔离模块,并具有极高的电磁抗干扰性(EMI)。不仅如此,还在CAN总线和RS485总线上添加了差分电阻,使总线的抗干扰能力更强,保证了数据传输质量,非常适用于列车中的高电磁噪声环境。在数据操作方面,设计者只需要在程序编写过程中操作TXD和RXD两根线即可。这样的设计使电路达到最简,极大地提高了硬件电路的可靠性。硬件电路图如图2所示。
PIC18F258的RA、RB、RC均可作为I/O口进行使用,其中RB5/PGM、RB6/PGC、RB7/PGD可复用为ICSP下载端口,可直接通过连接下载器对程序进行烧写和在线调试。RB2/CANTX、RB3/CANRX复用为CAN数据收发线,直接与CAN收发器连接进行通信。
考虑到实际应用的需要和调试的便利性,为了表征系统的通信状况,在硬件设计中,将RA0、RA1、RA2这3个I/O口分别与2个LED指示灯和1个蜂鸣器相连,用于系统的故障监测。LED灯用于指示当前系统的通信状况,而蜂鸣器则用于报警,具体的监测逻辑可在程序中根据需要进行修改。
2 程序设计
程序的设计采用Microchip公司提供的开发工具Mplab,用C语言进行编写,并选用了Microchip公司的PICkit 3编程器/调试器对程序进行在线调试和下载。PICkit 3是一款支持硬件和软件开发的调试器系统,用于基于在线串行编程ICSP(In-Circuit Serial Programming)和增强型在线串行编程双线串行接口的Microchip PIC单片机(MCU)和dsPIC数字信号控制器DSC(Digital Signal Controller)[3]。
为了提高可靠性和可理解性,软件设计采用了模块结构,主要包括初始化函数、CAN接收中断服务程序、USART接收中断服务程序以及主程序。
2.1 初始化程序
初始化程序用于设置串口初始化、CAN模块通信波特率、工作方式、发送优先级、接收邮箱、发送邮箱及对应的接收过滤器和接收屏蔽器等。初始化程序框图如图3所示。
首先,对串口进行初始化设置。由于串口的初始化较为简单,主要是对中断优先级、波特率等进行设置,在此不作过多的叙述,串口初始化的程序如下所示:
void SCIInit()
{
SPBRG=51;
/*8 MHz晶振波特率为9 600=Fosc/16(X+1)*/
TXSTA=0x04;
/*选择异步高速方式传输8位数据*/
RCSTA=0x80;/*允许串口工作使能*/
TRISC=(TRISC|0x80)&0xBF;
/*设置RX/RC7为输入,TX/RC6为输出*/
PIE1=PIE1|0x20;/*允许串行通信接收中断使能*/
PIE1=PIE1|0x10;/*允许串行通信发送中断使能*/
IPR1bits.TXIP=0;
/*设置SCI发送中断为低优先级中断*/
IPR1bits.RCIP=0;
/*设置SCI接收中断为低优先级中断*/
RCSTAbits.CREN=1;/*允许串口接收数据*/
}
PIC18F258系列CAN模块有6种操作方式:配置方式、关闭方式、正常工作方式、监听方式、自检方式及错误识别方式。在实际应用时,首先使单片机进入配置方式,CAN模块的初始化也只能在配置模式下进行。配置完成后使单片机进入正常方式,也就是标准的工作方式。在该方式下,模块会主动地监控所有总线信息和产生应答位、错误帧等。这也是可以在CAN总线上发送信息的唯一方式。在系统的开发测试过程中,配置完CAN模块参数后,可以使其进入自检方式。自检方式允许信息不发到CAN总线,而在发送缓冲器和接收缓冲器之间内部进行信息发送与接收。在该方式下,ACK位被忽略,单片机可以接收来自自身的信息,就像来自其他节点一样[4]。
2.2 接收中断程序
考虑到更好地处理实时数据、实时响应控制命令,CAN报文和USART数据均采用中断控制的接收方法。PIC18系列单片机提供了可配置的高低中断优先级的方式,由于CAN通信的传输速率较快,为避免长时间占用总线,提高传输速率,可将CAN接收中断设置为高优先级中断。
中断函数的处理逻辑十分简单,若产生CAN接收中断,则将CAN通信数据传递给串口通信数据缓存区;反之,若产生串口接收中断,则将串口通信数据传递给CAN模块接收数据缓存区。经过这样的设计,可实现多节点网络的双向通信,提高了系统的互操作性。在对系统进行监控时,既可以及时获取各个节点的工作状态信息,又可以通过上位机对各节点进行网络配置和发送指令。
2.3 主函数
主函数的作用主要是对CAN模块、串口进行初始化,并不断地扫描CAN和串口的中断标志位。若经查询得知产生了CAN接收中断或串口接收中断,则在发送数据之前对接收到的数据进行相应的处理,通过对数据的一系列处理,使得在上位机上可以直观地了解到各节点的运行状况。程序的整体流程图如图4所示。
3 系统测试
在软硬件搭建完成后,对系统进行测试,系统的测试共分为两个部分。
第一部分是利用PIC单片机CAN模块的自检模式,实现单一CAN-485协议控制器的自通信,即并不要求CAN数据对外传输,而是将数据收回,发送到上位机端,用于检测单一模块的功能是否正常。
第二部分是组建RS-232→RS-485→CAN→CAN→RS-485→RS-232通信网络,用于实现双机通信,充分验证了CAN-485协议控制器的双向数据传输能力。测试结果如图5所示。
至此,系统的测试基本完成,若对于系统的应用有进一步的要求,只需对程序作相应的修改,并测试验证即可。由测试结果可知,CAN-485协议控制器的设计是可行的。
CAN总线技术的优越性,使其在列车控制网络方面的应用逐步得到推广。在测试过程中,借助串口调试助手来发送和接收数据,并将CAN模块设定为自检模式,验证了本协议控制器的可靠性。在正常的工作模式下,组建的多主结构实现了RS-485网络与CAN总线网络的互联。实践证明,本协议控制器的转换速率高、误码率低、抗干扰能力强、电路精简、占用空间小,非常适用于搭建列车控制网络系统。
参考文献
[1] 陈帅.CAN总线在列车通信网络系统中的应用研究[J].黑龙江科技信息,2009(12):67.
[2] 王义.CAN总线单片机PIC18F258在汽车电子控制单元中的应用[J].贵州师范大学(自然科学版),2010,28(1):117-120.
[3] PI18F258英文手册[Z].Microchip Technology Inc, 2003.
[4] 刘和平,刘钊,郑群英,等.PIC18Fxxx单片机程序设计及应用[M].北京:北京航空航天大学出版社,2005.