RS485采用差分信号负逻辑,+2V~+6V表示“0”,- 6V~-
2V表示“1”。RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线
式拓朴结构在同一总线上最多可以挂接32个结点。在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-485
通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。其理论的通讯距离是1200米,速率高达20Mbps,并可以用在强噪声的环境
中正常工作,在工业通讯领域中被广泛应用。
RS485通讯的点对点接法和主从机接法如下图:
以上2种接法建议都接上地线,以保证减小干扰。在主从网络中,通讯线必须手牵手地并联下去,不可以有星型连接或者分叉。
RS485协议只是把TTL的串口转换成差分方式的通讯接口,485芯片的端口还是接到Arduino的RX(PIN0)和TX(PIN1)端,两线制的
RS485是属于半双工网络,则需要有个端口来控制AB差分线上何时收何时发,这就会用到Arduino上的PIN2。Arduino扩展板上需要插上
485接口选择插针,红圈处的3个插针都要插上:
完成上面的操作,我们就可以玩代码了,2个简单的代码:
主机代码:
int EN = 2;
void setup()
{
pinMode(EN, OUTPUT);
Serial.begin(19200);
}
void loop()
{
// send data
digitalWrite(EN, HIGH);//使能发送
Serial.print('A');
delay(1000);
}
从机代码:
int ledPin = 13;
int EN = 2;
int val;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(EN, OUTPUT);
Serial.begin(19200);
}
void loop()
{
// receive data
digitalWrite(EN, LOW);//使能接收
val = Serial.read();
if (-1 != val) {
if ('A' == val) {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
}
}
代码编译后,分别下载到2个Arduino中(下载代码时请拔掉上图所示的485接口选择插针,因为它要占用串口,导致
下载失败),然后连接2个扩展板上的485接口,A-A,B-B,GND-GND。主机Arduino模块会向从机不停的发送字母A,然后从机接收到字母
A,并使数字PIN13上的发光二极管闪烁。
沒有留言:
張貼留言