RS485深度解析:与串口及RS232的直观对比
对于初学者来说,RS485听起来好像很高深的样子,其实不然,希望你看完这篇文章之后,觉得RS485只是一个纸老虎。
一、UART串口通信
1.1串口通信连接方式
如图,串口间通信主要依靠两根线将TX和RX交叉连接实现数据的发送和接收。
1.2串口数据帧格式
一帧串口数据常为:1个起始位+8个数据位+1个停止位 共10bit。(校验位可自己选择)
1.3串口通信的不足
1.3.1电器接口不统一
UART只是对信号的时序进行了定义,而未定义接口的电气特性;UART没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接很不方便。
1.3.2抗干扰能力差
UART一般直接使用TTL信号来表示0和1,但TTL信号的抗干扰能力较差,数据在传输过程中很容易出错。
1.3.3通信距离短
因为TTL信号的抗干扰能力较差,所以其通信距离也很短,一般只能用于一个电路板上的两个不芯片之间的通信。
二、RS232通信
在串行通信时,要求通讯双方都采用一种标准接口,使不同的设备可以方便地连接起来进行通讯。RS232是目前最常用的一种串行通讯接口。
1.1RS232通信连接方式
RS232的通信方式是在串口通信的基础上,增加一个232转换芯片,将TTL电平转换成232电平进行通信。
在串口通信中,一般将+5V视为逻辑”1“,将0V视为逻辑”0“。
经过232转换芯片将TTL电平转换为232电平后,可将+12V视为逻辑”1“,将-12V视为逻辑”0“。
232电平相比于TTL电平,抗干扰能力增强,如下图,即使干扰信号会使电平发生波动,但它的高低电平仍有较大的改变余量。
1.2RS232数据帧格式
RS232只是将串口的TTL电平转换为232电平,其数据帧格式与串口一致。
1.3RS232的不足
①RS232接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接。
②虽然抗干扰能力较串口有提高,但传输距离仍然受限,实际上也只能用在15米左右。
③接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
三、RS485通信
为了解决串口通信及RS232通信所存在的问题,又提出了RS485协议。因RS-485接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点就使其成为首选的串行接口。因为RS485接口组成的半双工网络一般只需二根连线,所以RS485接口均采用屏蔽双绞线传输。
1.1RS485通信连接方式
RS232的通信方式是在串口通信的基础上,增加一个485转换芯片,将TTL电平转换成485电平进行通信。
信号:RS485标准规定采用差分信号(差分信号是指用两根线的电平差表示0、1)进行数据传输,两线间的电压差为+2v到+6v表示逻辑“1”,两线间的电压差为-2v到-6v表示逻辑“0”.
如:A>B为逻辑0,B>A为逻辑1
使用差分信号能有效地减少噪声信号的干扰(因为如果受到干扰,两根线都会受到相同的干扰,所以受到干扰后这两根线的电平差仍然能正确的表示0或1),延长通信距离,RS485的通信距离可以达到1500m;RS485接口信号的电平比RS232降低了,所以不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便地与TTL电路连接。如图,差分信号的好处:即使电平受到干扰,但差值基本不变。
接口:采用一条双绞线电缆作总线,将各个节点串接起来,从总线到每个节点的引出线长度应尽量短,以便使引出线中的反射信号对总线信号的影响最低。因为采用两线制(两根双绞线),数据的发送和接收都要使用这对差分信号线,发送和接收不能同时进行,所以只能采用半双工的方式工作。
一主多从的拓扑结构:
半双工方式,不能同时发送和接收:
1.2RS485数据帧格式
RS485也是基于串口的,帧格式与串口的相同。与串口和RS232只是电气的特性不同,软件的编程都是差不多的。
1.3RS485的优势
①长距离传输与多节点连接:RS485是一种差分传输的通信方式,支持长距离传输,通常可以达到数千米(具体距离取决于电缆类型、质量和环境条件)。
②高速数据传输:RS485通讯具有较高的数据传输速率,能够支持实时数据的快速传输,满足工业自动化等应用场景对数据传输速度的要求。
③抗干扰能力强:RS485采用差分信号传输方式,能够有效抵抗外界电磁干扰,保证数据通信的稳定性和可靠性。
最后一张图,看看串口、RS232和RS485的信号区别
四、RS485编程
1.1 收发器SP3485及其电路连接
本文使用SP3485作为收发器,该芯片支持3.3V供电,最大传输速度可达10Mbps,支持多达32-个节点,并且有输出短路保护。
电路图如下图所示:
如图,RE和DE连接在一起,接同一个引脚,通过控制该引脚的高低电平来改变收发器的发送或接收模式:RS485_EN=1,表示发送数据。RS485_EN=0,表示接收数据。
注意:两个485接口连接,A接A,B接B。
至于RS485的代码部分,就跟串口初始化差不多,网上一搜一大把,就不在这里赘述了。
作者:偶尔去躲乌云