基于STC89C51的CAN总线点对点通信模块设计
扫描二维码
随时随地手机看文章
摘要:随着人们对总线对总线各方面要求的不断提高,总线上的系统数量越来越多,继而出现电路的复杂性提高、可靠性下降、成本增加等问题。为解决上述问题,文中阐述了基于SJAl000的CAN总线通信模块的实现方法,该方法以PCA82C250作为通信模块的总线收发器,以SITA-l000作为网络控制器。并以STCSTC89C5l单片机来完成基于STC89C5l的CAN通信硬件设计。文章还就平台的初始化、模块的发送和接收进行了设计和分析。通过测试分析证明,该系统可以达到CAN的通信要求,整个系统具有较高的实用性。
关键词:CAN总线;SJAl000;82C250;STC89C51
O 引言
现场总线是应用在生产最底层的一种总线型拓扑网络,是可用做现场控制系统直接与所有受控设备节点串行相连的通信网络。在工业自动化方面,其控制的现场范围可以从一台家电设备到一个车间、一个工厂。一般情况下,受控设备和网络所处的环境可能很特殊,对信号的干扰往往也是多方面的。但要求控制则必须实时性很强,这就决定了现场总线有别于一般的网络特点。此外,由于现场总线的设备通常是标准化和功能模块化,因而还具有设计简单、易于重构等特点。
1 CAN总线概述
CAN (Controller Area Network)即控制器局域网络,最初是由德国Bosch公司为汽车检测和控制系统而设计的。与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。其良好的性能及独特的设计,使CAN总线越来越受到人们的重视。由于CAN总线本身的特点,其应用范围目前已不再局限于汽车行业,而向自动控制、航空航天、航海、过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。目前,CAN已经形成国际标准,并已被公认为几种最有前途的现场总线之一。它的直线通信距离最大可以达到l Mbps/30m.其它的节点数目取决于总线驱动电路,目前可以达到110个。
2 CAN系统硬件设计
图l所示是基于CAN2.0B协议的CAN系统硬件框图,该系统包括电源模块、MCU部分、CAN控制器、光电耦合器、CAN收发器和RS232接口。硬件系统MCU采用STC89C5l,CAN控制器采用SJAl000,CAN收发器采用PCA82C250,光耦隔离采用6N137。
图l中的CAN控制器SJAl000是CAN控制器(BasicCAN)PCA82C200的替代产品,它增加了一种新的操作模式(PeliCAN),这种模式可以支持很多新特性的CAN2.OB协议。微处理器STC89C5l在一定的模式下可对SJAl000中的寄存器进行读写操作,以控制SJAl000进行数据的发送和接收。
CAN收发器PCA82C250是CAN控制器与物理总线之间的接口。它最初是为汽车中的高速应用(lMbps)而设计的。该器件可以提供对总线的差
动发送和接收功能。它采用双线差分驱动方式,有助于抑制汽车等恶劣电气环境下的瞬变干扰。PCA82C250可对SJAl000传来的TTL电平和CAN总线差动信号进行相互转换,而且可使总线具有较好的EMC特性。
光耦隔离器可对总线上各个CAN节点进行电气隔离,以增强系统的可靠性,减少系统与系统之间的相互影响。
2.1 CAN控制器硬件电路的设计
将SJAl000的ADO~AD7连接到STC89C5l的P0口,CS连接到STC89C5l的P20,这样,当P20为O时,CPU片外存储器地址即可选中SJAl000,CPU
则通过这些地址对SJAl000执行相应的读写操作。设计时,可将SJAl000的RD、WR、ALE分别和STC89C5l的对应引脚相连,INT接STC89C51的IN-T0,这样,CPU可以通过中断方式来访问SJAl000。其连接电路图如图2所示。
2.2 光电耦合器的设计
为了增强CAN总线节点的抗干扰能力,SJAl000的TX0和RX0并不直接和收发器PCA82C250的TXD和RXD相连,而是通过高速光耦6N137后再和PCA82C250相连,这样就可以很好的实现各CAN节点间的电气隔离。应当注意的是光耦部分采用的电源VCC和VDD最好完全隔离,可以用小功率的电源隔离模块来实现,这样就可以提高节点的稳定性和安全性。其电路图如图3所示。
2.3 CAN收发器的设计
PCA82C250是一种差分收发器,它可完成TTL电平到差分信号的转换。它的CANH和CANL引脚各自通过一个5 Ω的电阻和CAN总线相连,该电阻可以起到一定的限流作用,可保护PCA82C250免受过流的冲击。而CANH和CANL与地并联了两个30pF的小电容。可以过滤总线上的高频干扰并具有一定的防电磁辐射能力。PCA82C250的RS脚上应接一个斜率电阻,电阻大小可根据总线通信速度适当调节,一般可在16~140 kΩ之间,这里选用47 kΩ电阻。图4所示是收发器的电路图。
2.4 总体电路分析
由于本设计将SJAl000的AD0~AD7和STC89C5l的P0口相连,CS连接到P20口,ALE、WE、RD分别与单片机的对应各口相连,因此,SJAl000就相当于单片机的外部存储器。访问SJAl000的寄存器就相当于对外部寄存器地址进行读写操作。SJAl000的MODE接高电平,采用的是intel二分频模式,TXO和RX0通过高速光耦器件6N137与CAN收发器82C250连接,PCA82C250的TXD和RXD引脚分别接发送和接收驱动信号,然后通过CANH和CANL接至物理总线传输介质上,这个介质可以是光纤或双胶线等。
3 CAN系统软件设计
STC89C51的软件设计由MCU初始化、SJAl000初始化、SJAl000的接收发送和数据显示模块等构成。其系统软件设计图如图5所示。
3.1 SJAl000初始化软件设计
SJAl000的初始化程序设计主要是通过对SJAl000的寄存器写入相应的控制字,从而确定SJAl000的工作方式。在对SJAl000的寄存器写入控制字时,要在SJAl000的复位模式下采用软件复位模式。其初始化流程图如图6所示。
3.2 SJAl000数据发送软件设计
报文的发送通常是由CAN控制器根据CAN协议规范自动完成的。首先由CPU将要发送的报文传送到发送缓冲器中,并置位命令寄存器中的发送请求标志。其发送流程图如图7所示。
3.3 SJAl000接收数据软件设计
CPU以一定的周期读取CAN控制器的状态寄存器,从而检查接收缓冲区的转台标志,指示是否至少接收到一个报文。当接收缓冲区状态标志指示为“空”时,表示没有接收到报文;在没有新的检查接收缓冲区状态的要求前,CPU则继续当前的任务。
当接收缓冲区状态标志为满的时候,即表明已接收一个或者多个报文。此时CPU将从CAN控制器取出第一个报文,并置位命令寄存器中的释放接收缓冲区标志。其接收流程图如图8所示。
4 测试
将两个CAN系统模块挂接在CAN总线上,相当于构成CAN总线上两个节点,这样就可以点对点地发送数据,其测试方法就是在当其中一个节点的按键按下时,除了自身的数码管1、2显示加一外,总线上另一节点接收到该数据后,它的数码管3、4也做加一操作,即与发送端节点的数码管1、2同步显示。这样就可以测试CAN总线的点对点的通信。
5 结束语
通过此系统可以较好地完成CAN节点的点对点数据发送和接收,且正确率高,速度快。若加以扩张,再增加节点,其通信原理与上述相同。此外,也可以加上串口,这样就可以实现下位机的多点采集数据,上位机实现显示和控制。因此,本文设计在实践中如果加以扩张,会有很好的价值。