RS485
采用差分传输方式,能够有效减少噪声信号的干扰。通信模式为半双工通信,通常情况下,发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2~-6V,是另一个逻辑状态。
最小差分电压容限:200mV,也就是说接收端在差分电压低于200mV时就无法正确识别0/1了。这句话应该怎么理解呢?
如果 VAB≥200mV,则接收电路R识别为逻辑 1;
如果 VAB≤−200mV,则接收电路R识别为逻辑0;
简单说就是,A线的绝对电压值比B线的至少大于200mV则识别为逻辑1,或者A线的绝对电压值比B线的至少小200mV,才识别为逻辑0。
一、RS-485上下拉电阻的选择
1、 为什么需要加上下拉电阻?
根据RS-485标准,当485总线差分电压大于+200mV时,485收发器输出高电平;当485总线差分电压小于-200mV时,485收发器输出低电平;当485总线上的电压在-200mV~+200mV时,485收发器可能输出高电平也可能输出低电平,但一般总处于一种电平状态,若485收发器的输出低电平,这对于UART通信来说是一个起始位,此时通信会不正常。当485总线处于开路(485收发器与总线断开)或者空闲状态(485收发器全部处于接收状态,总线没有收发器进行驱动)时,485总线的差分电压基本为0,此时总线就处于一个不确定的状态。在管脚悬空时容易受到电磁干扰。
2、终端电阻用来干什么的?
当遇到信号反射问题时,通常会通过增加匹配电阻来避免信号反射,由于485总线通常使用特性阻抗为120Ω的双绞线,因此在485总线的首尾两端增加120Ω终端电阻来避免信号反射问题。
3、什么情况下需要加上下拉电阻?
此时模块已处于不确定状态,模块接收器可能输出为高电平,也可能输出为低电平,这时就需要在模块外部增加上下拉电阻保证模块在空闲时不处于不确定状态。
4、上下拉电阻如何取?
仅考虑了485总线空闲状态时不处于不确定状态,并没有考虑485收发器的驱动能力和所用元器件的功耗等问题。外部所加上下拉电阻越小,可以将485总线空闲状态差分电压保持的越高,但与此同时,终端电阻和上下拉电阻的功耗也越大,对485收发器的驱动能力要求也越高,当超过485收发器的驱动能力时,也会导致通信失败。
根据RS-485标准,当接收器的输入阻抗为单位阻抗时(最小为12k),总线上最多可以接32个节点,485的差分负载最大为54Ω,此时差分输出电压最小为1.5V
我们可以看到当485总线上接有32个节点时,总线A或B的共模负载为:
由此可见,对于RS-485的标准来说,A总线或B总线的最大共模负载为375Ω。差分输出电压最小为1.5V。
5、 总结
(1) 通信线应选用屏蔽双绞线,屏蔽层应单点接大地;
(2) 当我们没有遇到信号反射问题时,尽量不要使用终端电阻;
(3) 如果使用终端电阻,我们可以通过上下拉电阻调节485总线在空闲状态的电压值,保证不处于门限电平(-200mV~+200mV或-200mV~-40mV)范围内;
(4)当我们增加上下拉电阻时,上拉电阻(下拉电阻)与收发器输入阻抗的并联值应大于375Ω;
二、RS-485自收发电路常见问题
- 通信速度慢
三极管的开启延时为ns级别,关断延时为us级别,会导致收发电路发送低电平的延时时间较长。其次高电平的发送是通过外部上下拉电阻驱动的,电阻越大,上升沿越缓慢。
- 高波特率通信时存在通讯风险
假设TX引脚上一个发送的bit为0,即将发送的bit为1,由于高电平的发送是通过外部上下拉电阻驱动的,收发器会切换到接收状态。此时AB线从低电平切换到高电平需要几百ns,RX引脚在这段时间内会接收到0。如果波特率太高,RX引脚接收到的低电平会被误认为是接收的起始位,导致通讯异常。
- 外围电路接结电容影响收发器通讯稳定性
高电平的发送是通过外部上下拉电阻驱动,高电平输出缓慢,如果外部保护电路的结电容又较高,会导致AB差分电压幅值较低,当幅值低于门限电平时,会导致通讯异常。