RS485 komunikacija s Arduinom: Kompletan vodič s primjerima

  • Povezivanje i korištenje MAX485 modula za uspostavljanje RS485 komunikacije sa Arduinom.
  • Kako implementirati simplex, half-duplex i full-duplex komunikaciju za različite potrebe.
  • Kontrola uređaja na istoj RS485 magistrali sa više Arduina.

Rs485

Serijska komunikacija je jedan od najčešćih načina za razmjenu podataka između elektroničkih uređaja. Međutim, kada se udaljenosti povećaju ili okolina ima elektromagnetne smetnje, komunikacijski signali mogu biti skloni greškama. Tu stupa u igru ​​komunikacijski standard RS485, koji nudi robusnu i efikasnu alternativu. Arduino, svojom svestranošću, omogućava nam da u potpunosti iskoristimo prednosti ovog protokola na prilično jednostavan način.

U ovom članku ćemo vidjeti kako se RS485 komunikacija može implementirati između nekoliko Arduina koristeći module bazirane na integriranom MAX485, čipu koji pretvara TTL signale (sa Arduina) u RS485 i obrnuto. Kroz ovaj tutorijal ćemo pokriti i osnovne koncepte i praktične primjere koji će vam omogućiti implementaciju simpleks, poludupleks i full-duplex komunikacije između Arduino mikrokontrolera i objasniti kako možete proširiti ovaj komunikacijski sistem za rukovanje više uređaja u jednom RS485 autobus.

Šta je RS485?

RS485 je široko korišten industrijski komunikacijski standard, poznat po svojoj robusnosti i sposobnosti rukovanja velikim udaljenostima prijenosa, čak i u bučnim industrijskim okruženjima. Za razliku od drugih tipova serijske komunikacije, kao što je RS232, RS485 omogućava povezivanje više uređaja na istu magistralu, što ga čini idealnim za industrijsku kontrolu i automatizaciju.

Ovaj protokol je otporan na elektromagnetnu buku jer koristi diferencijalni sistem signalizacije , što znači da se podaci šalju kroz dvije žice, A i B, koje su suprotnog napona. To omogućava lako poništavanje bilo kakve buke koja se uhvati u kablovima, osiguravajući integritet signala.

Jedna od glavnih prednosti RS485 je što podržava udaljenosti do 1200 metara i brzine do 35 Mbps na kratkim udaljenostima, što ga čini idealnim protokolom za industrijske i kontrolne primjene u okruženjima gdje su potrebni dugi kablovi.

RS485 načini komunikacije

rs485 pinout

U RS485 komunikaciji možemo konfigurirati sistem na tri različita načina: simpleks, poludupleks i puni dupleks. Svaki od njih ima svoje specifičnosti i realizuje se prema potrebama projekta.

Simpleks komunikacija

U simpleksnom režimu, komunikacija je jednosmjerna; jedan uređaj djeluje kao pošiljalac , a drugi kao prijemnik . Ovo je korisno u situacijama kada želite samo slati ili primati podatke bez povratne informacije.

Na primjer, možemo postaviti sistem gdje Arduino čita vrijednost senzora i šalje je drugom uređaju koji je jednostavno prima. U ovom slučaju, pošto postoje samo podaci koji putuju u jednom smjeru, mogu se izostaviti određeni dodatni kontrolni elementi, čineći sistem jednostavnijim i ekonomičnijim.

Poludupleks komunikacija

Većina RS485 aplikacija na Arduinu implementirana je u poludupleksnom režimu jer su mu potrebne samo dvije žice i omogućava slanje i primanje podataka, iako ne istovremeno. To jest, ako jedan uređaj šalje podatke, ostali uređaji moraju biti u režimu prijema i obrnuto.

Za prebacivanje između načina slanja i prijema, na modulu MAX485 koriste se dodatni pinovi (RE/DE), koje ćete kontrolirati iz koda kako biste odredili treba li uređaj slati ili primati u bilo kojem trenutku.

Ovaj način rada je posebno koristan ako imate više uređaja na istoj magistrali koji moraju međusobno komunicirati, ali ne istovremeno.

Full-Duplex komunikacija

U punom dupleks režimu, uređaji mogu istovremeno slati i primati podatke. Međutim, implementacija punog dupleksa u RS485 zahtijeva dva para upredenih žica , što povećava i troškove i složenost ožičenja. Nadalje, trebat će vam dva MAX485 modula po uređaju za odvojeno upravljanje kanalima za slanje i primanje.

Komponente potrebne za RS485 komunikaciju sa Arduinom

Za implementaciju RS485 komunikacionog sistema na Arduino, trebat će vam sljedeće komponente:

  • Jedan ili više Arduina: Bilo koji Arduino model će odgovarati, ali u ovom vodiču ćemo koristiti Arduino UNO i Arduino MEGA kao primjeri.
  • MAX485 moduli: Ovi moduli vam omogućavaju da konvertujete TTL signale sa Arduina u RS485 i obrnuto. Vrlo su jeftini i lako ih je pronaći u trgovinama kao što su AliExpress ili eBay.
  • Završni otpornici: Otpornik od između 120 oma se obično postavlja na svakom kraju magistrale kako bi se izbjegle refleksije u signalu. Na kratkim udaljenostima moguće je bez njih, ali u dužim instalacijama oni su neophodni za održavanje integriteta signala.
  • Kablovi sa upredenim paricama: Preporučuje se korištenje kablova s ​​upredenim paricama kako bi se minimizirale elektromagnetne smetnje, posebno u bučnim industrijskim okruženjima.

Opšti dijagram povezivanja

Povezivanje MAX485 modula na Arduino je prilično jednostavno. Najvažniji pinovi su A i B, koji odgovaraju RS485 magistralnim linijama. Ovi pinovi moraju biti povezani sa svim uređajima na magistrali. Pored toga, modul ima RE i DE pinove koji kontrolišu da li je modul u režimu prijemnika ili predajnika.

Općenito, povezivanje modula na Arduino vrši se na sljedeći način:

  • VCC i GND modula se povezuju na VCC i GND na Arduinu.
  • DI (Unos podataka) modula se povezuje na Arduino TX pin ako modul treba da djeluje kao emiter.
  • RO (Izlaz prijemnika) modula se povezuje na RX pin Arduina ako modul treba da djeluje kao prijemnik.
  • DE i RE se moraju kontrolirati sa Arduino digitalnog pina da bi se prebacivali između načina prijenosa i prijema.

Ako vam je potreban samo modul da funkcionira kao pošiljatelj ili primatelj, možete spojiti RE i DE direktno na HIGH ili LOW. Međutim, za složenije komunikacije gdje se uređaj mora prebacivati ​​između odašiljanja i prijema, najbolje je kontrolirati ove pinove iz softvera.

Primjeri kodova za RS485 komunikaciju

Ispod je nekoliko primjera koji pokrivaju različite komunikacijske konfiguracije sa RS485 na Arduinu.

Simpleks komunikacija

Šifra izdavaoca

Za osnovni simpleks sistem gde imamo samo jednog pošiljaoca i jednog primaoca, kod za pošiljaoca može izgledati ovako:

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

Kod prijemnika

Prijemnik će jednostavno pročitati podatke koji pristižu kroz serijski port:

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

Poludupleks komunikacija

U ovom primjeru implementiramo poludupleks sistem gdje uređaji naizmjenično šalju i primaju podatke.

Šifra nastavnika

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); } }

Slave code

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); } }

Full-Duplex komunikacija

Za implementaciju full-duplex komunikacije bit će potrebna dva MAX485 modula po Arduinu. Svaki par modula će upravljati jednom linijom podataka: jednom za odašiljanje i jednom za prijem.

Kod će biti sličan prethodnim primjerima, ali u ovom slučaju oba uređaja bi uvijek istovremeno odašiljala i primala.

Proširenje na više uređaja u RS485

RS485 ima mogućnost povezivanja do 32 uređaja na jednu magistralu, au posebnim slučajevima može doseći i više. To ga čini odličnim izborom za projekte koji uključuju više mikrokontrolera ili uređaja. Za identifikaciju svakog od njih na mreži, uobičajeno je implementirati adresu ili ID za svaki uređaj.

U tom slučaju, master će poslati poruku sa adresom uređaja sa kojim želi da komunicira, a samo će taj uređaj biti zadužen za obradu poruke i davanje odgovora.

Osim toga, postoji mogućnost korištenja složenijih protokola poput MODBUS-a, koji omogućavaju stvaranje visoko efikasnih i sigurnih mreža u industriji.

Za kućne projekte ili manje zahtjevne aplikacije, možete jednostavno dodijeliti identifikator svakom Arduinu i natjerati ga da odgovara samo na poruke namijenjene njemu.


Dodaj kao preferirani izvor na Googleu