选择用于微控制器和外围设备之间通信的通信协议是嵌入式系统的重要部分。这很重要,因为任何嵌入式应用的整体性能都取决于通信手段,因为它与降低成本、更快的数据传输、长距离覆盖等有关。
在之前的文章中,我们了解了Arduino中的I2C通信协议和SPI通信协议。现在还有另一种称为RS-485的串行通信协议。该协议使用异步串行通信。 RS-485的主要优点是两个设备之间的长距离数据传输。它们最常用于电噪声工业环境。
在本篇文章中,我们将了解两个Arduino开发板之间的RS-485串行通信,然后通过RS-485模块发送ADC值,通过控制从Arduino主机连接到Arduino从机的LED的亮度来演示它。 10k电位器用于改变主机Arduino的ADC值。
让我们首先了解RS-485串行通信的工作原理。
RS-485串行通信协议
RS-485是一种异步串行通信协议,不需要时钟脉冲。它使用称为差分信号的技术将二进制数据从一个设备传输到另一个设备。
那么这种差分信号传输方法是什么?
差分信号方法通过使用正负5V产生差分电压来工作。当使用两根电线时,它提供半双工通信,而全双工需要4条电线。
通过使用这种方法:
● RS-485支持最高30Mbps的更高数据传输速率。
● 与RS-232协议相比,它还提供最大的数据传输距离。它最多可传输1200米的数据。
● RS-485相对于RS-232的主要优点是具有单个主设备的多个从设备,而RS-232仅支持单个从设备。
● 它最多可以有32个设备连接到RS-485协议。
● RS-485的另一个优点是它可以免受噪声影响,因为它们使用差分信号方法进行传输。
● 与I2C协议相比,RS-485更快。
Arduino中的RS-485
为了在Arduino中使用RS-485,需要一个基于Maxim MAX485 IC的称为5V MAX485 TTL到RS485的模块,因为它允许在1200米的长距离上进行串行通信并且是双向的。在半双工模式下,它的数据传输速率为2.5Mbps。
5V MAX485 TTL至RS485模块需要5V的电压并使用5V逻辑电平,以便可以与Arduino等微控制器的硬件串行端口连接。
它具有以下功能:
● 工作电压:5V
● 板载MAX485芯片
● RS485通信功耗低
● 摆率受限的收发器
● 5.08mm间距2P端子
● 方便的RS-485通讯接线
● 芯片的所有引脚都已通过微控制器控制
● 板尺寸:44 x 14mm
引脚输出RS-485:
引脚名称
|
使用方法
|
VCC
|
5V
|
A
|
同相接收器输入
同相驱动器输出
|
B
|
反相接收器输入
反相驱动器输出
|
GND
|
GND(0V)
|
R0
|
接收器输出(RX引脚)
|
RE
|
接收器输出(低电平有效)
|
DE
|
驱动器输出(高电平启用)
|
DI
|
驱动器输入(TX引脚)
|
该RS-485模块可与Arduino轻松连接。我们使用Arduino 0(RX)和1(TX)的硬件串口(在UNO、NANO中)。编程也很简单,只需使用Serial.print()写入RS-485和Serial.Read()来读取RS-485即可。
稍后将详细介绍编程部分,但首先要检查所需的元件和电路图。
需要的组件
● Arduino UNO或Arduino NANO
● MAX485 TTL转RS485转换模块
● 10K电位器
● 1602 LCD显示屏
● LED指示灯
● 面包板
● 连接导线
在本篇文章中,Arduino Uno用作Master,Arduino Nano用作Slave。这里使用两个Arduino板,因此需要两个RS-485模块。
电路原理图
第一个RS-485和Arduino UNO(主站)之间的电路连接:
RS-485 |
Arduino UNO |
DI |
D1(TX) |
DE |
D8 |
RE |
D8 |
R0 |
D0(RX) |
VCC |
5V |
GND |
GND |
A |
连接至从机RS485的A |
B |
连接至从机RS485的B |
对于从机RS-485
RS-485 |
Arduino Nano |
DI |
D1(TX) |
DE |
D8 |
RE |
D8 |
R0 |
D0(RX) |
VCC |
5V |
GND |
GND |
A |
连接至主机RS485的A |
B |
连接至主机RS485的B |
1602 LCD和Arduino Nano之间的电路连接:
1602 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
电位器中心引脚用于LCD的对比度控制 |
RS |
D2 |
RW |
GND |
Ë |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
10K电位器连接到Arduino UNO的模拟引脚A0,用于提供模拟输入,LED连接到Arduino Nano的引脚D10。 |
发表评论