- Protokol sériovej komunikácie RS-485
- RS-485 v Arduine
- Súčasti sú povinné
- Schéma zapojenia
- Programovanie Arduino UNO a Arduino Nano pre sériovú komunikáciu RS485
- Ovládanie jasu LED pomocou sériovej komunikácie RS485
Výber komunikačného protokolu pre komunikáciu medzi mikrokontrolérmi a periférnymi zariadeniami je dôležitou súčasťou zabudovaného systému. Je to dôležité, pretože celkový výkon akejkoľvek zabudovanej aplikácie závisí od komunikačných prostriedkov, pretože súvisí so znížením nákladov, rýchlejším prenosom dát, pokrytím na veľké vzdialenosti atď.
V predchádzajúcich tutoriáloch sme sa naučili komunikačný protokol I2C a komunikačné protokoly SPI v Arduine. Teraz existuje ďalší sériový komunikačný protokol s názvom RS-485. Tento protokol využíva asynchrónnu sériovú komunikáciu. Hlavnou výhodou RS-485 je diaľkový prenos dát medzi dvoma zariadeniami. A najčastejšie sa používajú v elektricky rušnom priemyselnom prostredí.
V tomto tutoriále sa dozvieme o sériovej komunikácii RS-485 medzi dvoma Arduinos a potom ju demonštrujeme riadením jasu LED pripojenej k Slave Arduino z Master Arduino zasielaním hodnôt ADC cez modul RS-485. Na zmenu hodnôt ADC v Master Arduino sa používa 10k potenciometer.
Začnime pochopením fungovania sériovej komunikácie RS-485.
Protokol sériovej komunikácie RS-485
RS-485 je asynchrónny sériový komunikačný protokol, ktorý nevyžaduje taktovací impulz. Na prenos binárnych údajov z jedného zariadenia do druhého používa techniku nazývanú diferenciálny signál.
Aká je teda táto metóda diferenciálneho prenosu signálu ??
Metóda diferenciálneho signálu funguje tak, že sa vytvára diferenčné napätie pomocou kladného a záporného napätia 5 V. Poskytuje komunikáciu s polovičným duplexom, keď sa používajú dva vodiče, a režim Full-Duplex vyžaduje 4 vodiče so štyrmi vodičmi.
Použitím tejto metódy
- RS-485 podporuje vyššiu rýchlosť prenosu dát maximálne 30 Mbps.
- Poskytuje tiež maximálnu vzdialenosť prenosu dát v porovnaní s protokolom RS-232. Prenáša dáta maximálne do 1 200 metrov.
- Hlavnou výhodou RS-485 oproti RS-232 je viacnásobný slave s jedným Masterom, zatiaľ čo RS-232 podporuje iba jedného slave.
- Môže mať maximálne 32 zariadení pripojených k protokolu RS-485.
- Ďalšou výhodou RS-485 je, že je imúnny voči šumu, pretože na prenos používajú metódu diferenciálneho signálu.
- RS-485 je rýchlejší v porovnaní s protokolom I2C.
RS-485 v Arduine
Pre použitie RS-485 v Arduine je potrebný modul s názvom 5V MAX485 TTL to RS485, ktorý je založený na Maxim MAX485 IC, pretože umožňuje sériovú komunikáciu na veľkú vzdialenosť 1 200 metrov a je obojsmerný. V režime polovičného duplexu má rýchlosť prenosu dát 2,5 Mb / s.
Modul 5V MAX485 TTL na RS485 vyžaduje napätie 5V a používa logické úrovne 5V, aby ho bolo možné prepojiť s hardvérovými sériovými portami mikrokontrolérov, ako je Arduino.
Má nasledujúce funkcie:
- Prevádzkové napätie: 5V
- Palubný čip MAX485
- Nízka spotreba energie na komunikáciu RS485
- Transceiver s obmedzenou rýchlosťou
- 2P terminál s rozstupom 5,08 mm
- Pohodlné komunikačné vedenie RS-485
- Všetky kolíky čipu, ku ktorým boli pripojené, je možné ovládať pomocou mikrokontroléra
- Veľkosť dosky: 44 x 14mm
Pin-Out na RS-485:
Názov špendlíka |
Použite |
VCC |
5V |
A |
Neinvertujúci vstup prijímača Neinvertujúci výstup ovládača |
B |
Obrátenie vstupu prijímača Obrátenie výstupu ovládača |
GND |
GND (0 V) |
R0 |
Prijímač (pin RX) |
RE |
Výstup prijímača (LOW-Enable) |
DE |
Výstup ovládača (HIGH-Enable) |
DI |
Driver Driver (TX pin) |
Tento modul RS-485 možno ľahko prepojiť s Arduino. Využime hardvérové sériové porty Arduino 0 (RX) a 1 (TX) (In UNO, NANO). Programovanie je tiež jednoduché, stačí použiť Serial.print () na zápis na RS-485 a Serial.Read () na čítanie z RS-485.
Programovacia časť je vysvetlená neskôr, ale najskôr si musíme skontrolovať požadované komponenty a schému zapojenia.
Súčasti sú povinné
- Arduino UNO alebo Arduino NANO (2)
- Modul prevodníka MAX485 TTL na RS485 - (2)
- 10K potenciometer
- 16 x 2 LCD displej
- LED
- Nepál
- Pripojenie drôtov
V tomto tutoriáli sa Arduino Uno používa ako Master a Arduino Nano sa používa ako Slave. Používajú sa tu dve dosky Arduino, takže sú potrebné dva moduly RS-485.
Schéma zapojenia
Okruhové spojenie medzi prvou RS-485 a Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (PR) |
VCC |
5V |
GND |
GND |
A |
K slave RS-485 |
B |
Na B slave RS-485 |
Spojenie medzi druhým RS-485 a Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Na A z hlavnej RS-485 |
B |
Do B hlavnej stanice RS-485 |
Okruhové pripojenie medzi 16x2 LCD a Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na stredový kolík potenciometra na nastavenie kontrastu LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Na analógový pin A0 Arduino UNO je pripojený 10K potenciometer na zabezpečenie analógového vstupu a LED je pripojená na pin D10 Arduino Nano.
Programovanie Arduino UNO a Arduino Nano pre sériovú komunikáciu RS485
Na programovanie obidvoch dosiek sa používa Arduino IDE. Uistite sa však, že ste vybrali zodpovedajúci PORT z ponuky Nástroje-> Port a doska z ponuky Nástroje-> Doska.
Kompletný kód s ukážkovým videom je uvedený na konci tohto tutoriálu. Tu vysvetľujeme dôležitú časť kódu. V tomto výučbe sú dva programy, jeden pre Arduino UNO (Master) a druhý pre Arduino Nano (Slave).
Vysvetlenie kódu pre Master: Arduino UNO
Na strane Master jednoducho vezmite analógový vstup na pin A0 zmenou potenciometra a potom SerialWrite tieto hodnoty na zbernicu RS-485 cez hardvérové sériové porty (0,1) Arduino UNO.
Na začatie sériovej komunikácie na hardvérových sériových kolíkoch (0,1) použite:
Serial.begin (9600);
Ak chcete načítať analógovú hodnotu na kolíku A0 Arduino UNO a uložiť ju do variabilného potvalu, použite:
int potval = analogRead (pushval);
Pred zápisom potenciálnej hodnoty na sériový port by mali byť piny DE & RE RS-485 VYSOKÉ, ktoré sú pripojené k pinu 8 Arduino UNO, aby bol pin 8 HIGH:
digitalWrite (enablePin, HIGH);
Ďalej vložte tieto hodnoty do sériového portu pripojeného k modulu RS-485, použite nasledujúci príkaz
Serial.println (potval);
Vysvetlenie kódu pre Slave: Arduino NANO
Na strane slave je celočíselná hodnota prijímaná z mastera RS-485, ktorý je k dispozícii na hardvérovom sériovom porte Arduino Nano (piny -0,1). Jednoducho prečítajte tieto hodnoty a uložte ich do premennej. Hodnoty majú tvar (0 - 1023). Takže sa prevádza na (0-255), pretože na riadenie jasu LED sa používa technika PWM.
Potom AnalogWrite tieto prevedené hodnoty na pin LED D10 (je to pin PWM). Takže v závislosti na hodnote PWM sa jas LED zmení a tiež tieto hodnoty zobrazí na 16x2 LCD displeji.
Aby mohol RS-485 od Slave Arduino prijímať hodnoty z Masteru, stačí urobiť piny DE & RE z RS-485 LOW. Takže pin D8 (enablePin) Arduino NANO je vyrobený NÍZKY.
digitalWrite (enablePin, LOW);
A načítať celočíselné údaje dostupné na sériovom porte a uložiť ich na rôzne účely
int pwmval = Serial.parseInt ();
Ďalej konvertujte hodnotu z (0-1023 na 0-255) a uložte ich do premennej:
int convert = mapa (pwmval, 0,1023,0,255);
Ďalej napíšte analógovú hodnotu (PWM) na pin D10, kde je pripojená LED anóda:
analogWrite (ledpin, convert);
Ak chcete tieto hodnoty PWM vytlačiť na 16x2 LCD displeji, použite
lcd.setCursor (0,0); lcd.print („PWM OD MAJSTRA“); lcd.setCursor (0,1); lcd.print (konvertovať);
Ovládanie jasu LED pomocou sériovej komunikácie RS485
Keď je hodnota PWM nastavená na 0 pomocou potenciometra, LED dióda zhasne.
A keď je hodnota PWM nastavená na 251 pomocou potenciometra: LED dióda sa rozsvieti na plný jas, ako je znázornené na nasledujúcom obrázku:
Takto je možné použiť RS485 na sériovú komunikáciu v Arduine.