RS232接口标准出现较早。
RS485逻辑"1"以两线之间的电压差为+(2~6)V表示,逻辑"0"以两线间电压差为-(2~6)V表示。
RS485接口组成的半双工网络,一般只需两根连线,采用屏蔽双绞线传输,网络拓扑一般采用终端匹配的总线型结构,不支持环形或星形网络,在同一总线上最多可以挂接32个结点。RS485接口连接器采用DB-9的9芯插头座,与智能终端RS495采用DB-9孔,与键盘连接的键盘接口RS485采用DB-9针
节点中的串口控制器使用 RX 与 TX 信号线连接到 485 收发器上,而收发器通过差分线连接到网络总线,串口控制器与收发器之间一般使用 TTL 信号传输,收发器与总线则使用差分信号来传输。发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上,而接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中。通常在这些节点中只能有一个主机,剩下的全为从机。在总线的起止端分别加了一个 120 欧的匹配电阻。
RS485数据信号采用差分传输的方式,使用一对双绞线,其中一线定义为A,另一线定义为B,另有一个信号地C。
在RS485发送端还有一“使能端”,用于控制发送驱动器与传输线的切断与连接,当使能端起作用时,发送驱动器处于高阻状态,是有别于逻辑"1"和"0"的第三态
收、发端通过平衡双绞线将AA与BB对应相连,当在收端AB之间有大于+200mV的电平时,输出正逻辑电平,小于-200mV时,输出负逻辑电平。
RS485属于半双工总线,在实际使用时一般采用主机轮询或令牌传递的方法来分配总线控制权,RS485设备需要进行发送和接收的方向转换。比较通用的做法是,每个RS485设备在平时均处于接收状态,只有在自己有数据要发送时才转换到发送状态,数据发送完毕后再次切换回接收状态。
标准的主从模式:主机不主动发送数据,总线上一直都处于空闲状态。 而从机要发数据一定是主机先对从机进行询问,然后从机进行应答。这样的总线上就能保证永远也不会有数据冲突(也就是同时有多个设备发出来数据)。为了避免冲突,任何一个设备在发送之前都进行检查,比如在总线上发送0x55,同时这个设备也打开接收,如果总线上没有冲突就会收到0x55,如果冲突了接收到的数据和发送的数据就会不同。这个接收就是为了接收自己发送出去的数据进行验证。
多个主机存在就有可能多个设备同时发数据,造成数据冲突。
对于普通的RS485芯片,要求传输速率不快的,比如就9600bps, 很多硬件工程师直接将收/发使能脚和串口TX引之间加反向电路,并在AB线上加上下拉来实现自动控制收发
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性能.
RS485收发器有2个使能端,将接收使能端接地,发送使能端由51单片机控制,所以主机空闲时一直处于接收状态,而当需要发送数据的时候使能发送端即可。另外,为了实现总线的监听,将串口接收端通过施密特触发器接至单片机的外部中断INT0,这样可通过中断来判断总线是否忙。
使用DC-DC器件可以产生1组与微处理器电路完全隔离的电源输出,用于向RS485收发器提供+5V电源。电路中的光耦器件速率会影响RS485电路的通信速率。上图中选用了NEC的光耦PS2501,受其影响,该电路的通讯速率控制在19200bps下。
TX,RX引脚均需要上拉电阻,这一点特别重要。
NPN三极管,高电平导通。当TX高电平,三极管导通,RE和DE引脚接地,进入接收模式。当TX低电平,三极管截止,RE和DE引脚接高电平,进入发送模式。
接收:默认没有数据时,TX为高电平,三极管导通,RE为低电平使能,RO收数据有效,MAX485为接收态。
发送:发送数据1时,TX为高电平时,三极管导通,DE为低电平,此时收发器处于接收状态,驱动器就变成了高阻态,也就是发送端与A\B断开了,此时A\B之间的电压就取决于A\B的上下拉电阻了,A为高电平、B为低电平,也就成为了逻辑1了。
发送数据0时,TX为低电平,三极管截止,DE为高电平,驱动器使能,此时正好DI是接地的,也就是低电平,驱动器也就会驱动输出B为1,A为0,也就是所谓的逻辑0了。
发送数据,用的是单片机的TX引脚,也就是说,在TX引脚上表现数据。要发送数据0x32,写成二进制就是0x00110010,TXD引脚上就会依次的用高低电平体现1和0。
当TX发送0时,三极管不导通,DE接高电平,进入发送模式,485芯片会把DI上的电平反应到AB引脚上输出,因为DI已经接地,所以AB引脚会传输0。所以,当TXD发送0时,AB引脚发送0。
当TX发送1时,三极管导通,RE接低电平,进入接收模式,485芯片的AB引脚进入高阻状态,因为R3把A拉高,R2把B拉低,所以,AB传输的是1。所以,当TXD发送1时,AB引脚发送1。
一句话:TXD发1,AB就发1;TXD发0,AB就发0。
接收数据过程
接收数据,用的是单片机引脚RX,在RXD引脚上表现数据。在接收数据的过程中,TX引脚是一直保持高电平的,当TXD是高电平时,RE是低电平,正好变成了接收状态,然后485芯片的RO引脚(也就是接RX的引脚)就会接收AB传输过来的数据。
理解自收发的作用,关键是要理解RE和DE的作用,尤其是DE为0时,驱动器与A\B之间就是高阻态,也就是断开状态,而且A\B都要有上下拉电阻。然后就有了逻辑0-1之间的切换了。所以很巧妙,但是这里也有一个很明显的bug,也就是只适用于“半双工”,如果是全双工,就不行了,因为TX为1时,接收使能,此时从机如果回复数据,那么也就乱了。
基本原理了解了,除了使用三极管实现,还可以使用施密特触发器,也就是所谓的“非”门,来显现
如果用单片机控制RS-485接口的设备,需要用到收发器,这一点和CAN总线是类似的,如下是一个MCU控制一个RS-485的图示。
宏晶科技生产的STC15系列单片机中的IAP15F2K61S2中芯片MAX485可以实现最高2.5Mbps的RS-485传输。A、B端之间的匹配电阻选择为120Ω。由于工作在半双工,一般来说 (RE) ̅ 和DE,即接受器与驱动器的使能口可以通过同一个I/O口控制。
A和B为总线;
R为接收器输入;
RE为接收器使能信号;
DE为发送器使能信号;
D为发送器输出;
对于使能信号,字母上面加一横的为低电平有效(如上图RE),不加的为高电平有效(如DE)
当驱动器使能引脚DE为逻辑高时,差分输出A和B遵循数据输入D处的逻辑状态。 D处的逻辑高导致A转为高,B转为低。 在这种情况下,定义为VOD=VA-VB的差分输出电压为正。 当D为低时,输出状态反转,B变高,A变低,VOD为负。
当DE低时,两个输出都变成高阻抗。 在这种情况下,与D处的逻辑状态是不相关的
当接收器使能引脚RE逻辑低时,接收器被激活。 当定义为VID=VA–VB的差分输入电压为正且高于正输入阈值VIT+时,接收机输出R变高。 当VID为负且低于负输入阈值VIT-,接收机输出R变低。 如果VID在VIT+和VIT-之间,则输出不确定。
当RE为逻辑高或悬空时,接收机输出为高阻抗,VID的大小和极性无关。
主机的GPIO会控制RS-485收发器的DE管脚,设置发送模式,从UART TXD线向RS-485收发器的数据(D或DI)线发送一个字节,收发器将在A和B线上将单端UART位流转换为差分位流,数据离开收发器后,主机立即将收发器的模式切换为接收模式。
从机和主机是类似的,从机控制RS-485收发器的/RE管脚,设置为接收模式,接收主机发送的比特流,将其转换为单端信号,通过从机的UART RXD线接收,当从机准备好响应时,它按主机原来的方式进行发送,而主机变为接收。
采用一条双绞线电缆作为总线,将各个节点串接起来。
信号在各支路末端反射后与原信号叠加,会造成信号质量下降,在短距离、低速率仍可能正常工作,但随着通信距离的延长或通信速率的提高,不良影响会越来越严重,所以从总线到每个节点引出线的长度应尽量短,以便使引出线的反射信号对总线信号的影响最低。
总线的不同区段采用了不同电缆、某一段总线上有过多收发器紧靠在一起安装、过长的引出线,会导致总线特性阻抗不连续,在阻抗不连续点会发生信号的反射,所以应提供一条单一、连续的信号通道作为总线。
RS485总线网络一般要使用终接电阻进行匹配。
短距离与低速率下不用考虑终端匹配。理论上在每个接收数据信号的中电进行采样时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹配。实际上当信号的转换时间(上升或下降时间)超过电信号沿总线单向传播所需时间的3倍时就可以不加匹配。
一般终端匹配采用终接电阻方法,RS485应在总线电缆开始和末端并接终接电阻,一般取120Ω,相当于电缆特性阻抗,这种匹配方法简单有效,但是要消耗较大功率,对于功耗限制严格的系统不适合。
另一种比较省电的匹配方式是RC匹配,用一只电容C隔断直流成分可以节省大部分功率,但电容C的取值需要在功耗和质量匹配间进行折衷。
或采用二极管的匹配方法,利用二极管的钳位作用能迅速削弱反射信号,达到改善信号质量的目的,节能效果显著。
很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,这有两个原因:
例如,当发送驱动器A向接收器B发送数据时,发送驱动器A的输出共模电压为VOS,由于两个系统具有各自独立的接地系统,存在着地电位差VGPD。那么,接收器输入端的共模电压VCM就会达到VCM=VOS+VGPD。RS485标准规定VOS≤3V,但VGPD可能会有很大幅度(十几伏甚至数十伏),并可能伴有强干扰信号,致使接收器共模输入VCM超出正常范围,并在传输线路上产生干扰电流,轻则影响正常通信,重则损坏通信接口电路。
由于上述原因,RS485尽管采用差分平衡传输方式,但对整个RS485网络,必须有一条低阻的信号地将两个接口的工作地连接起来,使共模干扰电压VGPD被短路。这条信号地可以是额外的一条线(非屏蔽双绞线),或者是屏蔽双绞线的屏蔽层。
值得注意的是,这种做法仅对高阻型共模干扰有效。由于干扰源内阻大,短接后不会形成很大的接地环路电流,对于通信不会有很大影响。当共模干扰源内阻较低时,会在接地线上形成较大的环路电流,影响正常通信。
(1)如果干扰源内阻不是非常小,可以在接地线上加限流电阻以限制干扰电流。接地电阻的增加可能会使共模电压升高,但只要控制在适当的范围内就不会影响正常通信。
(2)采用浮地技术,隔断接地环路。这是较常用也是十分有效的一种方法,当共模干扰内阻很小时上述方法已不能奏效,此时可以考虑将引入干扰的节点(例如处于恶劣的工作环境的现场设备)浮置起来(也就是系统的电路地与机壳或大地隔离),这样就隔断了接地环路,不会形成很大的环路电流。
(3)采用隔离接口。有些情况下,出于安全或其它方面的考虑,电路地必须与机壳或大地相连,不能悬浮,这时可以采用隔离接口来隔断接地回路,但是仍然应该有一条地线将隔离侧的公共端与其它接口的工作地相连。
信号接地措施,只对低频率的共模干扰有保护作用,对于频率很高的瞬态干扰就无能为力了。由于传输线对高频信号而言就是相当于电感,因此对于高频瞬态干扰,接地线实际等同于开路。这样的瞬态干扰虽然持续时间短暂,但可能会有成百上千伏的电压。
实际应用环境下还是存在高频瞬态干扰的可能。一般在切换大功率感性负载如电机、变压器、继电器等或闪电过程中都会产生幅度很高的瞬态干扰,如果不加以适当防护就会损坏RS-422或RS-485通信接口。对于这种瞬态干扰可以采用隔离或旁路的方法加以防护。