rs485协议、电路详解(保姆级)

起源

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/SP348132
SP485R400
P485R400
SN75176B32
SP3485EN-L/TR321.2
THVD1500 /1510/1550256
MAX14832561.5
WS30882561.5
MAX30852561.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转接器可能供电不足,换有源转接器
  • 波特率过高,从机发送不及时造成误码率过高。降低波特率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb-Tomcat服务器

文章目录 Web服务器存在的意义关于Web服务器软件Tomcat服务器简介安装Tomcat服务器Tomcat服务器源文件解析配置Tomcat的环境变量启动Tomcat服务器一个最简单的webapp(不涉及Java) Web服务器存在的意义 我们之前介绍过Web服务器进行通信的原理, 但是我们当时忘记了一点, 服务器…

【愚公系列】《Python网络爬虫从入门到精通》008-正则表达式基础

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

视觉分析之边缘检测算法

9.1 Roberts算子 Roberts算子又称为交叉微分算法&#xff0c;是基于交叉差分的梯度算法&#xff0c;通过局部差分计算检测边缘线条。 常用来处理具有陡峭的低噪声图像&#xff0c;当图像边缘接近于正45度或负45度时&#xff0c;该算法处理效果更理想。 其缺点是对边缘的定位…

DuodooBMS源码解读之 sale_change模块

销售变更模块用户使用手册 一、模块概述 本扩展模块主要包含两个主要的 Python 文件&#xff1a;sale_change/report/sale_change_report.py 和 sale_change/wizard/sale_change_download.py&#xff0c;提供了销售变更报表查看和销售变更单下载的功能。以下是详细的使用说明…

OpenCV形态学操作

1.1. 形态学操作介绍 初识&#xff1a; 形态学操作是一种基于图像形状的处理方法&#xff0c;主要用于分析和处理图像中的几何结构。其核心是通过结构元素&#xff08;卷积核&#xff09;对图像进行扫描和操作&#xff0c;从而改变图像的形状和特征。例如&#xff1a; 腐蚀&…

力扣算法-1

力扣算法 1 两数之和 给定一个整数数组nums和一个整数目标值target&#xff0c;请你在数组中找出和为目标值target的那两个整数&#xff0c;返回他们的数组下标。 &#xff08;1&#xff09;暴力枚举 &#xff08;枚举数组每一个数x&#xff0c;再寻找数组中是否存在 targe…

pyside6学习专栏(三):自定义QLabel标签扩展类QLabelEx

标签是界面设计中最常用的控件&#xff0c;本文演示了如何基于PySide6的QLabex控件类扩展定义QLabelEX类&#xff0c;以实现更少的编码完成各种图像、彩色文本、动画的加载和显示&#xff0c;丰富界面显示 本示例演示了QLabel和其扩展类QLabelEx分别显示文本、图像、动画的使用…

从0到1:固件分析

固件分析 0x01 固件提取 1、从厂商官网下载 例如D-link的固件&#xff1a; https://support.dlink.com/resource/products/ 2、代理或镜像设备更新时的流量 发起中间人攻击MITM #启用IP转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward#配置iptables&#xff0c;将目…

使用 Spring Boot 和 Canal 实现 MySQL 数据库同步

文章目录 前言一、背景二、Canal 简介三、主库数据库配置1.主库配置2.创建 Canal 用户并授予权限 四.配置 Canal Server1.Canal Server 配置文件2.启动 Canal Server 五.开发 Spring Boot 客户端1. 引入依赖2. 配置 Canal 客户端3. 实现数据同步逻辑 六.启动并测试七.注意事项八…

Linux系统配置阿里云yum源,安装docker

配置阿里云yum源 需要保证能够访问阿里云网站 可以先ping一下看看&#xff08;阿里云可能禁ping&#xff0c;只要能够解析为正常的ip地址即可&#xff09; ping mirrors.aliyun.com脚本 #!/bin/bash mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos…

后端开发:开启技术世界的新大门

在互联网的广阔天地中&#xff0c;后端开发宛如一座大厦的基石&#xff0c;虽不直接与用户 “面对面” 交流&#xff0c;却默默地支撑着整个互联网产品的稳定运行。它是服务器端编程的核心领域&#xff0c;负责处理数据、执行业务逻辑以及与数据库和其他后端服务进行交互。在当…

银河麒麟系统安装mysql5.7【亲测可行】

一、安装环境 cpu&#xff1a;I5-10代&#xff1b; 主板&#xff1a;华硕&#xff1b; OS&#xff1a;银河麒麟V10&#xff08;SP1&#xff09;未激活 架构&#xff1a;Linux 5.10.0-9-generic x86_64 GNU/Linux mysql版本&#xff1a;mysql-5.7.34-linux-glibc2.12-x86_64.ta…

从零开始学习PX4源码9(部署px4源码到gitee)

目录 文章目录 目录摘要1.gitee上创建仓库1.1 gitee上创建仓库PX4代码仓库1.2 gitee上创建子仓库2.固件在gitee部署过程2.1下载固件到本地2.2切换本地分支2.3修改.gitmodules内容2.4同步子模块仓库地址2.5同步子模块仓库地址更新(下载)子模块3.一级子模块和二级子模块的映射关…

【回溯算法2】

力扣17.电话号码的字母组合 链接: link 思路 这道题容易想到用嵌套的for循环实现&#xff0c;但是如果输入的数字变多&#xff0c;嵌套的for循环也会变长&#xff0c;所以暴力破解的方法不合适。 可以定义一个map将数字和字母对应&#xff0c;这样就可以获得数字字母的映射了…

科普:“Docker Desktop”和“Docker”以及“WSL”

“Docker Desktop”和“Docker”这两个概念既有紧密联系&#xff0c;又存在一定区别&#xff1a; 一、联系 核心功能同源&#xff1a;Docker Desktop 本质上是基于 Docker 核心技术构建的。Docker 是一个用于开发、部署和运行应用程序的开源平台&#xff0c;它利用容器化技术…

Flutter 网络请求与数据处理:从基础到单例封装

Flutter 网络请求与数据处理&#xff1a;从基础到单例封装 在 Flutter 开发中&#xff0c;网络请求是一个非常常见的需求&#xff0c;比如获取 API 数据、上传文件、处理分页加载等。为了高效地处理网络请求和数据管理&#xff0c;我们需要选择合适的工具并进行合理的封装。 …

虚拟表格实现全解析

在数据展示越来越复杂的今天&#xff0c;大量数据的渲染就像是“满汉全席”——如果把所有菜肴一次性摆上桌&#xff0c;既浪费资源也让人眼花缭乱。幸运的是&#xff0c;我们有两种选择&#xff1a; 自己动手&#xff1a;通过二次封装 Element Plus 的表格组件&#xff0c;实…

QT 读写锁

一、概述 1、读写锁是一种线程同步机制&#xff0c;用于解决多线程环境下的读写竞争问题。 2、读写锁允许多个线程同时获取读锁&#xff08;共享访问&#xff09;&#xff0c;但只允许一个线程获取写锁&#xff08;独占访问&#xff09;。 3、这种机制可以提高并发性能&…

2025 vue3面试题汇总,通俗易懂

一、基础概念与核心特性 1. Vue3 相比 Vue2 的改进&#xff08;通俗版&#xff09; 问题&#xff1a;Vue3 比 Vue2 好在哪&#xff1f; 答案&#xff1a; 更快&#xff1a; Proxy 代理&#xff1a;Vue2 的响应式像“逐个监听保险箱”&#xff08;每个属性单独监听&#xff0…

第5章:在LangChain中如何使用AI Services

这篇文章详细介绍了 LangChain4j 中的 AI Services 概念&#xff0c;展示了如何通过高层次的抽象来简化与大语言模型&#xff08;LLM&#xff09;的交互。AI Services 的核心思想是隐藏底层复杂性&#xff0c;让开发者专注于业务逻辑&#xff0c;同时支持聊天记忆、工具调用和 …