新闻中心

EEPW首页>嵌入式系统>设计应用> 基于CAN总线的高压开关柜状态监测单元通讯模块的设计

基于CAN总线的高压开关柜状态监测单元通讯模块的设计

作者: 时间:2013-01-23 来源:网络 收藏

  3.3 CAN应用层协议
协议对应于ISO/OSI模型的物理层和链路层,没有包括其他的层次。CAN的高层协议是在CAN现有的协议(物理层和链路层)上实现的。CAN作为一种小型的测控网络, 不涉及到路由选择,同时为了减少层间转换的复杂性,一般高层的协议只采用应用层。这样在应用时,CAN实际就有了三层协议。应用层的报文对于链路层来讲认为是数据,而真正需要传送的数据是封装在应用层报文中的。采用的应用层协议一般有标准(例如DeviceNet,SDS等)和自定义(根据实际系统而定)的两种。 笔者根据实际情况自定义了应用层协议, 应用层报文的详细定义这里不再详述。

  4. 通讯模块的硬件实现
  监测单元部分通讯模块实现CAN协议的控制器选用SJA1000,它是PCA82C200的替代产品,同时支持CAN2.0A和CAN2.0B协议,位速率可达1Mb/s。具有扩展的接收缓冲器、完善的错误检测机制、扩展的验收滤波器以及错误累计到一定时就脱离总线等特征。
  硬件的设计并不复杂。可以将SJA1000和PCA82C250的应用文档上的典型电路移植到80C196KC微控制器上(80C196KC采用8位数据总线模式),但在设计时还应该注意以下几点:①SJA1000与外部ROM,RAM统一编址,微控制器对它的存取操作就像对RAM操作一样(区别在于有的SJA1000寄存器有的不可读,有的不可写)。②总线的连接电缆一般使用双绞线,对抗干扰要求较高可以使用屏蔽双绞线,或者光纤。电缆线径与传输距离、节点数目有关,传输距离变长或节点数目增加,电缆线径也要相应增加,同时终端匹配电阻(一
  般为120Ω)。也要增大。③SJA1000控制器RX1引脚要接0.5V,以便形成正确的电平逻辑。 PCA82C250的Vref引脚可提供0.5V的电压输出,因此在不加光隔的测试系统中,可直接将RX1引脚接Vref引脚,以简化电路设计。④SJA1000有中断产生时,引脚INT产生的是一个高电平到低电平的跳变,文档中给出的是和80C51(它的外中断0可以是下降沿或低电平有效)接口的,因此两个引脚可以直接相接。而80C196KC的EXTINT1引脚是上升沿有效,故在两个引脚之间要加一个反相器。

  5 通讯模块的软件实现
  软件是通讯模块设计的核心,与一般使用高级语言编写的软件不同的是嵌入式系统的软件要和硬件直接打交道,是对硬件直接操作,因此对硬件要熟练掌握才能编写出实用的代码。
  SJA1000控制器寄存器数量众多,幸运的是许多文章对它们的用法都作了介绍,有的还给出了其具体的代码,笔者只简单介绍一下验收滤波寄存器。使用验收滤波器,可以使监测单元只接收需要的帧,屏蔽不需要的。这里的应用是将验收滤波器配置成双滤波方式,即控制器只接收目的地址与监测单元地址相符的或者与监测单元广播地址相符的帧,从而节约监测单元的资源。
  下面即以监测单元的发送为例,简述通讯模块软件的设计思路。当监测单元有数据发送时(如绝缘数据),可通过下列步骤完成发送的全过程:①将数据按应用层报文的格式进行封装。 ②应用层报文相对链路层来讲是链路层的数据,在链路层把应用层的报文按照SJA1000的CAN帧的格式进行拆分。CAN每次只能传送8个有效字节,在拆分时按照上文的标识符定义,将报文拆成有序的CAN帧,这样接受的一方就能按照标识符将一系列属于同一应用层报文的帧进行拆封。③把已拆分好的CAN帧按照标识符定义的帧序数发送出去。发送一帧之前需要检查SJA1000控制器状态寄存器(SR)的状态,这包括检查控制器发送状态,接收状态以及发送缓冲器锁定状态,当控制器处于空闲状态(不在发送状态、不在接收状态并且发送缓冲器被释放),就将需发送的帧写入发送缓冲区并启动发送。发送下一帧重复执行以上过程即可。
  接受过程执行与发送过程相反的操作,可以简述为:接受CAN帧;拆封CAN帧为应用层报文;解析报文得到数据。
  6. CAN控制器异常情况的处理
  SJA1000控制器在长期工作中,由于内在及外在的因素不可避免的会产生错误,从而使控制器不能正常工作。为了控制器能够长期正常工作,使控制器从错误中恢复过来。控制器提供了相应的寄存器来进行错误的分析和诊断,这包括接收(发送)错误计数器、错误报警限制寄存器、错误代码捕捉寄存器、仲裁丢失捕捉寄存器以及状态寄存器的几位。同时中断寄存器的几位用来报告产生的错误,由程序对错误进行处理。这些寄存器具体的定义可参阅相关文献。



评论


相关推荐

技术专区

关闭