本帖最后由 qbwww 于 2022-6-25 20:32 编辑
RS485通信是PLC的一种重要功能,而MODBUS是基于RS485总线用于工控行业的标准协议。
比如,作为MODBUS从模式与作为MODBUS主模式的工控屏对接,向用户提供人机操作界面。
作为MODBUS主模式,定时查询连接到RS485总线上的各种工作于从模式的传感器。
我们在设计RS485的接口电路时,做了深入的理论分析和实际测试。
在客户使用过程中,也碰到一些使用上的问题。
本文基于此,对RS485通信接口设计和使用做一些总结。
RS485通信接口电路
下图是我们产品所使用的RS485通信接口电路:
RS485接口电路
RS485通信的主要的问题
RS485总线具有连线长、连接的节点多等特点。
长线容易感应到干扰信号,干扰信号不但会影响正常通信,还可能会损坏器件。
另一个问题是在总线上的任一节点出现故障,可能会导致整个总线无法通信;
如果MCU出现死机,控制RS485芯片的DE脚的引脚误置为高电平,则RS485处于发送状态,使得总线上其它节点无法发送数据。
或者是RS485芯片出现硬件损坏,A、B口相互短路,则也会将总线拉死,导致其它设备无法通信;
我们做产品设计有一个重要的原则,故障的影响应该做到最小化,
一个点的失效不应该影响其它点的功能;一个功能的失效不应该影响其它不相关的功能;
在设计阶段,应该做DFEMA分析, 头脑风暴所有可能的失效模式,分析失效模式的后果、发生概率和可探测度,对高风险的失效采取必要的措施;
电路的简要分析
TVS ZD1和ZD2用于吸收端口A、B的高电压,防止总线上感应的高压损坏芯片。
电阻R2、R3是限流电流,主要作用是当485芯片出现硬件损坏时,总线不会被拉死,其它节点仍然能正常通信。
电阻R1、R4提供在空闲状态的偏置电压,使得A口的电压与B口的电压的差值大于0.2V,串口的接收脚维持空闲状态的高电平;
当有n个节点(n>=1)接到总线时,为了保证总线上所连接的节点尽量多,要求整个总线只有一个设备需要有上、下拉的电阻,因为所连接的设备有不同功能,而且来自不同厂家,并不能做到总线上只有一个设备有上、下拉电阻。
为了达到阻抗匹配、在首端和末端都分别并联了120欧的电阻Rload。
根据WCCA的分析方法,在n=1,5V电压为4.8V,R2、R3为90欧,匹配电阻为108欧时,A、B之间的分压最小,最小分压需要大于0.2V。
得到上、下拉电阻应该小于5.382K,所以R1、R4的电阻值取为4.7K。
我们早期的PLC的R1、R4的阻值选为10K,当客户在首、末端两端同时并接匹配电阻时,出现过总线不能正常通信的故障,深入排查,才发现取值不合理。
支持多少个节点
能接多少个节点和RS485发送的驱动能力有关,驱动能力是和负载相关的。
RS485制定的规范是,RS485发送至少可以驱动标准负载为12K的节点32个。
并且在驱动32个节点时输出差分电压必须大于1.5V小于6V,
但是一般的驱动器设计都会高于这个参数。发送一般至少2V以上,6V以下。
因此标准RS485接收器的差分输入阻抗不小于12K。
另外这个驱动器保持最低1.5V不只是32个12K并联,还要加两个120左右的终端匹配电阻。
32K并为375欧姆,再和两个120并联,约52Ω左右。所以发送器的必须提供的差分最小电流I=1.5V/52Ω=29mA.
如下所示的曲线,当差分电压为1.5V时,驱动电流可以达到60mA,可以满足要求。
如果总线上节点的输入阻抗大于12K,完全可以支持32个节点。
差分电压与电流的关系
什么情况下需要匹配电阻
匹配电阻的作用是减少信号的反射,当连接比较长,或者信号频率比较高时,我们需要考虑信号在导线上传播的时间。
电信号在导线上传播的速度约为2*10^8m/s,当信号从源端发送到末端时,如果阻抗不匹配则会有信号反射回来,反射回来的信号又反向传播到源端,与源端的信号叠加,破坏了源端的信号。
信号在导线上一个来回的传播时间为2*L/2*10^8,如果这个延时时间与信号的的周期相当,则当前bit的在导线上反射回来的信号会影响到下一个bit的信号,造成误码。
不妨认为这个延时为1/10的信号周期,则当2*L/2*10^8>0.1/f时,需要考虑反射对信号的影响;
信号在导线上的反射,每100m的延时大约为1us。
波特率为9600bps的信号,一个bit信号的脉宽为104us,19200bps的信号,一个bit的脉宽为52us。
由上,以下情况需要在首端和末端加上匹配电阻,避免信号反射造成的误码:
当波特率为9600bps,且RS485总线的最长距离大于500米时;
当波特率大于等于19200bps时;
|