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,可防雷击,以及防止其他总线上的瞬变干扰。
3 中继器MCU状态控制设计
由于中继器采用双MCU设计,在进行数据传输的时候MCU不仅要监控CAN总线上的数据传输,还要监控SPI的数据传输,尤其是SPI的主从状态正确转换就显得十分重要了,如图4所示。
3.1 MOUO的设计
(1)系统初始化,开CAN0中断,设SPIO为主状态,监测SPIl是否为从状态。如果SPIl长期是主状态,标志通讯错误;
(2)CAN0接收上层发过来的数据,判断SPIl是否为从状态,如果是,就把CAN0数据转发给SPIO并等发送完成,如果不是,就向主节点发送错误状态帧;
(3)设SPI0为从状态,判断SPIl是否为主状态,如果是,就等待SPIl发送数据;如果不是,延时10 ms,再判断还不是,就向主节点发送错误帧;
(4)SPIO接收到SPI1的完整数据后,转发给CAN0,向主节点发数据,完成一次通讯。
3.2 MCUl的设计
(1)系统初始化,开CANl中断,设SPLL为从状态,准备接收MCU0通过SPIO发来的数据:
(2)监测SPIO是否为主状态,如果是,就等待接收SPIO的数据,如果不是,就返回错误标志位;
(3)接收到SPIO传来的数据,把SPll设为主,开CANl中断,将数据通过CANl发送到下一级相应ID节点;
(4)等待CANl下一级节点发回的回答帧,并判延时10ms是否到,10ms没有收到回答帧,判SPIO是否为从,如果是从,发下一级错误帧,如果不是,等待SPIO转为从的状态;
(5)SPIl是主状态并且SPIO为从状态时,CANl转发数据给SPIl并等发送完成。
4 系统的实时性分析
中继器给系统带来方便的同时,也给系统增加了一些存储转发延时,因此在软件设计中必须考虑系统的实时性,尽量缩短数据的存储转发时间。通过对本文提出的双MCU中继器系统的分析,影响系统实时性的主要有以下几个方面:
(1)0级CAN总线发送接收各一帧数据的时间,主要受通信协议(CAN2.0A或2.0B)及CAN0波特率决定;
(2)CAN0产生中断,通知MCU0准备向SPIO发送时间(中断时间);
(3) SPI的波特率和发送接收的字节数决定SPIO、SPIl发送接收时间;
(4)MCUl等待时间和MCU1通过CANl向1级CAN节点发送和接收1帧数据的时间;
(5)l级节点模块MCU响应测量时间,受CANl波特率和通信协议的影响。
总之,当0级和l级实测距离是5km,CAN0和CANl波特率为6.91K,SPI的波特率为1M时,主节点到l级节点发送接收一次数据的时间为0.12s,达到大坝监测的实时性要求。
5 结论
本文设计的中继器完成了各项设计指标,符合工程的要求,并且在拉西瓦水电站高拱坝的高边坡大型远程监控系统中承担数据转发和网络拓展功能,运行结果表明,传输数据稳定可靠,并且运行正常。