当前位置: 首页 > news >正文

RS485和Modbus

UART协议中,空闲状态为高电平,也就是1,

 R25和R27,

 

485收发器

特性MAX485 (美信)SSP485 (国产替代)AZRS3080 (安格)
供电电压+5V+5V+3.3V ~ +5.5V
静态电流300μA (接收模式)120μA (接收模式)150μA (接收模式)
传输速率2.5Mbps10Mbps20Mbps
总线负载能力32 Unit Loads32 Unit Loads128 Unit Loads
ESD防护±15kV (HBM)±8kV (HBM)±25kV (HBM)
工作温度-40°C ~ +85°C-40°C ~ +85°C-40°C ~ +125°C
半/全双工半双工半双工半双工
故障保护开路/短路检测接收器开路保护总线开路/短路/空闲保护
封装SOIC-8, DIP-8SOP-8DFN-8, SOP-8
关键优势工业验证,高可靠性低成本,高速宽压、高温、超高ESD

 RO接单片机的RX引脚,当芯片的A-B>200mV时,芯片通过RO给单片机输出高电平;当芯片的A-B<-200mV时,芯片通过RO给单片机输出低电平。

DI接单片机的TX引脚

485电路中,一般接在RE和DE上的电平是同步变化的,作用就是切换485芯片的工作模式(接受模式/发送模式),DE、RE都接高时,处于发送模式,DI起作用;DE、RE都接低时,处于接收模式,RO起作用

 485芯片右侧的电路,上下拉电阻的右侧电路为防护电路;为什么要有上下拉电阻,空闲状态:通过上下拉电阻使得A-B>200mV,即对用逻辑1,即对应UART中的高电平,空闲状态

在A上加上拉,B上加下拉电阻,主要原因是:RS-485总线在空闲(idle)状态时,电平是不固定的,即电平在-200mV~+200mV之间,收发器可能输出高也可能输出低,UART在空闲时需要保持高电平的,如果此时收发器输出一个低电平,对UART来说是一个start bit,会导致通信异常。(所以RX需要加上上拉)其中:

                     ① A上加上拉,B上加下拉,接反数据通信也可能出错。

                     ② 某些收发器内部集成上下拉电阻,则外部不需要再添加。

RS-485标准定义信号阈值的上下限为±200mV。即当A-B>200mV时,总线状态应表示为“1”;当A-B<-200mV时,总线状态应表示为“0”。但当A-B在±200mV之间时,则总线状态为不确定,所以我们会在A、B线上面设上、下拉电阻,以尽量避免这种不确定状态。

上图中,TX、RX 引脚均需要上拉电阻,这一点特别重要。

接收:默认没有数据时,TX 为高电平,三极管Q1 导通,RE 为低电平使能,RO 收数据有效, RS485 为接收态。

发送:发送数据 1 时,TX 为高电平时,三极管导通,DE 为低电平(RE也为低电平),此时收发器处于接收状态,驱动器(也就是这个芯片,因为是在讨论此芯片的发送功能,所以也叫驱动器)就变成了高阻态(也就是说此芯片电阻无穷大),也就是发送端(芯片)与A\B断开了,此时 A\B 之间的电压就取决于 A\B 的上下拉电阻了,A 为高电平、B 为低电平,也就成为 RS485 的逻辑 1 了。

发送数据 0 时,TX 为低电平,三极管截止,DE 为高电平,驱动器使能,此时正好 DI 接地,也就是低电平,驱动器也就会驱动输出 B 为 1,A 为 0,也就是所谓的 RS485 的逻辑 0 了。

理解自收发的作用,关键是要理解 RE 和 DE 的作用,尤其是 DE 为 0 时,驱动器与 A\B 之间就是高阻态,也就是断开状态,而且 A/B 都要有上下拉电阻。然后就有了逻辑 0-1 间的切换。所以很巧妙,但这里也有一个很明显的 Bug,只适用于“半双工”,如果是全双工就不行了,因为 TX 为 1 时,接收使能,此时从机如果回复数据就乱了。

MAX485高阻态模式本质

当 DE=0(发送使能关闭)时,MAX485的驱动器输出级进入高阻态(High-Z),此时:

  1. 驱动器与A/B总线物理断开(等效开关断开)

  2. A/B线电平完全由外部电路决定

  3. 接收器是否工作取决于 RE引脚(RE=0时接收使能)

⚠️ 误区纠正:
TX引脚电平不影响总线!TX仅在DE=1时有效。


二、各状态真值表(核心逻辑)

控制引脚总线状态等效电路总线电平来源
DE=1驱动器激活内部MOSFET导通由TX信号通过反相器驱动
DE=0驱动器高阻态MOSFET关断→A/B悬空完全由外部上下拉电阻决定
RE=0接收器激活差分比较器工作可读取A-B电压差
RE=1接收器高阻态比较器关闭RO引脚无输出

 

http://www.dtcms.com/a/291531.html

相关文章:

  • Python 基础语法与数据类型(十五) - 异常处理
  • 把sudo搞坏了怎么修复:报错sudo: /etc/sudo.conf is owned by uid 1000, should be 0
  • 小孙学变频学习笔记(十一)关于V/F曲线的讨论
  • vue3+element-plus,el-autocomplete远程搜索,解决下拉框闪一下的问题
  • 概率论与数理统计(八)
  • Java IO 流详解:从基础到实战,彻底掌握输入输出编程
  • 自定义命令行解释器shell
  • Android开发中Crash治理方案
  • C++中的detach
  • Python打卡Day20 常见的特征筛选算法
  • C 语言的指针复习笔记
  • 圆柱电池自动分选机:全流程自动化检测的革新之路
  • 大模型中的Actor-Critic机制
  • 嵌入式学习笔记--MCU阶段--DAY08总结
  • 【Java基础03】Java变量2
  • seata at使用
  • 自然语言推理技术全景图:从基准数据集到BERT革命
  • 设备虚拟化技术-IRF
  • 利用DeepSeek编写批量输出多个主机的磁盘状况的脚本
  • 携“养鲜”魔法赴中卫,容声冰箱让石头缝里的鲜甜走得更远
  • 前端之学习后端java小白(一)之SDKMAN及helloword
  • EcoVadis评估:为企业带来的多重价值与竞争优势
  • QT跨平台应用程序开发框架(11)—— Qt系统相关
  • STM32F1使用volatile关键字避免内存优化
  • 基于springboot+vue开发的图书馆座位预约系统【源码+sql+可运行】【50721
  • 在安卓开发中,多次点击启动 Service 会有什么问题?
  • 关键成功因素法(CSF)深度解析:从战略目标到数据字典
  • 后训练(Post-training)语言模型
  • NuGet02-包制作及管理
  • 本地部署Nacos开源服务平台,并简单操作实现外部访问,Windows 版本