Komunikacija RS485 z Arduinom: Celoten vodnik s primeri

  • Povezovanje in uporaba modula MAX485 za vzpostavitev komunikacije RS485 z Arduinom.
  • Kako implementirati komunikacijo simplex, half-duplex in full-duplex za različne potrebe.
  • Nadzor naprav na istem vodilu RS485 z več Arduino.

rs485

Serijska komunikacija je eden najpogostejših načinov izmenjave podatkov med elektronskimi napravami. Če pa se razdalje povečajo ali če so v okolju elektromagnetne motnje, so lahko komunikacijski signali nagnjeni k napakam. Tu nastopi komunikacijski standard RS485, ki ponuja robustno in učinkovito alternativo. Arduino nam s svojo vsestranskostjo omogoča, da na dokaj preprost način v celoti izkoristimo prednosti tega protokola.

V tem članku bomo videli, kako je mogoče komunikacijo RS485 implementirati med več Arduino z uporabo modulov, ki temeljijo na integriranem MAX485, čipu, ki pretvarja signale TTL (iz Arduina) v RS485 in obratno. Skozi to vadnico bomo pokrivali tako osnovne koncepte kot praktične primere, ki vam bodo omogočili implementacijo preproste, pol-dupleksne in polno-dupleksne komunikacije med mikrokrmilniki Arduino, in razložili, kako lahko razširite ta komunikacijski sistem za upravljanje več naprav v eni sami vodilo RS485.

Kaj je RS485?

RS485 je komunikacijski standard, ki se pogosto uporablja v industriji in je znan po svojih robustnost in njegovo sposobnost vzdržati dolga razdalja prenos, tudi v hrupnem industrijskem okolju. Za razliko od drugih vrst serijske komunikacije, kot je RS232, RS485 omogoča povezavo več naprav na isto vodilo, zaradi česar je idealen za aplikacije industrijske avtomatizacije in krmiljenja.

Ta protokol je odporen na elektromagnetni šum zaradi dejstva, da uporablja a diferencialni signalni sistem, kar pomeni, da se podatki pošiljajo po dveh žicah, A in B, ki sta nasprotni različici napetosti. To omogoča, da se morebitni šum, ki ga zaznajo kabli, zlahka izniči, kar zagotavlja celovitost signala.

Ena glavnih prednosti RS485 je ta podpira razdalje do 1200 metrov in hitrosti do 35 Mbps na kratkih razdaljah, zaradi česar je idealen protokol za industrijske in nadzorne aplikacije v okoljih, kjer so potrebni dolgi kabli.

Komunikacijski načini RS485

rs485 pinout

Pri komunikaciji RS485 lahko sistem konfiguriramo na tri različne načine: simplex, half-duplex in full-duplex. Vsak ima svoje posebnosti in se izvaja glede na potrebe projekta.

Simpleksna komunikacija

V enosmernem načinu poteka komunikacija samo v eno smer, to pomeni, da deluje ena naprava izdajatelj in še ena podobna sprejemnik. To je uporabno v primerih, ko želite samo poslati ali prejeti podatke brez potrebe po povratnih informacijah.

Na primer, lahko nastavimo sistem, kjer Arduino prebere vrednost senzorja in jo pošlje drugi napravi, ki jo preprosto sprejme. Ker v tem primeru podatki potujejo le v eno smer, se lahko odrečemo nekaterim dodatnim krmilnim elementom, s čimer postane sistem enostavnejši in varčnejši.

Poldupleksna komunikacija

Večina aplikacij RS485 na Arduinu je izvedenih v poldupleksnem načinu, ker to zahteva samo dve žiciin omogoča pošiljanje in prejemanje podatkov, vendar ne hkrati. To pomeni, da če ena naprava pošilja podatke, morajo biti druge naprave v načinu sprejema in obratno.

Če želite preklapljati med načinoma oddajanja in prejemanja, uporabite dodatni zatiči (RE/DE) na modulu MAX485, ki ga boste upravljali s kodo, da ugotovite, ali naj naprava kadar koli pošilja ali prejema.

Ta način je še posebej uporaben, če imate na istem vodilu več naprav, ki morajo komunicirati med seboj, vendar ne hkrati.

Full-Duplex komunikacija

V načinu polnega dupleksa lahko naprave hkrati pošiljajo in prejemajo podatke. Vendar pa za implementacijo polnega dupleksa v RS485, dva para zvitih žic, kar poveča stroške in kompleksnost ožičenja. Poleg tega boste potrebovali dva modula MAX485 za vsako napravo za ločeno upravljanje oddajnih in sprejemnih kanalov.

Komponente, potrebne za komunikacijo RS485 z Arduinom

Za implementacijo komunikacijskega sistema RS485 na Arduinu boste potrebovali naslednje komponente:

  • Eden ali več Arduinojev: Primeren je kateri koli model Arduino, vendar bomo v tej vadnici uporabili Arduino UNO in Arduino MEGA kot primera.
  • Moduli MAX485: Ti moduli vam omogočajo pretvorbo TTL signalov iz Arduino v RS485 in obratno. So zelo poceni in jih je enostavno najti v trgovinah, kot sta AliExpress ali eBay.
  • Zaključni upori: Upor med 120 ohmov je običajno nameščen na vsakem koncu vodila, da se prepreči odboj signala. Na kratkih razdaljah je mogoče brez njih, pri daljših namestitvah pa so bistvenega pomena za ohranitev celovitosti signala.
  • Dvožilni kabli: Za zmanjšanje elektromagnetnih motenj, zlasti v hrupnih industrijskih okoljih, je priporočljiva uporaba kablov s prepletenimi paricami.

Splošni povezovalni diagram

Povežite module MAX485 na Arduino je precej preprosto. Najpomembnejša zatiča sta A in B, ki ustrezata vodilom RS485. Ti zatiči morajo biti povezani z vsemi napravami na vodilu. Poleg tega ima modul zatiče RE in DE, ki nadzorujejo, ali je modul v načinu sprejemnika ali oddajnika.

Na splošno je povezava modulov z Arduino izvedena na naslednji način:

  • VCC in GND modula se povežeta z VCC in GND na Arduinu.
  • DI (podatkovni vhod) modula se poveže s priključkom TX Arduino, če naj modul deluje kot oddajnik.
  • RO (izhod sprejemnika) modula se poveže s priključkom RX Arduino, če naj modul deluje kot sprejemnik.
  • DE in RE morata biti nadzorovana z digitalnim zatičem Arduino za preklapljanje med oddajnimi in sprejemnimi načini.

Če potrebujete modul le za delovanje kot pošiljatelj ali sprejemnik, lahko povežete RE in DE neposredno z HIGH ali LOW. Vendar pa je za bolj zapletene komunikacije, kjer mora naprava preklapljati med oddajanjem in sprejemanjem, najbolje, da te zatiče nadzorujete iz programske opreme.

Primeri kod za komunikacijo RS485

Spodaj je nekaj primerov, ki pokrivajo različne komunikacijske konfiguracije z RS485 na Arduinu.

Simpleksna komunikacija

Koda izdajatelja

Za osnovni sistem simpleksa, kjer imamo samo enega pošiljatelja in enega prejemnika, je lahko koda za pošiljatelja videti takole:

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

Koda sprejemnika

Sprejemnik bo preprosto prebral podatke, ki prispejo skozi serijska vrata:

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

Poldupleksna komunikacija

V tem primeru izvajamo poldupleksni sistem, kjer naprave izmenično pošiljajo in prejemajo podatke.

Koda učitelja

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

Suženjska koda

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 implementacijo full-duplex komunikacije bosta potrebna dva modula MAX485 na Arduino. Vsak par modulov bo obravnaval eno podatkovno linijo: enega za oddajanje in enega za sprejem.

Koda bo podobna prejšnjim primerom, vendar bi v tem primeru obe napravi vedno oddajali in sprejemali hkrati.

Razširitev na več naprav v RS485

RS485 ima možnost povezovanja do 32 naprav na eno vodilo, v posebnih primerih pa lahko doseže tudi več. Zaradi tega je odlična izbira za projekte, ki vključujejo več mikrokontrolerjev ali naprav. Za identifikacijo vsakega od njih v omrežju je običajno implementirati naslov ali ID za vsako napravo.

V tem primeru bo master poslal sporočilo z naslovom naprave, s katero želi komunicirati, le ta pa bo zadolžena za obdelavo sporočila in odgovor.

Temu je dodana možnost uporabe kompleksnejših protokolov kot je MODBUS, ki omogočajo ustvarjanje visoko učinkovitih in varnih omrežij v industriji.

Za domače projekte ali manj zahtevne aplikacije lahko vsakemu Arduinu preprosto dodelite identifikator in omogočite, da se odzove samo na njim namenjena sporočila.


Začni pogovor

Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.