您的位置 首页 新能源

RS485-CAN转换器的规划

1RS485及CAN总线简介RS485是一种平衡传输方式的串行接口标准,采用半双工异步数据通信方式。基于在RS485总线上只能有一

  1 RS485CAN 总线简介

  RS485 是一种平衡传输办法的串行接口规范,选用半双工异步数据通讯办法。依据在RS485 总线上只能有一个主机的特色,它往往运用在集中操控纽带和涣散操控单元之间。一起RS485 的总线功率低,体系的实时性差,通讯的可靠性低,后期维护本钱高,网络工程调试杂乱,传输间隔不抱负,单总线可挂接的节点少等缺陷也限制了其运用。

  CAN(Controller Area Network,操控器局域网)现场总线是一种由带CAN 操控器组成的高性能串行数据局域通讯网络,是国际上运用最广泛的现场总线之一。它的总线长度最远可达10 千米(速率5Kbps 以下),数据传输速率最高可达1Mbps(通讯间隔40 米以内)。它在多主办法下作业,不分主从。选用非损坏总线裁定技能,即便网络负载很重也不会呈现网络瘫痪现象。此外,CAN 的每帧信息都有CRC 校验和其它检错办法,有很好的检错作用。由于CAN 总线具有以上长处,它现在现已被广泛运用到轿车电子、电力体系、航空工业和主动作业等领域中,并构成了国际规范,被公认为几种最有出路的现场总线之一。

  一时间彻底抛弃RS485网络体系是有困难的,尤其是在现已具有现成的硬件网络中。因而考虑一种折中的办法,便是在保存现有RS485体系硬件结构的基础上,增加一个CAN总线接口,然后完结RS485网络与CAN网络的互联。

  2 体系硬件规划

  RS485-CAN转化器硬件规划框图如图1所示,整个硬件体系分为5个模块:微操控器模块,根本模块,CAN接口模块,RS485模块和贮存模块。其间CAN接口模块的CAN操控器的选用要依据微操控器模块,假如挑选的微操控器中集成了CAN操控器,则无需外接CAN操控器,不然需求外接CAN操控器。

  2.1 微操控器模块,根本模块以及贮存模块

  这三个模块的规划归于惯例规划,因而省去详细的电路图。需求阐明的是微操控器能够挑选内部集成了CAN 操控器的单片机,可是本规划依据体系本钱,性价比以及微操控器的运用普遍性的考虑,运用的是ATMEL 的AT89C52 单片机;根本模块首要是完结微操控器的外围电路规划,首要包含电源和晶振以及复位电路等;贮存模块首要是用来贮存体系的装备信息,如CAN 波特率,RS485 波特率等,要求的贮存空间较小,1K 的片外EEPROM 满意运用,当然也能够挑选自带EEPROM 的微处理器。

图1:体系硬件规划框图

  2.2 CAN 接口模块

  CAN 接口模块包含总线操控器和收发器两部分。CAN 总线操控器挑选的是SJA1000,它是Philips 公司推出的一款彻底契合CAN 总线协议规则的CAN 操控器,可完结报文操控,数据滤波等CAN 操控器功用,SJA1000 不只兼容PCA82C200 支撑的BasicCAN(CANBUS2.0A)形式,还支撑功用更强的PeliCAN(CANBUS 2.0B)形式;收发器挑选的是TJA1050,它是CAN 协议操控器和物理总线的接口,是一种规范的高速CAN 收发器。

图2:CAN 模块电路图

  如图2所示SJA1000的AD0-AD7与单片机的数据总线相连,P2.0引脚作为SJA1000的片选使能端,由ALE,WR,RD操控SJA1000的数据的发送和接纳。11脚MODE接高电平,选用51系列的8位微操控器的Intel二分频形式。16脚是中止信号,接单片机的外部中止引脚。TX1脚悬空,RX1脚的电位有必要维持在0.5VCC以上,不然将不能构成CAN总线所要求的电平逻辑。

  高速光耦6N137提高了总线节点的抗搅扰才能,TVS能防止数据遭到不必要的外界影响并能维护元器材;另外在总线两头的设备加120欧姆的匹配电阻会使数据通讯的抗搅扰性以及可靠性大大加强,CANH和CANL与地之间并联两个30PF的小%&&&&&%,能够滤除总线上的高频搅扰而且具有必定的防电磁辐射的才能。这些额定的维护电路相同合适RS485模块的规划。

  2.3 RS485 接口模块

  RS485 接口模块选用MAX485 芯片作为总线收发器,它是+5V 低功耗半双工器材。MAX485 的驱动器输出是差分输出,彻底满意RS485 串行协议的要求,兼容工业规范规范,契合RS485 串行协议的电气规范。电路衔接如图3。

图 3:RS485 模块电路图

  3 体系软件规划

  本体系的软件规划除了完结单个模块的驱动程序以外,最首要的便是完结两种网络间不同协议的转化。CAN协议参阅模型中界说了物理层和数据链路层,RS485协议参阅模型中只界说了物理层。因而树立图4所示的协议模型。

  CAN的帧格局中,有一个标识符域,CAN操控器的大局滤波器会检测这个标识域,决议是否接纳本帧数据。由于RS485网络上,一切节点都会一起收到数据,因而能够为一切的RS485从设备设定同一个标识符。一个CAN节点若要发送数据给RS485设备,只需在该帧把标识符域设定为相应的标识符即可;RS485本质上仅仅是一个物理层规范,其帧格局彻底由用户自己界说。终究在RS485总线中传输还是以帧为单位,其间包含了地址信息。RS485设备会主动依据接纳到的帧,主动判别该帧是否发往本节点,然后做出相应处理。因而,在RS485设备要发送数据时,RS485-CAN总线转化器只需把RS485总线的数据进行帧打包后送入CAN的数据帧中,然后发送到CAN网络上;而RS485设备在接纳数据时,RS485-CAN总线转化器则把RS485总线的数据帧从接纳到的CAN数据帧中提取出来,发往RS485设备即可。

图4:RS485-CAN 协议模型

  3.1CAN 接口软件规划

  CAN总线数据链路层结构可分为逻辑链路操控(LLC)子层和媒体拜访操控(MAC)子层。LLC子层首要完结帧接纳滤波,超载布告和康复办理,而MAC子层结构功用模块包含发送和接纳两个部分。关于CAN总线数据链路层的各种协议现已被集成到SJA1000芯片中,运用时只要对SJA1000芯片的操控寄存器进行相应的初始化即可进行通讯,而数据的接纳和发送等也是经过读写SJA1000内部寄存器来完结的。这儿只给出SJA1000的初始化源程序,其它程序可参阅文献[2]进行编写。

  SJA1000开端作业之前,首要要判别SJA1000与微处理器的衔接是否正确,在承认正确后开端SJA1000的初始化,之后SJA1000进入作业形式,然后才能够进行数据的读写。

  typedef struct _CAN_PORTSTRUCT /*SJA1000初始化装备文件结构体*/

  {

  FIL filter; /*滤波办法*/

  LIS lisen; /*只听形式/正常形式*/

  TES test; /*自测试形式/正常形式*/

  SLE sleep; /*睡觉形式设置*/

  BAUD baud_rate; /*波特率*/

  MODEL workmodel ; /*作业形式*/

  UCHAR mask1;

  UCHAR mask2;

  UCHAR mask3;

  UCHAR mask4;

  UCHAR code1;

  UCHAR code2;

  UCHAR code3;

  UCHAR code4;

  }CAN_PORT,*CANPORTPTR;

  STATUS sja1000Init(CANPORTPTR pDev) /*SJA1000初始化*/

  {

  UCHAR value;

  canBoardInit(); /*进入复位形式*/

  canBoard_canOutByte(SJA1000_MOD,MOD_RM); /*确认CAN操控器作业形式*/

  value = canBoard_canInByte(SJA1000_CDR);

  if(pDev->workmodel == Peli) value|= PeliCAN ;

  else value &= ~PeliCAN;

  /*设置形式寄存器(只在PeliCAN形式可拜访)*/

  canBoard_canOutByte(SJA1000_CDR,value|0x48);

  value = canBoard_canInByte(SJA1000_MOD);

  if(pDev->sleep == SNORM) value &=~(MOD_SM); /*睡觉形式*/

  else value|= MOD_SM; /*正常形式*/

  if(pDev->lisen == LNORM) value&= ~(MOD_LOM); /*正常形式*/

  else value|= MOD_LOM; /*只听形式*/

  if(pDev->test == TNORM) value&= ~(MOD_STM); /*正常形式*/

  else value|= MOD_STM; /*自检测形式*/

  if(pDev->filter == SINGLE) value|= MOD_AFM; /*单向检验滤波*/

  else value &=(~MOD_AFM); /*双向检验滤波*/

  canBoard_canOutByte(SJA1000_MOD,value);

  switch (pDev->baud_rate)

  {

  case B20: //波特率为20kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x07);

  canBoard_canOutByte(SJA1000_BTR1,0x7F);

  break;

  case B80: //波特率为80kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x01);

  canBoard_canOutByte(SJA1000_BTR1,0x7F);

  break;

  case B250: //波特率为250kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x00);

  canBoard_canOutByte(SJA1000_BTR1,0x1C);

  break;

  case B500: //波特率为500kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x00);

  canBoard_canOutByte(SJA1000_BTR1,0x14);

  break;

  default: //默许波特率为20kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x07);

  canBoard_canOutByte(SJA1000_BTR1,0x7F);

  }

  canBoard_canOutByte(SJA1000_CMR,0); /*设置指令寄存器*/

  canBoard_canOutByte(SJA1000_EWLR,0x60); /*设置过错报警限额寄存器*/

  canBoard_canOutByte(SJA1000_IER,0); /*不使能一切中止*/

  canBoard_canOutByte(SJA1000_OCR,0xaa); /*输出操控寄存器设置*/

  canBoard_canOutByte(SJA1000_TXERR,0x0); /*设置发送过错计数器*/

  canBoard_canOutByte(SJA1000_RXERR,0x0); /*设置承受过错计数器*/

  canBoard_canOutByte(SJA1000_RMC,0); /*设置接纳报文计数器*/

  canBoard_canOutByte(SJA1000_ACR0,pDev->code1);

  canBoard_canOutByte(SJA1000_ACR1,pDev->code2); /*设置检验代码寄存器*/

  canBoard_canOutByte(SJA1000_ACR2,pDev->code3);

  canBoard_canOutByte(SJA1000_ACR3,pDev->code4);

  canBoard_canOutByte(SJA1000_AMR0,pDev->mask4);

  canBoard_canOutByte(SJA1000_AMR1,pDev->mask4); /*设置检验屏蔽寄存器*/

  canBoard_canOutByte(SJA1000_AMR2,pDev->mask4);

  canBoard_canOutByte(SJA1000_AMR3,pDev->mask4);

  return OK;

  }

  3.2 RS485接口软件规划

  RS485接口软件规划首要包含串口的初始化,串口中止处理等函数的编写,由于RS485接口的软件规划比较简单,所以这部分可参阅文献[4]规划,这儿省掉。

  结束语

  CAN总线是当时运用最为广泛的现场总线之一,而RS485总线是最常用的串行总线,二者之间的转化具有很高的运用价值。规划应留意以下几点:(1)RS485-CAN转化器的首要任务是将数据以最快的速度转发,流量和过失操控应由通讯两边的运用层来完结,因而规划不能过于杂乱。(2)处理速度是规划时首要考虑的一点,这将影响芯片的选型。(3)RS485-CAN的通用性取决于软件方面的规划和协议的运用,硬件上都是兼容的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/262992.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部