浅谈Small RTOS51 下CAN总线数据收发实现

时间:2011-09-02

  1 CAN总线简介

  现场总线(Fieldbus)是近年来迅速发展起来的一种工业数据总线,它主要解决工业现场的智能化仪器仪表、控制器、执行机构等现场设备间的数字通信以及这些现场控制设备和控制系统之间的信息传递问题。由于现场总线简单、可靠、经济实用等一系列突出的优点,因而受到了许多标准团体和计算机厂商的高度重视。现场总线(Fieldbus)是20世纪80年代末、90年代初国际上发展形成的,用于  现场总线技术

  过程自动化、制造自动化、楼宇自动化等领域的现场智能设备互连通讯网络。它作为工厂数字通信网络的基础,沟通了生产过程现场及控制设备之间及其与更高控制管理层次之间的联系。它不仅是一个基层网络,而且还是一种开放式、新型全分布控制系统。这项以智能传感、控制、计算机、数字通讯等技术为主要内容的综合技术,已经受到世界范围的关注,成为自动化技术发展的热点,并将导致自动化系统结构与设备的深刻变革。国际上许多实力、有影响的公司都先后在不同程度上进行了现场总线技术与产品的开发。德国Bosch公司的CAN(1Mbit/s)是国际标准之一,也是Controller Area Network 的应用标准。它属于现场总线范畴,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性、及独特设计,CAN总线已成为目前国外普及和实时性的现场总线。CAN总线在可靠性和实时性方面远远优于RS-485等工业现线CAN总线主要有下列特征:

  1. 数据信号采用差分电压传输,两条信号线"CAN_H"和" CAN_L".

  2. 传输介质可用双绞线、同轴电缆或光纤,具有较强的抗干扰能力。直接通信距离可达10km(速率小于5kbit/s),通信速率可达1Mbit/s(此时距离长为40m)。

  3. 节点不分主从,节点任意时刻可向其他节点发送信息,依据优先权进行总线访问,满足不同的实时要求。

  4. 采用非破坏性基于优先权总线仲裁技术。

  5. 采用短帧结构,每帧为8bit,保证了数据出错率低。

  6. 可以点对点、点对多点及全局广播方式传送接收数据。

  7. 发送期间若丢失仲裁或由于出错而遭破坏的帧可自动重发送。

  2  Small RTOS51简介

  Small RTOS51是一个用于8051系列单片机的多任务实时操作系统。8051系列单片机一般只有很少的ROM和RAM资源,如P89C51只有4KB Flash和128字节RAM.单片微型计算机简称为单片机,又称为微型控制器,是微型计算机的一个重要分支。单片机是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O接口和中断系统于同一硅片的器件。80年代以来,单片机发展迅速,各类新产品不断涌现,出现了许多高性能新型机种,现已逐渐成为工厂自动化和各控制领域的支柱产业之一。一般的实时操作系统如RTX Tiny 虽然小,但是任务没有优先级和中断管理,也无源代码,而uc/os-II规模太大,需要大量外部RAM.基于此,Small RTOS51是专为51 单片机编写嵌入式操作系统,它使用了RTX51 Tiny 的堆栈管理机制,并像uc/os-II一样是抢占式的。

  3 一个典型的CAN节点

  3.1.CAN总线接口的结构

  一个CAN总线接口有3 部分组成,如图(a)所示,它们分别对应于CAN总线的物理层、数据链路层和应用层。

  上层为微控制器,主要负责上层应用以及系统控制,包括CAN协议的应用层协议的实现,协调各系统设备的工作。(本设计采用的MCU是8051)

  中间层为CAN控制器,CAN控制器负责处理数据帧,完成数据的打包、解包,错误界定,并提供报文缓冲和传输滤波。(本设计采用的CAN总线控制器是Philips公司生产SJA1000)

  层为CAN收发器,主要是接口电平的转换,接口电器特性的处理。(本设计采用82C250)

  (a)CAN接口结构

  3.2.节点电路设计

  (1)SJA1000与单片机接口电路

  (b)SJA1000与单片机接口电路

  SJA1000的AD0-AD7与单片机的数据总线相连,地址A17作为SJA1000的片选使能端,由ALE、WR、RD控制SJA1000 数据的发送和接收。注意SJA1000复位端的连接,单片机是高电平复位,而SJA1000是低电平复位,因此复位信号要通过一个反相器与SJA1000复位端相连。另外SJA1000的11脚MODE接高电平,选择Intel二分频模式 .SJA1000的16脚时中断信号输出,在中断允许情况下,有中断发生时,16脚出现有高电平到低电平的跳变。

  SJA1000的ODE引脚可选择接口模式:

  ◆Intel模式  MODE高

  ◆M0torola模式  MODE低

  (2)节点前端物理接口电路的设计

  (c)节点前端物理接口电路的设计

  使用SJA1000 CAN总线控制器可完成CAN总线通信任务,但它的驱动能力不够,因此外接82C250总线驱动芯片。CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品着称的德国BOSCH公司开发了的,并终成为国际标准(ISO118?8)。是国际上应用广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境82C250是CAN控制器和物理总线间的接口。之所以选择82C250芯片是因为其具有高速性(可达1Mbit/s),具有抗瞬间干扰保护总线的能力。具有降低射频干扰的斜率控制。此外,它可以与110 个节点相连,防止电池与地之间发生短路,当某一个节点掉电时,不会影响总线。

  (3)设计电路注意的问题

  ◆SJA1000通过光耦与82C250的连接是光电隔离的接法。这样可以防止线路间的串扰。在总线两端要接2 个120欧姆的总线阻抗匹配电阻。忽略掉它们会降低总线的抗干扰能力,甚至导致无法通信。

  ◆SJA1000的TX1脚悬空,RX1引脚的电位必须维持在0.5vcc以上,否则将不能行成CAN协议所要求的电平逻辑。

  ◆光耦6N137的输入端2,3脚的信号输入极性要与光耦的输出极性相同,如果电路设计时极性相反,也可以通过软件编程改变SJA1000的数据输出极性,从而使单片机的输出数据与82C250中数据的极性一致。

  4 在Small RTOS 下CAN节点的数据接收与发送实例

  下面将通过一个简单的实例(需要配置Small RTOS51操作系统)来介绍在Small RTOS 下CAN节点的数据接收与发送过程。实例使用两个CAN节点组成CAN网络,实现的功能是,每隔一定的定时周期发送一帧数据,同时接收CAN数据,并将接收的CAN数据发送到CAN总线上。LED将显示收到的数据帧的头两个字节。

  (1)实例部分代码实现

  void main(void)

  {

  CpuInit(); //微控制器初始化

  UserTickTimer(void);//系统时钟节拍的初始化

  OSStart();//启动small rtos操作系统

  SendData();//发送数据任务

  { unsigned char data status;

  unsigned char i;

  unsigned char xdata *p =&CAN1_SJA_BaseAdr+REG_CAN_SR  ;

  unsigned char xdata *p1;

  status=SJAInit();//初始化can控制器

  if(status!=0){

  OSSendSignal(2); //唤醒错误处理任务

  }

  P_SJAFrameStructApp  =(P_SJAFrameStruct )&BufCan2[0];

  IT0 =0;//电平触发模式

  EX0=1;//使能CAN中断

  BufCan2[0]=0x88;

  P_SJAFrameStructApp->FrameID=0x11111111;

  while(1)

  {

  OSWait(K_TMO,2);//系统等待函数,每两个时钟周期发送数据

  P_SJAFrameStructApp->FrameID++;

  p1=(unsigned char xdata *)&P_SJAFrameStructApp->FrameID;

  for(i=0;i<4;i++)  //发送测试数据

  BufCan2[1+i] =*(p1+i);// 0x55;

  for(i=0;i<4;i++)

  BufCan2[5+i] =*(p1+i);// 0x55;

  for(i=0;i<4;i++)

  BufCan2[9+i] =*(p1+i);// 0x55;

  status=SJASendData(BufCan2,0x10);//向CAN总线发送数据,所发送数据的首地址是BufCan2

  if(status!=0)  //表示发送数据错误

  OSSendSignal(2);唤醒错误处理任务

  }

  }

  void DisPlay(void)

  {

  while(1){

  OSWait(K_TMO,1);

  ShowLED(); // led显示处理

  }

  }

  Error();// 错误信息处理任务

  }

  (2) 测试结果:

  如果运行正确:数码管会显示依次加1的数值,否则:数码管会显示E-xx的错误代码

  5 结束语

  CAN总线的产生与发展控制器局部网(CAN-CONTROLLER AREA NETWORK)是BOSCH公司为现代汽车应用推出的一种多主机局部网,由于其高性能、高可靠性、实时性等优点现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多部门。控制器局部网将在我国迅速普及推广。

  随着计算机硬件、软件技术及集成电路技术的迅速发展,工业控制系统已成为计算机技术应用领域中活力的一个分支,并取得了巨大进步。由于对系统可靠性和灵活性的高要求,工业控制系统的发展主要表现为:控制面向多元化,系统面向分散化,即负载分散、功能分散、危险分散和地域分散。

  本文作者创新点是实现了在实时操作系统Small RTOS51下CAN总线上数据的接收与发送,用一个简单的实例来说明了CAN总线的接收、发送原理。
  

上一篇:一种高频开关电源的设计方法
下一篇:ARM在嵌入式linux内核裁剪与移植的应用

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料