TTL转RS485电路(自动收发)

RS485串口经常用到,本文分享下RS485协议方面基本点,并介绍一种简单的串口TTL(3.3V)电平转换为RS485电平的电路,这个电路是经过制板验证过的。

先简单介绍下RS485一些协议方面的基本点:
工作方式:差分信号
节点数:1发32收(也有说128,256个,跟驱动芯片有关)
特征阻抗:120Ω(需要并接120Ω终端电阻)
接收器输入阻抗:≥12KΩ
数据传输速度:最大10Mbps
最大传输距离:1200m
最大差动输出:±6V
最小差动输出:±1.5V
接收器灵敏度:±0.2V
共模电压范围:-7V~±12V
 


RS-485 标准的最大传输距离约为 1219 米,最大传输速率为 10Mbps。
通常, RS-485 网络采用平衡双绞线作为传输媒体。平衡双绞线的长度与传输速率成反比,只有在 20kbps 速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般来说, 15 米长双绞线最大传输速率仅为 1Mbps。
RS-485 网络采用直线拓朴结构,需要安装 2 个终端匹配电阻,其阻值要求等于传输电
缆的特性阻抗(一般取值为 120Ω)。在矩距离、或低波特率波数据传输时可不需终端匹配。

RS485自动收发电路
电路分享如下图,采用MAX485芯片,RE,DE管脚是选择发送和接收模式,一般情况下,需要MCU的一个GPIO来控制发送和接收模式,图中经过三极管来控制。
 
电路的控制逻辑可通过UART信号波形特点,以及MAX485的收发控制真值表分析明白。
 
接收:在MCU不发送数据的时候,UART_485_TX为高电平,三极管导通,DE=RE =0,按照表1和表2,MX485为接收模式, 对于此MAX485来说,A,B为高阻态,信号由另一端来控制,RO可以正常输出接收到的数据。
发送:在MCU发送数据的时候,当UART_485_TX发送数据0的时候,三极管不导通,DE=RE=1,按照表1和表2,MAX485为发送模式,DI接GND,即DI=0,MAX485将数据0发送出去。当UART_485_TX发送数据1的时候,MAX485为接收模式,A,B为高阻态,但是外面有R10上拉(A=1),R11下拉(B=0),对于远端来说,会接收到A=1,B=0,即接收到差分数据1.
由此可知,此电路是可以正常的收发的。

注意事项:R10,R11在网上有很多电路上面是10K,4.7K,先前也试过,但是实测会发现是有问题的,或者通信速度特别慢。原因是因为上下拉电阻太大,在电平变化的时候,上升沿速度太慢,因此在速率较高时会有问题,改成1K拿示波器实测波形是更好的。

接地问题:
RS485是差分传输的,所以很多工程师以为GND地线不重要,经常不接,甚至有些工程为了节约成本用两芯线或者用视频线来传输RS485信号。虽然如果不接地线,在很多场合是能正常工作的,但却埋下了很大的隐患,这有二个原因:
(1)共模干扰问题: RS-485接口采用差分方式传输信号,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了。但人们往往忽视了收发器有一定的共模电压范围,RS-485收发器共模电压范围为-7~+12V,只有满足上述条件,整个网络才能正常工作。因为RS-485是总线方式的传输,总线上有很多的节点,当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口。
(2)EMI电磁兼容性问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个信号地这个低阻的返回通道,信号中的共模部分就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。

### TTL RS485 通信的实现方法 TTL(Transistor-Transistor Logic)是一种常见的数字信号电平标准,通常用于短距离通信。而 RS485 是一种差分信号标准,适用于长距离、抗干扰能力强的工业通信。将 TTL 信号换为 RS485 信号,可以通过专用的电平换模块来实现。 #### 1. 使用 TTL RS485 模块 TTL RS485 模块是一种常见的硬件解决方案,它能够将 TTL 电平信号换为 RS485 差分信号,从而实现远距离通信。模块通常包括以下接口: - **TTL 端**:包括 TX(发送)、RX(接收)和 GND(地)。 - **RS485 端**:包括 A(+)和 B(-),用于连接 RS485 总线。 接线时需要注意以下几点: - TTL 端的 TX 应连接到 RS485 端的 TX 发送端,RX 应连接到 RS485 端的 RX 接收端。 - 在 RS485 端,A 和 B 线直接连接到总线上,无需交叉。 - 模块的 GND 必须可靠连接,以确保电平参考一致[^3]。 #### 2. 电源供电兼容性 TTL RS485 模块通常支持 3.5V 和 5V 的电源供电,因此可以适配不同的设备,例如树莓派或 ESP32 等单片机系统。这种兼容性使得模块能够灵活应用于多种嵌入式系统中[^2]。 #### 3. 通信距离与速率 RS485 标准的最大传输距离可达 **1200 米**,最大传输速率为 **10Mbps**,远高于 TTL 信号的短距离传输能力。因此,将 TTL 信号换为 RS485 信号后,可以显著延长通信距离,适用于工业现场的长距离数据传输[^1]。 #### 4. 调试与测试 在调试过程中,可以使用两个终端工具分别用于发送和接收数据。例如,在树莓派上,可以使用 `cat` 和 `echo` 命令进行简单的数据传输测试: ```bash # 接收端 cat /dev/ttyAMA1 # 发送端 echo "Hello world" >> /dev/ttyAMA2 ``` 如果配置正确,接收端将显示发送端发送的数据,表明通信成功[^2]。 #### 5. 软件配置与协议支持 在实际应用中,TTL RS485 模块常用于 Modbus 协议通信。例如,ESP32 可以通过 TTL RS485 模块与风速风向变送器通信,读取 Modbus 格式的数据帧,并解析出风速和风向信息。软件部分需要实现以下功能: - 初始化串口通信参数(波特率、数据位、停止位等)。 - 接收并解析 Modbus 数据帧。 - 提取有效数据(如风速、风向)。 - 将数据封装为接口函数,便于调用和显示。 以下是一个简单的 ESP32 串口初始化代码示例: ```cpp #include <HardwareSerial.h> HardwareSerial RS485Serial(1); // 使用串口1 void setup() { // 初始化串口 Serial.begin(115200); RS485Serial.begin(9600, SERIAL_8N1, 16, 17); // 设置波特率和引脚 } void loop() { if (RS485Serial.available()) { String data = RS485Serial.readStringUntil('\n'); Serial.println("Received data: " + data); } } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值