张建文, 冯 林, 李百余
(东华理工大学,江西抚州 344000)
CAN总线通信接口设计
张建文, 冯 林, 李百余
(东华理工大学,江西抚州 344000)
提出了一种用单片机 STC89C52及 SJA1O00总线控制器组成CAN总线智能节点的设计方案,给出了硬件电路,并详细介绍了 SJA1000初始化、接收及发送数据程序的框图及程序设计。设计中程序均已通过调试,介绍的设计方法易于掌握且具有较强的灵活性和通用性,方便使用者学习和掌握。
CAN总线;STC89C52单片机;SJA1O000控制器;PCA82C25;通信
CAN-bus(Controller Area Net work),即控制器局域网,是国际上应用最广泛的现场总线之一。CAN-bus是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达到 10 km时,CAN-bus仍可提供高达 5 kbps的数据传输速率。作为一种技术先进、可靠性高、功能完善、成本合理的远程网络通讯控制方式,CAN-bus已被广泛应用到汽车电子、自动控制、智能大厦、电力系统、安全监控等各领域的自动化控制系统中。
本设计是基于 SJA1000的 CAN总线通信模块的设计,可以完成在 CAN总线上的信息通信,笔者对CAN总线节点的硬件和软件设计作了详细的介绍。
CAN总线系统节点硬件电路如图 1所示,从图中可以看出,电路主要由 MAX232、微控制器89C52、独立 CAN通信控制器 SJA1000、CAN总线驱动器 PCA82C250、高速光电耦合器 6N137、8位拔动开关和 2个发送按键构成。当有两个或多个CAN节点时,可构成一个 CAN互联网络,网络中的任一节点均可向其他节点发送报文,网络中的任一节点也可向其他节点发送远程请求帧,请求对方发送本节点所需的报文。为了方便测试,将已接收的数据通过 RS232串口发送到计算机,通过计算机调试软件进行测试。串口与单片机接线电路采用的常规接线法,串口初始化程序、串口发送程序在此也不做介绍。
本系统通信方式为:按 K1键启动一次点到点通信,按指定 I D号向指定节点发送一帧报文,按K2键启动一次请求数据操作,本节点可获得指定I
D节点的数据。用户通过 8位开关设置节点 I D号,I D号由 P1口读入。输入的 8位 I D值分两部分:低 4位为本节点自身的 I D值;高 4位为点到点通信时接收节点的 I D值,可见,总线上最多可设置16个不同 I D值的节点 (饶运涛,2003)。
本文 CAN总线智能节点的软件程序设计主要包括:主程序、CAN节点初始化、数据的发送、数据的接收、RS232数据发送等程序(邹继军等,2001)。
主程序设置为一个死循环,循环中要不停地检测发送按键 K1和 K2是否按下,调用接收子程序,查询接收缓冲器中是否有数据。主程序流程如图 2所示。
主程序如下:
图1 CAN总线通信接口电路Fig.1 Communication interface circuit of CAN bus
图2 主程序流程图Fig.2 The fl ow chart ofmain program
对 SJA1000进行初始化实际上就是通过单片机向其片内的各个寄存器写入控制字的过程。本设计采用了Basic CAN模式。SJA1000的初始化只有在复位模式下可以进行。初始化主要包括时钟分频寄存器设置、验收屏蔽寄存器设置、验收代码寄存器设置、总线定时寄存器设置和输出模式寄存器设置等。初始化设置完成以后,SJA1000就可以进入工作状态,进行正常的通讯工作(韩党群,2003)。本设计的初始化时,要注意验收代码寄存器和验收屏蔽寄存器的设置。其流程图如图3所示。初始化程序如下:
图3 CAN控制器初始化流程图Fig.3 The flow chart of CAN controller initializati on
发送程序负责节点报文的发送,发送程序分发送数据帧和远程帧两种,两种程序基本相同,只是远程帧无数据域。发送过程可由 CAN控制段的查询状态标志位控制。通过查询 CAN控制器的状态寄存器,得到发送缓冲器的状态,当发送缓冲器可以被访问时,微处理器将要发送的数据从其数据存储区中取出,与主机的 I D地址一起组成信息帧,按CAN报文结构发送到发送缓冲器中,并置位发送请求位,启动发送命令,最后由硬件完成数据的发送(郑勇芸等,2004)。发送的标识码 I D需做一些运算,使报文能通过接收节点验收滤波器的测试,CAN发送程序流程图如图 4所示。
图4 CAN发送程序流程图Fig.4 The fl ow chart of transm itting data program
发送数据帧程序如下:
SJA1000的报文接收可采用中断接收方式或查询接收方式。在通讯实时性要求不高的情况下可以用查询方式接收,两种接收方式编程的思路基本相同。本程序采用查询接收方式。CPU在检测到接收缓冲器中存在有效报文后,如接收到的是数据帧,则将接收缓冲器中的内容读入 CPU的数据存储区,并将接收到的数据通过串口在 PC机串口调试助手上显示出来;如接收到的是远程请求帧,则调用发送程序,发送对方请求的数据 (宋清昆,2009)。接收程序流程图如图 5所示。
接收程序如下:
图5 CAN接收程序流程图Fig.5 The flow chart of receiving data program
本文详细地给出了基于单片机实现 CAN总线通信的软硬件的设计,同时在节点设计中加入了基于 RS-232总线的数据通信功能。设计中程序都已经通过调试,调试结果证实了该方案的实用性和可靠性。CAN总线是一种功能强大、应用广泛的现场总线,它的优异性能使得其越来越受到关注,被认为是最有前途的现场总线通信技术。
韩党群.2003.CAN控制器 SJA1000及其应用[J].电子技术应用,29(1):66-69.
饶运涛.2003.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社:224-227.
宋清昆,蒋继成.2009.基于AT89C52单片机CAN总线节点的设计[J].自动化技术与应用,28(5):55-58.
郑勇芸,饶运涛,邹继军,等.2004.现场总线 CAN通信中多线程的应用[J].东华理工学院学报,27(2):196-200.
邹继军,饶运涛.2001.基于 SJA1000的 CAN总线智能节点设计[J].单片机与嵌入式系统应用,(12):26-31.
Design of Communication I nterface Based on CAN
ZHANG Jian-wen, FENGLin, L IBai-yu
(East China Institute of Technology,Fuzhou,JX 344000,China)
The communication based on the CAN bus has better merits in reliability and flexibility compared to general serial bus and the infor mation based on the CAN bus can be transmitted ti mely.This paper introduces one design method of the CAN intelligent node which use the STC89C52 and CAN controller SJA 1 000 as its core,it also gives the designing chart of hardware.The flow chart of soft ware and the program of initialization,transmitting and receiving are described in detail.The method of design in this paper is easy to grasp and is flexibility and versatility,itwill help readers to learn and master the application about the CAN bus.
CAN bus;STC89C52;SJA1000 controller;PCA82C25;communication
TP273
A
1674-3504(2010)03-293-04
10.3969/j.issn.1674-3504.2010.03.14
2010-05-01
张建文 (1966—),男,副教授,主要从事电子技术的教学与研究工作。