RS485接口

本文介绍了RS485的主要特性,包括信号电平、总线端接、失效保护、数据速率与总线长度等方面。如驱动器可提供不小于1.5V差分输出,总线端接需匹配电阻,失效保护可应对信号丢失情况,数据速率受驱动器和电缆长度影响。

 RS485基础知识

目录

一. RS485 的主要特性

信号电平

总线端接

失效保护

数据速率与总线长度


一. RS485 的主要特性

• 多点采用单一 5V 电源

•–7V 至 +12V 总线共模范围

• 多达 32 个单位负载

• 10Mbps 最大数据速率(距离为 40 英尺),4000 英尺的最大电缆长度(速率为 100kbps)

信号电平

驱动器可在 54Ω 负载上提供不小于 1.5V 的差分输出,接收器可检测到低至 200mV 的差分输入。

 图 1. 485 规定的最低总线信号电平

总线端接

为避免信号反射,数据传输线应始终端接,并且 stub 应尽可能的短。正确的端接需要终端电阻 RT 和传输电缆的特性阻抗 Z0 匹配。RS485 建议采用 Z0 = 120Ω 的电缆,因此电缆干线通常与 120Ω电阻端接,线缆的末尾处各一个(图 2 左半部分)。在噪声环境下通常将 120Ω 电阻替换为两个 60Ω 电阻,组成一个低通滤波器,用于提供额外的共模噪声滤除能力(图 2 右半部分)。请务必匹配电阻值(宜使用精度为 1% 的电阻),确保两个滤波器的频率降幅相等。较大的电阻容限(即 20%)会导致滤波器转折频率不同,并且共模噪声会转换为差分噪声,从而使接收器的抗扰性降低。。

 图 2. RS485 端接

失效保护

失效保护是接收器在缺少输入信号的时候输出端有个确定状态,有3种情况可能导致信号丢失:

开路:线缆中断或者收发器从总线断开。

短路:差分对导线因绝缘层失效相互接触。

总线空闲:所有总线驱动器处于未活动状态。

上述条件下,当输入信号为零时,传统的接收器输出随机状态,现在收发器内部都包含一个偏置电路,可以对开路、短路和总线空闲进行保护,信号丢失时,接收器也能强制输出一个确定的状态。 这些失效保护设计的缺点是最坏情况下的噪声容限仅为 10mV,因此在干扰环境中,要增加外部失效保护电路以增加噪声容限。

外部失效保护电路由一个电阻分压器组成,可以产生足够的总线差分电压,以驱动接收器产生一个确定的输出状态。为了确保有足够的噪声容限,除了 200mV 的接收器输入阈值外,VAB 还必须包括测得的最大差分噪声,VAB = 200mV + V噪声。

 图 3. 外部空闲总线失效保护偏置电路

驱动器的输出取决于其提供给负载的电流,因此在总线上增加收发器和失效防护电路会增加所需的总负载电流。为了估算可能的最大总线负载数,RS485 指定了单位负载 (UL) ,表示大约 12k 欧 的负载阻抗。驱动器能够驱动 32 个单位负载。现如今使用的收发器通常可以减少单位负载,例如 1/8 UL,从而在总线上连接多达 256 个收发器。 失效防护偏置可贡献多达 20 个单位的总线负载。

数据速率与总线长度

 图 4. 电缆长度与数据速率

第 1 部分数据速率主要由驱动器的上升时间决定。第 2 部分由于传输线路的损耗,随着电缆长度增加,数据速率降低。第 3 部分显示较低的频率范围,线路电阻会限制电缆长度。

### RS485接口使用说明及协议实现 #### 1. 硬件连接 RS485接口是一种半双工通信接口,通常采用两线制(A和B线)进行数据传输[^1]。为了提高抗干扰能力,推荐使用屏蔽双绞线作为传输介质。在硬件连接中,需要注意以下几点: - RS485网络采用总线式拓扑结构,最多可以挂接32个节点。 - 每个节点需要一个RS485收发器芯片,例如SP3485、MAX485或ADM2587等[^2]。 - 在长距离传输时,建议在总线两端添加终端匹配电阻(一般为120欧姆),以减少信号反射引起的干扰。 #### 2. 协议实现 RS485本身并不定义具体的通信协议,而是提供了一种物理层的差分传输方式。实际应用中,通常结合高层协议(如Modbus)来实现具体的数据通信[^4]。以下是基于Modbus RTU协议的RS485通信实现示例: ```c // 初始化RS485模块 void RS485_Init(u32 pclk2, u32 bound) { // 配置UART波特率等参数 USART_Init(USART2, &USART_InitStruct); } // 发送数据函数 void RS485_Send_Data(u8 *buf, u8 len) { RS485_TX_Set(1); // 设置为发送模式 for (int i = 0; i < len; i++) { USART_SendData(USART2, buf[i]); while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); } RS485_TX_Set(0); // 切换回接收模式 } // 接收数据函数 void RS485_Receive_Data(u8 *buf, u8 *len) { for (int i = 0; i < *len; i++) { while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET); buf[i] = USART_ReceiveData(USART2); } } ``` #### 3. 编程驱动 在嵌入式开发中,通常需要编写驱动程序来控制RS485通信。以下是一个基于STM32F429的RS485驱动代码示例[^3]: - **头文件 `rs485.h`**:定义了RS485相关的全局变量和函数原型。 - **源文件 `rs485.c`**:实现了RS485的初始化、数据发送和接收等功能。 在中断接收模式下,可以通过配置串口中断来实时处理接收到的数据。例如,在USART2_IRQHandler()函数中,将接收到的数据存放到缓冲区 `RS485_RX_BUF` 中。 #### 4. 注意事项 - 在设计RS485网络时,需确保所有设备的逻辑电平一致,避免因电压不匹配导致通信异常。 - 如果网络中有多个主设备,需要通过软件控制RS485收发器的使能引脚,防止冲突。 - 在工业环境中,建议使用带隔离功能的RS485收发器(如ADM2587),以提高系统的抗干扰能力[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值