谷动谷力

 找回密码
 立即注册
查看: 683|回复: 0
打印 上一主题 下一主题
收起左侧

【避坑指南】产品批量后,发现大约有1%通信不良,深入理...

[复制链接]
跳转到指定楼层
楼主
发表于 2023-5-16 00:17:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【避坑指南】产品批量后,发现大约有1%通信不良,深入理解RS485的使能延迟和传输延迟



本文介绍RS485的使能延迟和传输延迟引发的通信故障,涉及软件和硬件领域,至少有90%的工程师都忽略,本文将深入探讨。


01
问题描述
系统由一台HMI和一台PLC组成,两者通过RS485进行通信,在产品批量后,发现大约有1%的产品通信不良,主要表现是丢包,并且随着数据的速率提高,丢包越严重,现场已排查:1)  信号质量OK;2)  波特率误差在标准内,小于3%3)  驱动能力OK,没有发生信号畸变; 图1 :系统通信图
02
知识扫盲
RS485芯片的有两个重要的参数:使能延迟和传输延迟。我们知道RS485通信是半双工通信,因此同一时间只有一个方向可以传输数据,RS485芯片同一时间只能处于发送模式或者是接收模式,在空闲的时候,需要处于接收模式。方向的控制一般由软件进行控制较多。 图2:485 总线示意图
2.1 使能延迟
主芯片需要发送数据时,需要先发送DE/RE为高再发送数据信号D,但是由于RS485芯片原来处于接收模式,突然收到主芯片命令需要切换到发送模式,由于芯片内部的逻辑内部固有的延迟,切换需要时间。以TI的TI-SN65LBC184为例,见下图,图中意思是,将芯片的TX固定为3V,然后在DE、RE引脚上输入一个高电平,当输入上升50%后为基线,测量出输出A总线上电平到2.3V需要的时间,这个时间tPZH就是使能延迟。该芯片数值为3.5uS。换个说法就是,芯片从接收模式,切换到发送模式,需要经过3.5uS才能有驱动能力输出。如果换向后总线马上送出数据而不延迟,有3.5uS时间总线AB是没有驱动能力的,还是处于高阻状态,串口协议起始标志是TX由高到低跳变,如果不考虑改值,将会损失该占空比。
图3:手册对使能延迟和传输延迟的定义
2.2 传输延迟主芯片发送数据时,从TX上升到50%,测试输出A上升到50%需要的时间,就是传输延迟。该芯片的值是1.3uS。 图4:手册对使能延迟和传输延迟的定义

03
原因分析
经过分析,主要原因是软件工程师忽略了芯片的使能延迟,数据发送太早。具体的理解如下。以TI的TI-SN65LBC184为例,芯片的使能延迟(切换时间)为3.5uS,软件以DE为基准,假设软件延迟1uS后再发数据,波特率为115200bps,一位低电平宽度为8.68uS,此时低电平损失为:3.5uS-1uS=2.5uS,损失率为2.5/8.68=28.8%,由于串口是以每一帧的起始位开始计时,这将会导致波特率误差出错,关于波特率误差,可以参考之前的文档《深入理解波特率误差》。使用示波器的余晖模式(知道余晖模式是什么意思的评论区互相发一发)经过实测,软件工程师发送数据比方向引脚延迟最短只有1uS,导致了第一位起始位的低电平脉宽严重不足,导致对方PLC采样起始位时候出现了偏差,这种情况会随着波特率的提高,脉宽损失率会越严重。 图5:数据发送太早,导致起始位损失
04
解决方案
主要原因是由于软件工程师在配置方向DE和数据D之间的匹配上出现了问题,通过余晖模式可以看到,发送延时时间误差非常大,在1uS~10uS之间摇摆,如果延迟时间小于芯片要求的3.5US,就很有可能导致对方的设备采样低电平起始位出错。解决方案有2个:1)  更换使能延迟更小的RS485芯片,例如同时TI的芯片,TI-SN65LBC184的使能延迟是3.5uS,同系列的SN65LBC176A使能延迟只有22nS,基本可以做到无缝切换。2) 软件修改发送数据D延迟,并且延迟时间需要大于芯片要求的使能延迟,使用余晖模式观察1小时以上,不允许出现小于芯片使能延迟的情况。上述案例,将D比DE延迟到稳定的4us,通信不再出错。
05
总结
上述问题由于时发送起始位时数据提早引起的问题,还有一种情况:数据帧发送结束后,方向DE切换为接收模式的时间也要考虑,如果方向比数据提早,最后一位数据将会无法发出去,如果方向比数据延迟太多,对方的设备收到数据后马上回复,会因为己方没有切换到接收模式而导致数据丢失。我们的建议是,针对发送结束后两者的配合条件是,发送结束后,方向DE和数据D延迟的时间T:0≤T<8t,其中t为一位数据的宽度,如115200的t为8.68us。为何大于等于0即可,同样是因为有使能延迟的存在,从发送模式切换到接收模式,芯片也有延迟,例如TI-SN65LBC184是3.5uS。也就是即使数据和方向同步,也不用担心方向比数据早,至少会晚3.5us后才会切换到接收模式。当然有些芯片使能延迟非常小,是ns级别,此时可以考虑稍微增加1~2uS的延迟。为何需要小于10t,主要有两个原因考虑:一是大部分的方向DE都是软件控制,串口驱动在软件内部优先级较低,很难做到精准的时间控制,10t对软件要求较小,比较容易实现。二是RS485通信基本追求的不是速率,一问一答之间的回复时间并不是很快,对方收到数据后,对方的串口优先级也不是最高,收到数据后还需要进行处理,处理完成后才会回复数据。10t基本是一帧数据,目前还没有发现那个品牌的设备RS485的回复时间小于一帧数据需要的时间,也就是10t。当然,如果软件做到小于10t有难度,可以根据实际情况要求,但是肯定要小于1ms,否则兼容性将会很差。本文原创作者:创易栈啊甘,感谢啊甘的精彩分析!


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-14 02:54 , Processed in 0.077639 second(s), 42 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表