0 引言
CAN是ControllerAreaNetwork的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。现在,CAN的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。应用设计的CAN总线节点,系统上电复位后,CAN通信接口接收到PC机的数据后,便向总线上的各个节点传播。CAN总线上的节点与被控对象相连,当它接收到PC机的数据后,则对被控对象作相应的操作。当CAN总线节点有数据向总线发送时,便通过收发器数据发到物理总线,或传送到其他节点,或经CAN通信接口传送到上位机。另外,在本设计中,89C52单片机预留出了P1及P2的一些接口,可以利用这些接口,外接其他应用模块,例如数据采集、步进电动机等,通过与PC机的通信,完成对模块的操作。
1 硬件设计
CAN总线接口电路主要包括:单片机、控制器接口、总线收发器和看门狗电路等。采用Philips公司生产的SJA1000控制器和与82C250CAN收发器,按照CAN总线物理层协议选择总线介质,设计布线法案,连接成CAN网络。
硬件电路的设计主要是CAN通信控制器与微处理器89C52之间和SJA1000与82C250之间的接口电路的设计,系统组成框图如图1所示。
图1 系统组成框图
CAN节点的硬件电路的设计主要是CAN总线通信控制器与微处理器之间的接口电路,以及CAN总线收发器与物理总线之间的接口电路设计。CAN通信控制器SJA1000是总线接口芯片,是接口电路的核心,它主要完成CAN总线的通信协议,实现上位机与现场微处理器之间的数据通信。AT89C52在CAN总线中实现CAN控制器的初始化、CAN的收发控制等任务。CAN总线收发器的功能则是增大通信距离,保护系统不受干扰。
SJA1000是一种独立的CAN控制器,主要用于移动目标和一般工业环境中的区域网络控制。它是Philips半导体公司PCA82C200CAN控制器(BasicCAN)的替代产品,而且还增加了一种新的操作模式———PeliCAN,这种模式支持具有很多新特性的CAN2.0B协议,SJA1000硬件结构框图如图2所示。
图2 SJA1000硬件结构框图
82C250是CAN控制器与物理总线之间的接口,它最初是为汽车中的高速应用而设计的。它可以提供对总线的差动发送和接收功能。
82C250驱动电路内部具有限流电路,可防止发送输出级对电源、地或负载短路。虽然短路出现时功耗增加,但不至于使输出级破坏。引脚8(RS)用于选定82C250的三种工作模式:高速、斜率控制和待机。
对于高速工作模式,发送器输出级晶体管被尽可能快地启动和关闭。在这种模式下,不采取任何措施限制上升和下降的斜率。此时,建议采用屏蔽电缆,以避免射频干扰问题的出现。通过把引脚8接地可断开高速工作模式。
对于较低速度或较短的总线长度,可使用非屏蔽双绞线或平行线作总线。为降低射频干扰,应限制上升和下降的斜率。上升和下降的斜率可以通过由引脚8至地连接的电阻进行控制,斜率正比于引脚8上的电流输出。
如果引脚8接高电平,则电路进入低电平待机模式。在这种模式下,发送器被关闭,接收器转至低电流。如果检测到显性位,则RXD将转至低电平,微控制器应通过引脚8将驱动器变为正常工作状态来对这个条件作出响应。由于在待机模式下接收器是慢速的,因此将丢失第一个报文。
微处理器AT89C52负责SJA1000的初始化,通过控制SJA1000以实现数据的接收和发送等。微控制器的外围电路如图3所示。
图3 微控制器的外围电路
AT89C52提供以下标准功能:8K字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
CAN总线控制器SJA1000的AD0~AD7连接到AT89C52的P0口,片选端CS取反后连接到AT89C52的P2.7。P2.7为1时,CPU片外存储器地址可选中SJA1000,CPU通过这些地址可对SJA1000执行相应的读/写操作。SJA1000的RD、WR、ALE分别与AT89C52的对应引脚连接,由于SJA1000是低电平复位,而AT89C52是高电平复位,所以两者复位端接法不同。SJA1000的MODE接高电平,选择Intel二分频模式。SJA1000的INT是终端信号输出端,在中断允许的情况下,有中断发生时,INT出现由高电平到低电平的跳变,因此此脚与AT89C52的外部中断输入脚INT0相连,从而使89C52可通过中断方式访问SJA1000。为了增强CAN总线节点的抗干扰能力,采用了6N137,未将TX0和RX0直接与82C250的TXD和RXD相连,通过高速光耦6N137,将SJA1000与82C250连接起来,这样就实现了CAN总线节点的电气隔离。82C250的CANH和CANL引脚各自通过电阻与总线相连,电阻的限流作用保护了82C250不受过流冲击,而且并联的电容可以滤除总线上的高频干扰并防止电磁辐射。
CAN总线驱动器82C250作为智能节点与CAN总线间的收发器,实现的是CAN网络物理层功能,它将来自SJA1000的TTL电平转换成符合IEEE11898电气标准的差分电平,并在CAN总线上传送。CAN接口电路如图4所示。
图4 CAN接口电路
2 软件设计
CAN通信协议的实现,包括各种帧的组织和发送,都在CAN总线通信控制器SJA1000的内部电路中实现,因此,系统开发主要集中在应用层软件的设计上。而应用层软件设计的核心部分,则是微处理器(AT89C52)与CAN总线通信控制器SJA1000之间的数据发送和接收程序。也就是说,当微处理器把要发送的数据传送到SJA1000通信控制器后,由后者将数据发送到CAN总线上,而当SJA1000从总线上接收到数据之后,则要求微处理器从SJA1000中取走数据。软件设计主要包括三部分:CAN节点初始化、报文发送和报文接收。其中CAN节点初始化如图5所示,报文发送如图6所示,报文接收如图7所示。
3 实验结果
采用CANalyst-II分析仪来检测此CAN节点是否通信正常。将CANalyst-II分析仪的两个端口CANH,CANL分别与设计的总线接口相连,并为单片机外接电源。
首先要对分析仪进行参数设置,设置好参数后,就可以启动系统了。选择菜单“操作”—“启动系统”,首先选择CANalyst-II,只有一个CANalyst-II时,索引号选择0;然后设置验收码为0,屏蔽码为0xFFFFFFFF,则表示全部接收。对于波特率的选择,由于在编程中设置的波特率为250kbit/s,这里设置要一致。滤波方式为单滤波。工作模式有两种,“正常”表示CANalyst-II作为一个CAN节点,可接收CAN网络的所有数据,也可往CAN网络发送数据;“只听”表示只能接收数据不能发送数据。这里选择的是“正常”模式。设置完成之后,就可以开始进行通信,设置一组数据,发送格式为“自发自收”。CANPro软件界面如图8所示。采用CANPro软件来检测CAN通信的状态,当启动系统后,传输方向为接收,并且接收程序设置的数据。当单击“数据发送”后,可以更改要发送的数据,此时,若通信正常,则传输方向为发送,且状态为“成功”。图8就是CAN总线接口发送接收正常时的界面。
图5 SJA1000初始化流程图
图6SJA1000发送过程流程图
图7SJA1000接收过程流程图
图8CANPro软件界面
4 总结
现场总线控制系统实质是一种开放的、可互操作的、彻底分散的分布控制系统,它改变了传统控制系统的结构,真正实现全分散、全数字化的控制系统。本设计是基于控制器SJA1000和82C250收发器的基础上,外围电路接上看门狗电路、EEPROM扩展电路和高速光耦合器6N137,设计CAN总线的一个接口电路。在实际应用中,可通过此接口电路与上位机进行通信,来控制其他芯片工作。CAN总线正不断深入到智能楼宇、铁路通信、矿用通信、灯光控制、舞台控制等领域,它在组网和通信功能上的优点以及它的高性价比决定了它将在很多领域都有广阔的前景以及发展潜力。