Sériová komunikácia je jedným z najbežnejších spôsobov výmeny údajov medzi elektronickými zariadeniami. Keď sa však zväčšia vzdialenosti alebo sa v prostredí vyskytne elektromagnetické rušenie, komunikačné signály môžu byť náchylné na chyby. Tu vstupuje do hry komunikačný štandard RS485, ktorý ponúka robustnú a efektívnu alternatívu. Arduino nám svojou všestrannosťou umožňuje plne využiť výhody tohto protokolu pomerne jednoduchým spôsobom.
V tomto článku uvidíme, ako možno implementovať komunikáciu RS485 medzi niekoľkými Arduinos pomocou modulov založených na integrovanom MAX485, čipe, ktorý konvertuje signály TTL (z Arduina) na RS485 a naopak. V tomto návode sa budeme zaoberať základnými konceptmi a praktickými príkladmi, ktoré vám umožnia implementovať simplexnú, poloduplexnú a plne duplexnú komunikáciu medzi mikrokontrolérmi Arduino, a vysvetlíme, ako môžete rozšíriť tento komunikačný systém tak, aby ovládal viacero zariadení v jednom. zbernica RS485.
Čo je RS485?
RS485 je komunikačný štandard široko používaný v priemysle, známy pre svoje robustnosť a jeho schopnosť odolávať veľká vzdialenosť prenos, a to aj v hlučnom priemyselnom prostredí. Na rozdiel od iných typov sériovej komunikácie, ako je RS232, umožňuje RS485 pripojenie viacerých zariadení na rovnakú zbernicu, vďaka čomu je ideálny pre aplikácie priemyselnej automatizácie a riadenia.
Tento protokol je odolný voči elektromagnetickému šumu vďaka tomu, že využíva a diferenciálny signalizačný systém, čo znamená, že údaje sa odosielajú cez dva vodiče, A a B, ktoré sú opačné verzie v napätí. To umožňuje jednoduché potlačenie akéhokoľvek šumu zachyteného v kábloch, čím sa zabezpečí integrita signálu.
Jednou z hlavných výhod RS485 je to podporuje vzdialenosti až 1200 metrov a dosahuje rýchlosť až 35 Mbps na krátke vzdialenosti, čo z neho robí ideálny protokol pre priemyselné a riadiace aplikácie v prostrediach, kde je potrebná dlhá kabeláž.
Komunikačné režimy RS485
V komunikácii RS485 môžeme systém nakonfigurovať tromi rôznymi spôsobmi: simplex, poloduplex a plne duplex. Každý z nich má svoje špecifiká a je realizovaný podľa potrieb projektu.
Simplexná komunikácia
V simplexnom režime komunikácia prebieha iba jedným smerom, to znamená, že jedno zariadenie funguje ako vysielač a ďalšie podobné prijímač. To je užitočné v situáciách, keď chcete iba odosielať alebo prijímať dáta bez potreby spätnej väzby.
Môžeme napríklad nastaviť systém, v ktorom Arduino načíta hodnotu senzora a odošle ju do iného zariadenia, ktoré ju jednoducho prijme. V tomto prípade, keďže dáta putujú len jedným smerom, je možné upustiť od určitých prídavných ovládacích prvkov, vďaka čomu je systém jednoduchší a hospodárnejší.
Half-Duplex komunikácia
Väčšina aplikácií RS485 na Arduine je implementovaná v polovičnom duplexnom režime, pretože to len vyžaduje dva drôtya umožňuje odosielať aj prijímať dáta, aj keď nie súčasne. To znamená, že ak jedno zariadenie odosiela dáta, ostatné zariadenia musia byť v režime príjmu a naopak.
Ak chcete prepínať medzi režimami vysielania a príjmu, použite prídavné kolíky (RE/DE) na module MAX485, ktorý budete ovládať z kódu, aby ste určili, či má zariadenie v danom čase odosielať alebo prijímať.
Tento režim je obzvlášť užitočný, ak máte na rovnakej zbernici viacero zariadení, ktoré spolu potrebujú komunikovať, ale nie súčasne.
Plne duplexná komunikácia
V plne duplexnom režime môžu zariadenia odosielať a prijímať dáta súčasne. Ak však chcete implementovať plný duplex na RS485, dva páry točených drôtov, čo zvyšuje náklady a zložitosť elektroinštalácie. Okrem toho budete potrebovať dva moduly MAX485 pre každé zariadenie na samostatné spravovanie vysielacích a prijímacích kanálov.
Komponenty potrebné na komunikáciu RS485 s Arduino
Na implementáciu komunikačného systému RS485 na Arduino budete potrebovať nasledujúce komponenty:
- Jedno alebo viac Arduino: Bude stačiť akýkoľvek model Arduino, ale v tomto návode ho použijeme Arduino UNO a Arduino MEGA ako príklady.
- Moduly MAX485: Tieto moduly umožňujú konvertovať TTL signály z Arduina na RS485 a naopak. Sú veľmi lacné a ľahko sa dajú nájsť v obchodoch ako AliExpress alebo eBay.
- Zakončovacie odpory: Rezistor medzi 120 ohmami je zvyčajne umiestnený na každom konci zbernice, aby sa zabránilo odrazom v signáli. Na krátke vzdialenosti sa bez nich zaobídete, no pri dlhších inštaláciách sú nevyhnutné pre zachovanie integrity signálu.
- Twisted pair káble: Odporúča sa používať krútené dvojlinky, aby sa minimalizovalo elektromagnetické rušenie, najmä v hlučnom priemyselnom prostredí.
Všeobecná schéma zapojenia
Pripojte moduly MAX485 na Arduino je celkom jednoduché. Najdôležitejšie piny sú A a B, ktoré zodpovedajú linkám zbernice RS485. Tieto kolíky musia byť pripojené ku všetkým zariadeniam na zbernici. Modul má navyše piny RE a DE, ktoré ovládajú, či je modul v režime prijímača alebo vysielača.
Vo všeobecnosti sa moduly pripájajú k Arduinu takto:
- VCC a GND modulu sa pripájajú k VCC a GND na Arduine.
- DI (Data Input) modulu sa pripája k TX kolíku Arduina, ak má modul fungovať ako emitor.
- RO (Receiver Output) modulu sa pripája k RX pinu Arduina, ak má modul fungovať ako prijímač.
- DE a RE musia byť ovládané z digitálneho pinu Arduino, aby ste mohli prepínať medzi režimami vysielania a príjmu.
Ak potrebujete, aby modul fungoval iba ako vysielač alebo prijímač, môžete RE a DE pripojiť priamo na HIGH alebo LOW. Pri zložitejšej komunikácii, kde musí zariadenie prepínať medzi vysielaním a prijímaním, je však najlepšie ovládať tieto piny zo softvéru.
Príklady kódov pre komunikáciu RS485
Nižšie je uvedených niekoľko príkladov pokrývajúcich rôzne komunikačné konfigurácie s RS485 na Arduine.
Simplexná komunikácia
Kód vydavateľa
Pre základný simplexný systém, kde máme iba jedného odosielateľa a jedného príjemcu, môže kód odosielateľa vyzerať takto:
void setup() { Serial.begin(9600); } void loop() { Serial.write(analogRead(0)); delay(500); }
Kód prijímača
Prijímač jednoducho načíta údaje prichádzajúce cez sériový port:
void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }
Half-Duplex komunikácia
V tomto príklade implementujeme poloduplexný systém, kde zariadenia striedavo odosielajú a prijímajú dáta.
Kód učiteľa
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); } }
Otrocký kód
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); } }
Plne duplexná komunikácia
Na implementáciu plne duplexnej komunikácie budú potrebné dva moduly MAX485 na Arduino. Každý pár modulov bude spracovávať jednu dátovú linku: jednu na vysielanie a jednu na príjem.
Kód bude podobný ako v predchádzajúcich príkladoch, ale v tomto prípade by obe zariadenia vždy vysielali a prijímali súčasne.
Rozšírenie na viacero zariadení cez RS485
RS485 má možnosť pripojiť až 32 zariadení na jednu zbernicu a v špeciálnych prípadoch môže dosiahnuť viac. Vďaka tomu je vynikajúcou voľbou pre projekty zahŕňajúce viacero mikrokontrolérov alebo zariadení. Na identifikáciu každého z nich v sieti je bežné implementovať adresu alebo ID pre každé zariadenie.
V tomto prípade master odošle správu s adresou zariadenia, s ktorým chce komunikovať, a iba toto zariadenie bude mať na starosti spracovanie správy a poskytnutie odpovede.
K tomu sa pridáva možnosť využitia zložitejšie protokoly ako napríklad MODBUS, ktoré umožňujú vytváranie vysoko efektívnych a bezpečných sietí v tomto odvetví.
Pri domácich projektoch alebo menej náročných aplikáciách môžete každému Arduinu jednoducho priradiť identifikátor a nechať ho reagovať len na správy určené pre nich.