RS485和Modbus
UART协议中,空闲状态为高电平,也就是1,
R25和R27,
485收发器
特性 | MAX485 (美信) | SSP485 (国产替代) | AZRS3080 (安格) |
---|---|---|---|
供电电压 | +5V | +5V | +3.3V ~ +5.5V |
静态电流 | 300μA (接收模式) | 120μA (接收模式) | 150μA (接收模式) |
传输速率 | 2.5Mbps | 10Mbps | 20Mbps |
总线负载能力 | 32 Unit Loads | 32 Unit Loads | 128 Unit Loads |
ESD防护 | ±15kV (HBM) | ±8kV (HBM) | ±25kV (HBM) |
工作温度 | -40°C ~ +85°C | -40°C ~ +85°C | -40°C ~ +125°C |
半/全双工 | 半双工 | 半双工 | 半双工 |
故障保护 | 开路/短路检测 | 接收器开路保护 | 总线开路/短路/空闲保护 |
封装 | SOIC-8, DIP-8 | SOP-8 | DFN-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),此时:
驱动器与A/B总线物理断开(等效开关断开)
A/B线电平完全由外部电路决定
接收器是否工作取决于 RE引脚(RE=0时接收使能)
⚠️ 误区纠正:
TX引脚电平不影响总线!TX仅在DE=1时有效。
二、各状态真值表(核心逻辑)
控制引脚 | 总线状态 | 等效电路 | 总线电平来源 |
---|---|---|---|
DE=1 | 驱动器激活 | 内部MOSFET导通 | 由TX信号通过反相器驱动 |
DE=0 | 驱动器高阻态 | MOSFET关断→A/B悬空 | 完全由外部上下拉电阻决定 |
RE=0 | 接收器激活 | 差分比较器工作 | 可读取A-B电压差 |
RE=1 | 接收器高阻态 | 比较器关闭 | RO引脚无输出 |