- Sự khác biệt giữa Giao tiếp UART và RS485
- Thành phần bắt buộc
- Sơ đồ mạch cho liên lạc có dây khoảng cách xa
- Mô-đun chuyển đổi MAX485 UART-RS485
- Cáp Ethernet CAT-6E
- Giải thích mã Arduino
- Phần kết luận
Chúng tôi đã sử dụng Bảng phát triển vi điều khiển như Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430, v.v. từ lâu trong các dự án nhỏ của chúng tôi, nơi hầu hết thời gian khoảng cách giữa cảm biến và bảng không quá vài cm ở mức tối đa và ở những khoảng cách này, giao tiếp giữa các mô-đun cảm biến, rơ le, bộ truyền động và bộ điều khiển khác nhau có thể dễ dàng thực hiện thông qua dây nhảy đơn giản mà chúng tôi không phải lo lắng về sự biến dạng tín hiệu trong môi trường và các tiếng ồn điện truyền vào nó. Nhưng nếu bạn đang xây dựng một hệ thống điều khiển với các bảng phát triển này ở khoảng cách lớn hơn 10 đến 15 mét, thì bạn nên xem xét độ ồn và công suất tín hiệu vì nếu bạn muốn hệ thống của mình hoạt động đáng tin cậy, thì bạn không thể để mất dữ liệu trong khi truyền.
Có nhiều loại giao thức giao tiếp nối tiếp khác nhau như I2C và SPI có thể dễ dàng thực hiện với Arduino và hôm nay chúng ta sẽ xem xét một giao thức khác được sử dụng phổ biến nhất được gọi là RS485, được sử dụng rất phổ biến trong các môi trường công nghiệp có tiếng ồn cao để truyền dữ liệu qua một khoảng cách xa. Trong hướng dẫn này, chúng ta sẽ tìm hiểu về giao thức truyền thông RS485 và cách triển khai nó với hai Arduino Nano mà chúng ta có cùng với chúng ta cũng như cách sử dụng Mô-đun chuyển đổi MAX485 RS485 sang UART. Trước đây chúng tôi cũng đã thực hiện giao tiếp MAX485 với Arduino và giao tiếp MAX485 với Raspberry pi, bạn cũng có thể kiểm tra chúng nếu quan tâm.
Sự khác biệt giữa Giao tiếp UART và RS485
Hầu hết các cảm biến giá rẻ và các module khác như GPS, Bluetooth, RFID, ESP8266,… thường dùng với Arduino, Raspberry Pi trên thị trường đều sử dụng giao tiếp dựa trên UART TTL vì chỉ cần 2 dây TX (Transmitter) và RX (Người nhận). Nó không phải là một giao thức Truyền thông tiêu chuẩn, nhưng nó là một mạch vật lý mà bạn có thể truyền và nhận dữ liệu nối tiếp với các thiết bị ngoại vi khác. Nó chỉ có thể truyền / nhận dữ liệu nối tiếp, vì vậy trước tiên nó chuyển đổi dữ liệu song song thành dữ liệu nối tiếp và sau đó truyền dữ liệu.
UART là một thiết bị truyền không đồng bộ do đó không có tín hiệu đồng hồ để đồng bộ dữ liệu giữa hai thiết bị thay vào đó nó sử dụng các bit bắt đầu và dừng ở đầu và cuối của mỗi gói dữ liệu tương ứng để đánh dấu các điểm cực hạn của dữ liệu được truyền. Dữ liệu truyền qua UART được tổ chức thành các gói. Mỗi gói chứa 1 bit bắt đầu, 5 đến 9 bit dữ liệu (tùy thuộc vào UART), một bit chẵn lẻ tùy chọn và 1 hoặc 2 bit dừng. Nó được ghi chép rất đầy đủ và được sử dụng rộng rãi và nó cũng có một bit chẵn lẻ để cho phép kiểm tra lỗi. Nhưng có một số hạn chế đối với nó vì nó không thể hỗ trợ nhiều nô lệ và nhiều chủ và khung dữ liệu tối đa được giới hạn ở 9 bit. Để truyền dữ liệu, tốc độ truyền của cả Master và Slave phải nằm trong khoảng 10% của nhau. Dưới đây là ví dụ về cách một ký tự là một bộ truyền qua một dòng dữ liệu UART. Mức cao và mức tín hiệu được đo dựa trên mức GND nên việc thay đổi mức GND sẽ có tác động tai hại đến việc truyền dữ liệu.
Mặt khác, RS485 là giao tiếp dựa trên ngành hơn, được phát triển cho một mạng gồm nhiều thiết bị có thể được sử dụng trong khoảng cách xa và ở tốc độ cao hơn. Nó hoạt động trên một phương pháp đo tín hiệu vi sai chứ không phải là đo điện áp wrt GND pin. Các tín hiệu RS485 được thả nổi và mỗi tín hiệu được truyền qua đường Sig + và đường Sig-.
Bộ thu RS485 so sánh sự chênh lệch điện áp giữa cả hai đường, thay vì mức điện áp tuyệt đối trên một đường tín hiệu. Điều này hoạt động tốt và ngăn ngừa sự tồn tại của các vòng nối đất, một nguồn phổ biến của các vấn đề liên lạc. Kết quả tốt nhất đạt được nếu các đường Sig + và Sig- được xoắn lại vì việc xoắn sẽ vô hiệu hóa ảnh hưởng của nhiễu điện từ gây ra trong cáp và cung cấp khả năng miễn nhiễm tốt hơn nhiều đối với tiếng ồn, cho phép RS485 truyền dữ liệu trong phạm vi lên đến 1200m. Cặp xoắn cũng cho phép tốc độ truyền cao hơn nhiều so với cáp thẳng. Ở khoảng cách truyền nhỏ, tốc độ lên đến 35Mbps có thể đạt được với RS485 mặc dù tốc độ truyền sẽ giảm theo khoảng cách. Với tốc độ truyền 1200m, bạn chỉ có thể sử dụng tốc độ đường truyền 100kbps. Bạn cần một cáp Ethernet đặc biệt để thực hiện giao thức truyền thông này. Có nhiều loại cáp Ethernet mà chúng ta có thể sử dụng như CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A, v.v. Trong hướng dẫn của chúng tôi, chúng tôi sẽ sử dụng cáp CAT-6E trong đó có 4 cặp dây 24AWG xoắn và có thể hỗ trợ lên đến 600MHz. Nó được kết thúc ở cả hai đầu bằng đầu nối RJ45. Mức điện áp đường dây điển hình từ các trình điều khiển đường dây là tối thiểu là ± 1,5 V đến tối đa là khoảng ± 6 V. Độ nhạy đầu vào của máy thu là ± 200 mV. Tiếng ồn trong phạm vi ± 200 mV về cơ bản bị chặn do loại bỏ tiếng ồn ở chế độ chung. Ví dụ về cách một byte (0x3E) được chuyển qua hai dòng của Giao tiếp RS485.
Thành phần bắt buộc
- Mô-đun chuyển đổi 2 × MAX485
- 2 × Arduino Nano
- Màn hình LCD chữ và số 2 × 16 * 2
- Chiết áp gạt nước 2 × 10k
- Cáp Ethernet Cat-6E
- Bảng bánh mì
- Dây nhảy
Sơ đồ mạch cho liên lạc có dây khoảng cách xa
Hình ảnh dưới đây cho thấy sơ đồ mạch phát và thu cho giao tiếp có dây đường dài của Arduino. Xin lưu ý rằng cả mạch phát và mạch thu đều trông giống hệt nhau, điểm khác biệt duy nhất là mã được viết trong đó. Ngoài ra, để trình diễn, chúng tôi đang sử dụng một bảng làm bộ phát và một bảng làm bộ thu, nhưng chúng tôi có thể dễ dàng lập trình các bảng hoạt động như cả bộ phát và bộ thu với cùng một thiết lập
Sơ đồ kết nối cho mạch trên cũng được đưa ra dưới đây.
Như bạn có thể thấy ở trên, có hai cặp mạch gần giống hệt nhau, mỗi cặp đều có nano Arduino, màn hình LCD chữ và số 16 * 2 và IC chuyển đổi MAX485 UART sang RS485 được kết nối với mỗi đầu của cáp Ethernet Cat-6E thông qua đầu nối RJ45. Cáp mà tôi đã sử dụng trong hướng dẫn có chiều dài 25m. Chúng tôi sẽ gửi một số dữ liệu từ phía máy phát qua cáp từ Nano được chuyển đổi sang tín hiệu RS485 thông qua Mô-đun MAX RS485 hoạt động ở Chế độ chính.
Ở đầu nhận, mô-đun chuyển đổi MAX485 đang hoạt động như một Slave và lắng nghe quá trình truyền từ Master, nó lại chuyển đổi Dữ liệu RS485 mà nó nhận được thành tín hiệu 5V TTL UART tiêu chuẩn để Nano nhận đọc và hiển thị trên 16 * 2 LCD chữ và số được kết nối với nó.
Mô-đun chuyển đổi MAX485 UART-RS485
Mô-đun Bộ chuyển đổi UART-RS485 này có chip MAX485 trên bo mạch, là bộ thu phát giới hạn công suất thấp và tốc độ quay được sử dụng cho giao tiếp RS-485. Nó hoạt động ở một nguồn điện + 5V duy nhất và dòng điện định mức là 300 μA. Nó hoạt động trên giao tiếp bán song công để thực hiện chức năng chuyển đổi mức TTL thành mức RS-485 có nghĩa là nó có thể truyền hoặc nhận bất kỳ lúc nào, không phải cả hai, nó có thể đạt được tốc độ truyền tối đa 2,5Mbps. Bộ thu phát MAX485 tạo ra dòng điện cung cấp từ 120μA đến 500μA trong điều kiện không tải hoặc tải đầy khi trình điều khiển bị tắt. Trình điều khiển được giới hạn cho dòng điện ngắn mạch và các đầu ra trình điều khiển có thể được đặt ở trạng thái trở kháng cao thông qua mạch ngắt nhiệt. Đầu vào của máy thu có tính năng an toàn dự phòng đảm bảo đầu ra logic cao nếu đầu vào bị hở mạch.Ngoài ra, nó có hiệu suất chống nhiễu mạnh mẽ. Nó cũng có đèn LED trên bo mạch để hiển thị trạng thái hiện tại của chip, tức là liệu chip có được cấp nguồn hay dữ liệu truyền hoặc nhận của nó, giúp dễ dàng gỡ lỗi và sử dụng hơn.
Sơ đồ mạch được đưa ra ở trên giải thích cách kết nối IC MAX485 trên bo mạch với các thành phần khác nhau và cung cấp các tiêu đề khoảng cách tiêu chuẩn 0,1 inch để sử dụng với breadboard nếu bạn muốn.
Cáp Ethernet CAT-6E
Khi chúng ta nghĩ đến truyền dữ liệu đường dài, chúng ta ngay lập tức nghĩ đến việc kết nối với internet qua cáp Ethernet. Ngày nay, chúng ta chủ yếu sử dụng Wi-Fi để kết nối internet nhưng trước đây chúng ta thường sử dụng cáp Ethernet đi đến mỗi máy tính cá nhân để kết nối nó với internet. Lý do chính đằng sau việc sử dụng các Cáp Ethernet này trên dây thông thường là chúng cung cấp khả năng bảo vệ tốt hơn nhiều chống lại tiếng ồn xâm nhập và biến dạng tín hiệu ở khoảng cách cao. Chúng có Áo khoác che chắn bên ngoài lớp cách điện để bảo vệ chống lại nhiễu điện từ và mỗi cặp dây được xoắn lại với nhau để ngăn chặn bất kỳ vòng lặp dòng điện nào và do đó bảo vệ chống lại tiếng ồn tốt hơn nhiều. Chúng thường được kết thúc bằng đầu nối RJ45 8 chân ở hai đầu. Có nhiều loại cáp Ethernet mà chúng ta có thể sử dụng như CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A, v.v. Trong hướng dẫn của chúng tôi, chúng tôi sẽ sử dụng cáp CAT-6E có 4 cặp dây xoắn 24AWG và có thể hỗ trợ lên đến 600MHz.
Hình ảnh cho thấy cách một cặp dây được xoắn bên trong Lớp cách điện của cáp CAT-6E
Đầu nối RJ-45 dành cho cáp Ethernet CAT-6E
Giải thích mã Arduino
Trong dự án này, chúng tôi đang sử dụng hai Arduino Nano, một làm bộ phát và một làm bộ thu, mỗi bộ điều khiển màn hình LCD chữ và số 16 * 2 để hiển thị kết quả. Vì vậy, trong mã Arduino, chúng ta sẽ tập trung vào việc gửi dữ liệu và hiển thị dữ liệu đã gửi hoặc nhận trên màn hình LCD.
Đối với phía máy phát:
Chúng tôi bắt đầu với việc bao gồm thư viện tiêu chuẩn để điều khiển màn hình LCD và khai báo chân D8 của Arduino Nano làm chân đầu ra mà sau này chúng tôi sẽ sử dụng để khai báo Mô-đun MAX485 như một bộ phát hoặc bộ thu.
int enablePin = 8; int potval = 0; #include
Bây giờ đến phần thiết lập. Chúng tôi sẽ kéo chân bật lên cao để đặt mô-đun MAX485 ở chế độ máy phát. Vì nó là một vi mạch bán song công nên nó không thể truyền và nhận cùng một lúc. Chúng tôi cũng sẽ khởi tạo màn hình LCD tại đây và in thông báo chào mừng.
Serial.begin (9600); // khởi tạo nối tiếp ở tốc độ baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("ĐOẠN MẠCH"); lcd.setCursor (0,1); lcd.print ("Nano Transmitter"); chậm trễ (3000); lcd.clear ();
Bây giờ trong vòng lặp, chúng ta viết một giá trị số nguyên tăng liên tục trên các dòng Serial, sau đó được truyền đến nano khác. Giá trị này cũng được in trên màn hình LCD để hiển thị và gỡ lỗi.
Serial.print ("Giá trị Đã gửi ="); Serial.println (potval); // Ghi nối tiếp POTval vào RS-485 Bus lcd.setCursor (0,0); lcd.print ("Giá trị Đã gửi"); lcd.setCursor (0,1); lcd.print (potval); chậm trễ (1000); lcd.clear (); potval + = 1;
Bên nhận:
Ở đây một lần nữa, chúng ta bắt đầu với việc bao gồm thư viện tiêu chuẩn để điều khiển màn hình LCD và khai báo chân D8 của Arduino Nano làm chân đầu ra mà sau này chúng ta sẽ sử dụng để khai báo Mô-đun MAX485 như một bộ phát hoặc bộ thu.
int enablePin = 8; #include
Bây giờ đến phần thiết lập. Chúng tôi sẽ kéo chân bật cao để đặt mô-đun MAX485 ở chế độ bộ thu. Vì nó là một vi mạch bán song công nên nó không thể truyền và nhận cùng một lúc. Chúng tôi cũng sẽ khởi tạo màn hình LCD tại đây và in thông báo chào mừng.
Serial.begin (9600); // khởi tạo nối tiếp ở tốc độ baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("ĐOẠN MẠCH"); lcd.setCursor (0,1); lcd.print ("Nano máy thu"); chậm trễ (3000); digitalWrite (enablePin, LOW); // (Pin 8 luôn THẤP để nhận giá trị từ Master)
Bây giờ trong vòng lặp, chúng tôi kiểm tra xem có bất kỳ thứ gì có sẵn trên cổng nối tiếp hay không và sau đó đọc dữ liệu và vì dữ liệu đến là số nguyên nên chúng tôi phân tích cú pháp nó và hiển thị trên màn hình LCD được kết nối.
int pwmval = Serial.parseInt (); // Nhận giá trị INTEGER từ Master qua RS-485 Serial.print ("Tôi đã nhận giá trị"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Giá trị Đã nhận"); lcd.setCursor (0,1); lcd.print (pwmval); chậm trễ (1000); lcd.clear ();
Phần kết luận
Thiết lập thử nghiệm mà chúng tôi đã sử dụng cho dự án này có thể được tìm thấy bên dưới.
Toàn bộ hoạt động của dự án này có thể được tìm thấy trong video được liên kết bên dưới. Phương pháp này là một trong những phương pháp đơn giản và dễ thực hiện để truyền dữ liệu trên một khoảng cách xa. Trong dự án này, chúng tôi chỉ sử dụng tốc độ truyền 9600, thấp hơn tốc độ truyền tối đa mà chúng tôi có thể đạt được với Mô-đun MAX-485 nhưng tốc độ này phù hợp với hầu hết các mô-đun cảm biến ngoài đó và chúng tôi không thực sự cần tất cả tốc độ tối đa khi làm việc với Arduino và các bảng phát triển khác trừ khi bạn đang sử dụng cáp làm kết nối ethernet và yêu cầu tất cả băng thông và tốc độ truyền mà bạn có thể nhận được. Tự mình thử nghiệm tốc độ truyền và thử các loại cáp ethernet khác. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại chúng trong phần bình luận bên dưới hoặc sử dụng diễn đàn của chúng tôi và tôi sẽ cố gắng trả lời chúng một cách tốt nhất. Đến lúc đó, adios!