以上三幅图大致展示了485芯片的收发特性,这里涉及一个重要概念。
RS485具有出色的抗噪性和抗干扰能力,能够实现远距离传输,并支持多点通信,因此在工控行业被广泛选用作串行接口。485标准规定了2线制、半双工、多点通信的电气特性。其采用两线差分信号传输数据,有效抵抗共模干扰。由于工作在半双工模式下,通信时需要进行收发状态的切换。目前,常见的485收发切换方案主要有以下几种:
-
传统RS485电路(带收发控制脚非隔离RS-485电路)
传统的485应用电路如下图所示,采用3线控制,包括UART_RXD、UART_TXD和收发控制端UART_CON。
控制策略如下:UART_CON为低电平,485处于接收状态;UART_CON为高电平,485处于发送状态。通过切换UART_CON的电平来达到485收发状态的切换。
2.硬件自收发切换 非隔离RS-485电路
带收发控制脚的485在编程时需要切换控制端电平,增加了程序的复杂度。为了编程方
便,常常将电路改为如上图所示的自动收发电路。这种采用分立元件搭建非隔离自动收发
RS485电路的优点在于控制简单,收发控制脚不需要程序干预。
虽然采用分立元件搭建的非隔离RS485自动收发电路解决了带收发控制脚非隔离RS485电路
编程上操作复杂的问题,但受三极管切换速度、收发器内部接口阻抗等影响,分立元件搭
建的自动收发切换电路降低了系统稳定运行的最大波特率。
3.收发切换隔离RS485电路
带有隔离电路的485是最稳定的设计,需要选择隔离485芯片以及隔离电源,此方案成本相对于前两种方案会高很多。
下面介绍一种485硬件收发切换电路实例。
485芯片采用MAX485芯片,电路使用NPN三极管开切换收发。控制原理是:MCU的UART的TX
和RX引脚需要连上拉电阻(TX和RX在没有通信时均是高电平),防止刚上电TX和RX引脚电
平不稳定引起收到扰乱数据。A上拉电阻B下拉电阻,终端并联120欧姆电阻,D10、D11、
D12为三个防雷防浪涌的TVS管。
接收:默认没有数据时,UART_TX为高电平,三极管导通,MAX485芯片RE低电平使能,RO
接收数据使能,此时从485AB口收到什么数据就会通过RO通道传到MCU,完成数据接收过
程。
发送:当发送数据时,UART_TX会有一个下拉的电平,表示开始发送数据,此时三极管截
止,DE为高电平发送使能。当发送数据‘0’时,由于DI口连接地,此时数据‘0’就会传
输到AB口 A-B0传输‘1’,完成高电平的传输。
PS: 此时有人肯定也会有疑惑,发送数据‘1’,三极管导通RE低电平有效应该是接收使
能,为什么芯片会是高阻状态?
因为UART发送收据会有一定的格式,数据均以“位”为最小单位进行传输。在收发数据之
前,UART之间要约定好数据的传输速率(即每位所占据的时间,其倒数为波特率)、数据
的传输格式(有多少数据位、是否有校验位、奇校验还是偶校验、是否有停止位)。平时
数据线处于“空闲状态”(1状态)。当发送数据时,TX由‘1’变为‘0’维持1位的时
间,这样收方检测开始位后,再等待1.5位时间就开始一位一位的进行数据传输。意思是
说,已经确定好发送状态,电路发送‘1’此时RE有效,接收有效但有由于它处于发送阶
段,此时芯片会处于高阻状态。
三种常用电路如下:
1、基本的RS485电路
上图是最基本的RS485电路,R/D为低电平时,发送禁止,接收有效,R/D为高电平时,则发送有效,接收截止。上拉电阻R7和下拉电阻R8,用于保证无连接的SP485R芯片处于空闲状态,提供网络失效保护,提高RS485节点与网络的可靠性,R7,R8,R9这三个电阻,需要根据实际应用改变大小,特别是使用120欧或更小的终端电阻时,R9就不需要了,此时R7,R8使用680欧电阻。正常情况下,一般R7=R8=4.7K,R9不要。
图中钳位于6.8V的管V4,V5,V6,都是为了保护RS485总线的,避免受外界干扰,也可以选择集成的总线保护原件。另外图中的L1,L2,C1,C2为可选安装原件,用于提高电路的EMI性能.
2、带隔离的RS485电路
根本原理与基本电路的原理相似。使用DC-DC器件可以产生1组与微处理器电路完全隔离的电源输出,用于向RS485收发器提供+5V电源。电路中的光耦器件速率会影响RS485电路的通信速率。上图中选用了NEC的光耦PS2501,受其影响,该电路的通讯速率控制在19200bps下。
3、自动切换电路
上图中,TX,RX引脚均需要上拉电阻,这一点特别重要。
接收:默认没有数据时,TX为高电平,三极管导通,RE为低电平使能,RO收数据有效,MAX485为接收态。
发送:发送数据时,TX会先有一个下拉的电平(起始位-由高向低),表示开始发送数据,此时三极管截止,DE为高电平发送使能。当发送数据“0”时,由于DI接口相当于接地,此时数据“0”就会传输到AB扣,A-B0传输“1”,完成高电平的传输。
注意:这里面有个疑惑,发送数据“1”,三极管RE低电平有效,应该是接收使能,为什么芯片是高阻态呢?这是因为UART发送数据是有一定格式的,TX和RX数据均以“位”为最小单位进行传输,在发送数据之前,UART之间要约定好数据传输速率,即波特率,数据传输格式(数据位,校验,停止),平时数据线处于空闲状态(1状态),当发送数据时,TX由“1”变为“0”维持1位的时间,这样接收方检测到开始位后,再等待1.5位时间就开始一位一位的进行数据传输了,也就是说,已经确定好发送状态,电路发送“1”时RE虽然有效,但是由于它处于发送阶段,芯片也不会收,即芯片处于高阻状态。
问题经验总结:
问题:485总线在通讯中,当某一节点出现故障时,其他一些节点会被影响,出现通信故障。
解决方法:在每个节点的AB线上串入一个22欧姆左右的电阻,同时协议的编制一定要考虑到故障侦测和报警。
问题:当485总线处于开路(485收发器与总线断开)或者空闲状态(485收发器全部处于接收状态,总线没有收发器进行驱动)时,485总线的差分电压基本为0,此时总线就处于一个不确定的状态。
解决方法:在485总线上增加上下拉电阻(通常A接上拉电阻,B总线下拉电阻,一般为1K左右)。
理论依据:根据RS-485标准,当485总线差分电压大于+200mV时,485收发器输出高电平;当485总线差分电压小于-200mV时,485收发器输出低电平;当485总线上的电压在-200mV~+200mV时,485收发器可能输出高电平也可能输出低电平,但一般总处于一种电平状态,若485收发器的输出低电平,这对于UART通信来说是一个起始位,此时通信会不正常。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !