- Protocol de comunicare în serie RS-485
- RS-485 în Arduino
- Componente necesare
- Diagrama circuitului
- Programarea Arduino UNO și Arduino Nano pentru comunicarea în serie RS485
- Controlul luminozității LED-urilor cu comunicarea în serie RS485
Alegerea unui protocol de comunicare pentru comunicarea între microcontrolere și dispozitive periferice este o parte importantă a sistemului încorporat. Este important, deoarece performanța generală a oricărei aplicații încorporate depinde de mijloacele de comunicare, deoarece este legată de reducerea costurilor, transfer mai rapid de date, acoperire pe distanțe lungi etc.
În tutorialele anterioare am aflat despre protocolul de comunicare I2C și protocoalele de comunicare SPI în Arduino. Acum există un alt protocol de comunicație serial numit RS-485. Acest protocol utilizează o comunicație serial asincronă. Principalul avantaj al RS-485 este transferul de date pe distanțe mari între două dispozitive. Și sunt cel mai frecvent utilizate în medii industriale zgomotoase din punct de vedere electric.
În acest tutorial, vom afla despre comunicarea serială RS-485 între două Arduino și apoi o vom demonstra controlând luminozitatea LED-ului conectat la un Slave Arduino de la Master Arduino prin trimiterea valorilor ADC prin modulul RS-485. Un potențiometru de 10k este utilizat pentru a varia valorile ADC la Master Arduino.
Să începem prin a înțelege funcționarea comunicării seriale RS-485.
Protocol de comunicare în serie RS-485
RS-485 este un protocol de comunicare serial asincron care nu necesită impuls de ceas. Folosește o tehnică numită semnal diferențial pentru a transfera date binare de la un dispozitiv la altul.
Deci, ce este această metodă diferențială de transfer al semnalului ??
Metoda semnalului diferențial funcționează prin crearea unei tensiuni diferențiale utilizând un 5V pozitiv și negativ. Oferă o comunicare Half-Duplex atunci când se utilizează două fire, iar Full-Duplex necesită 4 fire.
Prin utilizarea acestei metode
- RS-485 acceptă o rată mai mare de transfer de date de maximum 30 Mbps.
- De asemenea, oferă distanța maximă de transfer de date în comparație cu protocolul RS-232. Transferă date până la 1200 metri maximum.
- Principalul avantaj al RS-485 față de RS-232 este sclavul multiplu cu un singur Master, în timp ce RS-232 acceptă numai un singur sclav.
- Poate avea maximum 32 de dispozitive conectate la protocolul RS-485.
- Un alt avantaj al RS-485 este că este imun la zgomot, deoarece utilizează metoda diferențială a semnalului pentru a transfera.
- RS-485 este mai rapid în comparație cu protocolul I2C.
RS-485 în Arduino
Pentru utilizarea RS-485 în Arduino, este necesar un modul numit 5V MAX485 TTL la RS485 care se bazează pe Maxim MAX485 IC, deoarece permite comunicarea serială pe distanțe mari de 1200 de metri și este bidirecțional. În modul semi-duplex are o rată de transfer de date de 2. 5Mbps.
Modulul 5V MAX485 TTL la RS485 necesită o tensiune de 5V și folosește niveluri logice de 5V, astfel încât să poată fi interfațat cu porturile seriale hardware ale microcontrolerelor precum Arduino.
Are următoarele caracteristici:
- Tensiune de funcționare: 5V
- Cip MAX485 la bord
- Un consum redus de energie pentru comunicația RS485
- Transmițător cu frecvență redusă
- Terminal 2P pas 5.08mm
- Cablare convenabilă pentru comunicații RS-485
- Toți pinii cipului au putut fi controlați prin intermediul microcontrolerului
- Dimensiunea plăcii: 44 x 14 mm
Pin-Out al RS-485:
Nume PIN |
Utilizare |
VCC |
5V |
A |
Intrare receptor fără inversare Ieșirea driverului fără inversare |
B |
Inversarea intrării receptorului Inversarea ieșirii driverului |
GND |
GND (0V) |
R0 |
Receptor Out (pin RX) |
RE |
Ieșire receptor (LOW-Enable) |
DE |
Ieșire driver (activare HIGH) |
DI |
Intrare driver (pin TX) |
Acest modul RS-485 poate fi ușor interfațat cu Arduino. Să folosim porturile seriale hardware ale Arduino 0 (RX) și 1 (TX) (În UNO, NANO). Programarea este, de asemenea, simplă, folosiți doar Serial.print () pentru a scrie pe RS-485 și Serial.Read () pentru a citi din RS-485.
Partea de programare este explicată mai târziu în detaliu, dar mai întâi permite verificarea componentelor necesare și a schemei de circuit.
Componente necesare
- Arduino UNO sau Arduino NANO (2)
- Modul convertor MAX485 TTL la RS485 - (2)
- Potențiometru 10K
- Afișaj LCD 16x2
- LED
- Breadboard
- Conectarea firelor
În acest tutorial, Arduino Uno este folosit ca Master, iar Arduino Nano este folosit ca Slave. Aici sunt utilizate două plăci Arduino, deci sunt necesare două module RS-485.
Diagrama circuitului
Conexiune de circuit între primul RS-485 și Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Către A din Slave RS-485 |
B |
Către B al Sclavului RS-485 |
Conexiune între al doilea RS-485 și Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Către A a Maestrului RS-485 |
B |
Către B al Maestrului RS-485 |
Conexiune de circuit între un LCD 16x2 și Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
La pinul central al potențiometrului pentru controlul contrastului LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Un potențiometru de 10K este conectat la pinul analogic A0 al Arduino UNO pentru furnizarea intrării analogice și un LED este conectat la pinul D10 al Arduino Nano.
Programarea Arduino UNO și Arduino Nano pentru comunicarea în serie RS485
Pentru programarea ambelor plăci se folosește Arduino IDE. Dar asigurați-vă că ați selectat PORTUL corespunzător din Tools-> Port and Board din Tools-> Board.
Codul complet cu un videoclip demonstrativ este dat la sfârșitul acestui tutorial. Aici explicăm o parte importantă a codului. Există două programe în acest tutorial, unul pentru Arduino UNO (Master) și altul pentru Arduino Nano (Slave).
Cod Explicație pentru Master: Arduino UNO
În partea Master, pur și simplu luați intrarea analogică la pinul A0 prin variația potențiometrului și apoi SerialWrite aceste valori pe magistrala RS-485 prin porturile seriale hardware (0,1) ale Arduino UNO.
Pentru a începe comunicarea serială la pinii seriali hardware (0,1) utilizați:
Serial.begin (9600);
Pentru a citi valoarea analogică la pinul A0 al Arduino UNO și a le stoca într-o utilizare variabilă potval :
int potval = analogRead (pushval);
Înainte de a scrie valoarea potval în portul serial, pinii DE & RE ai RS-485 ar trebui să fie HIGH, conectați la pinul 8 al Arduino UNO, astfel încât să facă pinul 8 HIGH:
digitalWrite (enablePin, HIGH);
Apoi pentru a pune acele valori în portul serial conectat cu modulul RS-485, utilizați următoarea declarație
Serial.println (potval);
Cod Explicație pentru Slave: Arduino NANO
În partea Slave, se primește o valoare întreagă de la Master RS-485, care este disponibilă la portul Serial Hardware al Arduino Nano (Pinii -0,1). Citiți pur și simplu acele valori și stocați-le într-o variabilă. Valorile sunt sub forma (0 -1023). Deci, este convertit în (0-255), deoarece tehnica PWM este utilizată pentru a controla luminozitatea LED-ului.
Apoi AnalogWrite valorile convertite la pinul LED D10 (Este un pin PWM). Deci, în funcție de valoarea PWM, luminozitatea LED-ului se schimbă și, de asemenea, afișează aceste valori pe afișajul LCD de 16x2.
Pentru ca RS-485 de la Slave Arduino să primească valorile de la Master, faceți pinii DE & RE ai RS-485 LOW. Deci pinul D8 (enablePin) al Arduino NANO este redus.
digitalWrite (enablePin, LOW);
Și pentru a citi datele întregi disponibile la Serial Port și a le stoca într-o utilizare variabilă
int pwmval = Serial.parseInt ();
Apoi convertiți valoarea de la (0-1023 la 0-255) și stocați-le într-o variabilă:
int convert = hartă (pwmval, 0,1023,0,255);
Apoi scrieți valoarea analogică (PWM) la pinul D10 unde este conectat anodul LED:
analogWrite (ledpin, convert);
Pentru a imprima acele valori PWM pe un ecran LCD de 16x2, utilizați
lcd.setCursor (0,0); lcd.print ("PWM FROM MASTER"); lcd.setCursor (0,1); lcd.print (convert);
Controlul luminozității LED-urilor cu comunicarea în serie RS485
Când valoarea PWM este setată la 0 folosind potențiometrul, LED-ul este stins.
Și când valoarea PWM este setată la 251 folosind potențiometrul: LED-ul este aprins cu luminozitate maximă, așa cum se arată în imaginea de mai jos:
Așadar, acesta este modul în care RS485 poate fi utilizat pentru comunicații seriale în Arduino.