0 引言
20世纪80年代初,德国BOSCH公司提出了控制器局域网(Controller Area Network,CAN)来解决汽车内部的信号传输问题。由于CAN总线优良的稳定性和实时性能、成熟的仲裁和同步技术,加上开放式总线结构、短报文高速通讯、远程通讯能力、硬件CRC超强的纠错和扩展功能,以及控制简单、应用成本低等优点,已经被越来越多地应用到分布式远程自动控制、安全监控及电力系统等网络控制系统领域,并被公认为最有前途的现场总线技术之一。
中继器是网络物理层的一种介质连接设备,可以将同一层的两段网络进行互连,也可以实现上下层不同总线的互连,起到网桥和网关的作用。在大中型远程的CAN总线系统中经常会使用到中继器,主要用于监测点众多和测点分布距离远的场合。拉西瓦水电站工程为I等大(1)型工程,枢纽安全监测的测点、仪器设备、测站多,监测系统覆盖面大(10×lOkm),测量设备之间距离差异较大,距离主控制室较远(长达5km),为了提高通信网络的抗干扰性并保证适当高的通信速率,需要在网络中加中继器,以对通信链路中的信号加以放大,并对数据报文进行路由和转发。本文提出了一种CAN网络用中继器的设计和实现。
1 系统硬件选型
CAN中继器是CAN总线系统的关键设备之一,要使中继器拥有很好的可靠性,对其MCU的要求也相对较高。我们选择了Silicon Laboratories公司的C805lF040(以下简称F040)单片机作为中继器的MCU。
F040内集成了完全支持CAN2.0A和CAN2.0B的CAN控制器,独立的消息RAM可以处理32条消息对象,每个消息对象都可以进行发送和接收滤波,最高工作速率达到lMbps,能够完成CAN总线协议数据链路层和应用层的所有功能;其中CAN总线的竞争处理、MCU接口、同步、数据的一贯性以及连续性保证,都是由硬件来解决,MCU因此得以腾出大量的时间来处理测量数据和控制命令,从而提高整个系统的实时性。
F040还具有增强型串行外设接口(SPI)提供了访问灵活的全双工串行总线,为中继器之间交换数据提供了良好的接口。SPI可以作为主器件或从器件,有3线工作方式和4线工作方式,并支持在同一总线上连接多个主器件和从器件。而且在多主环境中禁止主器件方式操作,以避免两个以上主器件试图同时进行数据传输时产生冲突。此外,F040还有大量的存储空间一64kB的片内F1ash和4K+256B的内部RAM,以及外部64kB数据存储器接口,完全满足系统通讯和缓存数据空间的要求。
2 中继器系统硬件结构
CAN总线中继器需要完成将一端的总线上数据完整地传输到另一个MCU所负责的CAN总线上。本文采用易于控制数据流量,处理速度快,功能扩展性好的双MCU的方案,如图1所示。本文中继器设计的主要思想是采用两个F040组成中继系统,利用F040的SPI进行多主通讯,进行互传数据。两个F040的CAN作为连接两边总线。其中,与上面0总线联接的F040的CANO的ID按照模块编号设计;与下面1总线连接的F040的CANl的ID设为0号编号,作为该总线的根模块。
F040的通用端口I/0引脚资源丰富,利用自身的优先权交叉开关译码器可以灵活分配给数字信号作为I/0端口。根据实际的电路需要,把SPI配置到P0.0~P0.2,中继器的主从端口配置要一致,如图2所示。为了更好、更快地交换数据和中继器的主从转换,充分利用剩余端口,将主从MCU的P1.6、P1.7、P2.6、P2.7端口对应连接起来。MCU0的状态由P2.6M和P2.7M输出,MCUl通过输入口P2.6S和IP2.7S监测MCU0的状态;MCUl的状态由P1.6S和P1.7S输出,MCU0通过输入口P1.6M和P1.7M监测MCUl的状态。端口之间串联的1k保护电阻,用以防止启动时因两边数据的冲突而导致芯片烧坏。
本系统是用CAN总线将中继器与上下两层网络连接起来,因此在中继器系统中还应有CAN总线传输模块,如图3所示。选择ADI公司生产的ADuMl201用来实现CAN控制器和CAN收发器之间的电气隔离,这样不仅提高了中继器的可靠性,而且也保护了总线及总线上的其他节点,即增强了系统的稳定性,又提高了系统的抗干扰能力。CAN收发器SN65HVD25l在CANH和ICANL输出引脚间并联一个电阻,作为CAN总线的终端电阻。终端电阻值R6等于传输电缆的特性阻抗,一般取值120Ω,解决了远近端阻抗不匹配的影响。SN65HVD251的Rs引脚为斜率电阻输入引脚,可以改变收发器工作的方式。在CANH和CANL上各自串联电阻R2、R3限流,再通过一组上下拉电阻R4、R5,有效抑制反射波干扰,保持总线处于高阻态时,接收端收到的始终是“1”电平,这样拉高信号的幅度,减少误码率。另外在CANH和CANL之间并联一对方向相反的瞬态二极管Dl、D2,可防雷击,以及防止其他总线上的瞬变干扰。
这样基于C8O51FO4O的CAN总线中继器就实现了。