RS-485是一种应用十分广泛的通信协议。其显著特点是信号采用“差分”的方式传输,因此抗干扰能力很强,通信距离也比RS-232远得多。RS-485通信一般是半双工的,仅需要2根信号线,也可以是全双工的,需要4根信号线。
如何解读差分方式传输?
差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的单端信号传输,差分传输在这两根线上都传输信号,这两个信号的振幅相同,相位相反。在这两根线上的传输的信号就是差分信号。信号接收端比较这两个电压的差值(这样获得幅值翻倍的信号)来判断发送端发送的逻辑状态。在电路板上,差分走线必须是等长、等宽、紧密靠近、且在同一层面的两根线。
差分信号与传统的一根信号线一根地线(即单端信号传输)走线的做法相比,其优缺点分别是:
优点:
抗干扰能力强。干扰噪声一般会等值、同时的被加载到两根信号线上,而其差值为0,即,噪声对信号的逻辑意义不产生影响。
能有效抑制电磁干扰(EMI)。由于两根线靠得很近且信号幅值相等,这两根线与地线之间的耦合电磁场的幅值也相等,同时他们的信号极性相反,其电磁场将相互抵消。因此对外界的电磁干扰也小。
时序定位准确。差分信号的接收端是两根线上的信号幅值之差发生正负跳变的点,作为判断逻辑0/1跳变的点的。而普通单端信号以阈值电压作为信号逻辑0/1的跳变点,受阈值电压与信号幅值电压之比的影响较大,不适合低幅度的信号。
RS485收发控制方法
RS485属于半双工总线,在实际使用时一般采用主机轮询或令牌传递的方法来分配总线控制权,RS485设备需要进行发送和接收的方向转换。比较通用的做法是,每个RS485设备在平时均处于接收状态,只有在自己有数据要发送时才转换到发送状态,数据发送完毕后再次切换回接收状态。
第一种:程序换向控制(三线制)
最常用的RS485收发换向方法是程序换向,即由MCU的一个I/O端口控制RS485收发器件的收发使能引脚,在平时使RS485收发器件处于接收状态,如下图,这里485芯片用TI的SN65LBC184,最大速率达到250Kbps,当有数据需要发送时,MCU将RS485收发器件引脚(网络RS485_EN2)置于发送状态,完成数据发送后,再把RS485收发器件切回接收状态。
这种方式简单易行,不需增加额外成本,这种方法很多人都会知道并且基本上都用的方法。
硬件发送完成后最好上报一个发送完成的中断出来,这样便于切换到接收状态。
第二种:自动换向(两线制)
但是,当我们采用某种硬件平台的工控主板或核心板进行二次开发时,由于工控主板或核心板上没有预留出足够的I/O端口,使得RS485收发的程序换向方法无法实现。在某些特定的情况下,开发平台的底层驱动未对外开放,难以对底层进行二次开发,这种情况下即便有足够的I/O端口也无法实现程序换向。为此,我们需要采用另外一种换向技术,即自动换向技术。自动换向其实就是对使能引脚不需要单独的I/O口来控制,而是由发送引脚发送数据时候顺便控制了。
正是因为传统的串口转RS485设计增加了一个GPIO的消耗,因此网上有了一个取巧的设计,设计图如下:
这个图的R46和R47是绝对不可缺的。对于R48,若mcu的RX没有上拉输入功能,这个电阻也是不可以少,终端120欧电阻一般不添加。为什么R46和R47是绝对不可缺的,我们先分析一下它的工作原理;
1,当TX为高电平,RS/DE引脚为低,此时RE有效,此时485A和485B由于上下拉电阻的作用,485A为高,485B为低,485芯片处理发送高电平状态或者处于接收状态;
2,当tx为低电平,RS/DE引脚为高,此时DE有效,485处于发送状态,因为DI引脚接地,因此485芯片输出低电平。
现在会发现,当TX为高的时候,485输出电平是由485的AB相的上下拉电阻来完成的,串口的收发恰好可以和485的高低电平对应上,因此这个自动收发串口转RS485设计是可以使用的。
上拉电阻:就是把口线通过一个电阻拉到正极电压上。一个作用就是保持信号不被干扰,稳定在高电平,也可以起到电压转换,两个不同电压芯片通讯,可以输出高时,通过上拉实现。
在某信号线上,通过电阻与一个固定的高电平VCC相接,使其电压在空闲状态保持在VCC电平,此时电阻被称为上拉电阻。
下拉电阻:就是把口线接一个电阻到负极电压上。将某信号线通过电阻接在固定的低电平GND上,使其空闲状态保持GND电平,此时的电阻被称为下拉电阻。
简单概括为:电源到器件引脚上的电阻叫上拉电阻,作用是平时使该引脚为高电平,地到器件引脚上的电阻叫下拉电阻,作用是平时使该引脚为低电平。低电平在IC内部与GND相连接;高电平在IC内部与超大电阻相连接。上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用,下拉同理。
上拉是对器件注入电流,下拉是输出电流;强弱只是上拉或下拉电阻的阻值不同,没有什么严格区分。
自动收发串口转RS485设计优缺点
优点:最主要是节省IO,同时还捎带的降低了程序编写的工作量。
缺点
通信速度慢
三极管有电容效应,导致关断时间较长,导致RS/DE从低到高电平变化出现比较大的斜坡,同时485输出高电平,是依靠上下拉电阻来完成的,会导致上升沿不够迅速,因此上下拉的阻值选择也是影响速度的关键。
驱动能力弱
由于当tx为高,485电平是由其上拉电阻完成的,因此若提供驱动能力,就要减小电阻,由于485芯片驱动能力有限,电阻太小会导致tx为低的时候,465芯片无法将485总线拉低,因为总线上所有上所有上拉电阻的并联值不应该小于375欧。还有当接入120欧的终端电阻的时候,AB两相的电压差由终端电阻和上下拉分压得到,会导致两相的电压差变小,因此自动收发串口转RS485设计不适合添加终端电阻。
二极管:二极管是最常见的电子元件之一,它最大的特性就是单向导电,也就是电流只可以从二极管的一个方向流过。首先二极管可以做开关元件,二极管在正向电压作用下电阻很小,相当于一只接通的开关,在反向电压作用下电阻很大,如同一只断开的开关,利用二极管的开关特性,可以组成各种电路。
三极管:三极管具有电流放大作用,能以基极电流微小的变化量来控制集电极电流较大的变化量,也用作无触点开关。逻辑取反,如下图所示,使用NPN三极管进行取反,十分方便,输入为高电平时,输出为低;输入为低电平时,输出为高(5V)
总述:
总的来说,485芯片处于高电平时为接收状态,处于低电平时为发送状态。