历史上的今天
今天是:2024年12月26日(星期四)
2019年12月26日 | 基于PIC18单片机的CAN RS485转换器的设计
2019-12-26 来源:elecfans
RS-485总线以双绞线为物理介质,工作在半双工的通信状态下,即同一时刻总线上只能有一个节点成为主节点而处于发送状态,其它所有节点必须处于接收状态。如果同一时刻有两个以上的节点处于发送状态,将导致所有发送方的数据发送失败,即总线冲突。
为了避免这种总线冲突问题,RS-485总线必须具备:
①以工作模式来说,一般的RS-485总线工作在主从模式下;
②从通信节点来讲,RS-485总线上的节点必须具备可以将自己的驱动器切换到高阻态的功能。
以上是为适应RS-485总线的特殊之处而采用的措施,这样同时也带来了一些不足。首先,这种总线工作方式在很多对实时性、可靠性要求高的工业控制场合有较大的局限性;其次,对驱动器实行的“发送态—高阻态”切换以及切换延迟等功能要求会使编程变得复杂。同时在上电瞬间、CPU损坏或者程序跑飞的情况下,还需要考虑复杂的故障保护等问题,否则将容易引起总线故障。
控制器局域网CAN-bus (Controller Area Network)是国际上应用最广泛的现场总线之一。最初CAN-bus被设计作为汽车环境中的微控制器通讯,意在车载各电子控制装置ECU之间交换信息,从而形成汽车电子控制网络。如今,作为一种技术先进、可靠性高、功能完善、成本合理的远程网络通讯控制方式,CAN-bus已被广泛应用到各个自动化控制系统中。而且它在通信能力、可靠性、实时性、灵活性、易用性、传输距离等方面较RS-485总线有着明显的优势,因而用CAN总线取代RS-485总线将是大势所趋。
基于RS-485网络在现场的广泛应用,目前完全放弃RS-485网络系统是不现实的。但可以考虑一种折衷的办法.就是在系统保留现有RS-485系统硬件结构的基础上添加一个CAN-bus接口,本设计的CAN485智能转换器就具有这样的现实意义。它可以实现RS-485网络与CAN网络的互联,其系统原理框图如图1所示。
1 CAN-485转换器原理
图2所示是一种CAN-485智能转换器的原理框图,本设计采用PIC18F258单片机为核心,该单片机自带CAN收发接口,因此可简化硬件设计,提高运行效率。PIC18F258的主要特征如下:
◇通过ISO CAN标准测试;
◇执行CAN协议:CAN1.2 CAN2.0ACAN2.0B;
◇标准和扩展数据模式;
◇0-8位数据长度;
◇可编程速率高达1 Mbps;
◇2个数据接收缓冲器;
◇6个完全接收滤波器,2个对应高优先权缓冲器,4个对应低优先权缓冲器;
◇2个完全接收掩码器;
◇3个具有优先权的发送缓冲器。
由于单片机的输出电流比较弱,难以驱动光电隔离器,为保险起见,信号输入光耦前要经过74HC573锁存;同样为了增加信号驱动能力,经过隔离的信号要再次经过74HC573锁存。
2 软件设计
系统的软件设计主要包括初始化程序、CAN接收中断服务程序、USART接收中断服务程序、主程序及应用层通信协议转换程序等。
初始化程序用于设置CAN模块的通信波特率、工作方式、发送的优先级、接收邮箱和发送邮箱及对应的接收过滤器和接收屏蔽器等。其初始化程序流程图如图3所示。
CAN接收中断服务程序主要用来接收CAN总线传输过来的数据帧,并对其进行帧校验,如果出错则要求重发,若数据帧正确接收,则将完整的数据帧存人到提前开辟的环形缓冲器中,为后面的数据处理和协议转换做好准备。其CAN接收中断服务程序流程图如图4所示。
USART接收中断服务程序主要用于接收来自RS-485总线的串行数据,并将完整的数据帧传送到另外一个环形缓冲器。其流程图和设计思想与CAN接收中断程序类似,不再例举。
协议转换程序需要参照现场RS-485系统原有的协议,然后由用户通过配套软件对通信帧的格式进行相应的设置。进行配置时,PC机必须通过RS-485接口来访问RS-485/CAN智能转换器,通常PC机的RS-232接口使用RS-232/RS-485转换器。成功设置后,就可以实现RS-485与CAN通信帧格式的相互转换。
本系统的主程序部分的设计比较简单,主要为调用初始化程序,扫描发送缓冲器是否为空,不空则在空闲时根据其优先级将CAN通信帧或RS-485串行通信帧发送出去,并不断扫描,等待中断的产生。
3 结束语
利用CAN485智能转换器可实现RS-485网络与CAN网络的互连,且智能转换器的通信波特率可调,工作模式也可控制,对于不同协议的RS-485网络,只需通过软件对转换器进行相应的初始化设置,而不必对硬件进行改动,因此可以满足绝大多数场合的使用要求。但是该方案不能充分体现CAN系统的优越性,仅适合新系统与旧系统并存、整体性能要求不太高的场所。因此,用CAN总线取代RS-485总线将是大势所趋。
史海拾趣
|
动手准备元器件之前,最好对照电路原理图列出所需元器件的清单。为了保证在试制的过程中不浪费时间,减少差错,同时也保证制成后的装置能长期稳定地工作,待所有元器件都备齐后,还必须对其筛选检测。 在正规的工业化生产中,都设有专门的元器件筛 ...… 查看全部问答> |
|
智能大厦是人群高度集中、信息大量流通和传播、业务种类相当复杂、重要设施和档案资料非常集中的 场所,实现智能大厦的高度安全是达到智能大厦的总体智能目标的重要保障。 1.安防系统在智能大厦中的地位 1)安防 ...… 查看全部问答> |
|
winXP下,gprs modem,通过串口连的,同时PC上还有一个phone modem,每次设置“用拨号调制解调器连接”的时候,总是自动选择phone modem,请问应如何设置才能通过GPRS modem拨出去?… 查看全部问答> |
|
请教大家一个问题,当我的S3C44B0板子上的FLASH里没有任何程序,或者说我直接给它檫除了,这样我能使用AXD通过JTAG口在SDRAM里对他进行仿真调试吗?有人说不行,我尝试过,程序总是跑飞了,据说是因为硬件没有初始化,但我调试前在AXD里使用命令ob ...… 查看全部问答> |
|
大家好,我一直在使用znFAT32,我遇到个很紧急的问题,大家能帮解答下吗? 我创建一个txt文件然后一直往里添加数据znFAT_Add_Dat(struct FileInfoStruct *pfi,UINT32 len,UINT8 *pbuf),但是添加到17.2 MB (18,064,053 字节)时,程序就出不来了 ...… 查看全部问答> |
|
ADC获取某点电压值,范围只有0~1.65v,M4的内部参考电压不是3.3v吗? 我用了 ADCReferenceSet (ADC0_BASE,ADC_REF_INT); 但是结果没有用。 M4可以接入更高的参考电压吗? #include \"stdint.h\" #include \"stdbool.h\" #include \"inc/hw_mem ...… 查看全部问答> |
|
R7F0C80212套件试用之开发环境搭建2---代码自动生成工具code generator 本帖最后由 yang_alex 于 2014-9-8 08:05 编辑 R7F0C80212套件试用之开发环境搭建2---代码自动生成工具code generator 我看过好几家嵌入式处理器厂家的自动代码生成工具,其实所谓的自动代码生成工具主要还是根据开发工程师的需 ...… 查看全部问答> |
|
最近几天刚刚回学校,就受到快递小哥连环夺命催,我要是再回来晚几天,这块小巧可爱的板子就要跟我说再见喽,迫不及待拆开快递,上电,绚烂的LED灯光效果映入眼帘,啥都不说,这手感,赞。 之前做过一个SWD转接头,正好用上。 打开样板工程,可能 ...… 查看全部问答> |
|
一、了解EMC问题三要素、电磁骚扰的特性、电磁骚扰源和传播途径,掌握五个层次EMC设计法则,坚持利用EMC规律,趁早考虑和解决EMC问题;遇到PCB必须重新设计或结构必须重新设计时,大家只有后悔EMC考虑得迟了。治病不如 ...… 查看全部问答> |




