RS485 电气特性
共模传输
采用共模传输方式时,共模噪声将会叠加在最终的输出信号上面,污染了原始的信号。
差模传输
而采用差模传输方式,则源端发出的信号+与信号-相位是相反的,而对于共模噪声而言在+/-两条线上都会存在,理想情况是等幅同相的,而接收端,相当于一个减法器,有用信号由于相位相反则经过减法器仍然保留,而噪声则会被抵消。而实际电路中,则会大幅度削弱。
由此可见,差模传输相对于共模传输方式,优势在于差模方式可以有效抵消共模干扰。
电气参数
RS-485 的电气参数为:
- 共模电压范围为 -7~+12V
- 可支持 32 个多点拓扑连接,见下面的网络拓扑图
- 使用 40 英尺线缆时,传输速率可达到 10Mbps,1 英尺相当于 30.48cm,这里 Mbps 是兆 bit/s 的意思
- 使用 4000 英尺线缆时,传输速率可达到 100kbps
- 半双工通信
最小差分电压容限:200mV,也就是说接收端在差分电压低于 200mV 时就无法正确识别 0/1 了。这句话应该怎么理解呢?
上面这个图怎么理解呢?RS-485 收发器的发送电路至少提供 1.5V 差分电压输出能力,经由总线线路阻抗衰减,32 个接收电路输入阻抗,以及 120Ω 端接电阻,差分信号的幅度必然逐渐衰减,那么至最末端还需要至少提供 200mV 的差分电压给末端接收电路。
V A B = U A − U B V_{AB} = U_{A} - U_{B} VAB=UA−UB:对于接收电路是判决 A 线共模电压与 B 线共模电压之差;
- 如果 V A B > = 200 m V V_{AB} >= 200mV VAB>=200mV 则接收电路 R 识别为逻辑1;
- 如果 V A B < = − 200 m V V_{AB} <= -200mV VAB<=−200mV 则接收电路 R 识别为逻辑0;
简单说就是,A线的绝对电压值比B线的至少大于200mV则识别为逻辑1,或者A线的绝对电压值比B线的至少小200mV,才识别为逻辑0
这里的参数,应该是在一定特征阻抗线缆时的理论值,实际工程使用的时候需要做相应的调整以及现场测试。一般以不超出这个理论极限为好。
说到电气特性参数,首先来看看一般的接口电路:
从这样一个接口电路来看,有这么些要点:
-
RS-485 通信从 单片机/DSP/处理器 接口而言,是利用 UART接口 与 RS-485电平收发器接口。
当然你说我用 FPGA 难道不行么?肯定是可以的,用 FPGA 你实现一个串口收发的 IP模块,当然也是可以的。甚至你想说,我拿 GPIO 去模拟一下 UART 是不是就不行?也是能办得到的,只不过这么干意义不大,需要占用 CPU 资源实现底层 BIT 的收发。
-
前面说到半双工,有半双工就有全双工。
什么是半双工呢?首先半双工以及全双工,所界定的对象一定是点对点而言的,这里说点对点就是指在同一时刻而言,所谓半双工,就是设备在同一时刻要么处于收数据状态,要么处于发数据状态,不允许同时收发数据。
而全双工则刚好相反,允许同时收发。比如 I2C总线 就是半双工总线,4线制 SPI 是全双工,而三线制 SPI 则是半双工总线;又譬如 RS-422 或者 RS-232 是全双工接口;而 CAN总线 则是半双工总线。RS-485 就是一种半双工总线。
当 Host 发送数据时,数据沿着红色的线经由双绞线,传输至 Slave 的差分接收电路,当 Slave 应答时,数据沿着兰色的方向传输至 Host 的接收电路,但是传输介质是一对双绞线,所以一方在传输数据的时候,另一方是无法传输信号的,从收发器的控制角度来看:
- R E ‾ \overline{RE} RE:Receiver Output Enable,接收器使能;
- D E DE DE:Driver Output Enable,驱动输出使能;
控制芯片侧,用一个 GPIO 脚来控制和 R E ‾ \overline{RE} RE 和 D E DE DE,刚学设计 RS-485 的朋友或许不理解,这里来一张芯片内部原理框图,就很容易理解了
当 DIR=0 时,接收电路使能 R E ‾ = 0 \overline{RE} = 0 RE=0,发送电路禁止 D E = 0 DE = 0 DE=0,对总线而言相当于高阻;
当DIR=1时,接收电路使能 R E ‾ = 1 \overline{RE} = 1 RE=1,发送电路禁止 D E = 1 DE = 1 DE=1,对总线 A/B 信号取决于 DI 的信号。这里有两个问题:
-
为什么芯片要把 R E ‾ \overline{RE} RE 和 D E DE DE 设计成相反的有效逻辑呢?这样其实也是方便用一个 GPIO 同时控制收发电路的考虑。
-
那收发器芯片收发使能为什么不做成一个脚呢?比如就叫 DIR?做成两个脚收/发也可以用两个脚单独控制,比如:
甚至可以在 D E = 1 DE=1 DE=1 的时候,将 R E ‾ \overline{RE} RE 设置为0,这样是不是就可以自环了?产品中也可以就这样设计,可以实现收发器以及布线的自诊断,通过接收到的报文与发送出去的报文比较,可以诊断出芯片焊接,收发器是否损坏或者断路,以及布线是否存在短路故障。
或许有人会说,瞎扯!你前面才说 RS-485 不能同时收发,这里又说能同时收发,岂不是自相矛盾吗?不矛盾,前面所说的不能同时收发,是指发的同时不能收来自其他设备的发送报文,这里收的是自身发出的报文。
所以半双工的本质,是通讯介质不存在双向通道,在向总线发送数据的时候,介质被占用,即便想发送也是无法正确的将信号发送到介质上的,如果强行发送,数据将会错乱,甚至收发器芯片有可能损坏。
参考与原文
图文详解RS-485,真的很详细了 - 知乎 (zhihu.com)