剖析RS-485原理以及与其他总线的区别
关注+星标公众号,不错过精彩内容
转自 | 记得城
RS-485在很多场景都有,特别是在一些工业设备中,本文带你深入理解RS-485的原理。
▉ RS-485概述
RS-485和RS-232一样,都是串行通信标准,现在的标准名称是TIA485/EIA-485-A,但是人们会习惯称为RS-485标准,RS-485常用在工业、自动化、汽车和建筑物管理等领域。
RS-485总线弥补了RS-232通信距离短,速率低的缺点,RS-485的速率可高达10Mbit/s,理论通讯距离可达1200米;RS-485和RS-232的单端传输不一样,是差分传输,使用一对双绞线,其中一根线定义为A,另一个定义为B。
双绞线
▉ RS-485物理层
RS-485的物理层负责在设备和物理传输介质之间传输原始数据。它处理电信号到数字数据的转换,同时定义电压、时序、数据速率等。
① 差分信号
长距离布线会有信号衰减,而且引入噪声和干扰的可能性更大,在线缆A和B上的表现就是电压幅度的变化,但是,采用差分线的好处就是,差值相减就会忽略掉干扰依旧能输出正常的信号,把这种差分接收器忽略两条信号线上相同电压的能力称为共模抑制。
标准规定了,逻辑1:+2V to +6V;逻辑0:-6V to -2V。
RS-485不需要使用特定的总线电压,只看最小差分电压,在较长的电缆长度上,接收器接收到的电压可能会降低到+/- 200 mV,这对于RS-485仍然是完全可以接受的,这也是RS-485的优点之一。
很多收发器的标准达到甚至超过TIA/EIA-485A规范,在实际使用中,以器件的SPEC参数为主,如下某收发器的负输入阈值最小也是-200mV。
② 信号定义
现在很多的RS-485转换器都是兼容RS-422的,所以看到很多转换器上面的信号都是T/R+、T/R-,即对应RS-485的A+和B-。
对于DB9针型的母头,RS-485有如下的接线定义示意,Pin6~Pin9为N/A不接。
DB9 | 输出信号 | RS-422全双工接线 | RS-485半双工接线 |
1 | T/R+ | 发(A+) | RS-485(A+) |
2 | T/R- | 发(B-) | RS-485(B-) |
3 | RXD+ | 收(A+) | 空 |
4 | RXD- | 收(B-) | 空 |
5 | GND | 地线 | 地线 |
③ 拓扑结构
RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,多采用的是两线制接线方式,这种接线方式为总线拓扑结构,在同一总线上最多可以挂接32个节点。
RS-485总线同I2C,也是主从模式,支持点对点单从机模式,也支持多从机模式,不支持多主机模式。
▉ RS-485收发器
RS-485是差分传输,如果用单片机控制RS-485接口的设备,需要用到收发器,这一点和CAN总线是类似的,如下是一个MCU控制一个RS-485的图示。
收发器内部是一个接收器(上半部分)加一个发送器(下半部分),下面简单说说收发器的原理,便于理解MCU是如何和485设备通信的。
RS-485收发器内部结构
其中:
A和B为总线;
R为接收器输入;
RE为接收器使能信号;
DE为发送器使能信号;
D为发送器输出;
对于使能信号,字母上面加一横的为低电平有效(如上图RE),不加的为高电平有效(如DE)。
对于发送器,有如下的真值表:
1、当驱动器使能引脚DE为逻辑高时,差分输出A和B遵循数据输入D处的逻辑状态。D处的逻辑高导致A转为高,B转为低。在这种情况下,定义为VOD=VA-VB的差分输出电压为正。当D为低时,输出状态反转,B变高,A变低,VOD为负。
2、当DE低时,两个输出都变成高阻抗。在这种情况下,与D处的逻辑状态是不相关的。
发送器真值表
对于接收器,有如下的真值表:
1、当接收器使能引脚RE逻辑低时,接收器被激活。当定义为VID=VA–VB的差分输入电压为正且高于正输入阈值VIT+时,接收机输出R变高。当VID为负且低于负输入阈值VIT-,接收机输出R变低。如果VID在VIT+和VIT-之间,则输出不确定。
2、当RE为逻辑高或悬空时,接收机输出为高阻抗,VID的大小和极性无关。
接收器真值表
▉ RS-485数据链路
上面讲到的RS-485收发器的工作原理,下面简单描述RS-485的数据链路,可以先看一下通俗易懂的UART协议帧格式
主机发送给从机或者从机发送给主机,都会占用到A和B线,所以RS-485多用在半双工模式。
主机的GPIO会控制RS-485收发器的DE管脚,设置发送模式,从UART TXD线向RS-485收发器的数据(D或DI)线发送一个字节,收发器将在A和B线上将单端UART位流转换为差分位流,数据离开收发器后,主机立即将收发器的模式切换为接收模式。
从机和主机是类似的,从机控制RS-485收发器的/RE管脚,设置为接收模式,接收主机发送的比特流,将其转换为单端信号,通过从机的UART RXD线接收,当从机准备好响应时,它按主机原来的方式进行发送,而主机变为接收。
▉ RS-232和RS-485转换
RS-232和RS-485之间可以转换,一个方法是RS-232转换成TTL,再由TTL转换为RS-485,当然也有芯片支持将RS-232直接转换成RS-485,网上有很多模块。
RS-232和RS-485转换模块
▉ RS-485和CAN的区别
虽说RS-485没有标准的数据协议格式,但和CAN总线在很多地方是有相似的,比如A&B和CANH&CANL都是差分信号,通信都需要收发器,都需要120欧姆的匹配电阻等等。
总线特性 | CAN总线 | RS-485总线 |
硬件成本 | 稍高 | 低廉 |
总线利用率 | 优先级自动仲裁,利用率高 | 采用轮询,利用率低 |
数据传输率 | 高 | 低 |
错误检测机制 | 控制器带校验机制,保证底层数据传输正确 | 只有物理层规范,无数据链路层规定 |
单节点故障影响 | 总线无影响 | 总线瘫痪 |
开发成本 | 软件开发灵活,时间成本低 | 开发难度较大 |
系统成本 | 较低 | 高 |
▉ RS-485常用电路
网上找的一个常用的RS-485电路,其中需要注意两点:
1、使能信号RE和DE可采用一个GPIO控制,节省资源,GPIO25输出高电平,RE=DE=0V,进入接收模式;GPIO25输出低电平,RE=DE=3.3V,进入发送模式。
2、有一些电路中会在A上加上拉,B上加下拉电阻,主要原因是:RS-485总线在idle状态,电平是不固定的,即电平在-200mV~+200mV之间,收发器可能输出高也可能输出低,UART在空闲时需要保持高电平的,如果此时收发器输出一个低电平,对UART来说是一个start bit,会导致通信异常,关于Ru和Rd的阻值在这里不作过多赘述,后面有机会会详细写一篇文章。
关于第二点,需要注意:
① A上加上拉,B上加下拉,接反数据通信也可能出错。
② 某些收发器内部集成上下拉电阻,则外部不需要再添加。
------------ END ------------
推荐阅读:
精选汇总 | 专栏 | 目录 | 搜索
精选汇总 | ARM、Cortex-M
精选汇总 | ST工具、下载编程工具
关注微信公众号『嵌入式专栏』,底部菜单查看更多内容,回复“加群”按规则加入技术交流群。
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。
剖析RS-485原理以及与其他总线的区别相关推荐
- 老李推荐:第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列...
老李推荐:第6章6节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令队列 事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些事件 ...
- 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...
老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...
- 老李推荐:第6章1节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览 1...
老李推荐:第6章1节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览 在上一章中我们有简要的介绍了事件源是怎么一回事,但是并没有进行详细的描述.那么往下的这几个 ...
- 深入php内核,从底层c语言剖析php实现原理
深入php内核,从底层c语言剖析php实现原理 非常好的电子书:http://www.cunmou.com/phpbook/preface.md 这是它的目录: PHP的生命周期 让我们从SAPI开始 ...
- 蚂蚁金服生产级 Raft 算法库存储模块剖析 | SOFAJRaft 实现原理
前言 SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景. SOFAJRaft 存储模块分为: Log ...
- 全面剖析Redis Cluster原理和应用
全面剖析Redis Cluster原理和应用 1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最 ...
- Step7-Mricro/win S7-200 485轮询 西门子485 modbus RTU 200 ModbusRTU通信S7-200与最大32个从站RS 485主站程序
Step7-Mricro/win S7-200 485轮询 西门子485 modbus RTU 200 ModbusRTU通信S7-200与最大32个从站RS 485主站程序,程序块自动轮询,无需编写 ...
- Eureka的工作原理以及它与ZooKeeper的区别
Eureka的工作原理以及它与ZooKeeper的区别 1.Eureka 简介: Eureka 是 Netflix 出品的用于实现服务注册和发现的工具. Spring Cloud 集成了 Eureka ...
- FSB\QPI\DMI总线的区别
FSB\QPI\DMI总线的区别 一些客户问:intel CPU有的是前端总线(FSB),有的是QPI总线,有的又是DMI总线,这就把人弄晕了,请问intel,下一步是不是有dizzy总线?(备注:d ...
最新文章
- Vue涉及国家安全漏洞?尤雨溪亲自回应
- 良好的编码习惯 —— 5 个提高代码质量的技巧
- ZooKeeper概述与原理
- python集合与字典区别_Python中的字典与集合
- | dp-the Treasure Hunter
- 15.IDA-查看XREF列表(Ctrl+x)
- 微信小程序把玩(三十四)Audio API
- 中国体力活动监测器(PAM)市场趋势报告、技术动态创新及市场预测
- Json字符串和Java对象互相转换
- Java再学习——关于ConcurrentHashMap
- win10下安装adb
- 浙大PAT甲级-1002
- 计算机技术转让增值税,技术转让免征增值税如何开票
- 用C++开发的双人对战五子棋
- 【故事编程:Lambda表达式】之最甜的巧克力(二)
- 基于FPGA驱动TLC5615模块
- 摩羯座|摩羯座性格分析
- 关于结构化、半结构化、非结构化数据的理解
- 2022陕西清北录取人数排名,西工大附中遥遥领先,高新一中40人
- 方舟php服务器控制,《方舟:生存进化》私人服务器设置教程
热门文章
- WRF案例运行-Single Domain Case
- b站网页版改html,网页版b站怎么设置弹幕?网页bilibili怎么设置停止播放和调倍速?...
- c 语言友元函数重载,C++友元函数重载++和--运算符
- 学习笔记-CCS-MSP430F5529[快速入门篇二]
- LWIP开发 | scoket | tcp | client
- 什么是java线程?java线程模型的组成
- 华中科技大学计算机考博真题,2010年华中科技大学计算机考博试题
- zTree的简单用法
- 数据、信号、码元传输速率和信息传输速率等概念
- 二维码的20种商业应用模式