周述良
(成都电子机械高等专科学校 通信工程系,成都 610071)
CAN总线(Controller Area Network,控制器局域网络总线)属于串行通信网络,早期主要应用在汽车电子网络通信中。与一般的通信总线相比,CAN总线采用了许多新技术和独特的设计,其数据通信具有突出的可靠性、实时性和灵活性,因此越来越受到开发者的重视,并广泛应用在诸多通信网络。RS232作为标准的计算机串行接口已被广泛使用,但由于两者的总线结构、通信协议及传输特点各不相同,给不同设备之间的连接带来了不便。因此,如何以最简单的方式实现CAN接口与RS232串行口的通信就成为工程实践中一个不可回避的问题。本文主要介绍CAN通信总线与RS232串行口总线之间通信转换的实现。
CAN通信总线与RS232串行口总线之间的转换主要涉及电平转换和帧格式转换[1]。
在RS-232-C中,任何一条信号线的电压均为负逻辑关系。即:逻辑“1”为-3~-15 V;逻辑“0”为+3~+15 V。而CAN通信总线采用的是“显性”和“隐性”两个互补的逻辑值表示“0”和“1”,其信号是以两条信号线之间的差分电压形式来表现的。因此,由于两种通信总线间的电压不相同,导致它们之间无法直接进行通信,需要相应的硬件接口电路实现电平标准转换。
CAN通信属于现场总线范畴,其帧格式主要由帧起始、仲裁场、控制场、数据场和CRC校验序列组成。而RS232属于串口总线,一般都是由2个节点实现,其每帧主要由起始位、数据位、奇偶校验位(可省略)、停止位等组成。由于2种通信总线的帧结构存在差异,因此需要用软件对其帧格式进行转换处理,才能实现相互通信。
硬件接口电路主要由CAN通信接口电路与RS232串行接口电路组成[2]。其中CAN接口电路包括主控制器芯片80C51、CAN总线控制器和CAN总线收发器。而RS232接口电路则主要包括RS232串口收发接口电路。
CAN总线控制器选用Philips公司生产的SJA1000,该芯片是PCA82C200CAN控制器的替代品,而且新增加了一种PeliCAN工作模式,能够支持CAN2.0B协议。它还支持错误中断、报警限制、验收滤波器扩展和自接收请求等功能。
CAN收发器选择芯片82C250作为CAN控制器和物理总线间的驱动接口,可以提供对总线的差动发送能力和对CAN控制器的差动接收能力,其最高速可达1 Mb/s。
由于RS232工作电压是5~15 V之间,而单片机51芯片的电压是5 V,所以为了与单片机51芯片进行通信,必须对其电平进行转换。本文选择MAX232作为转换芯片。MAX232内部有电压倍增电路和转换电路,只需5 V电源便可实现TTL电平与RS232电平的转换,使用十分方便。
实现CAN与RS232转换器的接口电路的原理框图如图1所示。其工作流程为:微控器通过数据总线对CAN控制器进行访问和控制,实现CAN控制器的数据收发,从而实现现场控制。微控器把RS232接收到的数据写入微控器的缓冲区中,然后经过I/O口和控制信号线传输到CAN控制器中,经CAN收发器发送到CAN总线上进行数据的传输。CAN节点向主节点传输的数据经CAN收发器接收,把数据写入CAN控制器中,通过中断信号通知微控器接收数据,数据接收后,再经由RS232发送。
图1 硬件接口原理图
图2 CAN控制器初始化
CAN-RS232转换器的软件实现主要包括4个模块[3]:初始化模块、CAN接口模块、RS232接口模块和数据帧格式转换模块。其中初始化模块主要负责微控器初始化和CAN控制器初始化以及串口初始化,CAN接口模块主要负责CAN控制器的接收和发送程序、RS232接口模块负责串口数据的接收和发送。整个软件实现的工作流程为:若转换器从RS232串口接收到数据后传输到微控器中,在微控器中对数据帧格式进行分析并转换成符合CAN2.0的帧格式,微控器通过数据总线把数据传输到CAN控制器的发送缓冲区中,然后通过CAN发送程序把数据发送到CAN总线上进行数据的传输。同样转换器从CAN接口接收到数据首先通过CAN接收程序接收数据,然后传输到微控器中进行数据帧格式的分析并转换成符合RS232帧格式的数据,经RS232接口模块把数据传输到串口总线上。
初始化模块主要包括对80C51微控器的初始化,CAN控制器SJA1000的初始化和串口的初始化。其中微控器的初始化包括对微控器的端口控制器、定时计数控制器、中断控制器、中断使能寄存器和串口的波特率等特殊功能寄存器进行设置。CAN控制器SJA1000的初始化主要是在上电复位后对CAN控制器的工作模式(BasicCan模式和Pelican模式)、验收码寄存器(ACR)、验收码屏蔽寄存器(AMR)、中断使能寄存器(IER)、时钟分频寄存器等寄存器的设置,其中CAN初始化流程图如图2所示。
CAN接口模块主要包括CAN格式数据的发送和接收任务。CAN数据的发送和接收由CAN控制器SJA1000独立来完成的。
CAN数据发送任务过程为:微控器将CPU缓冲区中的数据写入到CAN控制器的发送缓冲区,然后置位命令寄存器中的发送请求位就可以完成相应的发送程序。其相关的发送流程图如图3所示。CAN数据发送数程序关键代码如下:
图3 CAN发送程序流程图
CAN数据的接收任务过程为:CAN控制器进入工作模式后,能够自动接收总线上的数据,并将其放入接收缓冲区,同时产生接收中断,微控器进入中断后将数据从缓冲区中读出,并释放缓冲区。具体流程是CAN控制器接收到数据后将数据存入CAN接收缓冲区,微控器将数据从缓冲区数据写入微控器的CPU缓冲区中,然后清除接收中断标志位RI0释放接收缓冲器。其相关的接收流程图如图4所示。
CAN数据的接收程序关键代码如下:
图4 CAN接收程序流程图
RS232串口模块包括RS232帧格式数据的发送和接收。本文中RS232帧格式设置如下:波特率为115 200 b/s、8位数据位、2位停止位、0位的奇偶校验位。其中对数据的接收和发送采用中断方式来完成,SBUF1寄存器每次只接收或发送一个字节。当软件向SBUF1寄存器写入一个字节时开始数据发送。UART1中断被允许后,每次发送完成(SCON1中的TI1位被置“1”)或接收到数据字节(SCON1中的RI1位被置“1”)时将产生中断。由于用户可以灵活地建立自己的RS232总线通信协议,并且其程序设计易于实现,这里不再给出其程序流程图。
本文设计的CAN-RS232转换器结构简单、便捷、可靠。经过实验验证,可以达到预期的要求。当CAN总线系统数据流量较大时,可以考虑使用其它高速率总线与其通信,这样就能够更好地解决速度匹配问题。
[1]丁亮.基于RS232接口接入CAN的实现[J].常州工学院学报,2008(5):48-51.
[2]张同新,戴义保,吴斌.RS232-CAN总线协议转换器设计[J].电气自动化,2001(4):36-37.
[3]陈大鹏,王宁会.CAN和RS232协议转换卡的软件设计[J].仪器仪表学报,2003(S2):311-312,316.
[4]张毅坤.单片微型计算机原理及应用[M].西安:西安电子科技大学出版社,1998.
[5]阳宪惠.现场总线技术及其应用[M].北京:清华大学出版社,1999.