RS485自动收发电路-能不用就不用

前言

这个文章的题目有点骗眼球的感觉,其实是自己踩过大坑,很是痛恨这个电路,希望大家以后不要踩了。工程师要画这个电路时,网上一搜,不经深入分析就拿来用,给项目埋了炸弹。

RS485自动收发电路

因为RS485采用叉分信号,只支持半双工。正常的RS485芯片驱动电路是需要GPIO来切换发送和接收模式。如下图所示,一般的RS485电平转换芯片都有RE/DE脚,用来切换收发模式。

RS485标准电路参考

嵌入式行业,特别是MCU相关的都比较爱抠成本,便宜的MCU往往就是GPIO数量不够。如果是上Linux系统的方案,一般串口支持RS485就还得改GPIO驱动,会有软件工作量。于是有大聪明发明了自动切换的电路,省掉了那个GPIO。下图是网上找的一个自动收发电路图,收发原理直接看图中文字描述。

1. 不发送数据时,接收模式,没问题。

2. 发送数据0时,发送模式,输出0,没问题。

3. 发送数据1时,接收模式,外围A,B由上下拉电路控制,输出1,问题出在这里。

RS485自动收发电路

由于自己示波器测量的图片丢失,网上找别的测试图来说明,引用文章链接:

https://zhuanlan.zhihu.com/p/48018717

三极管的关断时间较长(主要是由于三极管关断时的存储时间较长),因此若TXD发送低电平,DE&RE引脚较长时间后才会升至高电平,才会切到发送模式,发送低电平的延时时间较长,如下图所示为1.204 μs。

关断延时

二是自动收发电路发送高电平是通过外部上下拉电阻驱动的,上升沿较缓慢,波形如下图所示,可以看出,发送高电平的上升沿较为缓慢,限制了高速通信的应用。

上下拉驱动上升沿缓慢

RS485自动收发电路风险

如下图所示,TXD变为高电平,DE&RE引脚降为低电平,AB差分电压缓慢上升,由于此时RS-485收发器已经处于接收状态,在AB差分电压上升至RS-485收发器门限电平前RXD引脚会出现到一段时间的低电平信号,例如门限电平为-200mV~-50mV的收发器,AB差分电压上升至-50mV前RS-485收发器均可输出低电平,此低电平信号的时间与AB差分电压上升时间和RS-485收发器的接收延时有关。由于串口一般是将每个位分成16份,检测中间的3份的电平信号从而确定此位的信号高低,因此若此低电平信号保持至每个位的信号检测时,则会使MCU接收到一个起始位,从而接收到错误的数据,因此这个问题同样限制了高速通信的应用并且降低了通信的可靠性。

rxd接收到低电平

我们在实际应用中就是遇到这个问题,概率收到错误数据,导致丢包(数据校验不通过而丢弃)。在研发的环境中,连接的终端设备少,距离近,这个丢包概率比较低,不容易发现。在Modbus应用中,概率丢包只会影响数值更新速度慢,影响不大。但是我们在现场做升级操作时,几乎很难成功,因为在研发环境没问题,我们优先排查现场环境信号干扰等问题,浪费了很多时间。这个电路有两个缺点:

1. 通信速度慢:

三极管有电容效应,导致关断时间较长,导致RE/DE从低到高电平变化出现比较大的斜坡.同时485输出高电平,是依靠上下拉来完成的,会导致上升沿不够迅速,因此上下拉的阻值选择也是影响速度的关键。

2. 驱动能力弱:

由于当tx为高,485电平是由其上拉电阻完成的,因此弱提高驱动能力,就要减小电阻,由于485芯片驱动能力有限,电阻太小会导致tx为低的时候,485芯片无法将485总线拉低,因此总线上所有上拉电阻的并联值不应该小于375欧。还用当接入120欧的终端电阻的时候,AB两相的电压差由终端电阻和上下拉分压得到,会导致AB两相的电压差变小,因此自动收发串口转RS485设计不太适合添加终端电阻。

终端电阻的问题

终端电阻主要是为了匹配通信线的特性阻抗,防止信号反射,提高信号质量。在组建RS-485总线网络时,通常使用特性阻抗为120Ω的屏蔽双绞线,由于RS-485收发器输入阻抗一般较高(例如RSM485ECHT输入阻抗为96kΩ,最多可连接256个节点),在信号传输到总线末端时会由于受到的瞬时阻抗发生突变(以RSM485ECHT为例,阻抗由120Ω变为96kΩ),导致信号发生反射,影响信号的质量。

实际上只有距离+高速率的环境需要添加终端电阻,例如长度>500米 + 波特率超过500kbps。

总结和建议

RS485总线和电路看似简单,但是要看应用场景,对稳定性有要求的不建议使用自动收发驱动电路。

在没有遇到信号反射问题时,尽量不要使用终端电阻;硬件设计时,可以预留外挂或焊接120Ω电阻的位置。

要查看RS485驱动芯片的输入阻抗参数,和支持外挂设备数。上、下拉电阻与收发器输入阻抗的并联值应大于375Ω;

如果是现场做工程项目,建议带上万用表和示波器,测一下空闲状态下的电压值,收发的信号质量,这样才安心。

(END)

相关推荐

  1. MyEclipse自动编译解决方案

    2024-07-18 00:26:03       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 00:26:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 00:26:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 00:26:03       57 阅读
  4. Python语言-面向对象

    2024-07-18 00:26:03       68 阅读

热门阅读

  1. C# —— 泛型

    2024-07-18 00:26:03       22 阅读
  2. 利用Postman进行自动化测试:从基础到进阶

    2024-07-18 00:26:03       20 阅读
  3. 河南萌新联赛2024第(一)场:河南农业大学

    2024-07-18 00:26:03       20 阅读
  4. ZC2205-24V500mAUltralow-Quiescent-Current LDO

    2024-07-18 00:26:03       16 阅读
  5. golang项目中gorm框架的配置和具体使用

    2024-07-18 00:26:03       20 阅读
  6. 使用Django框架实现音频上传功能

    2024-07-18 00:26:03       20 阅读
  7. 38 IRF+链路聚合+ACL+NAT组网架构

    2024-07-18 00:26:03       21 阅读
  8. Resilience4j 实现接口限流

    2024-07-18 00:26:03       22 阅读
  9. ld,GNU 链接器介绍以及命令行参数详解

    2024-07-18 00:26:03       17 阅读
  10. Windows 点云生成二维栅格图 [附C++完整代码实现]

    2024-07-18 00:26:03       19 阅读