- Giao thức truyền thông nối tiếp RS-485
- RS-485 trong Arduino
- Thành phần bắt buộc
- Sơ đồ mạch
- Lập trình Arduino UNO & Arduino Nano cho giao tiếp nối tiếp RS485
- Kiểm soát độ sáng của đèn LED với Giao tiếp nối tiếp RS485
Lựa chọn giao thức truyền thông để giao tiếp giữa vi điều khiển và thiết bị ngoại vi là một phần quan trọng của hệ thống nhúng. Điều quan trọng là vì hiệu suất tổng thể của bất kỳ ứng dụng nhúng nào phụ thuộc vào phương tiện truyền thông vì nó liên quan đến việc giảm chi phí, truyền dữ liệu nhanh hơn, phủ sóng khoảng cách xa, v.v.
Trong các bài hướng dẫn trước, chúng ta đã tìm hiểu về giao thức truyền thông I2C và giao thức truyền thông SPI trong Arduino. Bây giờ có một giao thức truyền thông nối tiếp khác được gọi là RS-485. Giao thức này sử dụng giao tiếp nối tiếp không đồng bộ. Ưu điểm chính của RS-485 là truyền dữ liệu khoảng cách xa giữa hai thiết bị. Và chúng được sử dụng phổ biến nhất trong môi trường công nghiệp ồn ào về điện.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu về giao tiếp nối tiếp RS-485 giữa hai Arduinos và sau đó chứng minh nó bằng cách điều khiển độ sáng của đèn LED được kết nối với Arduino Slave từ Master Arduino bằng cách gửi các giá trị ADC thông qua Mô-đun RS-485. Một chiết áp 10k được sử dụng để thay đổi các giá trị ADC trong Master Arduino.
Hãy bắt đầu bằng cách hiểu hoạt động của giao tiếp nối tiếp RS-485.
Giao thức truyền thông nối tiếp RS-485
RS-485 là một giao thức truyền thông nối tiếp không đồng bộ không yêu cầu xung đồng hồ. Nó sử dụng một kỹ thuật gọi là tín hiệu vi phân để truyền dữ liệu nhị phân từ thiết bị này sang thiết bị khác.
Vậy phương thức truyền tín hiệu vi sai này là gì ??
Phương pháp tín hiệu vi sai hoạt động bằng cách tạo ra một điện áp vi sai bằng cách sử dụng 5V dương và âm. Nó cung cấp giao tiếp Half-Duplex khi sử dụng hai dây và Full-Duplex yêu cầu 4 bốn dây.
Bằng cách sử dụng phương pháp này
- RS-485 hỗ trợ tốc độ truyền dữ liệu cao hơn, tối đa 30Mbps.
- Nó cũng cung cấp khoảng cách truyền dữ liệu tối đa so với giao thức RS-232. Nó truyền dữ liệu lên đến tối đa 1200 mét.
- Ưu điểm chính của RS-485 so với RS-232 là nhiều phụ kiện với một Master duy nhất trong khi RS-232 chỉ hỗ trợ một phụ kiện duy nhất.
- Nó có thể có tối đa 32 thiết bị được kết nối với giao thức RS-485.
- Một ưu điểm khác của RS-485 là nó không bị nhiễu do chúng sử dụng phương pháp tín hiệu vi sai để truyền.
- RS-485 nhanh hơn so với giao thức I2C.
RS-485 trong Arduino
Để sử dụng RS-485 trong Arduino, cần có một mô-đun có tên là 5V MAX485 TTL đến RS485 dựa trên IC Maxim MAX485 vì nó cho phép giao tiếp nối tiếp trên khoảng cách dài 1200 mét và nó là hai chiều. Ở chế độ bán song công, nó có tốc độ truyền dữ liệu là 2. 5Mbps.
Mô-đun 5V MAX485 TTL đến RS485 yêu cầu điện áp 5V và sử dụng mức logic 5V để nó có thể được giao tiếp với các cổng nối tiếp phần cứng của bộ vi điều khiển như Arduino.
Nó có các tính năng sau:
- Điện áp hoạt động: 5V
- Chip MAX485 trên bo mạch
- Tiêu thụ điện năng thấp cho giao tiếp RS485
- Bộ thu phát giới hạn tốc độ quay
- Thiết bị đầu cuối 2P cao 5,08mm
- Hệ thống dây giao tiếp RS-485 thuận tiện
- Tất cả các chân của chip đã được dẫn đến có thể được điều khiển thông qua vi điều khiển
- Kích thước bảng: 44 x 14mm
Pin-Out của RS-485:
Tên ghim |
Sử dụng |
VCC |
5V |
A |
Đầu vào máy thu không đảo Đầu ra trình điều khiển không đảo ngược |
B |
Đầu vào máy thu đảo ngược Đảo ngược đầu ra trình điều khiển |
GND |
GND (0V) |
R0 |
Đầu ra máy thu (chân RX) |
RE |
Đầu ra máy thu (LOW-Enable) |
DE |
Đầu ra trình điều khiển (Bật cao) |
DI |
Đầu vào trình điều khiển (chân TX) |
Mô-đun RS-485 này có thể dễ dàng giao tiếp với Arduino. Hãy sử dụng các cổng nối tiếp phần cứng của Arduino 0 (RX) và 1 (TX) (Trong UNO, NANO). Việc lập trình cũng đơn giản chỉ cần sử dụng Serial.print () để ghi vào RS-485 và Serial.Read () để đọc từ RS-485.
Phần lập trình sẽ được giải thích chi tiết ở phần sau nhưng trước tiên hãy kiểm tra các thành phần cần thiết và sơ đồ mạch.
Thành phần bắt buộc
- Arduino UNO hoặc Arduino NANO (2)
- Mô-đun chuyển đổi MAX485 TTL sang RS485 - (2)
- Chiết áp 10K
- Màn hình LCD 16x2
- Đèn LED
- Breadboard
- Kết nối dây
Trong hướng dẫn này, Arduino Uno được sử dụng làm Master và Arduino Nano được sử dụng làm Slave. Hai Bo mạch Arduino được sử dụng ở đây nên cần có hai Mô-đun RS-485.
Sơ đồ mạch
Kết nối mạch giữa RS-485 đầu tiên và Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
số 8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
To A of Slave RS-485 |
B |
Tới B của Slave RS-485 |
Kết nối giữa RS-485 thứ hai và Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Tới A của Master RS-485 |
B |
Tới B của Master RS-485 |
Kết nối mạch giữa màn hình LCD 16x2 và Arduino Nano:
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Đến chân trung tâm chiết áp để điều khiển độ tương phản của LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Một chiết áp 10K được kết nối với Chân A0 của Arduino UNO để cung cấp đầu vào Analog và một đèn LED được kết nối với chân D10 của Arduino Nano.
Lập trình Arduino UNO & Arduino Nano cho giao tiếp nối tiếp RS485
Để lập trình cả hai bảng Arduino IDE đều được sử dụng. Nhưng hãy đảm bảo rằng bạn đã chọn CỔNG tương ứng từ Công cụ-> Cổng và Bảng từ Công cụ-> Bảng.
Mã hoàn chỉnh với Video giới thiệu được đưa ra ở cuối hướng dẫn này. Ở đây chúng tôi đang giải thích một phần quan trọng của mã. Có hai chương trình trong hướng dẫn này, một chương trình dành cho Arduino UNO (Master) và chương trình khác dành cho Arduino Nano (Slave).
Giải thích mã cho Master: Arduino UNO
Ở phía Master, chỉ cần lấy đầu vào Analog tại chân A0 bằng cách thay đổi chiết áp và sau đó Serial Ghi các giá trị đó vào bus RS-485 thông qua Cổng nối tiếp phần cứng (0,1) của Arduino UNO.
Để bắt đầu giao tiếp nối tiếp tại các chân nối tiếp phần cứng (0,1), hãy sử dụng:
Serial.begin (9600);
Để đọc giá trị Analog tại chân A0 của Arduino UNO và lưu trữ chúng trong một cách sử dụng potval có thể thay đổi:
int potval = analogRead (pushval);
Trước khi ghi giá trị potval vào cổng nối tiếp, chân DE & RE của RS-485 phải ở mức CAO được kết nối với chân 8 của Arduino UNO, do đó, để đặt chân 8 ở mức CAO:
digitalWrite (enablePin, HIGH);
Tiếp theo để đặt các giá trị đó vào Cổng nối tiếp được kết nối với mô-đun RS-485, hãy sử dụng câu lệnh sau
Serial.println (potval);
Giải thích mã cho Slave: Arduino NANO
Ở phía Slave, một giá trị số nguyên nhận được từ Master RS-485 có sẵn tại cổng Nối tiếp phần cứng của Arduino Nano (Chân -0,1). Đơn giản chỉ cần đọc các giá trị đó và lưu trữ trong một biến. Các giá trị có dạng (0 -1023). Vì vậy, nó được chuyển đổi thành (0-255) như kỹ thuật PWM được sử dụng để điều khiển độ sáng của đèn LED.
Sau đó Analog Ghi các giá trị đã chuyển đổi đó vào chân LED D10 (Đó là chân PWM). Vì vậy, tùy thuộc vào giá trị PWM, độ sáng của đèn LED thay đổi và cũng hiển thị các giá trị đó trên màn hình LCD 16x2.
Để RS-485 của Slave Arduino nhận các giá trị từ Master, chỉ cần đặt các chân DE & RE của RS-485 THẤP. Vì vậy chân D8 (enablePin) của Arduino NANO được làm THẤP.
digitalWrite (enablePin, LOW);
Và để đọc dữ liệu số nguyên có sẵn tại Cổng nối tiếp và lưu trữ chúng trong một mục đích sử dụng khác nhau
int pwmval = Serial.parseInt ();
Tiếp theo, chuyển đổi giá trị từ (0-1023 thành 0-255) và lưu trữ chúng trong một biến:
int convert = map (pwmval, 0,1023,0,255);
Tiếp theo ghi giá trị tương tự (PWM) vào chân D10 nơi kết nối với cực dương LED:
analogWrite (ledpin, chuyển đổi);
Để in giá trị PWM đó trên màn hình LCD 16x2, hãy sử dụng
lcd.setCursor (0,0); lcd.print ("PWM TỪ MASTER"); lcd.setCursor (0,1); lcd.print (chuyển đổi);
Kiểm soát độ sáng của đèn LED với Giao tiếp nối tiếp RS485
Khi giá trị PWM được đặt ở 0 bằng chiết áp, đèn LED sẽ TẮT.
Và khi giá trị PWM được đặt ở 251 bằng chiết áp: Đèn LED được BẬT với độ sáng đầy đủ như thể hiện trong hình dưới đây:
Vì vậy, đây là cách RS485 có thể được sử dụng cho giao tiếp nối tiếp trong Arduino.