新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > RS-485总线的方向控制如何实现?要注意什么?

RS-485总线的方向控制如何实现?要注意什么?

作者:时间:2016-12-15来源:网络收藏
明:本篇原则上跟踪通讯技术的帖子“rs485%u7684%u65B9%u5411%u63A7%u5236%u4E00%u822C%u600E%u4E48%u5B9E%u73B0">请教:rs485方向控制一般怎么实现”编写,----我不写那个过程,让时间跟随那个过程。目的是为了体现一个事从开始走到结果出来的可能是不寻常的过程。不便之处请读者见谅。

A:准双工模式的RS-485会涉及这一问题,对于对于4线制的RS-485,因为信号是单向传输的,不存在这样的问题。因为准双工要在一条总线上传输上行和下行的信号。要解决这个问题,分两个方面考虑----我们在分析这个问题时将我们认识到的都写进去,以便给大家提供一个电路设计时、考虑和分析处理问题的综合参考,这也许不是很通用的范例,但对我们来说,有这样的例子已经是很满足的“范例”了。值得提醒的是,部分同学可能认为高手很特别,其实不然,他们会的东西你可能早知道大概了,但他们手里的知道与多少存在点生疏的情况相比,他们的知识比较活而有序,而你的比较散乱而无序,象一盘散沙,多与他们交流,你很快就会发现自己离高手的差距并不大,只是在应用上,时不时出现这个想不到那个想不到。他们能这样是靠积累得来的,靠自己的磨练出来的。你付出了同样的劳动,应该不难赶上和超过他们。

本文引用地址:http://www.eepw.com.cn/article/201612/330159.htm

一、注意事项----设计电路前要考虑什么问题?

存在这样的问题的位置有2处:收发节点和线路中继器。为了防止驱动器冲突,必须考虑方向控制的问题。如图,理论上有接收优先和发送优先方法。如图1中的上和下的两个接法,是接收优先的方法。所谓接收优先,就是如果处于接收状态,硬件电路自动关闭发送功能;反之,如果电路处于发送状态下硬件电路自动关闭接收功能,甚至可以关断接收器进行发送,那么就是发送优先。

事实上,发送优先的方法是不可行的,但人们往往最先想到采用这种方法。因为如果电路存在接收数据的时候已经说明其它节点的驱动器也在工作,如果这时强行发送数据不但会自己的数据发送不成还会破坏其它节点正在发送的数据。因此,对于两线制的RS-485来说,只能采取接收优先的方法。这是用RS-485做信号双向传输时首先要注意的问题。

另一个问题是要注意RS-485的定义和数据的形式:线路侧和设备侧,有效数据都是低电平而不是高电平,这是RS-485的定义所决定的。如图2,发送器和接收器两部分都如此。(如需了解为什么要选择是低电平有效,请参阅“Q115.数字电路为什么是低电平有效的多?”)。数据形式是不可以控制的,如连续或间断地出现0或1,在此期间,接收器不能因为一时的电平转换就释放总线给发送器,以便让接收器可以收到连结的1(通常0没有问题,因为我们考虑问题就是从它开始的)。

二、如何实施?

表面上接收优先很容易实现,但实际上要考虑的问题并不是那么简单的。我们下面把文件写长一点,逐个将问题加以细剖。

1 目标及对目标的理解

如果线路收发器有单片机,问题比较容易解决,方向控制由节点主机的I/O实施控制就是了。不过,这并不是绝对没有问题。毕竟它也要处理时间。我们现在的目标是最大限度的避免软件控制而使用硬件控制,并适合线路中继器没有单片机支持的要求。

如果节点类似于中继器性质,那么就不会再有单片机支持。这时,只有依靠硬件实现。纯硬件实现,可以避开软件问题,工作可靠性和对线路数据的破坏性要下降。因此,下面我们重点分析讨论这个问题。

如图1,我们已经否定了中间一个图的发送优先方式----狠狠地给它打一个叉叉!那么,剩下的双向转发电路还是已经是否完善了?观察发现,当线路处于空闲状态或一旦输出高电平时,所有接收器都将被锁定在高电平输出----所有的接收器都处于被禁止状态而没有一个可以能被打开----无论此时线路上A、B端是高电平还是低电平,都不能为接收器所接收。与此同时,此时的驱动器是全部打开的。不论4脚的电平是高或是低,都被直接送出线路A、B上,这样是无论哪个节点都在“发送”数据,因而,也无论哪个节点也发送不了数据!可见,图1的方法过于简单,不能使用,只能作为一种原理性思路。

2 基本思路----了解矛盾的要点

从上述分析可以发现,不论接收器输出高电平还是低电平,都要关闭驱动器才能保证接收不被发送器的输出干扰与破坏总线上的数据。要做到这点,似乎很矛盾。但我们也知道,总线上必定要有空闲时间的,不然就不能正常传输数据了。如何识别正在传输高电平(数据1状态)和空闲状态并利用两者的差异来解决所面临的问题,既是我们要解决的矛盾,也是我们现在的设计任务。为了在这种看上去很矛盾的情况下达到我们的目的,我们先进行电路状态确认:

  • 发送器的屏蔽----为了在不发送数据时不管总线是真正空闲或是连续处于发送1的假空闲状态、正在接收0的真占用状态,控制电路仍然使发送功能处于关闭状态(被屏蔽);
  • 发送器的开启----而只有在确认不是正在接收数据时再通过“发送控制”信号来撒销对发送功能的屏蔽就是电路要实现的功能----体现了完全的接收优先的前提;
  • 防止数据倒灌----当然,发送时数据不能倒灌回来(发送时,接收控制端必须为低电平)。如若不然,自己发送的低电平信号反过来锁死发送器就无法“发送”数据了。
  • 状态控制小结----只有在节点确认数据线空闲后再主动去开启驱动器并占用总线。具体上可从数据的特点下手:总线上是不会连续多次发送全1或全0的数据的,因此,如果利用这一特点作为触发事件,每次给总线以一定的占用时间t就可以解决问题。硬件上能实现这个要求的就是单稳态触发器。

3 换向控制

现在让我们的看看圈圈设计的一个电路(图3)----这个电路是他改了几次后出来的,电路在工作上有单稳态电路的特点,电路图如图3所示。详见通讯技术的帖子“请教:rs485的方向控制一般怎么实现”(因本篇跟踪此帖进行修改,故而标题就那样起了)。圈圈的这个图,除了参数需要调整外,原理是基本上可行的,目前的问题是(不管是不是高速传输),可能因触发开通时间影响导致最早发送数据丢失或损坏(因为C1和R3是有时间常数的,虽然充电时是经过Q1进行,时间很短,但不能不考虑数据被破坏的可能。稍后详之。)。原理/逻辑上,如果不考虑接收高电平数据,Q2和Q4还可以省去。电路中最值得注意的是R2的设置比较妙,它是一个“软”下拉电阻:在C2的维持下,即使存在持续接收高电平时有“发送”信号,也由于Q3的大电流作用而屏蔽了Tx信号的下拉。这个电路,开始看C2是多余的,但注意到存在连续高电平的数据后就能明白少不了它。只是它的取值比较困难----既要考虑维持连续接收高电平时通过Q2为Q3提供电流,也要考虑时间常数的问题。另外,仅仅从接收器来看,C1是多余的,但它同样存在连续发送高电平数据的问题,因此不能少。好在C1和C2的时间常数并不耦合,具有相互独立性,因此,调试还是比较容易些。

从以上分析看出,完善电路的接收控制后,最关键的问题是C1和R3处DE(高电平数据发送使能)和/RE(低电平数据接收使能)引脚的电平问题,即充电时间受制于Q1的导通电阻,应当因此而带来的一些影响。

总的来看,真正传输数据前先打开驱动器的条件不应改变,只有这样才能保证数据可靠地传输(按常规就是这样做的)。现在的问题是:打开驱动器的时间总是要占用时间的,要求还必须是低电平,高电平不起任何作用。同时,直接用数据打开驱动器是不可取的,这样做有损坏数据的危险。因此,可以这样说,设计思路上与使用I/O口先打开DE再发送数据的思路是一样的。为了达到不需要I/O干预,那么就需要使用专门的开启代码机制解决吧。

通过线与让I/O控制先送出开启电平来开启驱动器比之由数据线先送一个字节开启代码相对简单,虽然电路稍为复杂一些,但不对接收方识别提出要求。线与的方法优点是之一占用时间少又类似常规机制;第二个优点是节省光耦,即在线路采用光隔离措施时能与数据线共用一个光耦。但必须在发送真正的数据前及时退出。为了及时准确控制,感觉用单稳态触发器为好。图3的电路,影响时间常数的主要因素是数据速率。速率高,时间常数要小些,速率低,时间常数要大些。调试相对难是这个电路的不一定的不足。不过,要注意这个电路的两个时间常数并不相同,原因是C2要经过Q4的发射结放电,而C1不存在这样的问题。该电路的不足还有收发控制电平不是数字信号而是模拟信号。

编辑中……

参见图2的真值表。只要把SN75LBC184的2、3脚接到1脚就可以实现自动实现方向控制了。这时,要求控制器能够自动侦测线路空闲状态。只有在到总线空闲一定的时间后才能实施自己的数据发送(由波特率决定)。

为了解决这个问题,可以按图3的方法进行,图1只能作为理解接收优先的简易电路看待。

图1 75LBC184双向传输.gif

图2

图3 RS-485的双向传输之换向控制.jpg

编辑中

。[一点知识:程序跑飞是常有的事,因此,我们不可能排除一个节点会抱死总线的问题发生。同样,虽然我们可以认为使用看门狗以后可以解决程序跑飞的问题,



关键词: RS-485总线方向控

评论


相关推荐

技术专区

关闭