CAN总线与RS485总线协议转换器的设计

来源:电子发烧友整理 作者:2018年02月08日 15:28
关键词:RS485CAN总线

CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11898),是国际上应用最广泛的现场总线之一。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。

rs-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。加上总线收发器具有高灵敏度,能检测低至200mv的电压,故传输信号能在千米以外得到恢复。有些rs-485收发器修改输入阻抗以便允许将多达8倍以上的节点数连接到相同总线。rs-485最常见的应用是在工业环境下可编程逻辑控制器内部之间的通信。

本文为大家介绍CAN总线与RS485总线协议转换器的设计。

功能介绍

本协议转换器完成RS485与CAN协议的相互转换,完成数据的双向传输,并能通过RS232接口连接到上位机,通过上位机的人机交互软件可以实现对RS485网络节点参数及CAN总线验收滤波器等参数的动态配置,以达到可随时增减网络节点以及实时、方便地转换不同类型数据的目的。

硬件设计

本协议转换器的硬件电路由核心控制模块、CAN总线接口模块、RS485接口模块、RS232接口模块以及电源模块组成。其硬件结构框如图1所示。

CAN总线与RS485总线协议转换器的设计

图1系统硬件框图

本协议转换器要实现的功能并不复杂,考虑到51单片机技术成熟,应用广泛,并且价格低廉,因此在核心模块部分控制处理器选择51内核带ISP下载功能的单片机AT89S51。

主控制器AT89S51是整个系统的控制部分,控制RS485端与CAN总线端的数据通讯,以及通过RS232口对协议转换器参数的配置。核心控制模块部分的电路采用典型的51单片机电路,限于篇幅不再赘述。

CAN总线接口

本设计中CAN总线控制器采用Philips半导体公司生产的独立CAN控制器SJA1000,82C250作为CAN总线的收发器。

控制器SJA1000作为CAN接口电路中的控制部分与主控制器相连接,引脚AD0~AD7是和89S51的输出输入引脚P0.0~P0.7相接;SJA1000的片选信号脚对/CS由微处理器的P2.7口控制,P2.7为0的CPU片外存储器地址可选中SJA1000,CPU通过这些地址可对SJA1000执行相应的读写操作。而对于控制器的收发引脚TX0,TX1与RX0,RX1在本系统中

TX0、RX0可和收发器82C250的TXD、RXD接通。SJA1000中的中断输出信号/INT连接到AT89S51的/INT0端通过中断方式与单片机通信。通过SJA1000的MODE引脚可选择接口模式Intel模式MODE高;Motorola模式MODE低。本设计中,使用Intel模式。对SJA1000的VDD1~VDD3电源输入脚,外接上驱动+5V电压;而VSS1~VSS3输出接地。设计中对SJA1000提供16MHz晶振,AT89S51提供11.0592MHz晶振,它们都有各自独立的晶振电路。

82C250的CAN收发器的TXD和RXD并不是直接与CAN控制器SJA1000的TX和RX相连,而是通过高速光耦6N137后与P82C250相连,这样可以很好地实现了总线的电气隔离。单片机与CAN接口模块部分连接电路图如图2所示。

CAN总线与RS485总线协议转换器的设计

图2CAN总线接口电路图

RS232和RS485接口

由于协议转换器同时需要RS485接口和RS232接口,而AT89S51只有一个串行UART,为解决这个问题,在本设计中通过软件控制其中一个接口实现通信,也就是模拟串口程序,而RS485接口是用来实现与CAN总线之间的数据通信,对于串口收发数据的稳定性要求较高,所以将与上位机相连的RS232接口做成模拟串口,来实现通信。利用单片机的P15和P16两个引脚实现通信。

因为RS485是差分方式收发数据,所以需要更高的抗干扰能力。RS485接口的电平转换芯片MAX485E的RO、DI引脚通过光电隔离6N137连接到微处理器的UART串口的RXD、TXD引脚,接收发送控制信号由微处理器的P25引脚连接DE/RE引脚来完成。

CAN总线与RS485总线协议转换器的设计

图3RS232、RS485接口电路图

系统供电电路

为了能更好地为CAN总线提供驱动能力和抗干扰能力,本设计中电源部分采用由24V电压输入,经开关电源LM2576转成5V的电压供电,电源电路如图4所示。

CAN总线与RS485总线协议转换器的设计

图4电源电路图

软件设计

协议转换器的主要任务是实现RS485总线和CAN总线之间的通信,完成两种总线的协议转换。本设计中采用C语言完成89S51的控制程序,程序由三部分组成:主程序、初始化程序和中断服务程序。

主程序

两种总线之间的数据转换软件设计的主要任务。本设计中CAN总线和RS485两方的数据接收采用中断方式,在中断程序中设置相应的接收中断标志,然后在主程序中用查询的方式根据不同的标志来进入到相应的中断程序,CAN控制器接收到数据后输出中断信号到主控制器,引起中断,RS485总线过来的数据则是直接利用主控制器的串口中断。

初始化程序

初始化程序包括对主控制器AT89S51的初始化

和CAN总线控制器SJA1000的初始化。AT89S51的初始化主要是对总线片选、串口工作方式,串口波特率、中断等寄存器进行赋初值。SJA1000的初始化主要是对模式寄存器、时钟分频寄存器、验收滤波寄存器和验收屏蔽寄存器、总线定时寄存器以及输出控制器进行设置。在设置寄存器前,要检查SJA1000是否已达到复位模式,因为要得到配置信息的寄存器仅在复位模式可写。

中断服务程序

CAN报文的接收有查询控制接收和中断控制接收两种。考虑到更好的处理实时数据、实时响应控制命令,CAN报文采用中断控制的接收方法。主流程在中断控制的报文接收之前必须使能SJA1000的接收中断和全局中断,接收中断使能表示(RIE)位于中断使能控制器(IER)中。首先读取SJA1000的中断寄存器,然后判断是接收中断、发送中断、总线错误中断还是数据超载中断。判断出是哪种中断后进入该中断服务程序进行处理。

人机接口程序

协议转换器通过RS232接口连接到上位机,利用人机接口程序实现动态修改报文滤波、动态配置网络节点参数以及故障监听的功能。

SJA1000的验收代码寄存器和验收屏蔽寄存器的值的设置可以确定CAN总线上接收哪种类型的数据,动态地修改它们的值可以改变接收的数据类型,可以扩大协议转换器的应用环境。动态配置网络节点参数

主要是对RS485通信波特率、RS485端口的数据格式以及网络节点地址等参数进行修改。故障监听程序是利用AT89S51的P10、P11、P12三个引脚连接LED对数据通信状态的监听。

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
声明:电子发烧友网转载作品均尽可能注明出处,该作品所有人的一切权利均不因本站而转移。
作者如不同意转载,既请通知本站予以删除或改正。转载的作品可能在标题或内容上或许有所改动。
收藏 人收藏
分享:

相关阅读

发表评论

elecfans网友

分享到:

用户评论(0