问题描述
最近公司在做一个采集器,详细的事理便是通过串口将客户数据采集上来,由于客户的接口是RS232的,而我们的采集器只有RS485接口,无法直接对接,因此我们引入了一个中间的RS232/RS485转换器,对接我们的采集器,这种用法相信也是论坛工程师绝大多数的选择,不料在进行可靠性测试过程一个晚上,丢包率竟然高度10%,这种有线的连接,又是低速率串口,理论上的丢包率该当是0。

图1:旗子暗记采集事理图

缘故原由剖析
首先我们打消以下几个缘故原由:
1、走线长度:设备都摆放在一起,长度只有2米不到;2、滋扰问题:这是在办公室测试的,没有大的滋扰;3、数据速率:波特率只用了115200,常规波特率;4、软件问题:这个RS485采集软件已经用了好几年,一贯很稳定;5、客户的PLC程序:客户在现场也用了好几年,也很稳定。
问题的定位基本可以大致确定方向,便是出在这个RS485和RS232的数据转换上,我们的采集器的接口设计事理图如下:
图2:采集器端口设计事理图
通过示波器的抓波我们创造,问题缘故原由就在这个端口上。如下图;TX是我们采集器发出的旗子暗记,RX是客户PLC回答的旗子暗记,DIR是我们的采集器的方向掌握旗子暗记。大略说,便是在0uS的时候,我们发出去数据,PLC在150uS旁边就回答数据,而我们的方向切换引脚在200~300uS不等。也便是说我们发送完数据,来不及切换到吸收状态,PLC就回答数据了,导致数据丢失。
通过和软件工程师沟通,由于我们跑的是Linux系统,方向引脚掌握采纳的是进程掌握的方法,这个进程本来优先级已经很高,到时由于是多进程运行,还是会被其他系统进程抢占,以是导致无法做到更高的切换速率,或者是切换速率无法明确,只能是一个区间。
图3:示波器实测图
办理方案
既然是采集器来不及换向,办理的思路很大略,有两个方案;
1、将采集的换向速率提高,提高到100uS以内;2、将PLC的回答韶光变慢,延长到500uS往后。
由于客户担心改程序出问题,以是不愿意改,只好我们修正采集器的换向速率,我们的软件工程师也不愿意改,情由是产品运行多年,很稳定,怕改出问题。按照自然法制,怕麻烦的事,用钱肯定能办理!
终于不负有心人,我们找到了两个用钱办理的思路,便是改换RS485接口芯片,不让软件参与换向。可选的芯片有两种:
1、美信公司的MAX13488:由芯片自动切换方向,无需软件干预切换方向,驱动能力强,通信速率高,MAX13488流传宣传最高可以到16Mbps,与普通的RS485芯片性能一样。
图4;MAX13487 内部框图
2、周立功公司的RSM(3)485PHT,由芯片自动切换方向,无需软件干预切换方向,驱动能力强,通信速率高,DC电源、隔离、RS485芯片功能三合一,节省板卡空间。
图5;RSM(3)485PHT事理图
终极,我们选择了周立功的RSM(3)485PHT,经由7天的永劫光丢包测试,丢包率为0%,测试通过。
举一反三
在接口转换设计中,匹配性问题是我们常常会碰着的,RS485由于定位是比较低速的串口,利用起来一样平常都不会有问题,我们的采集器也是99%的设备接入都没问题,这个客户的PLC也是我们碰着的唯一回答韶光这么快的PLC,正常的PLC都会在500uS往后。这就给我们启迪:所有的双工通信转换为单工通信时,都该当考虑换向不及时导致的数据丢失。
02
匹配电阻利用不当导致RS485通信失落败
很多工程师都知道RS485的匹配电阻120R电阻的主要性,因此设计时候都有预留该电阻。但多个RS485设备并联时,须要把稳该电阻的影响。
问题描述
之前我们公司做过数据采集器,采集是通过RS485与其他客户的设备连接的,产品设计之初是一对持续接,产品发布了2年基本没有收到市场的问题反馈,最近一个月时,客户有反馈我们的RS485读取不到数据,改换好几个全新的数据依旧,哀求我们尽快办理。
缘故原由剖析
由于我们的产品已经发布2年都没问题,以是我们的紧张疑惑方向便是客户的现场运用方案。我们先核阅一下我们自己的RS485端口设计,如下图1。这个方案在点对点运用处景多年都ok。
图1:RS485端口设计事理图
接着我们核阅客户的运用方案,如图2所示,客户采取的是手拉手的模式,这种模式也是常用的拓扑构造。
图2:客户的现场运用方案
由于暂时还没有找到缘故原由,我们去RS485的标准这里找一些参考,终于,我们在RS485的标准里面找到以下关键信息;如下表:
总结下来,紧张因此下的几条;
(1)驱动器输出旗子暗记电平(负载最小时):±1.5V;(2)驱动器负载最小阻抗:54Ω;
(3)吸收器门槛电压:±200mV;(4)吸收器输入阻抗最小值:≥12KΩ。
根据RS485差分阻抗的打算公式,当有64个终端并接时(n=64时),当RS485总线上只有首位两端有终端匹配电阻Rt时,总线上的差分阻抗为54.74Ω,刚刚符合RS485的标准。
图3,多个RS485并联的示意图
但是,由于我们的终端匹配电阻Rt是利用一个固定120欧姆阻值的电阻焊接在主板上,客户没有办法把中间的电阻删除,导致全体RS485总线上并联了多个120R的电阻,导致RS485总线上的差分阻抗远远小于54Ω,无法知足标准哀求的大于54欧姆的哀求,总线上的阻抗太小,导致驱动电流太大,RS485芯片无法供应足够的电流。办理方案
已经定位到缘故原由,紧张还是最初的设计定位是点对点通信,忽略了客户的对点通信的需求,将RS485总线上的匹配电阻Rt全部都焊接了,客户一旦利用多个设备并联时,导致了总线的差分阻抗太小。办理的办法便是将除了扫尾两端的Rt全部删除。如下图4
图4:删除中间设备的Rt,只保留扫尾两端的Rt
整改之后,经由我们测试部的测试和客户的利用1个多月,再也没有反馈问题,问题基本算办理。
总结
通过这次的事件,我们还总结了RS485以下的随意马虎犯的缺点:
(1)高下拉电阻的紧张浸染:RS485增加高下拉电阻的紧张目的是为理解决总线在空闲状态、或者是开路状态(485收发器与总线断开)下,使得总线上的电压大于RS485标准哀求的200mV(实际运用考虑余量设置为300mV);
(2)高下拉电阻的常规值:RS485的高下拉电阻阻值选择紧张知足空闲状态下Vab大于300mV,该电阻越小,功耗越大,功耗大到一定程度时,乃至会触发RS485 的电源输出保护,导致通信失落败,因此知足空闲下300mV情形该电阻越大越好,一样平常的运用,该电阻选择1K/R0805即可;
(3)多节点时的高下拉电阻:当RS485的总线上的节点增加时,由于RS485芯片内部也有内部高下拉电阻(该阻值一样平常都是上百K),该阻值与输入阻抗Rin并联后,再与终端匹配电阻并联,终极的等效差分阻抗很随意马虎会小于RS485标准哀求的54Ω。因此,2个节点以上的运用,则须要考虑外部高下拉电阻带来的阻抗减小,
(4)终端匹配电阻:从上面公式可以看出,只增加2个匹配电阻,差分阻抗就降落到60Ω,如果再增加一个就降落到40Ω,因此,利用多个节点时,最多只能在首尾两端增加120Ω的匹配电阻。
RS485纯硬件反相法自动换向过早导致数据丢包
之前我们的产品的RS485设计借鉴了图1中的转换器的事理,该方案的事理紧张是利用反相器法,详细的实现事理便是:反相法利用了一个反相器,依赖于发送旗子暗记TX的电平决定RS485芯片属于发清偿是吸收状态,例如,TX为高电平时,反相后为低电平,此时收发器处于吸收状态,AB总线上的逻辑由高下拉决定,此时为逻辑1;当TX为低电平时,反相后为高电平,此时收发器处于发送状态,AB总线上的逻辑为0。大略说,便是反相法可以发送低电平,高电平实在是有AB线上的高下拉电阻决定的。
经由我们的永劫光的验证,该种方案在100kbps波特率以内都不会丢包,但是波特率大约100kbps以上,例如115200bps时,丢包可以达到0.1%,这是我们不许可的。
图1:Tps563200现货价格
缘故原由剖析
反相器法的事理上是没有问题的,但是我们忽略了一个串口的底层实现办法,串口通信是异步通信,双方没有时钟同步,依赖于双方的声称。
UART通信没有时钟同步,不是说不须要时钟,而是两个别系的时钟来自两个设备,各跑各的,没有同步。这就哀求两个别系的时钟偏差不能太大。UART吸收的流程如下:
(1)吸收端选定好与发送端同等的起始位数、数据位数、校验位数、停滞位数、波特率,例如下图起始位1、数据位8、校验无、停滞位1、波特率9600bps。
(2)RX线上无传输时,保持为高电平,RX端有采样器,采样器以波特率的16倍采样周期对一位bit数据进行采样。确认起始位后,再经由16个采样周期,采样第一位数据,再经由16个采样周期,采样第二位,以此类推。
图2:UART 采样示意图
图3:UART 过采样示意图
图4:UART 偏差许可范围
这里就存在一个问题,发送和吸收的底层启动都是由不同的厂家不同的工程师做的,大部分的工程师都是取数据bit的50%~80%位宽的数据,如果双方的波特率偏差过大,就有可能数据还没有发送吸收,但是RS485芯片已经切换到吸收状态了,导致发送的数据缺点。
利用100k速率仿真现有的方案,TXD旗子暗记和方向引脚同时切换,险些没有余量。极度情形下就有可能数据没有传输结束,方向引脚就切换了,导致数据传不出去。空想的方案该当是方向引脚延后30%~50%的位宽再切换方向。
图5:现有反向器的RS485方向切换方案仿真图
办理方案
办理的方案须要在原有的根本上,增加D1、R3、R4、C1。如下图6。
由于该换向的事理是发送数据0的时候,DE/RE引脚为高电平,U2为发送状态,数据有U2发送出去。而发送数据1的时候,DE/RE引脚为低电平,U2实际为吸收状态,AB总线上的 逻辑1实在是有R1、R2的高下拉电阻使得Va-Vb>200mV的。因此,我们的设计紧张担保发送数据0的时候,方向引脚比数据延迟30%~50%旁边,担保数据顺利发送出去。
实现的事理如下:TXD发送数据0的时候,经由反相器U1,DE/RE引脚为高电平,使得U2为发送状态,下一bit数据即将为1,但是经由R4、C1的RC充电效应,U2的pin3引脚并不会立即为高电平,而是经由延迟后才为高电平,延迟的韶光即是我们设计的方向延迟韶光。举例子,假设U1的高电平阈值为1.5V,U1的供电电压为5V,R4=36K,C1=300pF,根据公式:t = RCLn[(V1-V0)/(V1-Vt)],可以估算出切换方向延迟的韶光约3.1uS。
TXD发送数据1的时候,经由反相器U1,DE/RE引脚为低电平,使得U2为吸收状态,吸收状态下,AB总线上的值由上拉R1,下拉R2决定,不再须要U2发送数据,因此方向掌握旗子暗记等同于无效。
图6:方向旗子暗记延后方法
利用100K的频率进行仿真,结果显示方向引脚可以延后1.85uS,可以知足哀求。
图7:100K频率仿真图
总结
本文紧张通过增加RC延迟和反相器波形整形,从而达到方向切换比数据bit延后的目的,读者在实际利用过程,还须要根据自己设计的最高波特率来选择RC的参数,如RC韶光太长,在频率很高的情形下,反相器可能没有输出,同等时0,一样平常设置为位宽的30%旁边即可,例如115200bps的波特率,位宽是8.6uS,延迟参数可以设置为8.60.3=2.5u旁边。二极管D1和R3紧张是为了搪塞TXD旗子暗记由高变低的时候,能够快速的开释反相器输入引脚的电压,让反相器的输出为高电平,及时将数据0发送出去。










