DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 862|回复: 0
打印 上一主题 下一主题

[接口电路] 基于LPC2119的RS485-CAN总线转换器设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-18 00:43:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1RS485CAN总线简介RS485是工业控制领域中一种传统的总线技术。然而,随着工业控制的复杂度提高,RS485总线在系统容量,通讯距离,不能支持多主结构等方面的缺陷开始逐渐显现。CAN总线是从20时纪80年代初发展起来的一种新型现场总线技术,它的总线长度最远可达10千米(速率5Kbps以下),数据传输速率最高可达1Mbps(通讯距离40米以内)。它在多主方式下工作,不分主从;节点数的数目主要取决于总线驱动电路,目前可达110个。采用非破坏总线仲裁技术,即使网络负载很重也不会出现网络瘫痪现象。此外,CAN的每帧信息都有CRC校验和其它检错措施,有很好的检错效果[1]。由于CAN总线具备以上优点,它目前已经被广泛应用到汽车电子、电力系统、航空工业和自动工作等领域中,并形成了国际标准,被公认为几种最有前途的现场总线之一[2]。然而,由于RS485和CAN总线的电压不兼容,帧格式也不相同,因此,大量现有的RS485总线设备若要在CAN总线上使用,就必须使用RS485-CAN总线转换器。
2.系统硬件设计2.1 系统硬件原理框图

图1 :RS485-CAN总线转换器原理框图RS485-CAN总线转换器由微控制器、CAN总线控制器、CAN总线收发器、UART控制器、RS485总线收发器组成,其原理框图如图1所示。微处理器通过对CAN控制器和UART控制器的操作,经过CAN总线收发器和RS485总线收发器的电平转换,分别实现了在CAN总线上接收和发送数据以及对RS485设备上数据的读写。当要向RS485设备写数据时,就将要写的数据发送到CAN总线上。通过CAN总线收发器的电平转换之后,CAN控制器将收到一帧CAN数据,当确认这帧数据是发往本节点时,微控制器就将数据发送到UART控制器上,通过RS485总线收发器传送到RS485设备上。RS485设备发送数据时,数据将通过RS485和UART控制器传送到微处理器上。微处理器就将这个数据通过CAN控制器和CAN总线收发器发送到CAN总线上,让其它节点接收。2.2 系统电路设计本文介绍的RS485-CAN总线转换器选用飞利浦公司的LPC2119作为系统的微控制器。LPC2119是一款集成有CAN和UART控制器的ARM7核的工业级单片机。具有低功耗和稳定可靠的特点[3]。由于LPC2119本身集成了CAN和UART控制器,因此只需再增加一块CAN总线收发芯片和一块RS485总线收发芯片,以及一些外围器件即可完成系统的电路搭建。CAN总线收发器选用TJA1050,该芯片是飞利浦公司生产的、用来替代82C250的高速CAN总线收发器。除了保留82C250的主要特性外,由于TJA1050采用了先进的SOI(silicon on insulator)技术,因此抗电磁干扰性能得到大幅提高。[4]RS485总线收发器选用了Sipex公司的SP485E,该芯片是一半双工收发器,具有增强型ESD性能,可承受15kV的人体放电模式和接触放电模式。系统电路图如图2所示:

    图2: 系统电路图                          

图3: 微控制器初始化流程图图中,TD1和RD1分别为LPC2119内建CAN控制器的发送和接收引脚,TXD0和RXD0分别为LPC2119内建UART控制器的发送和接收引脚。TJA1050的S引脚是静音模式选择引脚。S引脚高电平时,TJA1050进入静音模式,发送器完全禁能,执行只听功能。SP485E的/RE引脚和DE引脚分别是接收使能和发送使能,一个是低电平起效,一个是高电平起效。由于SP485E是一半双工的收发器,因此可以把/RE引脚和DE接在一起,由微控制器的一个IO来控制SP485E是处于接收状态还是发送状态。
3.系统软件设计系统的软件设计主要包括三大部分:系统初始化程序、RS485设备数据发送中断程序,RS485设备数据接收中断程序。3.1 系统初始化程序系统的初始化包括微控制器的初始化、UART控制器初始化和CAN控制器初始化。微控制器初始化的流程可见图3(源代码略)。
                          
                       
                          
                                然后是UART控制器和CAN控制器的初始化。下面给出这部分的源代码:/* UART0初始化 */uint8 UART0Init(uint32 bps){uint16 FdivINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05;    // 选择管脚为UART0 U0LCR = 0x80;                          // 允许访问分频因子寄存器 Fdiv = (Fpclk / 16) / bps;                   // 设置波特率 U0DLM = Fdiv / 256;U0DLL = Fdiv % 256;U0LCR = 0x07;                       // 禁止访问分频因子寄存器 U0IER = 0x05;                        // 允许接收和发送中断U0FCR = 0x87;                       // 初始化FIFO}/* CAN初始化 */void InitCAN(eCANNUM CanNum){            HwEnCAN(CanNum);   //硬件使能CAN控制器       while (SoftRstCAN(CanNum));    //软件复位CAN控制器       while (SetErWarmVal (CanNum,USE_EWL_CAN[CanNum])); //设置错误警告寄存器       while (SetCANbaudRate (CanNum,USE_bTR_CAN[CanNum]));      //初始化波特率       VICDefVectAddr =(INT32U)CANIntPrg;  //初始化中断       VICIntEnable |=(1本文设计的RS485-CAN总线转换器的电路简单可靠,操作方便。通过它,任何RS485设备都可以无需做任何修改就可以直接放到CAN网络中使用。在总线转换器的软件设计中一般应该遵守的一条原则是:不要将其功能设计的过于复杂。因为它的主要任务是将数据以最快的速度转发。至于流量和差错控制应由通信双方的应用层来完成。而本总线转换器的软件设计,很好地达到了这一要求。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-5-17 02:21 , 耗时 0.091592 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表