董董soul 发表于 2016-9-12 14:06:26

董董的进阶小课堂(1)之RS-485通信实验

本帖最后由 董董soul 于 2016-9-22 14:06 编辑

各位看官,大家好,董董又出现了,这次给大家带来OCROBOT的新产品,大名叫做OCROBOT α RS-485。
上图:
是不是很帅气?两眼冒金星……
好了,步入正题,今天来做的是RS-485通信实验(100米)
材料准备:
OCROBOT α mega328-u(或者8F328D-U、8F328-RF) 两块
OCROBOT α RS-485两块
OCROBOT α Li power (锂电池板)两块
OCROBOT α 1602LCD显示屏 一块
锂电池 两块
100米长的双绞线

实验目的:
本实验分A、B两组,A组从0开始计数,通过100米的双绞线,将结果发送且显示在B组的显示屏上。其目的为检测两组通信的有效率。

具体步骤:
1、首先准备A组,连接电脑与mega328-u,下载A组程序,完成之后,断开数据线。
2、将mega328-u、RS-485、Li power三者堆叠,锂电池接入锂电池板,RS-485左边的AB组接上双绞线,
3、准备B组,连接电脑与另外一块mega328-u,下载B组程序,完成之后,断开数据线。
4、将mega328-u和剩下的RS-485、Li power、1602LCD显示屏,四者堆叠,锂电池接入锂电池板,另外RS-485左边的AB组接上双绞线的另外一端。

注意:A组的RS-485的A口接什么颜色的双绞线,B组的A口也要接上对应颜色的双绞线,B口同理。

串口通讯波特率为9600
A组如下图:


B组如下图:

整体效果:


A组程序如下:
long i=0;
void setup() {
Serial.begin(9600);      // 打开串口传输,并设置波特率为9600
}
void loop() {

    Serial.println(i);       // 打印一个标签
   i++;
   delay(500);
}

B组程序如下:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2);

void setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600);      // 打开串口传输,并设置波特率为9600
}
void loop() {
if (Serial.available() )       //根据接收到的字符做相应的动作
{delay(100);
   
    lcd.clear(); //清屏
   
    while (Serial.available() > 0) {// 读取字符
   
      lcd.write(Serial.read()); // 显示字符
   
}
}
}


别以为程序一下好,就可以成功通信了哦!各位,请仔细看,板子上面还有拨码开关,这种细致的设计真是……
好了,我来给大家看一下A组、B组分别是怎么拨的
A组把5,6拨上,如图:

B组把1、2、5、6拨上,如图:


最后上一张数了好几秒的图:


哈哈哈,搞定,最后的最后,给大家维基百科一下什么叫RS-485!
RS-485:
EIA-485(过去叫做RS-485或者RS485)是隶属于OSI模型物理层的电气特性规定为2线,半双工,多点通信的标准。它的电气特性和RS-232不大一样。用缆线两端的电压差值来表示传递信号,1极的电压标识为逻辑1,另一段标识为逻辑0。两端的电压差最小为0.2V以上时有效,任何不大于12V或者不小于-7V的差值对接受端都被认为是正确的。

EIA-485仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。EIA-485可以应用于配置便宜的广域网和采用单机发送,多机接受通信链接。它提供高速的数据通信速率(10m时35Mbit/s;1200m时100kbit/s)。EIA-485和EIA-422一样使用双绞线进行高电压差分平衡传输,它可以进行大面积长距离传输(超过4000英尺,1200米)。

和EIA-422相对照的是,EIA-422采用不可转换的单发送端,EIA-485的发送端需要设置为发送模式,这使得EIA-485可以使用双线模式实现真正的多点双向通信。

EIA-485推荐使用在点对点网络中,线型、总线型,不能是星型、环型网络。理想情况下EIA-485需要2个终接电阻,其阻值要求等于传输电缆的特性阻抗。没有特性阻抗的话,当所有的设备都静止或者没有能量的时候就会产生噪声,而且线移需要双端的电压差。没有终接电阻的话,会使得较快速的发送端产生多个数据信号的边缘,这其中的一些是不正确的。之所以不能使用星型或者环型的拓扑结构是由于这些结构有不必要的反映,过低或者过高的终接电阻可以产生电磁干扰(EMI)。

EIA-485在使用四线时可以和EIA-422一样实现全双工。EIA-485可以实现真正的多点通信,在许多情况下并没有什么用处。在某些限制条件下,EIA-485和EIA-422可以实现相互的连接。

EIA-485的用途
SCSI-2和SCSI-3通常使用这种标准的设备来作为物理层。
EIA-485经常和常用设备UART一起使用来实现在飞机上的低速率数据传输,举个例子,一些乘客控制单元采用这种设备,从而只需要很少的线缆就可以实现几个椅子共享线缆,从而减轻整个设备的重量。
EIA-485同样可以在一些工厂的项目控制机器上看到,来实现工厂不同楼层之间的数据通信。它可以抵抗机械设备和焊接设备的电磁干扰。
EIA-485在大型音频系统中使用,可以在音乐厅和剧院见到这种设备,可以使用普通的计算机来运行一些特殊的软件实现远距离音频设备的控制。EIA-485通过XLR标准的线缆连接的设备大量的用于麦克风上,从而实现舞台和控制台之间的连接而不需要预设线路。

需要用到的库:

注:EN:终接电阻

wing 发表于 2016-9-12 15:07:07

期待您的下一课 ^v^

6881087 发表于 2016-9-13 08:06:48

A組是1、2 拨上還是5、6 拨上?
动画图是5、6 拨上

幻生幻灭 发表于 2016-9-13 08:33:57

PNG是如何实现 “如动画图:”

董董soul 发表于 2016-9-13 10:38:19

幻生幻灭 发表于 2016-9-13 08:33
PNG是如何实现 “如动画图:”

写错写错……马上改:P

迷你强 发表于 2016-9-22 08:52:31

:lolEN是终端电阻的开关,如果直接用串口调试器就推3,4,如果直接mcu堆叠使用就推5,6

董董soul 发表于 2016-9-22 09:46:27

6881087 发表于 2016-9-13 08:06
A組是1、2 拨上還是5、6 拨上?
动画图是5、6 拨上

A组是5,6拨上,5,6对应MCU
B组是1,2,5,6拨上,1,2对应EN

6881087 发表于 2016-9-22 11:12:43

董董soul 发表于 2016-9-22 09:46
A组是5,6拨上,5,6对应MCU
B组是1,2,5,6拨上,1,2对应EN

所以你寫錯了吧

董董soul 发表于 2016-9-22 14:06:50

6881087 发表于 2016-9-22 11:12
所以你寫錯了吧

神眼,,,,
页: [1]
查看完整版本: 董董的进阶小课堂(1)之RS-485通信实验