- Protokol serijske komunikacije RS-485
- RS-485 v Arduinu
- Potrebne komponente
- Shema vezja
- Programiranje Arduino UNO in Arduino Nano za serijsko komunikacijo RS485
- Nadzor svetlosti LED s serijsko komunikacijo RS485
Izbira komunikacijskega protokola za komunikacijo med mikrokrmilniki in zunanjimi napravami je pomemben del vdelanega sistema. Pomembno je, ker je celotna uspešnost katere koli vdelane aplikacije odvisna od komunikacijskih sredstev, saj je povezana z zmanjšanjem stroškov, hitrejšim prenosom podatkov, pokritostjo na dolge razdalje itd.
V prejšnjih vajah smo spoznali komunikacijski protokol I2C in komunikacijske protokole SPI v Arduinu. Zdaj obstaja še en serijski komunikacijski protokol, imenovan RS-485, ki uporablja asinhrono serijsko komunikacijo. Glavna prednost RS-485 je prenos podatkov na daljavo med dvema napravama. In najpogosteje se uporabljajo v električno hrupnem industrijskem okolju.
V tej vadnici bomo spoznali serijsko komunikacijo RS-485 med dvema Arduinosoma in jo nato prikazali z nadzorom svetlosti LED, priključene na podrejeni Arduino iz Master Arduina, tako da vrednosti ADC pošljemo prek modula RS-485. Za spreminjanje vrednosti ADC pri Master Arduinu se uporablja 10k potenciometer.
Začnimo z razumevanjem delovanja serijske komunikacije RS-485.
Protokol serijske komunikacije RS-485
RS-485 je asinhroni serijski komunikacijski protokol, ki ne zahteva takta. Uporablja tehniko, imenovano diferencialni signal, za prenos binarnih podatkov iz ene naprave v drugo.
Torej, kaj je ta diferencialna metoda prenosa signala ??
Metoda diferencialnega signala deluje tako, da ustvari diferenčno napetost z uporabo pozitivnih in negativnih 5V. Zagotavlja Half-Duplex komunikacije ob uporabi dveh žic in Full-Duplex zahteva 4 štiri žice.
Z uporabo te metode
- RS-485 podpira višjo hitrost prenosa podatkov do največ 30 Mb / s.
- Zagotavlja tudi največjo razdaljo prenosa podatkov v primerjavi s protokolom RS-232. Prenaša podatke do največ 1200 metrov.
- Glavna prednost RS-485 pred RS-232 je več pomožnih enot z enim samim glavnim, medtem ko RS-232 podpira samo enega pomožnika.
- Na protokol RS-485 je lahko priključenih največ 32 naprav.
- Druga prednost RS-485 je, da je odporen na šum, saj za prenos uporabljajo metodo diferencialnega signala.
- RS-485 je hitrejši od protokola I2C.
RS-485 v Arduinu
Za uporabo RS-485 v Arduinu je potreben modul, imenovan 5V MAX485 TTL do RS485, ki temelji na Maxim MAX485 IC, saj omogoča serijsko komunikacijo na dolgi razdalji 1200 metrov in je dvosmeren. V načinu pol dupleksa ima hitrost prenosa podatkov 2,5 Mb / s.
Modul 5V MAX485 TTL do RS485 zahteva napetost 5V in uporablja 5V logične ravni, tako da ga je mogoče povezati s serijskimi vrati strojne opreme mikrokrmilnikov, kot je Arduino.
Ima naslednje značilnosti:
- Delovna napetost: 5V
- Vgrajeni čip MAX485
- Nizka poraba energije za komunikacijo RS485
- Oddajnik z omejeno hitrostjo
- Terminal 2P z naklonom 5,08 mm
- Priročno komunikacijsko ožičenje RS-485
- Vse zatiče čipa, do katerih je bil pripeljan, je mogoče krmiliti prek mikrokrmilnika
- Velikost plošče: 44 x 14 mm
Pin-out RS-485:
Pripnite ime |
Uporaba |
VCC |
5V |
A |
Neinvertirajoči vhod sprejemnika Izhod gonilnika, ki se ne spreminja |
B |
Spreminjanje vhoda sprejemnika Pretvarjanje izhodnih podatkov gonilnika |
GND |
GND (0 V) |
R0 |
Izhod sprejemnika (RX pin) |
RE |
Izhod sprejemnika (LOW-Enable) |
DE |
Izhod gonilnika (HIGH-Enable) |
DI |
Vhod za gonilnik (TX pin) |
Ta modul RS-485 je enostavno povezati z Arduino. Uporabimo serijska vrata strojne opreme Arduino 0 (RX) in 1 (TX) (v UNO, NANO). Programiranje je tudi preprosto, samo uporabite Serial.print () za pisanje v RS-485 in Serial.Read () za branje iz RS-485.
Programski del je podrobneje razložen kasneje, vendar najprej preverimo potrebne komponente in vezje.
Potrebne komponente
- Arduino UNO ali Arduino NANO (2)
- Pretvorniški modul MAX485 TTL v RS485 - (2)
- 10K potenciometer
- LCD zaslon 16x2
- LED
- Breadboard
- Povezovanje žic
V tej vadnici se Arduino Uno uporablja kot Master, Arduino Nano pa kot Slave. Tu se uporabljata dve plošči Arduino, zato sta potrebna dva modula RS-485.
Shema vezja
Circuit Connection med prvim RS-485 in Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8. |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Do A podrejenega RS-485 |
B |
Na B Slave RS-485 |
Povezava med drugim RS-485 in Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Na A mojstra RS-485 |
B |
Na B mojstra RS-485 |
Vezje med 16x2 LCD in Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na sredinski zatič potenciometra za nadzor kontrasta LCD-ja |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Potenciometer 10K je priključen na analogni pin A0 Arduino UNO za zagotavljanje analognega vhoda, na pin D10 Arduino Nano pa LED.
Programiranje Arduino UNO in Arduino Nano za serijsko komunikacijo RS485
Za programiranje obeh plošč se uporablja Arduino IDE. Prepričajte se, da ste izbrali ustrezen PORT med Orodja-> Vrata in plošča iz Orodja-> Plošča.
Popolna koda z predstavitvenim videoposnetkom je podana na koncu te vadnice. Tukaj razlagamo pomemben del kode. V tej vadnici sta dva programa, eden za Arduino UNO (Master) in drugi za Arduino Nano (Slave).
Pojasnilo kode za Master: Arduino UNO
Na glavni strani preprosto vzemite analogni vhod na pin A0 s spreminjanjem potenciometra in nato SerialWrite te vrednosti na vodilo RS-485 skozi serijska vrata strojne opreme (0,1) Arduino UNO.
Za začetek serijske komunikacije na serijskih zatičih strojne opreme (0,1) uporabite:
Serial.begin (9600);
Če želite prebrati analogno vrednost na zatiču A0 Arduino UNO in jih shraniti v spremenljivo potvalno uporabo:
int potval = analogRead (pushval);
Preden zapišete vrednost potvala v serijska vrata, morajo biti zatiči DE & RE RS-485 VISOKI, ki so povezani z zatičem 8 Arduino UNO, tako da je zatič 8 VISOK:
digitalWrite (enablePin, HIGH);
Nato uporabite naslednje vrednosti v zaporednih vratih, povezanih z modulom RS-485
Serial.println (potval);
Pojasnilo kode za podrejeno: Arduino NANO
Na pomožni strani se od glavnega RS-485 prejme celo število, ki je na voljo v serijskih vratih strojne opreme Arduino Nano (zatiči -0,1). Preprosto preberite to vrednost in shranite v spremenljivko. Vrednosti so v obliki (0 -1023). Torej se pretvori v (0-255), saj se s PWM tehniko nadzoruje svetlost LED.
Nato te pretvorjene vrednosti AnalogWrite na LED zatič D10 (to je PWM zatič). Torej, odvisno od vrednosti PWM, se svetlost LED spremeni in te vrednosti prikaže tudi na 16x2 LCD zaslonu.
Da bi podrejeni RS Arduino RS-485 prejel vrednosti od Master-a, samo zatiči DE & RE RS-485 NIZKO. Torej je zatič D8 (enablePin) Arduino NANO NIZK.
digitalWrite (enablePin, LOW);
In prebrati celoštevilčne podatke, ki so na voljo na serijskih vratih, in jih shraniti v spremenljivo uporabo
int pwmval = Serial.parseInt ();
Nato vrednost pretvorite iz (0-1023 v 0-255) in jih shranite v spremenljivko:
int convert = map (pwmval, 0,1023,0,255);
Nato zapišite analogno vrednost (PWM) na pin D10, kjer je priključena LED anoda:
analogWrite (ledpin, pretvori);
Za tiskanje vrednosti PWM na 16x2 LCD zaslonu uporabite
lcd.setCursor (0,0); lcd.print ("PWM FROM MASTER"); lcd.setCursor (0,1); lcd.print (pretvori);
Nadzor svetlosti LED s serijsko komunikacijo RS485
Ko je vrednost PWM s potenciometrom nastavljena na 0, se LED izklopi.
In ko je vrednost PWM s potenciometrom nastavljena na 251: LED se vklopi s polno svetlostjo, kot je prikazano na spodnji sliki:
Tako lahko RS485 uporabimo za serijsko komunikacijo v Arduinu.