- Razlika med komunikacijo UART in RS485
- Potrebne komponente
- Shema vezja za žično komunikacijo na dolge razdalje
- Pretvorniški modul MAX485 UART-RS485
- Kabel Ethernet CAT-6E
- Pojasnilo kode Arduino
- Zaključek
V naših majhnih projektih že dolgo uporabljamo razvojne plošče mikrokrmilnikov, kot so Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 itd., Pri katerih največkrat razdalja med senzorji in ploščo ne presega največ nekaj centimetrov in na teh razdaljah lahko komunikacijo med različnimi senzorskimi moduli, releji, aktuatorji in krmilniki enostavno izvedemo prek preprostih žic mostov, ne da bi nas skrbelo izkrivljanje signala v mediju in električni šumi, ki se vanj prikradejo. Če pa gradite nadzorni sistem s temi razvojnimi ploščami na razdalji, večji od 10 do 15 metrov, potem upoštevajte moč hrupa in signala, ker če želite, da vaš sistem deluje zanesljivo, si ne morete privoščiti izgube podatkov med prenosom.
Obstaja veliko različnih vrst serijskih komunikacijskih protokolov, kot sta I2C in SPI, ki jih je mogoče enostavno implementirati z Arduino, danes pa si bomo ogledali še en najpogosteje uporabljen protokol, imenovan RS485, ki se v industrijskih okoljih z velikim hrupom zelo pogosto uporablja za prenos podatkov prek na dolge razdalje. V tej vadnici bomo spoznali komunikacijski protokol RS485 in kako ga uporabiti z dvema Arduino Nano, ki ga imamo s seboj, in kako uporabiti pretvorniški modul MAX485 RS485 v UART. Prej smo izvedli tudi komunikacijo MAX485 z Arduino in tudi MAX485 komunikacijo z Raspberry pi, če jih želite, jih lahko tudi preverite.
Razlika med komunikacijo UART in RS485
Večina poceni senzorjev in drugih modulov, kot so GPS, Bluetooth, RFID, ESP8266 itd., Ki se na trgu pogosto uporabljajo z Arduino, Raspberry Pi, uporablja komunikacijo na osnovi UART TTL, ker zahteva le dve žici TX (oddajnik) in RX (Sprejemnik). To ni standardni komunikacijski protokol, je pa fizično vezje, s katerim lahko pošiljate in prejemate serijske podatke z drugimi zunanjimi napravami. Podatke lahko oddaja / prejema samo serijsko, zato najprej vzporedne podatke pretvori v serijske in nato prenese.
UART je asinhrona prenosna naprava, zato ni urnega signala za sinhronizacijo podatkov med obema napravama, temveč uporablja zagonske in končne bitove na začetku in koncu vsakega podatkovnega paketa, da označi konca podatkov, ki se prenašajo. Podatki, ki jih prenaša UART, so organizirani v pakete. Vsak paket vsebuje 1 začetni bit, 5 do 9 podatkovnih bitov (odvisno od UART), neobvezni bit parnosti in 1 ali 2 zaustavitvena bita. Je zelo dobro dokumentiran in se pogosto uporablja, vsebuje pa tudi paritetni bit, ki omogoča preverjanje napak. Vendar pa obstajajo nekatere omejitve, saj ne more podpirati več sužnjev in več mojstrov in največji podatkovni okvir je omejen na 9 bitov. Za prenos podatkov morata biti hitrosti prenosa med glavnim in podrejenim med 10%. Spodaj je prikazan primer, kako je znak oddajnik prek podatkovne linije UART. Najvišji in najnižji signal se merijo glede na raven GND, zato bo premik ravni GND katastrofalno vplival na prenos podatkov.
Po drugi strani pa je RS485 bolj industrijska komunikacija, ki je razvita za mrežo več naprav, ki jih je mogoče uporabljati tudi na dolge razdalje in pri večjih hitrostih. Deluje na diferenčni signalni način merjenja in ne na merjenju napetosti z zatičem GND. Signali RS485 plavajo in vsak signal se prenaša preko linije Sig + in Sig-line.
Sprejemnik RS485 primerja napetostno razliko med obema vodoma, namesto absolutne ravni napetosti na signalni liniji. To dobro deluje in preprečuje obstoj ozemljitvenih zank, ki so pogost vir komunikacijskih težav. Najboljše rezultate dosežemo, če Sig + in Sig-line zasukamo, saj zvijanje izniči učinek elektromagnetnega šuma, ki ga povzroča kabel, in zagotovi veliko boljšo odpornost proti hrupu, ki RS485 omogoča prenos podatkov do 1200 m dosega. Sukani par omogoča tudi, da so hitrosti prenosa veliko večje, kot je mogoče z ravnimi kabli. Pri majhnih razdaljah prenosa lahko RS485 doseže hitrosti do 35 Mb / s, čeprav se bo hitrost prenosa z razdaljo zmanjševala. Pri 1200 m hitrosti prenosa lahko uporabite le 100 kbps hitrosti prenosa. Za uresničitev tega komunikacijskega protokola potrebujete poseben Ethernet kabel. Obstaja veliko kategorij Ethernet kablov, kot so CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A itd. V naši vadnici bomo uporabili kabel CAT-6E ki ima 4 zvite pare žic 24AWG in lahko podpira do 600MHz. Na obeh koncih je zaključen s priključkom RJ45. Tipične ravni napetosti v omrežni napetosti so najmanj ± 1,5 V do največ ± 6 V. Vhodna občutljivost sprejemnika je ± 200 mV. Hrup v območju ± 200 mV je v bistvu blokiran zaradi odpravljanja hrupa v običajnem načinu. Primer prenosa bajta (0x3E) prek dveh vrstic komunikacije RS485.
Potrebne komponente
- 2 × pretvorniški modul MAX485
- 2 × Arduino Nano
- 2 × 16 * 2 alfanumerični LCD
- 2 × 10k potenciometri brisalcev
- Ethernetni kabel Cat-6E
- Breadboards
- Jumper žice
Shema vezja za žično komunikacijo na dolge razdalje
Spodnja slika prikazuje diagram vezja oddajnika in sprejemnika za žično komunikacijo Arduino na dolge razdalje. Upoštevajte, da sta vezja oddajnika in sprejemnika videti enaka, edina stvar, ki se razlikuje, je koda, zapisana vanj. Tudi za predstavitev uporabljamo eno ploščo kot oddajnik in eno ploščo kot sprejemnik, vendar lahko plošče enostavno programiramo tako, da delujejo kot oddajnik in sprejemnik z enako nastavitvijo
Diagram povezave za zgornje vezje je prav tako podan spodaj.
Kot lahko vidite zgoraj, obstajata dva skoraj enaka para vezij, pri čemer ima vsak navoj Arduino, 16 * 2 alfanumerični LCD in pretvornik IC MAX485 UART v RS485, priključen na vsak konec kabla Ethernet Cat-6E prek priključka RJ45. Kabel, ki sem ga uporabil pri vajah, je dolg 25 m. Nekaj podatkov bomo poslali s strani oddajnika po kablu iz Nano, ki se pretvori v RS485 signale prek modula MAX RS485, ki deluje v glavnem načinu.
Na sprejemnem koncu pretvorniški modul MAX485 deluje kot podrejeni in ob poslušanju prenosa od glavnega pretvori podatke RS485, ki jih je prejel, v standardne 5V TTL UART signale, ki jih prebere sprejemni Nano in prikaže na 16 * 2 alfanumerični LCD zaslon.
Pretvorniški modul MAX485 UART-RS485
Ta pretvorniški modul UART-RS485 ima vgrajen čip MAX485, ki je oddajnik z nizko porabo energije in omejeno hitrostjo, ki se uporablja za komunikacijo RS-485. Deluje z enim napajalnikom + 5V in nazivni tok je 300 μA. Deluje na poldupleksni komunikaciji za izvajanje funkcije pretvorbe ravni TTL v raven RS-485, kar pomeni, da lahko kadar koli oddaja ali sprejema, ne obojega, doseže lahko največjo hitrost prenosa 2,5 Mb / s. Oddajnik MAX485 črpa napajalni tok med 120μA in 500μA v neobremenjenih ali popolnoma obremenjenih pogojih, ko je voznik onemogočen. Gonilnik je omejen na tok kratkega stika in izhodi gonilnika se lahko prek vezja termičnega izklopa postavijo v stanje visoke impedance. Vhod sprejemnika ima varno funkcijo, ki zagotavlja visoko logično moč, če je vhod prekinjen.Poleg tega ima močno zmogljivost za preprečevanje motenj. Ima tudi vgrajene LED-diode, ki prikazujejo trenutno stanje čipa, tj. Ali se čip napaja ali pa oddaja ali sprejema podatke, kar olajša razhroščevanje in uporabo.
Zgoraj navedeni diagram vezja pojasnjuje, kako je vgrajena MAX485 IC povezana z različnimi komponentami in nudi 0,1-palčne standardne razmične glave, ki jih lahko uporabljate s ploščo, če želite.
Kabel Ethernet CAT-6E
Ko pomislimo na prenos podatkov na dolge razdalje, takoj pomislimo na povezavo z internetom prek Ethernet kablov. Dandanes večinoma uporabljamo Wi-Fi za internetno povezljivost, prej pa smo za povezavo z internetom uporabljali Ethernet kable, ki vodijo do vsakega osebnega računalnika. Glavni razlog za uporabo teh ethernetnih kablov prek običajnih žic je ta, da zagotavljajo veliko boljšo zaščito pred šumenjem in izkrivljanjem signala na velikih razdaljah. Preko izolacijskega sloja imajo zaščitni plašč za zaščito pred elektromagnetnimi motnjami, prav tako pa je vsak par žic zvit, da se prepreči nastanek tokovnih zank in s tem veliko boljša zaščita pred hrupom. Pogosto so zaključeni z 8-polnimi RJ45 konektorji na obeh koncih. Obstaja veliko kategorij Ethernet kablov, kot so CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A itd. V naši vadnici bomo uporabili kabel CAT-6E, ki ima 4 zvite pare žic 24AWG in lahko podpira do 600 MHz.
Slika prikazuje, kako sta par žic zvita znotraj izolacijskega sloja kabla CAT-6E
Priključek RJ-45, namenjen ethernetnemu kablu CAT-6E
Pojasnilo kode Arduino
V tem projektu za prikaz rezultatov uporabljamo dva Arduino Nano, enega kot oddajnika in enega kot sprejemnika, ki vsakega poganjata 16 * 2 alfanumerični LCD. Torej se bomo v kodi Arduino osredotočili na pošiljanje podatkov in prikaz, ki so poslali ali prejeli podatke na LCD zaslonu.
Za stran oddajnika:
Začnemo z vključitvijo standardne knjižnice za vožnjo LCD-ja in razglasimo pin D8 na Arduino Nano kot izhodni pin, ki ga bomo kasneje uporabili za razglasitev modula MAX485 kot oddajnika ali sprejemnika.
int enablePin = 8; int potval = 0; #include
Zdaj prihajamo do namestitvenega dela. Povlecimo zatič za omogočanje, da modul MAX485 prestavimo v način oddajnika. Ker je pol-dupleksna IC, zato ne more hkrati oddajati in sprejemati. Tu bomo tudi inicializirali LCD in natisnili pozdravno sporočilo.
Serial.begin (9600); // inicializiramo serijsko na hitrosti 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("DIGEST CIRCUIT"); lcd.setCursor (0,1); lcd.print ("Oddajnik Nano"); zamuda (3000); lcd.clear ();
Zdaj v zanki na serijske črte zapišemo stalno naraščajočo celoštevilčno vrednost, ki se nato prenese na drugo nano. Ta vrednost je za prikaz in odpravljanje napak natisnjena tudi na LCD-prikazovalniku.
Serial.print ("Poslana vrednost ="); Serial.println (potval); // Serijski zapis POTval na RS-485 vodilo lcd.setCursor (0,0); lcd.print ("Poslana vrednost"); lcd.setCursor (0,1); lcd.print (potval); zamuda (1000); lcd.clear (); potval + = 1;
Stran sprejemnika:
Tu spet začnemo z vključitvijo standardne knjižnice za vožnjo LCD-ja in razglasimo pin D8 na Arduino Nano kot izhodni pin, ki ga bomo kasneje uporabili za razglasitev modula MAX485 kot oddajnik ali sprejemnik.
int enablePin = 8; #include
Zdaj prihajamo do namestitvenega dela. Povlecimo zatič za omogočanje visoko, da modul MAX485 preklopimo v način sprejemnika. Ker je pol-dupleksna IC, zato ne more hkrati oddajati in sprejemati. Tu bomo tudi inicializirali LCD in natisnili pozdravno sporočilo.
Serial.begin (9600); // inicializiramo serijsko na hitrosti 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("DIGEST CIRCUIT"); lcd.setCursor (0,1); lcd.print ("Receiver Nano"); zamuda (3000); digitalWrite (enablePin, LOW); // (zatič 8 vedno LOW za prejemanje vrednosti od Master-a)
Zdaj v zanki preverimo, ali je na zaporednih vratih kaj na voljo, nato preberemo podatke in ker so vhodni podatki celo število, jih razčlenimo in prikažemo na priključenem LCD-ju.
int pwmval = Serial.parseInt (); // prejmem vrednost INTEGER od Master-a skozi RS-485 Serial.print ("Dobil sem vrednost"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Prejeta vrednost"); lcd.setCursor (0,1); lcd.print (pwmval); zamuda (1000); lcd.clear ();
Zaključek
Testno nastavitev, ki smo jo uporabili za ta projekt, najdete spodaj.
Celotno delovanje tega projekta najdete v spodnjem videoposnetku. Ta metoda je ena izmed enostavnih in enostavnih metod za prenos podatkov na velike razdalje. V tem projektu smo uporabili le hitrost prenosa 9600, kar je precej pod največjo hitrostjo prenosa, ki jo lahko dosežemo z modulom MAX-485, vendar je ta hitrost primerna za večino senzorskih modulov in v resnici ne potrebujemo vse največje hitrosti med delom z Arduinom in drugimi razvojnimi ploščami, razen če kabel uporabljate kot ethernetno povezavo in ne potrebujete vse pasovne širine in hitrosti prenosa, ki jo dobite. Poigrajte se sami s hitrostjo prenosa in poskusite tudi druge vrste ethernetnih kablov. Če imate kakršna koli vprašanja, jih pustite v oddelku za komentarje spodaj ali uporabite naše forume in poskušal bom najbolje odgovoriti nanje. Do takrat, adios!