(中国船舶集团公司第七一○研究所,湖北 宜昌 443003)
摘 要:介绍了一种采用独立CAN总线控制器SJA1000和8位51单片机组成的CAN总线和串口通信的协议转换卡的设计与实现。阐述了CAN总线和RS-422串口的通信特点,板卡硬件电路的设计组成与功能,程序的设计思路与流程,及最终板卡的实现效果。
关键字:CAN总线;RS-422串口通信;51单片机;SJA1000
0引言
随着舰船信息化程度的提升,船用设备之间的数据交换越来越频繁,各个设备之间如果只是采用串口进行点对点的简单数据传输,通信线路必然连接复杂且维护难度高,无法满足实际的要求。鉴于此新装备的舰船往往采用通信、纠错能力更强,容量更大,结构较为简单的CAN总线进行船用设备之间的数据交换。但是由于各种成型的装备上没有设计CAN总线的通信口,如果再重新设计修改装备,成本太高,耗时耗力。为了满足舰船设备之间的通信要求,在不影响部队战斗力的条件下完成新老设备之间的过渡,需设计CAN和串口的通信协议的转换卡。
目前完成CAN总线和串行接口的协议转换的电路的设计方法主要有如下二种:①直接选用带有CAN控制器的单片机进行接口协议的转换。如P8xC91、AT89C51CC0x、DS89C400等。②用普通的单片机作为主控器,连接CAN控制器,处理协议的转换。单片机一般采用常见的51系列,CAN控制器有SJA1000、MCP2515等。
将CAN控制器与微处理器集成在一块芯片上,无疑会大大简化硬件电路的连接,且可靠性也有很大提高。与此同时此类单片机还增加了许多专用的部件,以P8Xc591为例,增加了A/D转换、脉宽调制输出(PMW)、IIC、看门狗等,很有利于电路的扩展。但是电路设计说明书要求采用独立的CAN控制器SJA1000,鉴于此,本板卡的方案采用SJA1000外接一个微控制器,用CPU控制其运行,完成信号的传输。
1 CAN总线和RS-422A串口介绍
1.1 CAN总线的特点
CAN总线采用一对平衡差分信号线进行半双工传送,在每个通信站点上,都需要平衡驱动器和差分接收器。CAN总线上的节点数主要取决与总线驱动电路,目前可达到110。CAN总线的技术特点如下:
(1)CAN为多主方式工作,网络上任一节点可在任意时刻主动向网络上其它节点发送信息,不分主从。
(2)CAN总线的报文标识符可将CAN上的节点分为不同的优先级,满足传输的实时性要求,通过对报文标识符的滤波即可实现点对点,一点对多点及全局广播等方式传播接受数据。
(3)CAN采用非破坏性总线仲裁技术。当多个节点向总线发送信息出现冲突时,优先级低的节点主动退出发送,而优先级高的可以不受影响继续传输数据,从而有效避免总线冲突。
(4)CAN的每帧信息都有CRC校验及其它检错方式,具有极高的检错效率。
通信距离远,速率高。通信介质可为双绞线,同轴电缆等。
1.2 RS-422A的接口标准
RS-422A采用平衡式传输:双端接受,双端发送。电气特性:逻辑“1”:0 - 5V,逻辑“0”为-5 - 0V,空闲时为逻辑“1”状态。通信特点如下:
差动发送、接受,共模抑制比高,抗干扰能力强。
(1)传输速率高,15m时可达10Mb/s
(2)传输速率远,90Kb/s时可达1200m
2 通信协议转换卡的硬件电路设计
本文设计的转换卡由四部分组成:主控制器51单片机和SJA1000构成的信号过滤、发送模块,由PCA82C250为主的CAN总线收发模块,由MAX232和MAX485组成的串口422通信模块和6N137高速光耦模块。
基本框图如图1:
图1 硬件电路基本框图
单片机的P0口和SJA1000的AD0-AD7相连,作为数据和地址复用总线。SJA1000的MODE接高电平,选择Intel二分频模式。/WR,/RD,ALE分别与对应脚相连。片选信号与P2.7连接,当P2.7为0时,单片机选中SJA1000,可对其进行读写操作。P2.4口对其输出复位信号,/INT是中断信号的输出端,与单片机的INT1连接,单片机通过中断的方式访问SJA1000。
单片机与SJA1000和CAN总线与串口之间都采用高速光耦6N137进行电气隔离,板卡采用双电源供电,这部分电路虽然增加了电路的复杂性,但是提高了电路的抗干扰能力。
电路如图2:
图2 信号过滤、发送模块和光电隔离模块
串口模块采用MAX232和MAX488的组合完成信号电平的转换。
RS-422A是由RS-232C发展而来,定义了一种平衡接口,解决了RS-232C的通信距离短,通信速率不高的缺点。TTL/CMOS和RS-232C的信号电平在极性和幅值俩方面都不同。TTL/CMOS电平采用的是正逻辑,0~5V;RS-232C采用的是负逻辑,3~15V。这里用MAX232完成计算机串口和TTL/CMOS电平的转换。MAX488主要是用来完成RS-232C和RS-422A的信号转换。
电路如图3:
图3 RS-422串口通信模块
PCA82C250是CAN控制器与总线之间的接口,直接与总线相连,具有双向发送接受的能力。
82C250与CAN总线的接口部分也采用了一定的安全和抗干扰措施。82C250的CANH和CANL引脚通过一个限流电阻与总线相连起到一定的保护作用,CANH和CANL与地之间并联一个30pF的小电容,起到滤除总线高频干扰和一定的防电磁辐射的能力。Rs引脚上的斜率电阻,可依据总线通信速率适当调整,范围在16~140kΩ。电路如图4。
图4 CANZ总线接收模块
3系统软件设计思路
由于CAN总线的信号为1秒更新一次,串口的的信号需要经过一定的编码再发送出去,且一次发送、接受的信号数据量较大。为了提高通信的速率和可靠性,CAN总线数据采用中断的方式接受,开辟内存空间采用FIFO机制进行管理。
程序分为六部分:主监控程序,SJA1000初始化程序,串口初始化程序,CAN总线数据中断接受程序,串口数据编码程序,串口发送程序。
为了保证通信的实时性、可靠性,程序全部采用汇编语言编写。
系统上电后首先对SJA1000和串口进行初始化,确定CAN总线的工作主频、波特率、输出特性,确定串口的工作模式,通信速率等。
主监控程序循环检测数据缓冲区的指针大小,当判断存在有效数据时,就调用相应的程序来进行处理。
单片机采用FIFO机制管理内部RAM缓冲区,分别开辟了两块数据缓冲区给接受的CAN数据和要发送的串口数据。FIFO共有俩个指针:接受指针和发送指针,当俩个指针不等时即表明FIFO中存在有效数据需要处理,每次发送与接收完都要对指针进行调整,以利于主监控程序的调用。
CAN帧的接受采用中断方式。由于总线上的各种信号很多,而对于消磁的设备只需要取其中的舰船航向和纵横摇信号,通过SJA1000的验收代码寄存器ACR和验收屏蔽寄存器AMR就可以直接过滤出有用的信号。SJA1000从总线读取数据完成后,给单片机发送中断信号。单片机在完成中断类型判断后,需检验相应的标示位,看信号是否有效,若有效需读取SJA1000的接受缓冲区并保存在单片机的数据缓冲区。
调用串口编码程序,从CAN数据缓冲区取出所需要的数据字节,对其按要求编码并保存至串口缓冲区,最后调用串口发送程序,从串口发出。软件流程图如下:
图5 软件流程图
4 结束语
经过实际的现场测试与实验,协议的转换板能达到通信要求,故障率较低,通信的速度优良,抗干扰性较好。
参考文献
[1] 饶运涛,邹继军,王进宏,等.现场总线CAN原理与应用技术[M].北京:北京航空航天出版社(第二版)
[2] 郭 惠,解书钢. Pretel 99SE常用功能与应用[M].北京:电子工业出版社,2008
[3] 李 强.51系列单片机应用软件编程技术[M].北京:北京航空航天出版社, 2009.4