来源:创易栈,排版整理:晓宇微信公众号:芯片之家(ID:chiphome-dy)

RS485作为常见的总线之一,几乎每个工控设备都在用,我们也对其熟悉不过了。我们都知道RS485双半双工通信,其CPU内部的根源是串口通信,串口通信是区分发送TX和接收RX的,在同一对差分信号线上同时传输TX、RX,就是进行方向的控制,方向的控制时机不对,数据传送是要出问题的。

例如下图1、图2中,CPU端的TX信号发送完毕后约100uS后方向引脚 拉低,切换到接收状态,但是在TX信号发送完毕后60uS从机就回复了的RX信号,由于此时还是处于RS485芯片还是处于发送状态,此时的接收数据将会被忽略,在系统层面就是体现为数据接收丢包。

图1 RS485 接口电路

有些读者会可能回想,只要从机回复数据晚一些,不要这么快速回复,就不存在这个问题了。但是从机一般都是客户的机器,我们几乎不可能要求别人更改回复时间。例如三菱的Fx3U PLC作为从机时,从主机发送数据结束到从机回复数据,只用了60uS,部分控制板,甚至回复时间在10uS以内。

研究RS485的方向切换的目标就是:RS485总线空闲时要处于接收状态,如果有主机发送数据,则置高方向引脚,发送完成及时切换到接收状态。

图2 方向脚切换时间过长的情形

一、RS485方向切换的方案1:使用反相器自动切换大部分的低成本RS232-RS485转换器采用了这种方法。具体的实现方法是:把串口的发送信号TX作为反相器的输入,反相器的输出则用来控制RS485收发器的收发控制引脚,同时在RS485收发器的A/B输出端加上上拉/下拉电阻,具体电路如图3所示。图3 使用反相器自动切换电路

在空闲状态下,串口的发送信号TXD为高电平,经过反相器后输出低电平,使485芯片处于接收状态,而RS485总线由于上下拉电阻的作用处于A高B低的状态。当发送数据时,TXD信号线上的低电平比特位控制485芯片进入发送状态,将该比特发送出去。而高电平比特位则使485芯片处于接收状态,由于RS485总线上下拉电阻把总线置于A高B低的状态,即表示发送了高电平。

简单说,这种电路,就是发送低电平时,485芯片是 发送状态,而发送高电平时,485芯片属于接收状态。优势:只需要增加一个反相器就可以实现,无需软件的干预,反相器可以使用一个三极管即可以实现,成本十分低廉(几分钱);劣势:由于上下拉电阻不可能选值太小,否则会影响正常发送的数据电平。所以这种换向模式在发送高电平时的驱动能力,并且,理论上我要求方向引脚要比数据先切换方向,但是由于方向引脚经过了反相器,达到芯片的时间变长了,比数据晚到,所以速率太高的情况容易丢包。如果需要驱动多个从设备,就会显得力不从心,并且驱动能力太弱,只能短距离传输;并且传输速度不能太快,一般使用9600bps。

二、RS485方向切换的方案2:使用软件控制方向

市面上大部分的内置RS485的产品基本都是采用此类的方案,如下图4中的RS_EN引脚。具体的 实现方式是:在空闲器件,RS_EN 为低电平,MCU处于接收状态,在准备发送数据之前,MCU会拉高RS_EN,U1处于发送状态,发送完毕之后,RS_EN重新处于低电平,U1处于接收状态。图4 使用软件控制方向切换

此类方案的关键是软件需要掌握好RS_EN引脚的高低电平的时机,假设发送完数据后,没有及时切换到接收状态,而此时从机又回复数据,此时就会引起丢包,就会出现文章开头图2中的情形。不幸的时,软件工程师的水平参差不齐,特别是在运行操作系统(Linux、WIndows等)以后,想要十分准确控制方向引脚的高低电平已经十分困难。

优势:无需增加任何的硬件成本,且RS485的驱动能力不受影响。劣势:依赖于软件控制方向引脚,如果运行复杂的操作系统,控制引脚的优先级不够高,或者软件的优化的不够好,都会导致方向引脚的切换不及时,到时数据的丢包。并且,是否丢包还取决于从机的回复时间,测试过程不一定能够测试出来。

三、RS485方向切换的方案3:使用触发器控制方向

为了克服反相器换向的缺点,出现了一种由RS触发器控制的自动换向技术,如图5所示。这个电路的关键是反相器和RS触发器之间的由二极管、电阻、电容组成的充放电电路。在空闲状态下,485芯片仍处于接收状态。当TXD信号线上发送数据的低电平起始位时,反相器输出高电平,通过二极管为电容迅速充电,使RS触发器R端为高电平,S端为低电平,触发器输出高电平,把ISL3152E置于发送状态;当TXD信号线转换为高电平时,反相器输出低电平,电容通过电阻缓慢放电,使得R端暂时仍处于高电平状态,加上S端的高电平状态,使触发器的输出保持前面的高电平状态,485芯片仍处于发送状态。电容经过一段时间放电后,R端电压转变为低电平,则触发器输出低电平,把485芯片置回接收状态。通过选择电阻和电容值,我们可以控制放电速度,使得一个低电平的起始位足以在整个字节发送。此类方案参数一致性非常差,实际使用的都是技高人胆大的。图5 使用触发器切换方向优势:无需软件干预切换方向,驱动能力强(取决于RS485芯片)。劣势:1.增加的器件较多;2.不同的波特率需要匹配不同的RC参数3.温度、老化、一致性等问题,会导致RC参数变化,从而导致切换时间错乱导致丢包。四、RS485方向切换的方案4:max13487芯片为了克服软件参与的方向控制不确定性,美信公司发布了宣称首款支持芯片自动换向的RS485芯片,如下图6,对比其他的RS485芯片,MAX16487的/RE引脚有两个用于:(1)/RE为低电平时,打开RO方向的接收数据。(2)/RE为高电平时,芯片进入自动方向切换模式。

一般使用我们将/RE连接高电平,即自动换向模式。

图6 MAX13487 内部框图

由于美信没有公布内部的逻辑原理,只描述内部有一个状态机,我们只能外部猜测其工作原理:

1.空闲模式下,数据流方向为RO方向;此为状态1;2.当串口端有数据发送时,由于起始位为低电平,经过逻辑功能D后,A<B,经过COM3.逻辑功能且反相后,RI为高电平。此状态为数据发送状态2。4.经过一系列的逻辑运算(以RI、DI为输入,但是不知道其内部的原理);状态机检测到数据发送完毕,芯片变成接收状态1。优势:由芯片自动切换方向,无需软件干预切换方向,驱动能力强,通信速率高,MAX13488 宣称最高可以到16Mbps,与普通的RS485芯片性能一样。劣势:价格比普通的RS485芯片贵一倍以上。五、RS485方向切换的方案5:周立功芯片RSM(3)485PHT周立功公司将RS485的三个相关的功能模块:DC电源、隔离、RS485芯片三合一,封装在同一个芯片内部,由于没有内部的资料,我们无法获知其内部的逻辑功能。官方资料宣称最高速率可以达到500Kbps,对于一般的应用足以。优势:由芯片自动切换方向,无需软件干预切换方向,驱动能力强,通信速率高,DC电源、隔离、RS485芯片功能三合一,节省板卡空间。劣势:价格比分立器件搭建RS485电路贵,且一旦损害需要要整体更换。图7 RSM(3)485PHT原理图六、总结上述我们提供了5种RS485自动切换方向的方法:分别是反相器法、软件控制法、触发器法、美信MAX13488芯片、周立功RSM(3)485PHT。反相器法由于驱动能力太弱、速率太低,仅适用于要求不高的调试场合,工控场合慎选。软件控制法对软件的要求较高,特别是带操作系统的芯片,软件控制的时机较困难。触发器法由于参数一致性太差,只适合波特率恒定、速率不高的场合;美信以及周立功提供的方案已经芯片化,经过了大量的市场验证,且有大公司做背书,可靠性、温度性都有很大的保障,优先推荐。

往期好文合集

国内外OTP单片机品牌大汇总 国产芯片替代正当时,一文看完国外芯片都有哪些替代! C语言#和##连接符在项目中的应用(漂亮) 老宇哥手把手教你分析阻容降压电路,你GET到了吗? 【实例分析】晶振为什么不能放置在PCB边缘? 

rs485调试软件_5种RS485切换方向的方法及优劣势分析相关推荐

  1. 5种RS485切换方向的方法及优劣势分析

    来源:创易栈,排版整理:晓宇 微信公众号:芯片之家(ID:chiphome-dy) RS485作为常见的总线之一,几乎每个工控设备都在用,我们也对其熟悉不过了.我们都知道RS485双半双工通信,其CP ...

  2. RS485方向切换的几种方案及优劣势分析

    关注.星标公众号,不错过精彩内容 来源:创易栈 RS485作为常见的总线之一,几乎每个工控设备都在用,我们也对其熟悉不过了.我们都知道RS485双半双工通信,其CPU内部的根源是串口通信,串口通信是区 ...

  3. 物流软件行业Top企业概况与各地发展优劣势分析

    贝哲斯咨询详细分析并预测了中国物流软件行业的发展现状和前景.首先对中国物流软件行业的发展现状和发展环境进行了简要分析.其次,详细探讨了宏观环境.细分产品市场分布.下游应用市场分布.竞争格局等因素对行业 ...

  4. rs485调试软件_【乐创“芯”说】你想知道的RS485

    文/Edward   TTL串口 TTL串口是我们日常做电子产品调试时候常用的一种通讯口,你可以用它来控制外设芯片,可以用它来做调试输出.之所以TTL串口这么受大众欢迎,是因为在硬件层面,它连接简单, ...

  5. python代码解读软件_5种带你轻松分析Python代码的软件库

    [51CTO.com快译]通常,人们会使用两种速度来衡量某种编程语言的优劣,即:开发速度和执行速度.对于Python而言,大家往往受益的是它能够快速地编写代码,而忽略了它是否能够快速地运行,并及时完成 ...

  6. 好用的python学习软件_5种好用的Python工具!Python学习分析

    学习Python的过程中,各种各样的工具必不可少,它可以极大的提高编程效率,今天小编为大家介绍5种好用的Python工具,希望对你有所帮助. 1.Python Tutor 是由Philip Guo 开 ...

  7. PHP创建数组的方式_5种PHP创建数组的方法

    本节内容: php数组创建实例 . 1.使用array()创建数组 array()创建数组是我们在PHP开发过程中最常用到的一种方式,准确来说array()是一种结构而不是一个函数. 复制代码 代码示 ...

  8. 打包C#软件两种典型出错的解决方法,以及如何快速定位你的问题出在哪里

    本文受众:像我一样的编程菜鸟 如何打包一个C#的方法网上有很多,不再赘述,看本文之前请确保知道怎么使用set up project插件,不懂得看这里. 废话:编程的快感来自于很多方面,对于像我一样的菜 ...

  9. 几种RS485隔离通讯的方案介绍

    RS485具有抗干扰能力强.成本低等特点,广泛应用于工业智能仪表,通讯设备等各个领域. RS485电路可以分为非隔离型和隔离型.隔离型电路是在非隔离型电路的基础上增加隔离性能,使得电路具有更强的抗干扰 ...

最新文章

  1. pycharm 查看代码行数_【收藏】提高PyCharm效率的10个小技巧
  2. 金融领域下的数据挖掘算法应用:XGboost模型
  3. flutter 页面加载动画_Flutter撸一个加载动画
  4. int signed in mysql_【转】mysql 中int类型字段unsigned和signed的区别
  5. 自如CEO熊林接任董事长
  6. Vcenter6.5 Administrator账户密码忘记或者过期无法登陆解决办法
  7. 百度要召集 600 名深度学习开发者搞事情? 首届深度学习开发者峰会等你来
  8. springboot快速搭建图书管理系统
  9. java类中代码执行顺序
  10. 发工资条软件如何使用?
  11. 批量获取中国所有行政区域经边界纬度坐标(到县区级别)
  12. PDF转CAD格式步骤再简单
  13. oracle语句执行过程
  14. ARP攻击实战以及防御手段
  15. 短视频运营方法分享,三个方面要注意,合理运营才能吸粉引流
  16. hget和get redis_redis hget hash命令简介
  17. 固网打印机服务器无线设置,通过设置连接打印机
  18. Springer-Verlag免费下载图书400本
  19. 浅谈中国2050年人均受教育年限问题
  20. Pytorch深度学习实战1-6:图解牛顿迭代法,牛顿不止力学三定律

热门文章

  1. 配置sctp_5G站点网优参数配置指导书
  2. linux服务器性能监控命令汇总(一)
  3. nginx多进程,日志不乱序
  4. hashmap 存的是对象的引用地址_Java互联网架构-面试虐我千百遍HashMap源码真讨厌...
  5. MySQL性能优化的最佳20+条经验(转)
  6. Java中的异常全面讲解
  7. 【系统分析与设计】软件开发模式之敏捷开发(Scrum)分析
  8. 【Deep Learning笔记】一个很好的神经网络相关定义(看不懂你来打我)
  9. 使用keras时下载VGG19过慢的解决方法
  10. Java深入研究_Java深入研究【1、object类】