随着网络技术的不断进步及工业控制器局域网技术的不断完善,工业上远程控制技术的应用也日趋广泛。本地机通过局域网控制现场机器进行各种操作是目前工业技术的应用热点[1]。鉴于电子化计算机联锁系统运行状况必须满足安全、可靠以及具有较强的实时性能和纠错能力的要求,所以,在本设计中,我们采用CAN总线代替RS-485总线,从而使车站信号系统能满足国家铁路技术各项指标。
1、CAN总线的技术规范
CAN总线技术规范的目的是使任意两个CAN总线的执行过程达到兼容,CAN技术规范版本2.0包括两部分内容:
1) CAN技术规范版本2.0A
CAN技术规范版本2.0A描述的是在CAN技术规范1.2中定义的CAN报文格式,其范围是定义传输层和与CAN有关的外层。在CAN技术规范版本2.0A中,CAN节点的分层结构如图1(a)所示。
由于串行通信进入了更多应用领域,因此要求各种应用领域通信功能报文标识符标注实现标准化。如果把原有的11个标识符定义的地址范围加以扩展,CAN总线的功能将更加完 2) CAN技术规范版本2.0B 善。因而,在引入了第二种报文格式(扩展格式)后,它可以提供由29位定义的更大地址范围,这就很好的解决了系统设计者在定义结构名称方面存在的问题,从而CAN技术规范版本2.0B也就相应的出现了。
CAN技术规范版本2.0B描述标准和扩展两种报文格式。在CAN技术规范版本2.0B中,CAN遵从OSI模型,按照OSI基准模型,CAN节点结构可以分为两层:数据链路层和物理层,具体如图1(b)所示。
2、CAN总线通信控制器SJA1000的简介
CAN总线通信控制器主要由实现CAN总线协议的电路和实现与微处理器接口的电路两部分组成,它是完成通信协议的主体。对于不同型号的CAN总线通信控制器,实现CAN总线协议部分电路的结构和功能大多相同,而与微处理器接口部分的电路结构和连接方式存在一些差异。这里主要以SJAl000为代表对CAN总线通信控制器的功能作一简单介绍。
SJAl000是一种独立CAN控制器。它是PHILIPS公司的PCA82C200CAN控制器的替代产品,SJAl000的内部逻辑结构和外部接口如图2所示。
在性能方面,除了SJAl000在软件和引脚上与它的前—款PCA82C200独立CAN控制器兼容之外,其还增加了很多新的功能。在具体应用中,SJAl000采用了两种工作方式:Basic CAN方式(PCA82C200兼容方式)和PeliCAN方式(扩展特性方式),这是SJAl000实现其兼容性的基础。SJAl000的两种工作方式是通过时钟分频寄存器中的CAN方式位来选择的,其中上电复位的默认工作方式是Basic CAN方式。在PeliCAN方式下,SJAl000有一个重新设计的含很多新功能的寄存器组。SJAl000包含PCA82C200中的所有位,同时增加了一些新的功能位。PeliCAN方式支持CAN2.0B协议规定的所有功能(29位的标识符)[2]。
3、SAJ1000与Atmega128单片机接口技术的实现
在SJA1000的主要特性介绍中,提到其支持多种微处理器接口,在具体设计中,我们主要研究了其与Atmega 128单片机的接口,设计了用于CAN通信的最小单片机系统(以下简称CAN通信系统)接口方式如图3所示。系统的通信部分主要有Atmega 128单片机、SJA1000CAN控制器、光电隔离部分和收发芯片组成。
TJA1050是PHILIPS公司生产的、用以替代82C250的高速CAN总线驱动器,是CAN控制器和物理总线之间的接口,可以提供向总线的差动发送能力和对CAN控制器的差动接收能力,其与ISO/DIS 11898标准完全兼容[3]。
光电隔离部分是为了增强CAN总线节点的抗干扰能力,不过,应该特别说明的一点是,光电耦合部分电路所采用的两个电源必须完全隔离,否则采用光电耦合也就失去了意义。电源的完全隔离采用小功率电源隔离模块实现。这部分虽然增加了接口电路的复杂性,但是却提高了节点的稳定性和安全性。
4、CAN结点通信软件的设计
SJA1000是I/O设备基于内存编址的微控制器,双设备独立操作通过像RAM一样的片内寄存器修正来实现。因此CAN总线通信部分编程主要就是对SJAl000的片内寄存器的读写操作。通信部分软件设计总体上可以划分为3大模块:总线初始化、数据帧的接收和发送、总线出错和异常处理。
4.1 CAN通信初始化
其主要是设置CAN的通信参数。需要初始化的寄存器有:总线定时寄存器0、总线定时寄存器1、输出控制寄存器、接收代码寄存器、接收屏蔽寄存器等等。需要注意的是,只有当控制寄存器中的复位要求位置为高时,这些寄存器才可被访问。因此,在对这些寄存器初始化前,必须确保系统进入了复位状态。在访问总线定时寄存器时,由于其内容决定波特率的数值,总线定时寄存器的初始化字必须依据系统中各CAN控制器的晶振频率而设定。初始化程序的流程图如图4所示[4]。
4.2 数据发送和接收程序
信息从CAN控制器发送到CAN总线是由CAN控制器自动完成的。发送程序只需把发送的信息帧送到CAN的发送缓冲区,启动发送命令即可。需要注意的是,发送中断不是由于发送完成而产生,而是由于发送缓冲区再次可用而产生的。
信息从CAN总线到CAN接收缓冲区是由CAN控制器自动完成的。接收程序只需从接收缓冲区读取要接收的信息即可。需要注意的是,读取接收缓存器(RBF0或 RBF1)的内容后,CPU必须通过置位释放接收缓存位来释放缓存器,使得另一个报文立即变得有效。数据发送和接收中断流程图如图5所示。
4.3 总线出错和异常处理
CAN总线作为一种优良的串行通信局域网络,它自身的查错和排错能力相当强大,因此在设计时必须充分利用这一点,提高通信系统的可靠性。CAN协议规定网络上的任何一个节点,根据其错误计数器中的数值,可能处于下列3种状态之一:“错误—激活”状态、“错误—认可”状态、“总线脱离”状态。处于前两种状态时节点都可以参与总线通信,而当处于“总线脱离”状态时节点既不发送,也不接收任何数据帧。同时CAN协议还对脱离总线节点重新参与总线通信有严格规定。
由于节点自身的原因或是其它原因,节点脱离总线,不参与通信,出现这种情况程序要做到及时发现,并且迅速做出有效处理,使之恢复参与总线通信。判断节点是否脱离总线同样既可通过查询方式,又可通过中断方式。而处于“总线脱离”状态的节点通信功能的恢复,必须严格依照CAN协议规定的流程做,否则节点将一直处于“总线脱离”状态。
5、总结
在车站信号系统中,用CAN总线代替RS-485总线,其数据通信具有突出的可靠性、实时性和灵活性,而且通信距离也有了很大的提高,这些都在现场运行中得到了证实,具有较强的实用价值。
本文作者创新点:用CAN总线代替车站信号系统所使用的RS-485总线,在软/硬件设计中均采用了模块化的方案,具有更高的灵活性和广泛的适用性;同时,用Atmega128单片机代替车站信号系统中所使用的Atmel8535单片机,使运行的速度也得到了提高。