基于SJA1000的CAN总线和RS-422串口通信接口转换卡的设计与实现

(整期优先)网络出版时间:2023-12-07
/ 2

基于SJA1000的CAN总线和RS-422串口通信接口转换卡的设计与实现

杜 鹏

(中国船舶集团公司第七一○研究所,湖北 宜昌 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串口通信模块

PCA82C250CAN控制器与总线之间的接口,直接与总线相连,具有双向发送接受的能力。

82C250CAN总线的接口部分也采用了一定的安全和抗干扰措施。82C250CANHCANL引脚通过一个限流电阻与总线相连起到一定的保护作用,CANHCANL与地之间并联一个30pF的小电容,起到滤除总线高频干扰和一定的防电磁辐射的能力。Rs引脚上的斜率电阻,可依据总线通信速率适当调整,范围在16~140kΩ。电路如图4

CAN收发电路

图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