下文是我自己对于RS485以及RS232的理解与记录,在习得新知识后会继续更新,文章如有错误之处,还望读者指正交流
一.RS232以及RS485应运而生的背景
1.在谈论正文之前我们先说一下UART,它的全称为通用异步串行接口,如果是芯片与芯片之间,用串行通信就可以直接进行连接通信,如下图所示:
但是如果是两个设备之间(设备之间距离很远,可能几米,几百米距离不等)这样的电平就会衰减的特别厉害,导致设备之间不能进行正常通信,因此RS232,RS485等应运而生。通常来说RS232的传输距离在15m左右,RS485的传输距离可以达到1.2KM。
2.总线
1.概念:总线是指计算机设备和设备之间传输信息的公共数据通道。总线是连接计算机硬件系统内多种设备的通信线路,它的一个重要特征是由总线上的所有设备共享,可以将计算机系统内的多种设备连接到总线上。
2.自己的理解:
我们可以把总线理解为一个公交车的通道,挂接在总线上的设备就是每个公交车站,而需要传输的数据就是车站里边等车的人群。人(数据)可以乘坐公交车从一号车站(总线上的一个设备)到达三号车站。也可以从三号车站到达二号车站,总之只要总线上有设备,这些设备中的数据就可以借助总线进行传输。
二.RS232标准简介
1.美国电子工业联合会(EIA)与BELL公司于1962年发布
2.RS-232-C标准(协议)的全称是EIA-RS232-C,其中EIA代表的是美国电子工业协会,RS代表推荐标准,232是标识号,C代表的是232的最新一次修改,在这之前有232A,232B,它规定连接电缆和机械,电气特性,信号功能以及传送过程,它适用于数据传输速率在0~19200b/s范围内的通信。
三.RS232协议电气特性
EIA-RS-232C对电气特性,逻辑电平和各种信号线功能都做了规定
1.在TXD和RXD数据线上,逻辑1表示的电压范围为-3V~-15V,逻辑0表示的电压范围为+3V到+15V,一定要注意,RS232是反逻辑的。
2.在RTS,CTS,DSR,DTR和DCD等控制线上信号有效表示电压范围为+3~+15V,信号无效表示电压范围为-3V到-15V。
四.RS232协议机械特性
1.由于RS232并没又定义连接器的物理特性,因此出现了DB-25,DB-15,DB-9各种各样的连接器,其引脚定义也不相同,常用的是DB-25和DB-9连接器
这里最重要的引脚定义就是2脚为TXD,3脚为RXD,5脚为地。
五.RS232标准基本术语
1.串行通信与并行通信
串行通信和并行通信二者各有其优缺点,串行通信距离远,抗干扰能力较强,成本低,这些是并行通信无法比拟的。在这里我们只是简单的提一嘴,在后来的文章中会详细介绍串行通信与并行通信的区别。
2.通信方式:
①单工通信:一个设备只能特定的发送给另外一个设备,即单向传送。
②半双工通信:可以进行双向传送,但是在某个时刻只能从A设备发送给B设备,或者从B设备发送到A设备。
③全双工通信:同时收发,在同一时刻既可以从A设备发送给B设备,也可以从B设备发送给A设备。
六.RS232的基本工作原理
串口按位发送和接收字节,基本上都是三根线便可完成(接收线,发送线,地线)
1.RS232的硬件实现
这里我们使用的是较为常见的SP3232芯片。
首先要解决的就是电压不兼容的问题,(我原理图中用到的是FPGA,在外引出RS232是为了调试),因为FPGA只能输出3.3的电压,相比于RS232的电平特点二者肯定不能直接连接在一起,因此在二者之间就需要一个转换站,来使得二者兼容。经过SP3232芯片,FPGA的TX转换为RS232的TX,FPGA的RX转换为RS232的RX。
2.RS232的弊端
①通信能力:RS232只能进行点对点通信,也就是我们常说的一对一通信。
②信号线:RS232通常在通信的时候需要三根信号线,即数据发送线(TX),数据接收线(RX),地线(SG)
③RS-232为负逻辑的电压关系:-5V~-15V代表的是逻辑1;5V到+15V代表的是逻辑0
④RS-232传输速率低,在异步传输的时候,波特率为20Kbps
⑤RS-232采用一根信号发送线和一根信号接收线二者共地的连接方式,这种共地很容易产生共模干扰。
七.RS-485基础
1.采用差分传输的方式,也称为平衡传输,在数据传输过程中使用一对双绞线,一根线定义为A,另外一根线定义为B。
2.那么RS485的逻辑是怎么样判定的呢?
A,B线的电平差在+2V~+6V之间定义为逻辑0,;
A,B线的电平差在-2V~-6V之间定义为逻辑1;
注:在RS485的发送端,AB两根线的压差在-2V~-6V之间就认为发送的是逻辑1,在2V到6V之间就认为发送的逻辑0,但是在接收端的时候,由于RS485的传送距离特别远,难免会产生压降等各种因素,因此接收端AB两根线的压差只要小于-200mV就认为是逻辑1,大于200mV就认为是逻辑0.
由TTL电平转换为RS485电平称为发送器,有RS485电平转换为TTL电平称为接收器,在通常情况下,发送器和接收器都会做在同一个芯片中,但是发送器和接收器不能同时进行工作,通过硬件上的连接,可以由FPGA或者单片机来操作引脚控制,让它某一个时刻是工作在发送状态还是接受状态。
3.RS-485的网络拓扑结构
RS-485的网络拓扑结构一般采用带有终端匹配的总线型结构(这个也就是我们常说的手拉手方式)
疑问1:RS-485为何要带有终端匹配电阻?
当我们进行信号传输的时候,使用的双绞线阻抗为120Ω,但是RS485收发器的输入阻抗一般比较高,(不同的收发器数值不同,但是大多数都在几十KΩ左右,肯定要比双绞线的阻抗大很多)在信号传输线末端的时候阻抗突然发生变化(由双绞线的阻抗变为RS485收发器的阻抗),因此会造成信号的反射(这种信号反射可以理解为一束光从一个介质到另外一个介质),因此为了阻抗匹配通常会在传输线的末端增加一个和双绞线阻抗特性匹配的电阻,由于RS485是双向传输,因此总线的首端也要增加一个电阻来进行阻抗匹配。
上述增加的电阻是为了对双绞线的阻抗特性进行匹配,在一些干扰很复杂的情况下,也可能会用两个60Ω的电阻来替代120Ω
这样的话AB线上的电阻和末端电容就组成了一个低通滤波器,能够提供额外的抗共模干扰的能力。但是这种情况下对于电阻阻值的精确程度就要求的很严格,相同阻值的滤波器能够有相同的频率衰减,但是电阻的阻值一定会有误差的,如果误差大,滤波器的转折频率不相同,共模干扰就会转换成差模干扰。
4.RS485的隔离
RS-485总线在使用的时候,为了防止以下几种情况的发生,通常需要进行隔离:
①考虑在总线使用过程中是否会遇到高压的危险,危及到人身安全,比如RS-485,CAN总线在使用的时候环境非常复杂,在使用的时候很容易发生触电的危险,危及到设备自身
②远端RS-485的接收器无法正常接收到数据。产生这一点的问题主要是因为地势差的存在。在诸多的RS-485应用中,最长的通信距离可以达到1.2KM,每个RS-485收发器之间距离可能会很远,在设计过程中就会将这个RS-485收发器节点的大地作为信号返回的地。但是这样做存在的一个非常大的隐患就是这两个RS-485收发器的大地之间会存在电势差。(大地不像我们想的那么理想,不是每一处的地都是绝对的零电位)
如果在实际连接中真的将两个RS-485收发器连接在各自的大地,一旦两个地之间存在着电势差,那么这个电势差就会以共模干扰的形式叠加在输出端,但是485以及CAN等收发器一般来说承受共模干扰的能力并不强(一般为-7V~12V)。有些人可能想到,既然两个大地之间存在着地势差,找一根线给两个地连接起来不就可以了么?
如果真的那样去做就真的完蛋了。这样连接之后两个接收器与连接线之间就会形成一个地环路。这个地环路就相当于一个闭合的线圈,闭合的线圈在有交变的磁场存在的情况下就会产生电流,恰巧两个收发器的地之间是有阻抗的。这样会使得共模电压变得更大了。
③为了避免上述情况的发生,我们一般会选择带有隔离功能的RS-485收发器
带有隔离功能的收发器能够将总线端和收发器进行电气隔离,将高压隔离在总线一端。这样就能有效的保证操作人员在连接收发器一端进行作业时的人身安全以及设备的安全。而且隔离能够有效的抑制因为地势差等因素所引起的共模干扰,让收发器一端能输出或接收到正常的电平。
④这里我们还需要注意的一点就是在安装RS485收发器的时候,收发器与总线的距离应该小于收发器上升沿的十分之一:
5.RS485总线的上下拉电阻
①我们为什么要在AB线上加上下拉电阻,加了上下拉电阻对我们的设计有什么好处?
上文已经讲明,在发送端当AB线电压差值在-2~-6V的时候认定为逻辑1,在2V到6V的时候认为为逻辑0,在接收端当AB线电压差值小于-200mv的时候认为是逻辑1,当AB线电压差值大于200mv的时候认定为逻辑0。但是如果RS485总线没有被驱动(总线处于一个空闲状态)所有收发器都处于接受数据的状态,这个时候485的AB两线之间的电压差应该就接近于0。这个时候收发器的输出状态是高电平还是低电平?肯定是处于一个不确定的状态。当总线处于空闲状态的时候,为了让收发器有一个确定的状态,因此需要在AB线上增加上下拉电阻。(此处是我自己想的理由来说服自己的,请大家谨慎观看)
②下面关于上下拉电阻的计算是摘自某位大佬的博客,可能是我智商不够,没有看的特别透彻,如果哪位看官明白RS485的上下拉电阻,希望您吱一声!
他列举了一个具体的485收发器作为例子进行解释(RSM485PCHT),关于此芯片的规格书部分截图如下:
上图便是根据规格书所画的等效电路图,此时总线上只挂接了两个RS-485收发器,计算结果如下图所示:
通过计算得到,当总线上只挂接两个RS-485收发器的时候,空闲状态下AB线的电压差值为12.46mv,如果挂接更多的收发器,AB线的电压差值还是继续降低。这个时候收发器接收到的逻辑已经处于不确定的状态了。
③那既然需要增加上下拉电阻,电阻的阻值如何选取啊?
上图为增加上下拉电阻之后的示意图,如果在接收端留有100mv的余量,以200mv的门限值为例子来进行计算
由于内部上拉电阻的值为24K,我们可以算出外部上拉电阻的值为461.9Ω,这样算出来的电阻为最大值.
注:到此为止我们可能觉得计算上下拉电阻的步骤实在是复杂的不得了,通过查阅资料关于RS485上下拉电阻有专门的一个计算公式:
其中分子是驱动器输入电压的最小值,Z0为双绞线的匹配阻抗(一般为120Ω),我们通过上面的例子将数据代入来验证一下这个公式的准确性。
最终的计算结果是440Ω,可以看出和上述复杂的计算结果出入不大。
6.挂接设备以及增加保护电路后总线负载的情况
在总线上挂接了收发器,终端电阻以及上下拉电阻之后。驱动器输出的电流一定会增加。在RS485的标准术语中规定了一个单位负载的概念(12KΩ)。一个驱动器能够驱动32个单位负载。现在为了能让在总线上挂接更多的收发器,通常都会将收发器的阻抗做成几分之一的单位阻抗,比如做成八分之一的单位阻抗,那样总线上挂接的设备数量为8*32=256个收发器。终端匹配电阻和上下拉电阻最多相当于20个单位负载,因此在增加这些电路之后,总线上挂接的收发器数量一定需要减少。
如果目前所用收发器的负载是八分之一的单位负载,那么总线上挂接96个收发器是绝对没问题的。
7.我司常用的RS485电路