- Protokół komunikacji szeregowej RS-485
- RS-485 w Arduino
- Wymagane składniki
- Schemat obwodu
- Programowanie Arduino UNO i Arduino Nano do komunikacji szeregowej RS485
- Sterowanie jasnością diod LED za pomocą komunikacji szeregowej RS485
Wybór protokołu komunikacyjnego do komunikacji między mikrokontrolerami a urządzeniami peryferyjnymi jest ważną częścią systemu wbudowanego. Jest to ważne, ponieważ ogólna wydajność każdej aplikacji wbudowanej zależy od środków komunikacji, ponieważ wiąże się z redukcją kosztów, szybszym przesyłaniem danych, zasięgiem na duże odległości itp.
W poprzednich tutorialach poznaliśmy protokół komunikacyjny I2C oraz protokoły komunikacyjne SPI w Arduino. Teraz istnieje inny protokół komunikacji szeregowej o nazwie RS-485. Protokół ten wykorzystuje asynchroniczną komunikację szeregową. Główną zaletą RS-485 jest transfer danych na duże odległości między dwoma urządzeniami. I są one najczęściej używane w środowisku przemysłowym, w którym występuje szum elektryczny.
W tym samouczku dowiemy się o komunikacji szeregowej RS-485 między dwoma Arduino, a następnie zademonstrujemy to, kontrolując jasność diody LED podłączonej do Slave Arduino z poziomu Master Arduino, wysyłając wartości ADC przez moduł RS-485. Potencjometr 10k służy do zmiany wartości ADC w Master Arduino.
Zacznijmy od zrozumienia działania komunikacji szeregowej RS-485.
Protokół komunikacji szeregowej RS-485
RS-485 to asynchroniczny protokół komunikacji szeregowej, który nie wymaga impulsu zegarowego. Wykorzystuje technikę zwaną sygnałem różnicowym do przesyłania danych binarnych z jednego urządzenia do drugiego.
Czym więc jest ta metoda różnicowego przesyłania sygnału?
Metoda sygnału różnicowego polega na tworzeniu napięcia różnicowego przy użyciu dodatniego i ujemnego 5V. Zapewnia komunikację w trybie półdupleksu przy użyciu dwóch przewodów, a pełny dupleks wymaga 4 czterech przewodów.
Korzystając z tej metody
- RS-485 obsługuje większą szybkość przesyłania danych, maksymalnie 30 Mb / s.
- Zapewnia również maksymalną odległość przesyłania danych w porównaniu z protokołem RS-232. Przesyła dane na maksymalnie 1200 metrów.
- Główną zaletą RS-485 nad RS-232 jest wiele urządzeń podrzędnych z jednym urządzeniem nadrzędnym, podczas gdy RS-232 obsługuje tylko jedno urządzenie podrzędne.
- Może mieć maksymalnie 32 urządzenia podłączone do protokołu RS-485.
- Kolejną zaletą RS-485 jest to, że jest odporny na zakłócenia, ponieważ wykorzystują one metodę sygnału różnicowego do przesyłania.
- RS-485 jest szybszy w porównaniu z protokołem I2C.
RS-485 w Arduino
Do wykorzystania RS-485 w Arduino potrzebny jest moduł o nazwie 5V MAX485 TTL na RS485 oparty na układzie Maxim MAX485 IC, który umożliwia komunikację szeregową na duże odległości 1200 metrów i jest dwukierunkowy. W trybie półdupleksu ma szybkość transmisji danych 2,5 Mb / s.
Moduł 5V MAX485 TTL na RS485 wymaga napięcia 5V i wykorzystuje poziomy logiczne 5V, dzięki czemu można go połączyć ze sprzętowymi portami szeregowymi mikrokontrolerów, takich jak Arduino.
Posiada następujące cechy:
- Napięcie robocze: 5 V.
- Wbudowany układ MAX485
- Niski pobór mocy do komunikacji RS485
- Transceiver o ograniczonej szybkości narastania
- Zacisk 2P o rastrze 5,08 mm
- Wygodne okablowanie komunikacyjne RS-485
- Wszystkie wyprowadzone piny chipa mogą być kontrolowane przez mikrokontroler
- Rozmiar płytki: 44 x 14 mm
Pin-Out RS-485:
Nazwa pinu |
Posługiwać się |
VCC |
5V |
ZA |
Nieodwracające wejście odbiornika Wyjście sterownika nieodwracającego |
b |
Odwracanie sygnału wejściowego odbiornika Odwracanie wyjścia sterownika |
GND |
GND (0 V) |
R0 |
Wyjście odbiornika (pin RX) |
RE |
Wyjście odbiornika (LOW-Enable) |
DE |
Wyjście sterownika (WYSOKI-włączony) |
DI |
Wejście sterownika (pin TX) |
Ten moduł RS-485 można łatwo połączyć z Arduino. Skorzystajmy ze sprzętowych portów szeregowych Arduino 0 (RX) i 1 (TX) (w UNO, NANO). Programowanie jest również proste, wystarczy użyć Serial.print () do zapisu na RS-485 i Serial.Read () do odczytu z RS-485.
Część programowania zostanie szczegółowo wyjaśniona później, ale najpierw sprawdź wymagane komponenty i schemat połączeń.
Wymagane składniki
- Arduino UNO lub Arduino NANO (2)
- Moduł konwertera MAX485 TTL na RS485 - (2)
- Potencjometr 10 K.
- Wyświetlacz LCD 16x2
- DOPROWADZIŁO
- Płytka prototypowa
- Podłączanie przewodów
W tym samouczku Arduino Uno jest używane jako Master, a Arduino Nano jest używane jako Slave. Używane są tutaj dwie płyty Arduino, więc wymagane są dwa moduły RS-485.
Schemat obwodu
Połączenie obwodu między pierwszym RS-485 a Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
ZA |
Do A Slave RS-485 |
b |
Do B złącza Slave RS-485 |
Połączenie między drugim RS-485 a Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
ZA |
Do A Master RS-485 |
b |
Do B Master RS-485 |
Połączenie obwodu między wyświetlaczem LCD 16x2 i Arduino Nano:
Wyświetlacz LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Do środkowego kołka potencjometru do kontroli kontrastu wyświetlacza LCD |
RS |
D2 |
RW |
GND |
mi |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
ZA |
+ 5V |
K. |
GND |
Potencjometr 10K jest podłączony do pinu analogowego A0 Arduino UNO w celu zapewnienia wejścia analogowego, a dioda LED jest podłączona do pinu D10 Arduino Nano.
Programowanie Arduino UNO i Arduino Nano do komunikacji szeregowej RS485
Do programowania obu płyt wykorzystywane jest środowisko Arduino IDE. Ale upewnij się, że wybrałeś odpowiedni PORT z Tools-> Port and Board z Tools-> Board.
Kompletny kod z filmem demonstracyjnym znajduje się na końcu tego samouczka. Tutaj wyjaśniamy ważną część kodu. W tym samouczku znajdują się dwa programy, jeden dla Arduino UNO (Master), a drugi dla Arduino Nano (Slave).
Objaśnienie kodu dla Master: Arduino UNO
Po stronie Master, po prostu weź wejście analogowe na pinie A0, zmieniając potencjometr, a następnie Serial Zapisz te wartości na magistrali RS-485 przez sprzętowe porty szeregowe (0,1) Arduino UNO.
Aby rozpocząć komunikację szeregową w sprzętowych pinach szeregowych (0,1), użyj:
Serial.begin (9600);
Aby odczytać wartości analogowe na pinie A0 Arduino UNO i zapisać je w zmiennej potval użyj:
int potval = analogRead (pushval);
Przed zapisaniem wartości potval do portu szeregowego, piny DE i RE RS-485 powinny być WYSOKIE, które są podłączone do pinu 8 Arduino UNO, aby pin 8 był WYSOKI:
digitalWrite (enablePin, HIGH);
Następnie, aby umieścić te wartości w porcie szeregowym podłączonym do modułu RS-485, użyj poniższej instrukcji
Serial.println (potval);
Objaśnienie kodu dla Slave: Arduino NANO
Po stronie Slave wartość całkowita jest odbierana z Master RS-485, który jest dostępny w sprzętowym porcie szeregowym Arduino Nano (piny -0,1). Po prostu przeczytaj te wartości i zapisz w zmiennej. Wartości mają postać (0–1023). Jest więc konwertowany na (0-255), ponieważ technika PWM jest używana do sterowania jasnością diod LED.
Następnie AnalogWrite przekonwertowaną wartość na pin D10 LED (jest to pin PWM). Zatem w zależności od wartości PWM jasność diody LED zmienia się i wyświetla te wartości również na wyświetlaczu LCD 16x2.
Aby RS-485 Slave Arduino otrzymywał wartości z Mastera, wystarczy ustawić piny DE i RE RS-485 w stan LOW. Więc pin D8 (enablePin) Arduino NANO jest NISKI.
digitalWrite (enablePin, LOW);
I czytać dane całkowite dostępne w porcie szeregowym i przechowywać je w zmiennej użyciu
int pwmval = Serial.parseInt ();
Następnie zamień wartość z (0-1023 na 0-255) i zapisz je w zmiennej:
int convert = map (pwmval, 0,1023,0,255);
Następnie wpisz wartość analogową (PWM) do pinu D10, do którego podłączona jest anoda LED:
analogWrite (ledpin, konwertuj);
Aby wydrukować te wartości PWM na wyświetlaczu LCD 16x2 użyj
lcd.setCursor (0,0); lcd.print ("PWM OD MASTER"); lcd.setCursor (0,1); lcd.print (konwertować);
Sterowanie jasnością diod LED za pomocą komunikacji szeregowej RS485
Gdy wartość PWM jest ustawiona na 0 za pomocą potencjometru, dioda LED jest wyłączona.
A gdy wartość PWM jest ustawiona na 251 za pomocą potencjometru: Dioda LED jest włączona z pełną jasnością, jak pokazano na poniższym obrazku:
Tak więc RS485 można wykorzystać do komunikacji szeregowej w Arduino.