DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 713|回复: 0
打印 上一主题 下一主题

[接口电路] CAN网状冗余及基于ARM节点设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 18:46:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                      一、概述
  CAN(Controller Area Network)即控制器局域网,是一种串行数据总线,CAN总线是国际上应用最广泛的现场总线之一。作为一种技术先进、可靠性高、功能完善、成本合理的远程网络通讯控制方式,CAN总线已被广泛应用于各个自动化控制系统中。在汽车电子、自动控制、电力系统等领域中,CAN总线尤其具有不可比拟的优越性。但是,工业控制现场工况条件十分恶劣,电缆受拉、压、砸、挤等造成故障的情况很多,这对于以总线为核心的CAN总线系统是一种极大的威胁。如何保证现场总线控制系统在恶劣环境下安全、可靠地工作是CAN应用中的一个重要课题。
  解决可靠性问题的一个有效的办法就是对总线进行不同程度的冗余,同时使用两(多)条总线电缆。本文简单列举了目前CAN冗余的几种方式,同时提出了网状冗余的全新冗余结构。采用内置多路CAN总线控制器的LPC2294作为主控制器,设计给出了应用于电源模块控制系统中的CAN总线网状冗余节点方案。
  二、目前几种总线冗余方法
  典型的CAN电路可分为4个环节,即单片机、总线控制器、CAN总线驱动器、总线。以下是目前从以上4个环节考虑的不同程度的冗余方法:
  (1)总线驱动器的冗余
  使用两条总线电缆,每个节点内部使用两个总线驱动器,但只有一个总线控制器,在总线控制器与两个总线驱动器之间设置判断电路。如果一个总线发生故障,则关闭它与总线控制器之间的信号通道,而正常总线上的报文仍能顺利送往总线控制器。
  (2)CAN总线控制器的冗余
  该冗余的思路是同时使用两条CAN总线,两个CAN总线驱动器和两个CAN总线控制器,单片机通过不同的端口和中断同时控制两个CAN控制器。
  (3)全系统的冗余
  该冗余的思路是对整个CAN系统的四个环节进行冗余。即同时使用两套单片机、总线控制器、CAN总线驱动器、总线。
  三、新的冗余方式:网状冗余
  在可靠性要求非常严格的场合,如电厂集散控制系统,基本采用网状冗余结构。由于CAN节点对系统的构成不敏感,全系统的冗余在发现总线故障以及总线切换及时性方面反而不如部分冗余方法,有鉴于此,本文提出了新的CAN冗余方式:网状冗余。
  CAN网状冗余是对整个CAN网络、通讯节点进行冗余,如图1所示。同时使用两条CAN总线,两个CAN总线驱动器和两个CAN总线控制器,单片机通过不同的端口和中断同时控制两个CAN控制器,组成一个网络节点,再对节点进行冗余设计。






  图2 网状冗余在电源模块控制中的应用改进
  4.2节点硬件设计
  设计选用PHILIPS公司新推出的一款功能强大的具有ARM7TDMI内核的32位微控制器LPC2294,内部集成有四路符合CAN规范CAN2.OB,ISO 11898-1标准的CAN控制器,总线数据波特率均可达1Mbps。
  节点硬件电路组成:
  CAN节点硬件电路如图3所示,由ARM微控制器LPC2294,CAN总线收发器TJA1050,高速光耦6N137和电源隔离模块B0505S等组成。由于四路CAN接口的外部电路完全一致,图中只给出了CAN3、CAN4接口的外部电路。






  图4 主程序流程图
  4.3.1 CAN控制器初始化
  初始化CAN控制器的操作包括:硬件使能、软件复位、设置报警界限、设置总线波特率、设置中断工作方式、设置验收滤波器工作方式、设置工作模式并启动CAN等。初始化程序如下:
  HwEnCAN(CanNum); //硬件使能,CanNum=0-3,指四路CAN控制器
  SoftRstCAN(CanNum); //软件复位寄存器CANEWL(CanNum).BitsEWL_BIT=USE_EWL_CAN[CanNum]; //设置报警界限CANBTR(CanNum).Word=USE_BTR_CAN[CanNum]; //初始化波特率
  VICDefVectAddr=(UINT32)CANIntPrg; //初始化中断为非向量中断CANIER(CanNum).Word=USE_INT_CAN[CanNum];
  CANAFMR.Bits.AccBP_BIT=1;? //设置验收滤波器CANMOD(CanNum).Bits.TPM_BIT=USE_TPM_CAN[CanNum];? //初始化工作模式
  SoftEnCAN(CanNum);? //启动CAN端口
  4.3.2数据发送
  将待发送的数据打包成符合CAN协议的帧格式后,便可写入发送缓冲区,并启动发送。
  在写发送缓冲区前应查询其状态。LPC2294中的每个CAN控制器有三个发送缓冲区,它们的状态可通过查询CANSR得知。只有当其中有空闲的发送缓冲区时才可将数据写入。
  4.3.3数据接收
  接收数据可采用查询方式或中断方式。为了提高效率,常采用中断方式。
  在初始化程序中使能接收中断,在中断服务子程序中,读取CANICR,判断是否有接收中断标志,有则读取接收缓冲区数据。为了防止接收缓冲区数据溢出,可开辟一个循环接收数据队列来暂时存储数据,主程序通过查询该队列获得数据。
  4.3.4异常情况处理
  在总线发生严重故障的情况下,CAN节点有可能脱离总线,此时以下寄存器位被置位:CANSR的BS位、CANIR的BEI位和EI位(如果使能)和CANMOD的RM位。
  在应用中,若前面传输到CAN控制器的数据未被读出,接收缓冲区没有及时释放,就有可能引起后面信息的丢失。这时必须通过写命令寄存器来清除CANSR的数据溢出位。这种异常可通过异常中断来处理,只要在中断子程序中加入处理代码即可。其它的总线异常处理可根据使用情况决定是否在软件中处理。
  五、结束语
  本文设计的CAN网状冗余节点应用于电源模块控制系统,正常通讯时,下载/上传分开网络传输,实现CAN全双工通讯,提高系统传输速率,减少了电源模块的动作延时;在节点出现问题时,通过热备节点进行通讯,实现了系统的完全冗余,大大提高了系统可靠性,满足系统对CAN网络节点的可靠性、实时性和同步性要求
  本文作者创新点:借鉴过程控制中网状冗余大大增强通讯可靠性的经验,为增加CAN总线可靠性,提出了CAN总线控制系统的全新网状冗余方式,及在电源模块控制系统中的节点冗余设计思想。
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-5-10 15:12 , 耗时 0.087025 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表