一、RS485基本知识
RS-485接口芯片已广泛应用于工业控制、仪器、仪表、多媒体网络、机电一体化产品等诸多领域。可用于RS-485接口的芯片种类也越来越多。如何在种类繁多的接口芯片中找到最合适的芯片,是摆在每一个使用者面前的一个问题。RS-485接口在不同的使用场合,对芯片的要求和使用方法也有所不同。使用者在芯片的选型和电路的设计上应考虑哪些因素,由于某些芯片的固有特性,通信中有些故障甚至还需要在软件上作相应调整,如此等等。希望本文对解决RS-485接口的某些常见问题有所帮助。
1 RS-485 接口标准
传输方式:差分
传输介质:双绞线
标准节点数:32
最远通信距离:1200m 共模电压最大、最小值:+12V;-7V
差分输入范围:-7V~+12V
接收器输入灵敏度:±200mV
接收器输入阻抗:≥12kΩ
2 节点数及半双工和全双工通信
2.1 节点数
所谓节点数,即每个RS-485接口芯片的驱动器能驱动多少个标准RS-485负载。根据规定,标准RS-485接口的输入阻抗为≥12kΩ,相应的标准驱动节点数为32。为适应更多节点的通信场合,有些芯片的输入阻抗设计成1/2负载(≥24kΩ)、1/4负载(≥48kΩ)甚至1/8负载(≥96kΩ),相应的节点数可增加到64、128和256。表1为一些常见芯片的节点数。
表1
节点数 | 型 号 |
32 | SN75176,SN75276,SN75179,SN75180,MAX485,MAX488,MAX490 |
64 | SN75LBC184 |
128 | MAX487,MAX1487 |
256 | MAX1482,MAX1483,MAX3080~MAX3089 |
2.2 半双工和全双工
RS-485接口可连接成半双工和全双工两种通信方式。半双工通信的芯片有SN75176、SN75276、SN75LBC184、MAX485、MAX 1487、MAX3082、MAX1483等;
全双工通信的芯片有SN75179、SN75180、MAX488~MAX491、MAX1482等。
(a)半双工通信电路
(b)全双工通信电路
3 应用中的常见问题
3.1 抗雷击和抗静电冲击
RS-485接口芯片在使用、焊接或设备的运输途中都有可能受到静电的冲击而损坏。在传输线架设于户外的使用场合,接口芯片乃至整个系统还有可能遭致雷电的袭击。选用抗静电或抗雷击的芯片可有效避免此类损失,常见的芯片有MAX485E、MAX487E、MAX1487E等。特别值得一提的是SN75LBC184,它不但能抗雷电的冲击而且能承受高达8kV的静电放电冲击,是目前市场上不可多得的一款产品。
3.2 限斜率驱动
由于信号在传输过程中会产生电磁干扰和终端反射,使有效信号和无效信号在传输线上相互迭加,严重时会使通信无法正常进行。为解决这一问题,某些芯片的驱动器设计成限斜率方式,使输出信号边沿不要过陡,以不致于在传输线上产生过多的高频分量,从而有效地扼制干扰的产生。如MAX487、SN75LBC184等都具有此功能。
3.3 故障保护
故障保护技术是近两年产生的,一些新的RS-485芯片都采用了此项技术,如SN75276、MAX3080~MAX3089。什么是故障保护,为什么要有故障保护,如果没有故障保护会产生什么后果?
众所周知,RS-485接口采用的是一种差分传输方式,各节点之间的通信都是通过一对(半双工)或两对(全双工)双绞线作为传输介质。根据RS-485的标准规定, 接收器的接收灵敏度为±200mV,即接收端的差分电压大于、等于+200 mV时,接收器输出为高电平;小于、等于-200mV时,接收器输出为低电平;介于±200mV之间时,接收器输出为不确定状态。 在总线空闲即传输线上所有节点都为接收状态以及在传输线开路或短路故障时,若不采取特殊措施,则接收器可能输出高电平也可能输出低电平。 一旦某个节点的接收器产生低电平就会使串行接收器(UART)找不到起始位 ,从而引起通信异常,解决此类问题的方法有两种:
(1)使用带故障保护的芯片,它会在总线开路、短路和空闲情况下,使接收器的输出为高电平。确保总线空闲、短路时接收器输出高电平是由改变接收器输入门限来实现的。例如,MAX3080~MAX 3089输入灵敏度为-50mV/-200mV,即差分接收器输入电压UA-B≥-50mV时,接收器输出逻辑高电平;如果UA-B≤-200mV,则输出逻辑低电平。当接收器输入端总线短路或总线上所有发送器被禁止时,接收器差分输入端为0V,从而使接收器输出高电平。同理,SN75276的灵敏度为0mV/-300mV,因而达到故障保护的目的。
(2)若使用不带故障保护的芯片,如SN75176、MAX1487等时,可在软件上作一些处理,从而避免通信异常。即在进入正常的数据通信之前,由主机预先将总线驱动为大于+200mV,并保持一段时间,使所有节点的接收器产生高电平输出。这样,在发出有效数据时,所有接收器能够正确地接收到起始位,进而接收到完整的数据。
3.4 光电隔离
在某些工业控制领域,由于现场情况十分复杂,充分考虑现场的复杂环境,在电路设计中注意了以下三个问题。
二、RS485应用设计
1 SN75176 485芯片DE控制端的设计
由于应用系统中,主机与分机相隔较远,通信线路的总长度往往超过400米,而分机系 统上电或复位又常常不在同一个时刻完成。如果在此时某个75176的DE端电位为“1”,那 么它的485总线输出将会处于发送状态,也就是占用了通信总线,这样其它的分机就无法与 主机进行通信。这种情况尤其表现在某个分机出现异常情况下(死机),会使整个系统通信 崩溃。因此在电路设计时,应保证系统上电复位时75176的DE端电位为“0”。由于8031在复 位期间,I/O口输出高电平,故图2电路的接法有效地解决复位期间分机“咬”总线的问题。
2 隔离光耦电路的参数选取
在应用系统中,由于要对现场情况进行实时监控及响应,通信数据的波特率往往做得较高(通常都在4800波特以上)。限制通信波特率提高的“瓶颈”,并不是现场的导线(现场施工一般使用5类非屏蔽的双绞线),而是在与单片机系统进行信号隔离的光耦电路上。此处采用TIL117。电路设计中可以考虑采用高速光耦,如6N137、6N136等芯片,也可以优化普通光耦电路参数的设计,使之能工作在最佳状态。例如:电阻R2、R3如果选取得较大,将会使光耦的发光管由截止进入饱和变得较慢;如果选取得过小,退出饱和也会很慢,所以这两只电阻的数值要精心选取,不同型号的光耦及驱动电路使得这两个电阻的数值略有差异,这一点在电路设计中要特别慎重,不能随意,通常可以由实验来定。
3 485总线输出电路部分的设计
输出电路的设计要充分考虑到线路上的各种干扰及线路特性阻抗的匹配。由于工程环境比较复杂,现场常有各种形式的干扰源,所以485总线的传输端一定要加有保护措施。在电路设计中采用稳压管D1、D2组成的吸收回路,也可以选用能够抗浪涌的TVS瞬态杂波抑制器件,或者直接选用能抗雷击的485芯片(如SN75LBC184等)。
考虑到线路的特殊情况(如某一台分机的485芯片被击穿短路),为防止总线中其它分机的通信受到影响,在75176的485信号输出端串联了两个20Ω的电阻R10、R11。这样本机的硬件故障就不会使整个总线的通信受到影响。
在应用系统工程的现场施工中,由于通信载体是双绞线,它的特性阻抗为120Ω左右,所以线路设计时,在RS-485网络传输线的始端和末端各应接1只120Ω的匹配电阻(如图1中R8),以减少线路上传输信号的反射。
由于RS-485芯片的特性,接收器的检测灵敏度为± 200mV,即差分输入端VA-VB ≥+200mV,输出逻辑1,VA-VB ≤-200mV,输出逻辑0;而A、B端电位差的绝对值小于200mV时,输出为不确定。如果在总线上所有发送器被禁止时,接收器输出逻辑0,这会误认为通信帧的起始引起工作不正常。解决这个问题的办法是人为地使A端电位高于B两端电位,这样RXD的电平在485总线不发送期间(总线悬浮时)呈现唯一的高电平,8031单片机就不会被误中断而收到乱字符。通过在485电路的A、B输出端加接上拉、下拉电阻R7、R9,即可很好地解决这个问题。
三、软件的编程
485芯片的软件编程对产品的可靠性也有很大影响。由于485总线是异步半双工的通信总线,在某一个时刻,总线只可能呈现一种状态,所以这种方式一般适用于主机对分机的查询方式通信,总线上必然有一台始终处于主机地位的设备在巡检其它的分机,所以需要制定一套合理的通信协议来协调总线的分时共用。这里采用的是数据包通信方式。通信数据是成帧成包发送的,每包数据都有引导码、长度码、地址码、命令码、内容、校验码等部分组成。
其中引导码是用于同步每一包数据的引导头;长度码是这一包数据的总长度;命令码是主机对分机(或分机应答主机)的控制命令;地址码是分机的本机地址号;“内容”是这一包数据里的各种信息;校验码是这一包数据的校验标志,可以采用奇偶校验、和校验等不同的方式。
在485芯片的通信中,尤其要注意对485控制端DE的软件编程。为了可靠的工作,在485总线状态切换时需要做适当延时,再进行数据的收发。具体的做法是在数据发送状态下,先将控制端置“1”,延时1ms左右的时间,再发送有效的数据,一包数据发送结束后再延时1ms后,将控制端置“0”。这样的处理会使总线在状态切换时,有一个稳定的工作过程。
三种常用电路如下:
1、基本的RS485电路
上图是最基本的RS485电路,R/D为低电平时,发送禁止,接收有效;R/D为高电平时,则发送有效,接收截止。通过软件控制SP485R的收发模式。在主从模式下,主机发送完命令后,应该立即拉低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-B<0,则传输“0”, 完成低电平传输,当发送“1”时,此时三极管导通,按理说RO会使能,此时由于还处于发送数据中,这种状态下MAX485处于高阻态,此时的状态通过A上来,B下拉电阻决定,此时A-B>0传输“1”,完成高电平的传输。
注意:这里面有个疑惑,发送数据“1”,三极管RE低电平有效,应该是接收使能,为什么芯片是高阻态呢?这是因为UART发送数据是有一定格式的,TX和RX数据均以“位”为最小单位进行传输,在发送数据之前,UART之间要约定好数据传输速率,即波特率,数据传输格式(数据位,校验,停止),平时数据线处于空闲状态(1状态),当发送数据时,TX由“1”变为“0”维持1位的时间,这样接收方检测到开始位后,再等待1.5位时间就开始一位一位的进行数据传输了,也就是说,已经确定好发送状态,电路发送“1”时RE虽然有效,但是由于 它处于发送阶段,芯片也不会收,即芯片处于高阻状态 。