起源
RS-485即Recommended Standard 485 协议的简写。1983年被电子工业协会(EIA)批准为一种通讯接口标准.
数据在通信双方之间传输,本质是传输物理的电平,比方说传输5V的电压 -1V的电压信号,这些物理信号在传输过程中会受到很多干扰,比方说你传输一个5V的电压,到了接收端可能就变成了4.8V,并且通信的双方高低电平的参考电压可能不同。
那么这个时候就需要一个电平标准,来判断多少V的电压是高电平 1,多少V的电压是低电平 0,这就诞生了 RS-485 RS-232
485接口常用的协议:工业HART总线协议;modbus协议;Profibus DP
信号传输模式
信号通过一组双绞线差模传输,源端发出的信号+与信号-相位是相反的,可以有效抵消共模干扰。
电气参数
电压范围为-7~+12V
半双工通信
最多总线支持256个多点拓扑连接(取决于IC驱动能力),最后面一个接120欧终端电阻。
传输1200米时,速率最大到100kbps
最小差分电压容限:200mV,低于该值则无法识别通讯。
信号A在空闲时候为高电平;信号B在空闲时为低电平。(有的设备上会标识485_A+,485_B-)
应用设计
拓扑结构
发送终端和接收终端是主从结构,主机可以和任何从机通信,读写。从机之间不可以通信,从机的状态也是需要主机轮询方式来读取。
通常为两种结构:
星型结构:所有的设备连接到一个中心点上,中心点一般为主机。此拓扑结构适用于设备数量少,且分布较近的场景。
总线型结构:所有设备连接到同一根总线上,形成一条直线。所有设备均通过总线通信。此拓扑结构适用于数量较多或分布较远的场景。
端接设计
端接就是在最终端设备上接一个120Ω的电阻来达到匹配阻抗特征的目的。
标准规定的双绞线的差分特征阻抗在100Ω至150Ω之间,由于RS-485采用双绞线传输,RS-485标准制定者选择120Ω作为标称特征阻抗。
如果没有端接。信号在线路上传输其阻抗是连续的,但是到达右侧的时候则,等效阻抗变成了接收电路的输入阻抗,比如是12kΩ(标准可挂载32个设备的驱动IC阻值),阻抗不连续了,信号的一部分能量就会按照原路径返回,如返回回去的信号由于容抗及感抗,就会产生相差。反射回去的信号与原信号就会被叠加在一起。这样就会造成通信发生错误的可能,严重的时候,通信就无法正确进行。这时候就需要在最终端接一个120Ω电阻(如下图左边所示)。
在通信环境比较差的情况下,共模干扰严重,可以考虑采用带屏蔽双绞线,屏蔽层接大地,
也可以在终端接一组π型的阻容的低通滤波结构(两个60Ω电阻中间接一个220pF电容)来增加线路的抗噪声能力。(如下图右边所示)
抗干扰设计
市面上485常见于3Pin端口(485A,485B,GND)。通常只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。对于E不接的大多数场景均能正常工作,对于以下两种场景则会出现问题。
-
485收发器共模电压范围为-7~+12V,当感应电压加载在共模电压上,超过范围就会损坏电路。
-
EMI问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。
隔离设计
现场有大电流开关设备,电机感性设备等,噪声很可通过通讯的接地耦合进设备,在工业设备中尤其明显。
所以会采用通讯隔离和电源隔离的设计。
通讯隔离设计
选择具有隔离功能的芯片,比如ADI的 iCoupler技术产品ADM2481,ADM2485。
也可以采用光耦+普通RS-485收发器的方式,光耦必须要用高速的,低速光耦在高速率下容易丢包。
电源隔离设计
给隔离两侧电路分别供电,两侧的gnd不能直连,可串一个瓷片电容。
安全防护
A、B端串联保险
接口的信号电平值较高,达到十几V,容易损坏接口电路的芯片,而且和TTL电平不兼容,因此和单片机电路接起来的话必须加转换电路。
防雷接口设计
需要在485的A、B连接气体放电管用以防雷。
IC驱动能力
物理条件下一条485总线上节点数量是有上限的。
一条485总线上节点数量的限制条件是:有源驱动器的总电流负载,485总线负载电阻Rload不能大于375欧姆。
通常是用单位负载来衡量RS485总线驱动能力的,单位负载的定义则是根据标准的485总线接收器的输入阻抗(12KΩ)来定义的,标准的RS485总线能够驱动32个单位负载(即32个12KΩ并联)。
为了能让一条总线上挂载更多的设备,一些485接收器的输入阻抗为48Kohm(1/4 unit load)或者是96Kohm(1/8 unit load),那么相应的总线可挂接的节点数分别为128个和256个。
另外,不同输入阻抗的485接收器可以连接在一起,只要保证并联输入阻抗不能超过32个单位负载(即总线负载Rload<=375 Ω),通讯环境不好的情况下需要在最终端设备挂载终端电阻 120 Ω,用来改善总线上的匹配电阻。
IC的驱动能力
IC型号 | 挂载能力(个) | 单价(元) |
SP3285/SP3481 | 32 | |
SP485R | 400 | |
P485R | 400 | |
SN75176B | 32 | |
SP3485EN-L/TR | 32 | 1.2 |
THVD1500 /1510/1550 | 256 | |
MAX1483 | 256 | 1.5 |
WS3088 | 256 | 1.5 |
MAX3085 | 256 | 1.5 |
故而一般的协议,一根总线上最多挂载256个设备(地址码决定了)。但还有另一种方法就是更改波特率,将在同一总线上的设备改为不同的波特率(1200,2400,4800,9600,19200),就可以允许相同的地址号,设备不同,增加挂载节点数。
IC传输方向的使能
由于485为半双工通信,当主机发送数据时,数据沿着双绞线传输至从机的差分接收电路。当从机发送数据时,数据沿着双绞线传输至主机机的差分电路电路。所有的数据均是差分传输并且传输介质仅为一条双绞线,所以在同一时间内数据只会流经一个方向。
通信IC芯片上有两个使能脚,RE# 和DE。
RE#: Receiver Output Enable,接收器使能,
DE:Driver Output Enable,驱动输出使能
当两个使能脚并联时,可以只通过一个IO来控制数据的传输方向(RE为低使能,DE为高使能)。
当两个使能脚分别控制时(DE=1,RE=0),这样可以实现发送和接收数据的闭环,常见于主机设备。可以实现收发器以及布线的自诊断,通过接收到的报文与发送出去的报文比较,诊断出芯片焊接,收发器是否损坏或者断路,以及布线是否存在短路故障。
IC传输方向自动切换电路
RS485_RX为高时,SS8050导通,RE/DE接地,进入接收模式;
RS485_RX为低时,SS8050关闭,RE/DE拉高,进入发送模式;
按5V,3082收发芯片来计算的话,100k,0.1μ的电容,时间常数=10mS
High-level input voltage (D, DE, or RE inputs), VIH 2 VCC V
Low-level input voltage (D, DE, or RE inputs), VIL 0 0.8 V
从发送完到不再占用总线,也就是DE降到2V以下,需要9mS。
从发送完到开始接收总线上的数据,也就是RE降到0.8V以下,需要18mS。
所以,在波特率不低于100bps的情况下,看起来不错。就是怕丛机回数据太快,你的芯片还没进入接收状态导致丢数据。
说得好
R10、C8要视情况减小,比如取10K、1nF,尽量小,用示波器看数据线波形,只要有个陡翘的推挽输出边沿即可,输出AB波形大致是这样:
一、RS485方向切换的方案1:使用反相器自动切换
大部分的低成本RS232-RS485转换器采用了这种方法。具体的实现方法是:把串口的发送信号TX作为反相器的输入,反相器的输出则用来控制RS485收发器的收发控制引脚,同时在RS485收发器的A/B输出端加上上拉/下拉电阻,
使用反相器自动切换电路
在空闲状态下,串口的发送信号TXD为高电平,经过反相器后输出低电平,使485芯片处于接收状态,而RS485总线由于上下拉电阻的作用处于A高B低的状态。当发送数据时,TXD信号线上的低电平比特位控制485芯片进入发送状态,将该比特发送出去。而高电平比特位则使485芯片处于接收状态,由于RS485总线上下拉电阻把总线置于A高B低的状态,即表示发送了高电平。
简单说,这种电路,就是发送低电平时,485芯片是 发送状态,而发送高电平时,485芯片属于接收状态。
优势:
只需要增加一个反相器就可以实现,无需软件的干预,反相器可以使用一个三极管即可以实现,成本十分低廉(几分钱);
劣势:
由于上下拉电阻不可能选值太小,否则会影响正常发送的数据电平。所以这种换向模式在发送高电平时的驱动能力,并且,理论上我要求方向引脚要比数据先切换方向,但是由于方向引脚经过了反相器,达到芯片的时间变长了,比数据晚到,所以速率太高的情况容易丢包。如果需要驱动多个从设备,就会显得力不从心,并且驱动能力太弱,只能短距离传输;并且传输速度不能太快,一般使用9600bps。
RS485方向切换的方案3:使用触发器控制方向
为了克服反相器换向的缺点,出现了一种由RS触发器控制的自动换向技术,如图5所示。这个电路的关键是反相器和RS触发器之间的由二极管、电阻、电容组成的充放电电路。在空闲状态下,485芯片仍处于接收状态。
当TXD信号线上发送数据的低电平起始位时,反相器输出高电平,通过二极管为电容迅速充电,使RS触发器R端为高电平,S端为低电平,触发器输出高电平,把ISL3152E置于发送状态;当TXD信号线转换为高电平时,反相器输出低电平,电容通过电阻缓慢放电,使得R端暂时仍处于高电平状态,加上S端的高电平状态,使触发器的输出保持前面的高电平状态,485芯片仍处于发送状态。电容经过一段时间放电后,R端电压转变为低电平,则触发器输出低电平,把485芯片置回接收状态。
通过选择电阻和电容值,我们可以控制放电速度,使得一个低电平的起始位足以在整个字节发送。此类方案参数一致性非常差,实际使用的都是技高人胆大的。
优势:
·无需软件干预切换方向,驱动能力强(取决于RS485芯片)。
劣势:
·增加的器件较多;
·不同的波特率需要匹配不同的RC参数
·温度、老化、一致性等问题,会导致RC参数变化,从而导致切换时间错乱导致丢包。
四、RS485方向切换的方案4:max13487芯片
为了克服软件参与的方向控制不确定性,美信公司发布了宣称首款支持芯片自动换向的RS485芯片,如下图6,对比其他的RS485芯片,MAX16487的/RE引脚有两个用于:
·/RE为低电平时,打开RO方向的接收数据。
·/RE为高电平时,芯片进入自动方向切换模式。
一般使用我们将/RE连接高电平,即自动换向模式。
由于美信没有公布内部的逻辑原理,只描述内部有一个状态机,我们只能外部猜测其工作原理:
·空闲模式下,数据流方向为RO方向;此为状态1;
·当串口端有数据发送时,由于起始位为低电平,经过逻辑功能D后,A<B,经过COM
·逻辑功能且反相后,RI为高电平。此状态为数据发送状态2。
·经过一系列的逻辑运算(以RI、DI为输入,但是不知道其内部的原理);状态机检测到数据发送完毕,芯片变成接收状态1。
优势:
· 由芯片自动切换方向,无需软件干预切换方向,驱动能力强,通信速率高,MAX13488 宣称最高可以到16Mbps,与普通的RS485芯片性能一样。
劣势:
·价格比普通的RS485芯片贵一倍以上。
RS485方向切换的方案5:周立功芯片RSM(3)485PHT
周立功公司将RS485的三个相关的功能模块:DC电源、隔离、RS485芯片三合一,封装在同一个芯片内部,由于没有内部的资料,我们无法获知其内部的逻辑功能。官方资料宣称最高速率可以达到500Kbps,对于一般的应用足以。
优势:
由芯片自动切换方向,无需软件干预切换方向,驱动能力强,通信速率高,DC电源、隔离、RS485芯片功能三合一,节省板卡空间。
劣势:
价格比分立器件搭建RS485电路贵,且一旦损害需要要整体更换。
二、RS485方向切换的方案2:使用软件控制方向
市面上大部分的内置RS485的产品基本都是采用此类的方案,如下图4中的RS_EN引脚。具体的 实现方式是:在空闲器件,RS_EN 为低电平,MCU处于接收状态,在准备发送数据之前,MCU会拉高RS_EN,U1处于发送状态,发送完毕之后,RS_EN重新处于低电平,U1处于接收状态。
图4 使用软件控制方向切换
此类方案的关键是软件需要掌握好RS_EN引脚的高低电平的时机,假设发送完数据后,没有及时切换到接收状态,而此时从机又回复数据,此时就会引起丢包,就会出现文章开头图2中的情形。不幸的时,软件工程师的水平参差不齐,特别是在运行操作系统(Linux、WIndows等)以后,想要十分准确控制方向引脚的高低电平已经十分困难。
优势:
无需增加任何的硬件成本,且RS485的驱动能力不受影响。
劣势:
依赖于软件控制方向引脚,如果运行复杂的操作系统,控制引脚的优先级不够高,或者软件的优化的不够好,都会导致方向引脚的切换不及时,到时数据的丢包。并且,是否丢包还取决于从机的回复时间,测试过程不一定能够测试出来。
通讯不通排查方法
排查串口端
- 串口端口号是否被占用
- 串口参数是否正确(波特率、校验位、数据位、停止位)
- 串口硬件是否损坏(短接tx rx,看接收发送是否一致)
- 更换一个串口软件
排查总线
- A、B两端是否短路
- A、B两端总电阻是否<375 Ω
- 共模干扰加载在信号线上,超出芯片逞能能力,接上屏蔽
- 示波器看下信号线的波形
- 电源干扰,电源没接地线,波纹进设备。
- 外壳地线带电或者没接好导致干扰
其他
- 232转接器可能供电不足,换有源转接器
- 波特率过高,从机发送不及时造成误码率过高。降低波特率。