做了好几个RS485芯片的项目,今天准备做个详细的总结,避免以后再遇到问题不知如何下手。
一、基本原理
- 差分信号传输
- RS485 采用差分信号传输方式。它使用一对双绞线,这两条线分别称为 A 线和 B 线。发送端会将信号以差分的形式发送,即在 A 线和 B 线上分别施加相反的电压。当接收端收到信号时,是通过检测 A 线和 B 线之间的电压差来确定信号的逻辑状态。这种差分传输方式能够有效抑制电磁干扰(EMI),因为干扰信号通常会在两条线上以相同的方式出现,接收端通过差分检测可以将其抵消。
那么有人会问,什么是差分信号?答案就在下面⬇️
差分信号:一种提高信号传输质量的神奇方式_什么结构能提高差分线传输效率-CSDN博客
再实际的PCB板绘制中,走线也是要走成差分信号的方式的,如下图(参考,这是我自己画的):
AD软件添加差分对以及差分走线
(笔记)信号完整性:差分信号——什么是差分对 - tdyizhen1314 - 博客园
- 半双工通信模式
- RS485 通信是半双工的。半双工通信是一种数据传输模式,允许设备在通信链路中交替进行发送和接收数据,但是不能同时进行双向传输。
与全双工,单工的区别:
模式 | 数据传输方向 | 典型应用 |
单工 | 单向传输(固定发送端和接收端) | 广播、遥控器 |
半双工 | 双向交替传输 | RS-485总线、对讲机、CAN总线 |
全双工 | 双向同时传输 | 电话、以太网、USB |
二、RS485的 通信协议特点
- 长距离传输 :RS485DE 通信协议支持长达 1200 米(甚至更远,取决于波特率和线路条件)的传输距离,使其适用于各种工业和商业环境中的设备互联。
- 高抗干扰性 :由于采用差分信号传输,RS485DE 对于共模噪声具有很强的抑制能力,能够在恶劣的电磁环境中保持数据的完整性。
- 多点通信 :一个 RS485DE 总线上可以连接多达 32 个(或更多,取决于总线驱动器和接收器的性能)节点,方便构建复杂的网络拓扑结构。
- 灵活的波特率设置 :波特率可以在 300bps 到 10Mbps 之间灵活设置,以满足不同应用场景对数据传输速率的要求。
三、RS485的 通信协议的硬件实现
1. 硬件选型
选用符合 RS - 485 标准的收发器芯片,如 MAX485、SN65HVD485 或 LTC1495 等。这些芯片具有差分信号收发功能、低功耗和高驱动能力等特点,能够确保数据在总线上的可靠传输。
例:SP485收发芯片:
包含一路驱动器,一路收发器,具有驱动使能(DE)和接收使能(RE)管脚,当处于关闭状态时,驱动和接收输出为高阻状态。
2. 电路内部电平
3. 硬件电路设计
- 此电路图为传统的RS485电路
该电路图采用3线控制,485RE、485RX、485TX
控制策略如下:485RE为低电平,485处于接收状态;485RE为高电平,485处于发送状态。通过切换485RE的电平来达到485收发状态的切换。
- 此电路图为自收发型电路设计
- 还有一种电路为带隔离的(此图来自网络)
RS485自收发实现方案,典型应用电路及问题经验总结-CSDN博客
带收发控制脚的485在编程时需要切换控制端电平。增加程序的复杂度。那么为了编程方便,所以改成自收发电路。
TX、RX引脚需要上拉电阻。
接收:默认没有数据时,TX为高电平,三极管导通,RE为低电平使能,RO收数据有效,485芯片为接收状态。
发送:发送数据时,TX会先有一个下拉的电平(起始位-由高向低),表示开始发送数据,此时三极管截止,DE为高电平发送使能。当发送数据“0”时,由于DI接口相当于接地,此时数据“0”就会传输到AB扣,A-B<0,则传输“0”,完成低电平传输,当发送“1”时,此时三极管导通,按理说RO会使能,此时由于还处于发送数据中,这种状态下MAX485处于高阻太,此时的状态通过A上来,B下拉电阻决定,此时A-B>0传输“1”,完成高电平的传输。
自动收发电路发送高电平时同时也是接收状态。
四、拓展RS-485/RS-422
RS-232,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。RS-232只能实现点对点的通信方式,不具备联网功能最大传输距离也只能达到几十米,不能满足远距离通信要求。为了解决这一问题,一个新的标准RS-485产生。
RS-485的数据信号采用差分传输方式,也称作平衡传输,可以有效的解决共模干扰的问题,最大距离可以达到1200米,并且允许多个设备接到同一条总线上。它使用一对双绞线,一线叫A,一线叫B。该电平与TTL兼容,可方便与TTL电路连接。
对于发送端:
一般情况下,发送驱动器A、B之间的正电平在+2~+6V(发送逻辑1时总线上A的电压大于B的电压),负电平在-2~-6V(发送逻辑0时总线上的电压小于B的电压)。
对于接收端:
当总线上A的电压大于B的电压,且压差大于200mv时,表示接收到逻辑1
当总线上A的电压小于B的电压,且压差小于-200mv时,表示接收到逻辑0
RS-422跟RS-485的主要区别:RS-422有4根信号线:两根发送,两根接收。由于RS-422的收与发是分开的,所以可以同时收和发(全双工),也正因为全双工要求收发要有单独的信道,所以RS-422适用于两个站之间通信,不可用于总线网;RS-485只有2根信号线,所以工作在半双工模式,常用于总线网。
五、代码实现
以STM32系列芯片为例:
STM32F103C8T6-RS485通讯完整版_stm32中rs485-CSDN博客
这为大哥写的基本已经很详细了。
六、调试遇到的问题
1. 通信失败或无响应
现象 | 可能原因 | 排查步骤 |
---|---|---|
完全无通信 | ① 收发器未供电或损坏 ② A/B线反接 | ① 检查电源电压 ② 交换A/B线测试 |
部分设备无响应 | ① 地址冲突 ② 终端电阻缺失 | ① 检查设备地址配置 ② 补加终端电阻 |
2. 信号干扰与数据错误
现象 | 解决方案 |
---|---|
数据偶发误码 | ① 降低波特率 ② 增加屏蔽层接地 |
持续噪声干扰 | ① 检查附近电机/变频器干扰源 ② 加装磁环或共模扼流圈 |
3. 通信距离受限
-
问题原因:线缆过长、波特率过高或线径不足。
-
优化方法:
-
使用低波特率(如9600bps)。
-
换用低衰减线缆(如截面积≥0.5mm²)。
-
增加RS485中继器延长距离。
-
以上为学习总结,如有问题各位提出来嚯~大家共同学习!