由下图可看出不管是RS232还是RS485,其本质都是串口通信,只不过是串口通信电平上的变种而已。所以,我们首先从串口通信讲起。
1、串口通信
任何一种通信都要有物理接口和通信协议。串口通信物理接口如下图:
串口通信协议首先要约定好帧格式和波特率。下图是我们常见的帧格式。
该数据帧一共有10位,第一位为起始位(永远为低电平),最后一位为停止位(永远为高电平),中间的8个位数据位,数据位的内容由用户自定义,正好构成1字节,通过这8个数据位不同的排列组合(高低电平),就能代表256种不同的数字,对应ASCII码表即可得256种不同的信息。
那串口通信高低电压的范围是什么呢?
串口通信采用的是TTL逻辑(Transistor-transistor logic),其输出的高电平最小为2.4V,输出的低电平最大为0.4V(如下图)。
我们一般认为串口通信的高电平为5V,低电平为0V,这就造成了其抗干扰能力很弱。
若在某个时刻突然来了一个静电(如下图),就很可能把某一位低电平变高,这就导致串口通讯的距离必须要很短,一般都在1m之内。
2、RS232标准
为了提高串口通信的距离和稳定性,美国工业联盟制定了一个RS232标准(RS是Recommended Standard),下图为RS232的接口。
虽然RS232有9个接口,但是我们通常只用上图中的3根线,和基础的串口通信接口保持一致(全双工通信),如下图。
我们知道,单片机与电脑进行基本的串口通信时,电脑需要通过USB转TTL,那么单片机与电脑如何进行RS232通信呢?
如下图所示,只需在原来串口通信的基础上加一个电平转换芯片,例如MAX232,这样它就能把TTL电平转换成RS232电平了。比如,单片机给MAX232发送的是5V,则通过电平转换,输出12V,如果给它发送0V,则MAX232输出-12V。反之,如果MAX232收到12V电压,则会把12V电压转换成5V的TTL电平。
RS232的高电平的范围很广,电压处在3-15V之间都算高电平;低电平是-3V~ -15V。
RS232只是改变了电平的大小,传输的还是原来的串口的那些0或者1的二进制数据,而且RS232也是全双工通信(实际用到的物理接口与串口一致)。由下图可知,传输同样的一帧数据,串口与RS232最大的区别在于最大最小电平,RS232的高低电平相差了近20V。这样,即使某一个信号受到干扰,它的高低电平还有很大的改变余量,所以它的抗干扰能力增强了很多,通信距离可达15米,但是速率只有20K(19200/s)。
3、RS485
面对更为严苛的工业环境,与更远更快的传输距离需求,RS232就力不从心了,所以RS485标准就诞生了。
与RS232差不多,RS485通信是在串口通信的基础上加了一个485电平转换芯片,如下图。
485转换芯片可以把单片机TTL发送的串口信号转换为差分信号(如下图),485芯片既可以把串口TTL信号转换成差分信号,也可以把差分信号转换成单片机能识别的TTL信。
差分信号只需要两根线,不需要地线,如下图。比如当信号A大于信号B时,它代表逻辑0;当信号A小于信号B时,它代表逻辑1。
差分信号最大的优势就是抗干扰能力强,因为他用的是两根信号线的差值来表示逻辑0和1。而且它的两根线采用双绞线形式缠绕在一起(如下图),这样即使受到干扰,也是两根线同时受到干扰,所以最后的电压差也基本保持不变。因此RS485可以传输更远的距离,可达1.2千米,且传输频率可达50M。
但注意:RS485是半双工通信,也就是在同一时间,其要么在发送数据,要么在接收数据,不能同时进行。其带来的好处是可以进行一主多从的组网通信,而串口通信和RS232只能进行点对点的简单通信。
最后,无论是RS232还是RS485,他们只定义了物理层,规定了电平标准(如下图),对编程没有影响,所以只需会串口通信即可掌握RS232和RS485通信,这就是串口、RS232和RS485最本质的区别。
注:转自B站视频教程UP:爱上半导体