- RS-485 seriell kommunikasjonsprotokoll
- RS-485 i Arduino
- Komponenter kreves
- Kretsdiagram
- Programmering Arduino UNO og Arduino Nano for RS485 seriell kommunikasjon
- Kontrollerer LED-lysstyrke med seriell kommunikasjon RS485
Å velge en kommunikasjonsprotokoll for kommunikasjon mellom mikrokontrollere og eksterne enheter er en viktig del av innebygd system. Det er viktig fordi den samlede ytelsen til ethvert innebygd program er avhengig av kommunikasjonsmidler, da det er relatert til kostnadsreduksjon, raskere dataoverføring, langdistansedekning etc.
I forrige veiledning har vi lært om I2C kommunikasjonsprotokoll og SPI kommunikasjonsprotokoller i Arduino. Nå er det en annen seriell kommunikasjonsprotokoll kalt RS-485. Denne protokollen bruker en asynkron seriell kommunikasjon. Den største fordelen med RS-485 er dataoverføring på lang avstand mellom to enheter. Og de brukes oftest i elektrisk støyende industrimiljø.
I denne opplæringen vil vi lære om RS-485 seriell kommunikasjon mellom to Arduinos og deretter demonstrere det ved å kontrollere lysstyrken på LED-en som er koblet til en Slave Arduino fra Master Arduino ved å sende ADC-verdier gjennom RS-485-modulen. Et 10k potensiometer brukes til å variere ADC-verdiene på Master Arduino.
La oss starte med å forstå hvordan RS-485 seriell kommunikasjon fungerer.
RS-485 seriell kommunikasjonsprotokoll
RS-485 er en asynkron seriell kommunikasjonsprotokoll som ikke krever klokkepuls. Den bruker en teknikk som kalles differensial signal for å overføre binære data fra en enhet til en annen.
Så hva er denne differensielle signaloverføringsmetoden ??
Metoden for differensial signal fungerer ved å skape en differensialspenning ved å bruke en positiv og negativ 5V. Den gir en halv-dupleks kommunikasjon når du bruker to ledninger, og Full-dupleks krever fire fires ledninger.
Ved å bruke denne metoden
- RS-485 støtter høyere dataoverføringshastighet på maksimalt 30 Mbps.
- Det gir også maksimal dataoverføringsavstand sammenlignet med RS-232-protokollen. Den overfører data opp til 1200 meter maksimalt.
- Den største fordelen med RS-485 i forhold til RS-232 er flere slave med enkelt Master mens RS-232 støtter bare en enkelt slave.
- Den kan ha maksimalt 32 enheter koblet til RS-485-protokollen.
- En annen fordel med RS-485 er at den er immun mot støyen når de bruker differensial signalmetode for å overføre.
- RS-485 er raskere sammenlignet med I2C-protokollen.
RS-485 i Arduino
For å bruke RS-485 i Arduino, er det nødvendig med en modul kalt 5V MAX485 TTL til RS485 som er basert på Maxim MAX485 IC da den tillater seriell kommunikasjon over lang avstand på 1200 meter og den er toveis. I halv dupleksmodus har den en dataoverføringshastighet på 2. 5 Mbps.
5V MAX485 TTL til RS485-modul krever en spenning på 5V og bruker 5V logiske nivåer slik at den kan kobles til maskinvareserieporter på mikrokontrollere som Arduino.
Den har følgende funksjoner:
- Driftsspenning: 5V
- Innebygd MAX485-brikke
- Et lavt strømforbruk for RS485-kommunikasjonen
- Slew-rate begrenset transceiver
- 5.08mm tonehøyde 2P terminal
- Praktisk RS-485 kommunikasjonsledninger
- Alle pinnepinner har blitt ledet til kan styres gjennom mikrokontrolleren
- Brettstørrelse: 44 x 14 mm
Pin-Out av RS-485:
Pin-navn |
Bruk |
VCC |
5V |
EN |
Ikke-inverterende mottakerinngang Ikke-inverterende driverutgang |
B |
Inverterende mottakerinngang Inverterende driverutgang |
GND |
GND (0V) |
R0 |
Mottaker ut (RX-pin) |
RE |
Mottakerutgang (LAV-aktivert) |
DE |
Driverutgang (HIGH-Enable) |
DI |
Driverinngang (TX-pin) |
Denne RS-485-modulen kan enkelt kobles til Arduino. La oss bruke maskinvarens serielle porter til Arduino 0 (RX) og 1 (TX) (I UNO, NANO). Programmering er også enkelt, bruk bare Serial.print () for å skrive til RS-485 og Serial.Read () for å lese fra RS-485.
Programmeringsdelen blir forklart senere i detalj, men lar oss først kontrollere de nødvendige komponentene og kretsskjemaet.
Komponenter kreves
- Arduino UNO eller Arduino NANO (2)
- MAX485 TTL til RS485 omformermodul - (2)
- 10K potensiometer
- 16x2 LCD-skjerm
- LED
- Brettbrett
- Koble ledninger
I denne opplæringen brukes Arduino Uno som Master og Arduino Nano brukes som Slave. To Arduino-brett brukes her, så det kreves to RS-485-moduler.
Kretsdiagram
Kretsforbindelse mellom 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 av Slave RS-485 |
B |
Til B av Slave RS-485 |
Forbindelse mellom andre 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 av Master RS-485 |
B |
Til B av Master RS-485 |
Kretsforbindelse mellom en 16x2 LCD og Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Til potensiometer senterstift for kontrastkontroll av LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
EN |
+ 5V |
K |
GND |
Et 10K potensiometer er koblet til den analoge pinnen A0 på Arduino UNO for å levere analog inngang, og en LED er koblet til pinnen D10 i Arduino Nano.
Programmering Arduino UNO og Arduino Nano for RS485 seriell kommunikasjon
For programmering av begge kort brukes Arduino IDE. Men sørg for at du har valgt tilsvarende PORT fra Verktøy-> Port og brett fra Verktøy-> Brett.
Komplett kode med en demonstrasjonsvideo er gitt på slutten av denne opplæringen. Her forklarer vi viktig del av koden. Det er to programmer i denne opplæringen, et for Arduino UNO (Master) og et annet for Arduino Nano (Slave).
Kode Forklaring for Master: Arduino UNO
På mastersiden er det bare å ta analog inngang på pin A0 ved å variere potensiometeret og deretter SerialWrite disse verdiene til RS-485-bussen gjennom maskinvareserieportene (0,1) av Arduino UNO.
For å starte seriekommunikasjon ved maskinvareseriepinner (0,1) bruk:
Serial.begin (9600);
For å lese analog verdi på pinnen A0 til Arduino UNO og lagre dem i variabel potval- bruk:
int potval = analogRead (pushval);
Før du skriver potval- verdien til serieporten, skal pinner DE og RE på RS-485 være HØY som er koblet til pinnen 8 på Arduino UNO, slik at du lager pin 8 HØY:
digitalWrite (enablePin, HIGH);
Bruk følgende utsagn ved siden av å plassere disse verdiene i den serielle porten som er koblet til RS-485-modulen
Serial.println (potval);
Kode Forklaring for Slave: Arduino NANO
På slavesiden mottas en heltallsverdi fra Master RS-485 som er tilgjengelig på maskinvareserieporten til Arduino Nano (Pins -0,1). Bare les disse verdiene og lagre i en variabel. Verdiene er i form av (0 -1023). Så den blir konvertert til (0-255) ettersom PWM-teknikk brukes til å kontrollere LED-lysstyrken.
Deretter AnalogWrite de konverterte verdien til LED pin D10 (Det er en PWM pin). Så avhengig av PWM-verdien endres lysstyrken på LED-en og viser også disse verdiene i 16x2 LCD-skjerm.
For at Slave Arduinos RS-485 skal motta verdiene fra mesteren, er det bare å lage pinnene DE & RE til RS-485 LAV. Så pinnen D8 (enablePin) til Arduino NANO er laget LAV.
digitalWrite (enablePin, LOW);
Og å lese heltallsdataene som er tilgjengelige i Serial Port og lagre dem i variabel bruk
int pwmval = Serial.parseInt ();
Neste konverter verdi fra (0-1023 til 0-255) og lagre dem i en variabel:
int konvertere = kart (pwmval, 0,1023,0,255);
Skriv deretter den analoge verdien (PWM) til pin D10 der LED-anoden er koblet til:
analogWrite (ledpin, convert);
For å skrive ut PWM-verdien i 16x2 LCD-skjermbruk
lcd.setCursor (0,0); lcd.print ("PWM FRA MASTER"); lcd.setCursor (0,1); lcd.print (konvertere);
Kontrollerer LED-lysstyrke med seriell kommunikasjon RS485
Når PWM-verdien er satt til 0 ved hjelp av potensiometer, slås LED-lampen AV.
Og når PWM-verdien er satt til 251 ved hjelp av potensiometer: LED-en slås PÅ med full lysstyrke som vist på bildet nedenfor:
Så dette er hvordan RS485 kan brukes til seriell kommunikasjon i Arduino.