Komunikacja RS485 z Arduino: kompletny przewodnik z przykładami

  • Podłączenie i wykorzystanie moduĹ‚u MAX485 do nawiÄ…zania komunikacji RS485 z Arduino.
  • Jak wdroĹĽyć komunikacjÄ™ simpleksowÄ…, półdupleksowÄ… i peĹ‚nodupleksowÄ… dla różnych potrzeb.
  • Sterowanie urzÄ…dzeniami na tej samej magistrali RS485 z wieloma Arduino.

rs485

Komunikacja szeregowa jest jednym z najpowszechniejszych sposobów wymiany danych pomiędzy urządzeniami elektronicznymi. Jednakże, gdy odległości się zwiększają lub w środowisku występują zakłócenia elektromagnetyczne, sygnały komunikacyjne mogą być podatne na błędy. Tutaj właśnie pojawia się standard komunikacji RS485, oferujący solidną i skuteczną alternatywę. Arduino, dzięki swojej wszechstronności, pozwala nam w dość prosty sposób w pełni wykorzystać możliwości tego protokołu.

W tym artykule zobaczymy, jak można zrealizować komunikację RS485 pomiędzy kilkoma Arduino przy użyciu modułów opartych na zintegrowanym MAX485, chipie konwertującym sygnały TTL (z Arduino) na RS485 i odwrotnie. W tym samouczku omówimy zarówno podstawowe pojęcia, jak i praktyczne przykłady, które pozwolą Ci zaimplementować komunikację simpleksową, półdupleksową i pełnodupleksową pomiędzy mikrokontrolerami Arduino oraz wyjaśnimy, w jaki sposób możesz rozszerzyć ten system komunikacji, aby obsługiwał wiele urządzeń w jednym Magistrala RS485.

Co to jest RS485?

RS485 jest standardem komunikacyjnym szeroko stosowanym w branży, znanym z krzepa i jego zdolność do wytrzymania długi dystans transmisji, nawet w hałaśliwym środowisku przemysłowym. W przeciwieństwie do innych typów komunikacji szeregowej, takich jak RS232, RS485 umożliwia podłączenie wielu urządzeń do tej samej magistrali, co czyni go idealnym rozwiązaniem do zastosowań w automatyce przemysłowej i sterowaniu.

Protokół ten jest odporny na szum elektromagnetyczny dzięki temu, że wykorzystuje m.in różnicowy system sygnalizacji, co oznacza, że ​​dane są przesyłane dwoma przewodami, A i B, o przeciwnych napięciach. Pozwala to na łatwe wyeliminowanie szumów wychwyconych w kablach, zapewniając integralność sygnału.

Jedną z głównych zalet RS485 jest to obsługuje odległości do 1200 metrów i prędkość do 35 Mb/s na krótkich dystansach, co czyni go idealnym protokołem do zastosowań przemysłowych i kontrolnych w środowiskach, w których konieczne jest długie okablowanie.

Tryby komunikacji RS485

piny rs485

W komunikacji RS485 możemy skonfigurować system na trzy różne sposoby: simplex, half-duplex i full-duplex. Każdy z nich ma swoją specyfikę i jest wdrażany zgodnie z potrzebami projektu.

Komunikacja Simplex

W trybie simplex komunikacja odbywa się tylko w jednym kierunku, to znaczy, że działa jedno urządzenie emitent i kolejny podobny receptor. Jest to przydatne w sytuacjach, gdy chcesz po prostu wysłać lub odebrać dane bez potrzeby przesyłania informacji zwrotnej.

Możemy na przykład skonfigurować system, w którym Arduino odczytuje wartość czujnika i wysyła ją do innego urządzenia, które po prostu ją odbiera. W tym przypadku, ponieważ dane przesyłane są tylko w jednym kierunku, można zrezygnować z niektórych dodatkowych elementów sterujących, co czyni system prostszym i bardziej ekonomicznym.

Komunikacja półdupleksowa

Większość aplikacji RS485 na Arduino jest zaimplementowanych w trybie half-duplex, ponieważ tego wymaga dwa przewodyi umożliwia zarówno wysyłanie, jak i odbieranie danych, chociaż nie jednocześnie. Oznacza to, że jeśli jedno urządzenie wysyła dane, pozostałe urządzenia muszą znajdować się w trybie odbioru i odwrotnie.

Aby przełączać się między trybami nadawania i odbioru, użyj dodatkowe piny (RE/DE) w module MAX485, którym będziesz sterował za pomocą kodu, aby określić, czy urządzenie powinno w danym momencie wysyłać, czy odbierać.

Ten tryb jest szczególnie przydatny, jeśli na tej samej magistrali znajduje się wiele urządzeń, które muszą komunikować się ze sobą, ale nie jednocześnie.

Komunikacja w trybie pełnego dupleksu

W trybie pełnego dupleksu urządzenia mogą jednocześnie wysyłać i odbierać dane. Jednakże, aby wdrożyć tryb pełnego dupleksu w RS485, dwie pary skręconych przewodów, co zwiększa koszt i złożoność okablowania. Dodatkowo potrzebne będą dwa moduły MAX485 dla każdego urządzenia, aby oddzielnie zarządzać kanałami nadawczymi i odbiorczymi.

Komponenty wymagane do komunikacji RS485 z Arduino

Aby zaimplementować system komunikacji RS485 na Arduino, potrzebne będą następujące komponenty:

  • Jeden lub wiÄ™cej Arduino: Zrobi to dowolny model Arduino, ale w tym samouczku uĹĽyjemy Arduino UNO i Arduino MEGA jako przykĹ‚ady.
  • ModuĹ‚y MAX485: ModuĹ‚y te umoĹĽliwiajÄ… konwersjÄ™ sygnałów TTL z Arduino na RS485 i odwrotnie. SÄ… bardzo tanie i Ĺ‚atwe do znalezienia w sklepach takich jak AliExpress czy eBay.
  • Rezystory koĹ„cowe: Aby uniknąć odbić sygnaĹ‚u, na kaĹĽdym koĹ„cu magistrali umieszcza siÄ™ zwykle rezystor o wartoĹ›ci od 120 omĂłw. Na krĂłtkich dystansach moĹĽna siÄ™ bez nich obejść, natomiast w dĹ‚uĹĽszych instalacjach sÄ… one niezbÄ™dne do zachowania integralnoĹ›ci sygnaĹ‚u.
  • Kable skrÄ™tkowe: Zaleca siÄ™ stosowanie skrÄ™tek dwuĹĽyĹ‚owych, aby zminimalizować zakłócenia elektromagnetyczne, zwĹ‚aszcza w haĹ‚aĹ›liwym Ĺ›rodowisku przemysĹ‚owym.

Ogólny schemat połączeń

Podłącz moduły MAX485 do Arduino jest całkiem proste. Najważniejsze piny to A i B, które odpowiadają liniom magistrali RS485. Piny te muszą być podłączone do wszystkich urządzeń na magistrali. Dodatkowo moduł posiada piny RE i DE sterujące tym czy moduł znajduje się w trybie odbiornika czy nadajnika.

Generalnie podłączenie modułów do Arduino odbywa się w następujący sposób:

  • VCC i GND moduĹ‚u łączÄ… siÄ™ z VCC i GND w Arduino.
  • DI (data input) moduĹ‚u podłącza siÄ™ do pinu TX Arduino, jeĹĽeli moduĹ‚ ma peĹ‚nić funkcjÄ™ emitera.
  • RO (Receiver Output) moduĹ‚u podłączamy do pinu RX Arduino, jeĹĽeli moduĹ‚ ma peĹ‚nić funkcjÄ™ odbiornika.
  • Aby przełączać siÄ™ miÄ™dzy trybami nadawania i odbioru, DE i RE muszÄ… być sterowane za pomocÄ… cyfrowego pinu Arduino.

Jeśli potrzebujesz modułu tylko do działania jako nadawca lub odbiornik, możesz podłączyć RE i DE bezpośrednio do HIGH lub LOW. Jednakże w przypadku bardziej złożonej komunikacji, w której urządzenie musi przełączać się między nadawaniem i odbiorem, najlepiej sterować tymi pinami z poziomu oprogramowania.

Przykłady kodu dla komunikacji RS485

Poniżej znajduje się kilka przykładów obejmujących różne konfiguracje komunikacji z RS485 w Arduino.

Komunikacja Simplex

Kod wydawcy

W przypadku podstawowego systemu simplex, w którym mamy tylko jednego nadawcę i jednego odbiorcę, kod nadawcy może wyglądać następująco:

void setup() { Serial.begin(9600); } void loop() { Serial.write(analogRead(0)); delay(500); }

Kod odbiorcy

Odbiornik po prostu odczyta dane przychodzÄ…ce przez port szeregowy:

void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }

Komunikacja półdupleksowa

W tym przykładzie wdrażamy system półdupleksowy, w którym urządzenia naprzemiennie wysyłają i odbierają dane.

Kod nauczyciela

const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, HIGH); Serial.write('H'); delay(100); digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }

Kod niewolnika

const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); delay(100); digitalWrite(reDePin, HIGH); Serial.write(data + 1); } }

Komunikacja w trybie pełnego dupleksu

Aby wdrożyć komunikację w trybie pełnego dupleksu, potrzebne będą dwa moduły MAX485 na każde Arduino. Każda para modułów będzie obsługiwać jedną linię danych: jedną do nadawania i jedną do odbioru.

Kod będzie podobny do poprzednich przykładów, ale w tym przypadku oba urządzenia będą zawsze jednocześnie nadawały i odbierały.

Rozszerzenie na wiele urządzeń w standardzie RS485

RS485 ma możliwość podłączenia do 32 urządzeń na jednej magistrali, a w szczególnych przypadkach może osiągnąć więcej. To sprawia, że ​​jest to doskonały wybór do projektów obejmujących wiele mikrokontrolerów lub urządzeń. Aby zidentyfikować każde z nich w sieci, powszechnie stosuje się adres lub identyfikator dla każdego urządzenia.

W tym przypadku master wyśle ​​wiadomość z adresem urządzenia, z którym chce się komunikować, i tylko to urządzenie będzie odpowiedzialne za przetworzenie komunikatu i udzielenie odpowiedzi.

Do tego dochodzi możliwość wykorzystania bardziej złożone protokoły takich jak MODBUS, które pozwalają na tworzenie wysoce wydajnych i bezpiecznych sieci w przemyśle.

W przypadku projektów domowych lub mniej wymagających aplikacji możesz po prostu przypisać identyfikator do każdego Arduino i sprawić, by reagowało tylko na przeznaczone dla niego komunikaty.