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