Giao tiếp 32 thiết bị Arduino với RS485 – Điện Tử Hello

RS485 LÀ GÌ

Năm 1983, Thương Hội công nghiệp điện tử ( EIA ) đã phê duyệt một tiêu chuẩn truyền cân đối mới gọi là RS-485. Đã được gật đầu thoáng đãng và sử dụng trong công nghiệp, y tế, và gia dụng. Có thể coi chuẩn RS485 là một tăng trưởng của RS232 trong việc truyền tài liệu tiếp nối đuôi nhau. Những bộ chuyển đổi RS232 / RS485 được cho phép người dùng tiếp xúc với bất kể thiết bị mà sử dụng link tiếp nối đuôi nhau RS232 trải qua RS485. Liên kết RS485 được hình thành cho việc thu nhận tài liệu ở khoảng cách xa và điều khiển và tinh chỉnh cho những ứng dụng. Những đặc thù nổi trội của RS485 là nó hoàn toàn có thể tương hỗ một mạng lên tới 32 trạm thu phát trên cùng một đường truyền, vận tốc baud hoàn toàn có thể lên tới 115.200 cho một khoảng cách là 4000 feet ( 1200 m ) .

RS485

Với kiểu truyền cân đối và những dây được xoắn lại với nhau nên khi nhiễu xảy ra ở dây này thì cũng xảy ra ở dây kia, tức là hai dây cùng nhiễu giống nhau. Điều này làm cho điện áp sai biệt giữa hai dây biến hóa không đáng kể nên tại nơi thu vẫn nhận được tín hiệu đúng nhờ tính năng đặc biệt quan trọng của bộ thu đã vô hiệu nhiễu. Liên kết RS485 được sử dụng rất thoáng đãng trong công nghiệp, nơi mà thiên nhiên và môi trường nhiễu khá cao và sự tin cậy vào tính không thay đổi của mạng lưới hệ thống là điều quan trọng. Bên cạnh đó năng lực truyền thông qua khoảng cách xa ở vận tốc cao cũng rất được chăm sóc, đặc biệt quan trọng là tại những nơi mà có nhiều trạm tiếp xúc được trải ra trên diện rộng .

RS-485 communication on multiple Arduino boards - Networking, Protocols, and Devices - Arduino Forum

Module Chuyển Đổi RS-485 to TTL

Module giúp quy đổi mức điện áp TTL sang tiếp xúc RS-485 .
Module được phong cách thiết kế nhỏ gọn, tích hợp những linh phụ kiện thiết yếu để bảo vệ vận tốc truyền dẫn cao, khoảng cách truyền xa mà vẫn không thay đổi .

Ứng dụng:

– Truyền thông tín hiệu điều khiển và tinh chỉnh chuẩn RS-485 giữa những vi điều khiển và tinh chỉnh với nhau và với máy tính .

Thông Số Kĩ Thuật:

– Module quy đổi TTL sang RS-485 dùng chip Max 485 .
– Điện áp hoạt động giải trí 5 V ( mức TTL )
– Kiểu liên kết hàng rào cắm 4 chân ngõ vào ( RO, RE, DE, DI của chip Max485 ), 4 chân ngõ ra ( VCC, GND, A, B ) .
– Tốc độ truyền tối đa 2M bps, khoảng cách tối đa 1K m .

Sơ đồ chân MAX485 :

Chức năng MAX485:

  • Max485 là bộ truyền nhận tài liệu nguồn năng lượng thấp dùng cho chuẩn RS485 .
  • Tốc độ bit Max = 2,5 Mbps
  • Có thể kết nối tối đa 32 thiết bị trên bus 485 .
  • Điện áp hoạt động giải trí : – 7V ~ 12V .
  • Thường dùng 5V .
  • Bus Max485 truyền tài liệu Vi sai bằng 2 dây A, B nên khoảng cách truyền lớn, năng lực chống nhiễu tốt .
    – với A-B > 200 mV sẽ tạo mức logic 1 .
    – với B-A > 200 mV sẽ tạo mức logic 0 .

 Ứng dụng thực tế:

– Giao tiếp giữa hai thiết bị. Có thể giao tiếp tối đa 32 MAX485 với nhau trên cùng một BUS.
– Để giao tiếp các MAX485 với nhau chúng ta cần kết nối các chân với nhau A nối với A B nối với B

Truyền giữ liệu MAX458.
Để Truyền dữ liệu với Max485 cần thực hiện các bước sau.
-Kết nối chân A với A, B với B giữa 2 IC.
-Cấu hình truyền trên IC1, cho chân DE mức 1.
-Cấu hình nhận trên IC2, cho chân RE mức 0.
-Gửi dữ liệu vào tại chân DI của IC1.
-Đọc Dữ liệu Ra tại chân DO của IC2.

Module Chuyển Đổi RS-485 to TTL

Ví dụ sơ đồ liên kết RS485 giữa 2 Arduino Uno

Giao tiếp RS485 giữa Uno và Nano

Module RS-485 – Arduino UNO (Master):

RS-485 Arduino UNO
DI 1 (TX)
DE RE 8
R0 0 (RX)
VCC 5V
GND GND
A To A of Slave RS-485
B To B of Slave RS-485

Module RS-485 – Arduino Nano (Slave):

RS-485 Arduino UNO
DI D1 (TX)
DE RE D8
R0 D0 (RX)
VCC 5V
GND GND
A To A of Master RS-485
B To B of Master RS-485

Màn hình16x2 LCD kết nối Arduino Nano:

16×2 LCD Arduino Nano
VSS GND
VDD +5V
V0 Nối đến biến trở để điều chỉnh độ tương phản LCD
RS D2
RW GND
E D3
D4 D4
D5 D5
D6 D6
D7 D7
A +5V
K GND

Một 10K biến trở nối vào Pin A0 của Arduino UNO và một LED được liên kết đến pin D10 của Arduino Nano .
Code chương trình :

Master (Arduino UNO):

//Master code (Arduino UNO)
//Serial Communication Between Arduino using RS-485

int enablePin = 8;
int pushval = A0;
int potval =0 ;

void setup()
{
Serial.begin(9600);            // initialize serial at baudrate 9600:
pinMode(enablePin, OUTPUT);
pinMode(pushval,INPUT);
delay(10);
digitalWrite(enablePin, HIGH);  //  (always high as Master Writes data to Slave)
}
void loop()
{
int potval = analogRead(pushval);
Serial.println(potval);          //Serial Write POTval to RS-485 Bus
delay(100);
}

SLAVE CODE: (Arduino NANO):

//Slave code (Arduino NANO)
//Serial Communication Between Two Arduinos using RS-485
//Circuit Digest

#include           //Include LCD library for using LCD display functions

int enablePin = 8;
int ledpin = 10;

LiquidCrystal lcd ( 2,3,4,5,6,7 ) ; / / Define LCD display pins RS, E, D4, D5, D6, D7

void setup()
{
lcd.begin(16,2);
lcd.print(“CIRCUIT DIGEST”);
lcd.setCursor(0,1);
lcd.print(“RS485 ARDUINO”);
delay(3000);
lcd.clear();
Serial.begin(9600);                   // initialize serial at baudrate 9600:
pinMode(ledpin,OUTPUT);
pinMode(enablePin, OUTPUT);
delay(10);
digitalWrite(enablePin, LOW);        //  (Pin 8 always LOW to receive value from Master)

}
void loop ( )

{
while (Serial.available())                   //While have data at Serial port this loop executes
{
lcd.clear();
int pwmval = Serial.parseInt();            //Receive INTEGER value from Master throught RS-485
int convert = map(pwmval,0,1023,0,255);    //Map those value from (0-1023) to (0-255)
analogWrite(ledpin,convert);               //PWM write to LED
lcd.setCursor(0,0);
lcd.print(“PWM FROM MASTER”);
lcd.setCursor(0,1);
lcd.print(convert);                        //Displays the PWM value
delay(100);
}
}

Testing RS485 Serial Communication between Arduino Uno and Arduino Nano

Code chương trình giao tiếp RS485 nhiều Arduino

Code cho thiết bị Master:

#include  //Khai báo thư viện I2C LCD 16x2
LiquidCrystal_I2C lcd(0x27,16,2);  // Cấu hình địa chỉ I2C cho LCD 16x2 là 0x27

int value1 = 0, value2 = 0;

const int LED =  13;   
const int Enable =  2;

void setup() 
{ 
  Serial.beg 9600);
  Serial.setTimeout(250);

  pinMode(LED,  );
  pinMode(Enable,  );
  
  digitalWrite(LED, LOW); 
  
  digitalWrite(Enable, HIGH);

  lcd.init();      
  lcd.backlight();
}
 
void loop() 
{ 
  
  Serial.p" I ");
  Serial.p" 1 ");
  Serial.p" L ");
  Serial.p" F ");
  Serial.flush();
  
  digitalWrite(Enable, LOW);
  
   (Serial.find(" i "))
  {   
      int slave1 = Serial.pars );
      value1 = Serial.pars );
      
       (Serial.read() == ' f ' và và slave1 == 1)
      {
        lcd.setCursor(0,0);
        lcd.p" Escravo 1 : ");
        lcd.setCursor(11,0);
        lcd.p value1);
      }
 }
      digitalWrite(Enable, HIGH);

  Serial.p" I ");
  Serial.p" 2 ");
  Serial.p" L ");
  Serial.p" F ");
  Serial.flush();
  
  digitalWrite(Enable, LOW);
  
   (Serial.find(" i "))
  {   
      int slave2 = Serial.pars );
      value2 = Serial.pars );
      
       (Serial.read() == ' f ' và và slave2 == 2)
      {
        lcd.setCursor(0,1);
        lcd.p" Escravo 2 : ");
        lcd.setCursor(11,1);
        lcd.p value2);
      }
  }
      digitalWrite(Enable, HIGH);
}

Code chương trình cho các Slave:

Slave 1 :

const

int

Enable = 2; const int SlaveNumber = 1;

void setup( )

{ Serial.begin(9600); Serial.setTimeout(250); pinMode(Enable, OUTPUT); digitalWrite(Enable, LOW); pinMode(13, OUTPUT); pinMode(A0, INPUT); }

void loop( )

{ if(Serial.available()) { if(Serial.read()==' I ') { int Slave = Serial.parseInt(); if(Slave == SlaveNumber) { char command = Serial.read(); if(command == ' L ') { if(Serial.read()==' F ') { int AnalogValue = analogRead(0); digitalWrite(Enable, HIGH); Serial.print(" i "); Serial.print(SlaveNumber); Serial.print(AnalogValue); Serial.print(" f "); Serial.flush(); digitalWrite(Enable, LOW); } } } } } delay(10); }

Tương tự cho Slave 2, 3, 4 … 32 tất cả chúng ta chỉ cần thay

const int SlaveNumber = 2;

bằng các giá trị thay đổi tương ứng.

Tham khảo:
https://www.hackster.io
https://circuitdigest.com/

Giao tiếp 32 thiết bị Arduino với RS485 – Điện Tử Hello

Bài viết liên quan
Hotline 24/7: O984.666.352
Alternate Text Gọi ngay