- RS-485 protokol til seriel kommunikation
- RS-485 i Arduino
- Komponenter, der kræves
- Kredsløbsdiagram
- Programmering Arduino UNO & Arduino Nano til RS485 seriel kommunikation
- Styring af LED-lysstyrke med seriel kommunikation RS485
At vælge en kommunikationsprotokol til kommunikation mellem mikrocontrollere og perifere enheder er en vigtig del af det integrerede system. Det er vigtigt, fordi den samlede ydeevne for enhver integreret applikation afhænger af kommunikationsmidler, da det er relateret til omkostningsreduktion, hurtigere dataoverførsel, langdistance dækning osv.
I de foregående tutorials har vi lært om I2C kommunikationsprotokol og SPI kommunikationsprotokoller i Arduino. Nu er der en anden seriel kommunikationsprotokol kaldet RS-485. Denne protokol bruger en asynkron seriel kommunikation. Den største fordel ved RS-485 er dataoverførsel på lang afstand mellem to enheder. Og de bruges mest i elektrisk støjende industrielle miljøer.
I denne vejledning lærer vi om RS-485 seriel kommunikation mellem to Arduinos og derefter demonstrerer det ved at kontrollere lysstyrken på LED'en, der er tilsluttet en Slave Arduino fra Master Arduino ved at sende ADC-værdier gennem RS-485-modulet. Et 10k potentiometer bruges til at variere ADC-værdierne på Master Arduino.
Lad os starte med at forstå, hvordan RS-485 seriel kommunikation fungerer.
RS-485 protokol til seriel kommunikation
RS-485 er en asynkron seriel kommunikationsprotokol, som ikke kræver urimpuls. Det bruger en teknik kaldet differentielt signal til at overføre binære data fra en enhed til en anden.
Så hvad er denne differentiale signaloverførselsmetode ??
Differentialsignalmetoden fungerer ved at skabe en differentieret spænding ved hjælp af en positiv og negativ 5V. Det giver en Half-Duplex- kommunikation, når du bruger to ledninger, og Full-Duplex kræver 4 fires ledninger.
Ved at bruge denne metode
- RS-485 understøtter højere dataoverførselshastighed på maksimalt 30 Mbps.
- Det giver også maksimal dataoverførselsafstand sammenlignet med RS-232-protokollen. Den overfører data op til 1200 meter maksimalt.
- Den største fordel ved RS-485 i forhold til RS-232 er den multiple slave med single Master, mens RS-232 kun understøtter en enkelt slave.
- Den kan maksimalt have 32 enheder tilsluttet til RS-485-protokollen.
- En anden fordel ved RS-485 er, at den er immun over for støj, da de bruger differentiel signalmetode til at overføre.
- RS-485 er hurtigere sammenlignet med I2C-protokollen.
RS-485 i Arduino
Til brug af RS-485 i Arduino er der brug for et modul kaldet 5V MAX485 TTL til RS485, der er baseret på Maxim MAX485 IC, da det muliggør seriel kommunikation over lang afstand på 1200 meter, og det er tovejs. I halv duplex-tilstand har den en dataoverførselshastighed på 2. 5 Mbps.
5V MAX485 TTL til RS485-modul kræver en spænding på 5V og bruger 5V-logiske niveauer, så det kan grænseflade med hardwareserieporte på mikrocontrollere som Arduino.
Det har følgende funktioner:
- Driftsspænding: 5V
- Indbygget MAX485-chip
- Et lavt strømforbrug til RS485-kommunikationen
- Slew-rate begrænset transceiver
- 5.08mm pitch 2P terminal
- Praktisk RS-485 kommunikationsledninger
- Alle stifter af chip er blevet ført til, kan styres gennem mikrokontrolleren
- Brætstørrelse: 44 x 14 mm
Pin-Out af RS-485:
Pin-navn |
Brug |
VCC |
5V |
EN |
Ikke-inverterende modtagerindgang Ikke-inverterende driveroutput |
B |
Inverterende modtagerindgang Inverterende driveroutput |
GND |
GND (0V) |
R0 |
Modtagerudgang (RX-pin) |
RE |
Modtageroutput (LAV-aktiveret) |
DE |
Driveroutput (HIGH-Enable) |
DI |
Driverindgang (TX-pin) |
Dette RS-485-modul kan let forbindes med Arduino. Lad os bruge de serielle hardwareporte på Arduino 0 (RX) og 1 (TX) (I UNO, NANO). Programmering er også enkel, brug bare Serial.print () til at skrive til RS-485 og Serial.Read () for at læse fra RS-485.
Programmeringsdelen forklares senere i detaljer, men lader først kontrollere de nødvendige komponenter og kredsløbsdiagram.
Komponenter, der kræves
- Arduino UNO eller Arduino NANO (2)
- MAX485 TTL til RS485 konverteringsmodul - (2)
- 10K Potentiometer
- 16x2 LCD-skærm
- LED
- Brødbræt
- Tilslutning af ledninger
I denne vejledning bruges Arduino Uno som Master og Arduino Nano bruges som Slave. To Arduino-kort bruges her, så der kræves to RS-485-moduler.
Kredsløbsdiagram
Kredsforbindelse mellem første RS-485 og Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
EN |
Til A af Slave RS-485 |
B |
Til B af Slave RS-485 |
Forbindelse mellem anden RS-485 og Arduino Nano (slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
EN |
Til A fra Master RS-485 |
B |
Til B af Master RS-485 |
Kredsløbsforbindelse mellem en 16x2 LCD og Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Til potentiometer centerstift til kontraststyring af LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
EN |
+ 5V |
K |
GND |
Et 10K potentiometer er forbundet til den analoge pin A0 på Arduino UNO til tilvejebringelse af analog indgang, og en LED er forbundet til pin D10 i Arduino Nano.
Programmering Arduino UNO & Arduino Nano til RS485 seriel kommunikation
Til programmering af begge kort bruges Arduino IDE. Men sørg for at du har valgt den tilsvarende PORT fra Tools-> Port og Board fra Tools-> Board.
Komplet kode med en demo-video findes i slutningen af denne vejledning. Her forklarer vi vigtig del af koden. Der er to programmer i denne vejledning, et til Arduino UNO (Master) og et andet til Arduino Nano (Slave).
Kode Forklaring til Master: Arduino UNO
På mastersiden skal du blot tage analog indgang ved pin A0 ved at variere potentiometeret og derefter SerialWrite disse værdier til RS-485-bussen gennem hardwareserieporte (0,1) i Arduino UNO.
For at begynde seriekommunikation ved hardware serielle ben (0,1) skal du bruge:
Serial.begin (9600);
For at læse den analoge værdi ved pin A0 i Arduino UNO og gemme dem i en variabel potval- brug:
int potval = analogRead (pushval);
Før potvalværdien til seriel port skrives, skal ben DE & RE på RS-485 være HØJ, der er forbundet med ben 8 på Arduino UNO, så Make pin 8 HIGH:
digitalWrite (enablePin, HIGH);
Brug følgende sætning ud for at placere disse værdier i den serielle port, der er forbundet med RS-485-modulet
Serial.println (potval);
Kode Forklaring til Slave: Arduino NANO
På Slave-siden modtages en heltalværdi fra Master RS-485, der er tilgængelig i hardwareserialporten i Arduino Nano (Pins -0,1). Du skal blot læse disse værdier og gemme i en variabel. Værdierne er i form af (0 -1023). Så det konverteres til (0-255), da PWM-teknik bruges til at kontrollere LED-lysstyrke.
Derefter AnalogWrite de konverterede værdi til LED pin D10 (Det er en PWM pin). Så afhængigt af PWM-værdien ændres lysstyrken på LED'en og viser også disse værdier i 16x2 LCD-display.
For at Slave Arduinos RS-485 skal modtage værdierne fra mesteren, skal du bare gøre stifterne DE & RE til RS-485 LAV. Så pin D8 (enablePin) af Arduino NANO er lav.
digitalWrite (enablePin, LOW);
Og for at læse de heltalsdata, der er tilgængelige i Serial Port, og gemme dem i variabel brug
int pwmval = Serial.parseInt ();
Konverter derefter værdien fra (0-1023 til 0-255), og gem dem i en variabel:
int konvertere = kort (pwmval, 0,1023,0,255);
Skriv derefter den analoge værdi (PWM) til pin D10, hvor LED-anoden er tilsluttet:
analogWrite (ledpin, konverter);
For at udskrive disse PWM-værdier i 16x2 LCD-skærmbrug
lcd.setCursor (0,0); lcd.print ("PWM FRA MASTER"); lcd.setCursor (0,1); lcd.print (konverter);
Styring af LED-lysstyrke med seriel kommunikation RS485
Når PWM-værdien er indstillet til 0 ved hjælp af potentiometer, slukkes LED'en.
Og når PWM-værdien er indstillet til 251 ved hjælp af potentiometer: LED'en tændes med fuld lysstyrke som vist på billedet nedenfor:
Så dette er, hvordan RS485 kan bruges til seriel kommunikation i Arduino.