林建宇
(上海电力大学 电子与信息工程学院, 上海 200090)
智能车系统是利用传感器技术与通信技术综合集成的控制系统。它是集车辆工程技术和通信技术于一体的综合技术,是车辆工程领域发展的趋势。CAN(Controller Area Network)总线[1]是一种支持分布式和实时控制的串行通信网络。常用的CAN汽车总线是实现汽车数字网络化的基础,主要应用于自动控制系统和汽车网络的通信,具备通信实时性和可靠性等优点。CAN总线控制器SJA1000能够完成通信系统的物理层与数据链路层的功能。CAN总线采用载波监听多路访问的方式对媒体进行访问,类似于以太网的媒体访问机制;使用CANH 和CANL传输数据信号,采用差分传输方式,具备较强的抗干扰能力。CAN总线控制器连接总线收发器模块和隔离电路模块就可以建立一个CAN总线通信节点。
基于CAN总线通信系统的硬件设计主要包括单片机控制模块、CAN总线控制器模块、CAN总线收发器隔离电路模块和CAN收发器TJA1050模块。基于CAN 总线通信系统总体工作原理框图如图1所示。
图1 基于CAN 总线通信系统的工作原理示意
汽车上的控制器都是由电子装置控制的,为了将各个电路单元统一管理,实现车内速度、温度等状态信息通信的共享,在汽车通信网络内部利用CAN 总线进行数据通信。基于CAN总线的数据传输通信具有实时性,在汽车CAN通信网络内部,任意一个节点都可以在任意时刻主动向网络上的其他节点发送信息,可以多主方式工作。
CAN总线的通信协议分为应用层、对象层、传输层和物理层。传输层是CAN通信协议的核心,将接收到的报文传输给对象层,并接受来自对象层的报文,主要负责故障界定、仲裁、应答等; 对象层的功能是报文滤波和报文处理; 物理层的作用是信号电平和位表示,必须支持 CAN 总线中隐性位和显性位的状态特征。报文传输由数据帧、远程帧、错误帧和过载帧4个不同的帧类型来表示。数据帧和远程帧分别通过帧间空间与其他各帧分开。数据帧由7个不同的位场组成,其中数据场是由数据帧中的待发送数据组成,可以为 0~8个字节,每个字节包含8个位[1]。CAN总线的通信协议采用短帧格式,以实现汽车通信网络中工作状态与实时控制命令相符的要求。
CAN总线传输信息的方式为:采用高低电平表示字符编码,采用串行数据传输,以1 Mb/s的波特率在双绞线或光缆上通信。CAN总线的通信协议采用CRC码检验并提供对应的错误处理功能,以实现数据通信的可靠性。在CAN总线通信系统中,通常只设置单个主节点,完成主节点向从节点发送配置数据、主节点向从节点请求当前工作状态以及数据管理等功能。从节点根据工业应用的需要完成不同的功能,如汽车状态数据的采集、设备的控制等,并实现发送数据和接收数据等通信功能。
CAN总线接口电路主要由微控制器AT89C51,CAN总线控制器SJA1000芯片、CAN 总线收发器TJA1050和高速光电耦合器6N137 器件等组成。SJA1000芯片的主要引脚及其功能[2]如表1所示。
表1 SJA1000芯片的主要引脚及其功能
在CAN总线接口电路设计中,单片机AT89C51是CAN节点的核心控制模块,主要用于处理智能小车行驶速度、温度等状态数据的通信。其中单片机AT89C51 P3口作为AT89C51的一些特殊功能口。P3.6 WR为低电平有效,外部数据存储器写选通,P3.7 RD为低电平有效,外部数据存储器读选通。P0~P2口是8位双向I/O口,连接CAN总线控制器SJA1000芯片的数据接口AD0~AD7,它输入信号给通信模块,并发送到CAN总线上。接收过程则反之,通过通信模块接收CAN 总线上的数据,并通过这些数据控制输出端口[3-5]。
设计系统主要接口电路如图2所示。
单片机AT89C51控制SJA1000的初始化,控制SJA1000实现汽车状态信息的接收和发送等通信功能。将CAN总线控制器SJA1000 的8位数据总线AD0~AD7连接到单片机AT89C51 的P0口。CAN总线控制器CS片选信号连接单片机AT89C51的P2.0口,为低电平有效。当 P2.0 为低电平时,单片机选中芯片SJA1000,可对CAN总线控制器实现读写操作功能。芯片SJA1000 的中断引脚 INT可以选择连接单片机AT89C51的INT0引脚。本电路中,单片机AT89C51 通过中断方式访问芯片SJA1000。 芯片SJA1000 的RD,WR,ALE 分别与单片机AT89C51 的相应引脚相连。
在CAN总线收发器隔离电路模块设计中,CAN 总线控制器SJA1000采用隔离电路模块光电耦合芯片6N137连接CAN总线,实现总线上各CAN节点间的电气隔离。因此,在SJA1000与TJA1050之间采用隔离电路模块,能够提高其抗干扰的能力。隔离电路模块一般采用光电耦合芯片6N137来设计隔离电路。其具备电流限制的功能,可以进一步提高对CAN总线的保护[6-7]。
CAN总线收发器采用收发器TJA1050。它是CAN总线控制器与CAN物理总线之间的接口。TJA1050使用两路CANH 和CANL传输数据信号,为CAN总线提供差动发送性能与接收性能。TJA1050的通信波特率在60 Kb/s以上,在CAN总线错误时能快速切断错误信号,能保证正常的汽车电子通信。不上电时,TJA1050可使CAN物理总线表现为无源特性。在电路设计中,收发器TJA1050 由引脚 S 控制,分为高速和静音两种工作模式。
基于CAN总线协议的通信系统软件设计主要包括:CAN节点初始化、状态数据发送单元和数据接收单元。CAN节点初始化包括SJA1000初始化与单片机初始化。对CAN总线控制器SJA1000 的初始化可在复位模式下进行。通过节点初始化、数据发送以及数据接收,完成单片机控制SJA1000传输数据至CAN总线。CAN通信系统的初始化流程如图3所示。
图3 CAN通信系统的初始化流程示意
单片机初始化主要包括工作方式的设置、波特率参数设置和中断允许寄存器的设置等。CAN总线控制器芯片SJA1000的初始化,包括选择工作模式、确定通信波特率、设置输出模式等内容。在CAN发送函数中,通过SJA1000可以将智能小车系统状态数据传输到CAN总线上。对CAN总线上传输的信息,通信系统设计采用中断方法。系统每接收到一次CAN信息,产生一次中断,以触发单片机AT89C51产生中断信号。
CAN通信系统数据的发送程序包括CAN总线发送和串口发送函数等内容;通信数据的接收程序包括串口接收和CAN总线接收等函数。其主要工作过程为:CAN节点从单片机中断期间接收状态信息,然后封装汽车状态数据,再通过CAN总线控制器SJA1000传输至CAN物理总线上。运用同样原理,CAN通信网络数据的接收程序则包含了串口接收和 CAN 总线接收。其工作过程为:CAN节点于单片机中断时接收汽车状态信息数据,然后将数据封装成帧,用符合CAN总线协议的方式进行接收。
CAN通信系统的数据发送和接收单元以采集智能小车行驶速度数据为设计目的,并通过CAN节点通信实现共享小车速度数据的功能。基于CAN协议的数据发送程序如图4所示。
图4 CAN通信系统的发送数据流程示意
CAN总线控制器模块使用中断方式来接收CAN报文,因为中断方式适用于对实时性要求高的汽车数据应用场合。数据发送单元选择车速采集通道,用于采集车速数据,最后传输符合CAN通信协议的小车行驶速度数据。运用同样原理可设计接收子程序。
本文设计的CAN通信系统以CAN总线控制器SJA1000芯片为核心,通过CAN 总线收发器TJA1050,实现了智能小车速度数据的通信。实际应用表明,CAN 总线具有组网自由、自动错误界定、实时性良好等优点,解决了智能小车速度数据通信的实时性问题。因此,基于CAN 总线的智能小车通信系统的设计开发具有一定的实用价值。