RS485-CAN 转换器的设计

2014-10-13来源: dzsc关键字:RS485  CAN  转换器

  1 RS485 及CAN 总线简介

  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设备即可。[page]


图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);[page]

  canBoard_canOutByte(SJA1000_AMR3,pDev->mask4);

  return OK;

  }

  3.2 RS485接口软件设计

  RS485接口软件设计主要包括串口的初始化,串口中断处理等函数的编写,因为RS485接口的软件设计比较简单,所以这部分可参考文献[4]设计,这里省略。

  结束语

  CAN总线是当前应用最为广泛的现场总线之一,而RS485总线是最常用的串行总线,二者之间的转换具有很高的使用价值。设计应注意以下几点:(1)RS485-CAN转换器的主要任务是将数据以最快的速度转发,流量和差错控制应由通信双方的应用层来完成,因此设计不能过于复杂。(2)处理速度是设计时首先考虑的一点,这将影响芯片的选型。(3)RS485-CAN的通用性取决于软件方面的设计和协议的使用,硬件上都是兼容的。

参考文献:

[1]. RS485 datasheet http://www.dzsc.com/datasheet/RS485_585289.html.
[2]. AT89C52  datasheet http://www.dzsc.com/datasheet/AT89C52+_1064535.html.
[3]. SJA1000 datasheet http://www.dzsc.com/datasheet/SJA1000_609075.html.
[4]. PCA82C200  datasheet http://www.dzsc.com/datasheet/PCA82C200+_542554.html.
[5]. TJA1050 datasheet http://www.dzsc.com/datasheet/TJA1050_649182.html.
[6]. 6N137 datasheet http://www.dzsc.com/datasheet/6N137_91364.html.
[7]. TVS datasheet http://www.dzsc.com/datasheet/TVS_1174166.html.
[8]. MAX485  datasheet http://www.dzsc.com/datasheet/MAX485+_859396.html.

关键字:RS485  CAN  转换器

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/qrs/2014/1013/article_18665.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:提高RS485通信可靠性的设计方法
下一篇:基于GPRS的恒压供水系统

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Rear View Safety推内置DVR的1080P高清摄像系统 360度无死角监测车辆及周围环境

的道路上导航。系统还可以将分割屏幕,屏幕左显示供鸟瞰图,屏幕侧显示实际摄像头视角。此外,该系统还配备触发器,能自动改变摄像头视角,倒车时使用后视摄像头。全高清系统RS-77555配备高清1080P HDMI视频输出,可以与新的Rear View Safety 7"或10" 全高清监测器集成。内置移动DVR能记录所有连接摄像头数据,以备后续回放。如果车辆发生事故,备用视频能用于保险。RVS-77555还可以与该公司接近传感器系统集成,通过图像和声音,提醒驾驶员注意车辆周围的危险情况。
发表于 2019-06-18
Rear View Safety推内置DVR的1080P高清摄像系统 360度无死角监测车辆及周围环境

示波器调试RS485通信波形图

由于笔者在调试STM32移植的MODBUS协议的时候遇到了一些问题,需要借助示波器来看波形,而关于485通信波形相关的资料网上不多,所以把自己调试过程中的波形记录下来。 硬件:STM32单片机,1个主机和10个从机,移植MODBUS协议,采用轮询机制,主机挨个询问从机,从机采集一些信息回复给主机。 原理图:使用带隔离的芯片ADM2483,PA1,PA2,PA3指的是单片机的引脚,分别是使能,TXD和RXD。 代码:基本上是http://www.openedv.com/forum.php?mod=viewthread&tid=98367&highlight=modbus 
发表于 2019-06-01
示波器调试RS485通信波形图

一加员工剧透一加7系列外放媲美华为Mate RS

还有几天就是一加7系列的国内新品发布会了,与该系列有关的信息也得了曝光,为了让消费者更好的了解一加系列,一加员工@酸数码透露了一些该系列的细节:1. 一加7系列外放媲美华为Mate RS,@酸数码称双扬声器外放效果未必好于单扬声器。因为单元差异和音腔体积和出音口尺寸和位置差异,经过测试发现一加7系列的外放媲美第一梯队的iPhone XS Max、Mate RS、S10+。2. 一加7系列拍照值得期待,@酸数码表示S10拍照好不是三星神优化,而是本身模组素质就是顶级的。带ram,光圈可变,镜头解析力高。暗示一加7系列在拍照方面采用的是三星的做法,拍照可期。3. 一加7系列会用上大内存,@酸数码说大内存正常使用时他估计很难体验出区别
发表于 2019-05-14
一加员工剧透一加7系列外放媲美华为Mate RS

PIC单片机-RS232串口通信

编写程序实现以下功能。在计算机上使用串口大师向开发板发每次发送1个字符。开发板每接收到一个数据,则交换该数据的高低4位,再发送回计算机。端口初始化时使能发送与接收,使用扫描方式接收数据,接收到数据后立即交换高低四位并发送,交换高低四位方式如下:i = ((RCREG & 0xff) << 4) | (RCREG >> 4)完整程序:/******************************************************************************** 标    题: 异步串口通讯* 功能描述: 在计算机上使用串口大师向开发板发每次发送1个字
发表于 2019-05-11

配置的雷达传感器功能强大 宝骏全新SUV RS-5将上市

宝骏全新SUV RS-5即将上市,自动驾驶辅助配置受到了很大的关注和好评。为了实现L2级别的自动驾驶辅助功能,宝骏RS-5采用了最新版本的博世ADAS自动驾驶辅助系统,在感应传感器方面,采用了77GHz毫米波雷达+多功能摄像头的融合方案,保障了智能驾驶的便利性和安全性。宝骏RS-5采用的77GHz中距毫米波雷达,相比同类型的其他雷达传感器体积更小,工艺要求更高、距离检测精度更高,其目标识别率是传统24G赫兹雷达传感器的3倍,开角达到90°,探测范围可达160m,具备全天候障碍物探测能力。通过77GHz中距毫米波雷达,宝骏RS-5主要实现了以下功能。一、ACC自适应巡航宝骏RS-5通过雷达和摄像头的配合,实现从0~130km/h之间
发表于 2019-03-05
配置的雷达传感器功能强大 宝骏全新SUV RS-5将上市

LPC2387 RS485通信

最近一款基于LPC2387方案的产品要用到RS485通信,查了下datasheet,LPC2387的Uart没有内置RS485功能,故只能采用电平转化了。最后选择了MAX485和英联的UM3085,两款芯片管脚兼容,都能进行TTL和RS485转化。因为采用半双工通信,所以用一个GPIO口同时控制DE和RE,某一刻只能是接收或发送。LPC2387的TXD1和RXD1分别和485的DI和RO连接。//RS-485收发控制示意代码,和普通串口通信相比多了485芯片的发送/接收使能设置 #define RS485_DE_RE (0x01<<9)  //GPIO P0.9控制DE,RE 
发表于 2019-02-15

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved