- RS-485 protokoll för seriell kommunikation
- RS-485 i Arduino
- Komponenter krävs
- Kretsschema
- Programmering Arduino UNO & Arduino Nano för RS485 seriell kommunikation
- Kontroll av LED-ljusstyrka med seriekommunikation RS485
Att välja ett kommunikationsprotokoll för kommunikation mellan mikrokontroller och kringutrustning är en viktig del av det inbyggda systemet. Det är viktigt eftersom den totala prestandan för alla inbäddade applikationer beror på kommunikationsmedel eftersom det är relaterat till kostnadsminskning, snabbare dataöverföring, långdistanstäckning etc.
I de tidigare handledningarna har vi lärt oss om I2C-kommunikationsprotokoll och SPI-kommunikationsprotokoll i Arduino. Nu finns det ett annat seriellt kommunikationsprotokoll som heter RS-485. Detta protokoll använder en asynkron seriell kommunikation. Den största fördelen med RS-485 är den långa avståndsöverföringen mellan två enheter. Och de används oftast i elektriskt bullriga industriella miljöer.
I den här handledningen kommer vi att lära oss om RS-485 seriell kommunikation mellan två Arduinos och sedan visa det genom att styra ljusstyrkan på den LED som är ansluten till en Slave Arduino från Master Arduino genom att skicka ADC-värden via RS-485-modulen. En 10k potentiometer används för att variera ADC-värdena på Master Arduino.
Låt oss börja med att förstå hur RS-485 seriell kommunikation fungerar.
RS-485 protokoll för seriell kommunikation
RS-485 är ett asynkront seriellt kommunikationsprotokoll som inte kräver klockpuls. Den använder en teknik som kallas differentiell signal för att överföra binär data från en enhet till en annan.
Så vad är denna differentiella signalöverföringsmetod ??
Metoden för differentiell signal fungerar genom att skapa en differentiell spänning genom att använda en positiv och negativ 5V. Det ger en halv-duplexkommunikation när du använder två ledningar och Full-duplex kräver fyra fyrar.
Genom att använda denna metod
- RS-485 stöder högre dataöverföringshastighet på maximalt 30 Mbps.
- Det ger också maximalt dataöverföringsavstånd jämfört med RS-232-protokollet. Den överför data upp till 1200 meter maximalt.
- Den största fördelen med RS-485 jämfört med RS-232 är multipelslaven med enstaka Master medan RS-232 stöder endast enslav.
- Den kan ha maximalt 32 enheter anslutna till RS-485-protokollet.
- En annan fördel med RS-485 är att den är immun mot bullret eftersom de använder differentiell signalmetod för att överföra.
- RS-485 är snabbare jämfört med I2C-protokollet.
RS-485 i Arduino
För att använda RS-485 i Arduino behövs en modul som heter 5V MAX485 TTL till RS485 som baseras på Maxim MAX485 IC eftersom den möjliggör seriekommunikation över långa sträckor på 1200 meter och den är dubbelriktad. I halv duplexläge har den en dataöverföringshastighet på 2. 5 Mbps.
5V MAX485 TTL till RS485-modulen kräver en spänning på 5V och använder 5V-logiska nivåer så att den kan gränssnittas med hårdvaruserieportar för mikrokontroller som Arduino.
Den har följande funktioner:
- Driftspänning: 5V
- Inbyggt MAX485-chip
- En låg strömförbrukning för RS485-kommunikationen
- Svänghastighet begränsad sändtagare
- 5.08mm stigning 2P terminal
- Bekväm RS-485 kommunikationskabel
- Alla stift av chip har blivit ledda till kan styras via mikrokontrollern
- Brädstorlek: 44 x 14 mm
Pin-Out av RS-485:
Pin-namn |
Använda sig av |
VCC |
5V |
A |
Icke-inverterande mottagaringång Icke-inverterande förarutgång |
B |
Inverterande mottagaringång Invertera drivrutinsutmatning |
GND |
GND (0V) |
R0 |
Receiver Out (RX-stift) |
RE |
Mottagarutgång (LOW-Enable) |
DE |
Drivrutinsutmatning (HIGH-Enable) |
DI |
Drivrutinsingång (TX-stift) |
Denna RS-485-modul kan enkelt anslutas till Arduino. Låt oss använda maskinvarans seriella portar på Arduino 0 (RX) och 1 (TX) (I UNO, NANO). Programmering är också enkelt, använd bara Serial.print () för att skriva till RS-485 och Serial.Read () för att läsa från RS-485.
Programmeringsdelen förklaras senare i detalj men först kan vi kontrollera nödvändiga komponenter och kretsschema.
Komponenter krävs
- Arduino UNO eller Arduino NANO (2)
- MAX485 TTL till RS485 omvandlingsmodul - (2)
- 10K Potentiometer
- 16x2 LCD-skärm
- LED
- Bakbord
- Anslutande ledningar
I denna handledning används Arduino Uno som Master och Arduino Nano används som Slave. Två Arduino-kort används här, så två RS-485-moduler krävs.
Kretsschema
Kretsförbindelse mellan första RS-485 och Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Till A av Slave RS-485 |
B |
Till B av Slave RS-485 |
Anslutning mellan andra RS-485 och Arduino Nano (slav):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Till A av Master RS-485 |
B |
Till B av Master RS-485 |
Kretsförbindelse mellan en 16x2 LCD och Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Till potentiometer mittstift för kontraststyrning av LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
En 10K potentiometer är ansluten till den analoga stift A0 på Arduino UNO för att tillhandahålla analog ingång och en LED är ansluten till stift D10 i Arduino Nano.
Programmering Arduino UNO & Arduino Nano för RS485 seriell kommunikation
För programmering används båda korten Arduino IDE. Men se till att du har valt motsvarande PORT från Tools-> Port och Board från Tools-> Board.
Komplett kod med en demonstrationsvideo ges i slutet av denna handledning. Här förklarar vi en viktig del av koden. Det finns två program i denna handledning, ett för Arduino UNO (Master) och ett annat för Arduino Nano (Slave).
Kodförklaring för Master: Arduino UNO
På huvudsidan är det bara att ta analog ingång vid stift A0 genom att variera potentiometern och sedan SerialWrite dessa värden till RS-485-bussen genom hårdvaruserieportarna (0,1) i Arduino UNO.
För att påbörja seriekommunikation vid seriell stift (0,1) för hårdvara:
Serial.begin (9600);
Så här läser du Analogt värde vid stift A0 i Arduino UNO och lagrar dem i en variabel potval :
int potval = analogRead (pushval);
Innan potvalvärdet skrivs till serieporten, ska stift DE & RE på RS-485 vara HÖG som är ansluten till stift 8 i Arduino UNO så att stift 8 HÖG:
digitalWrite (enablePin, HIGH);
Använd följande påstående för att placera dessa värden i den seriella porten som är ansluten till RS-485-modulen
Serial.println (potval);
Kodförklaring för slav: Arduino NANO
På slavsidan mottas ett heltal från Master RS-485 som finns på maskinvaruporten i Arduino Nano (Pins -0,1). Läs bara dessa värden och spara i en variabel. Värdena är i form av (0 -1023). Så det omvandlas till (0-255) eftersom PWM-teknik används för att kontrollera LED-ljusstyrka.
Sedan AnalogWrite de konverterade värdet till LED stiftet D10 (det är en PWM-stift). Så beroende på PWM-värdet ändras ljusstyrkan på lysdioden och visar även dessa värden i 16x2 LCD-skärm.
För att Slave Arduinos RS-485 ska få värdena från mästaren, gör bara stiften DE & RE till RS-485 LÅG. Så stift D8 (enablePin) i Arduino NANO görs LÅG.
digitalWrite (enablePin, LOW);
Och att läsa de heltalsdata som finns tillgängliga i Serial Port och lagra dem i varierande användning
int pwmval = Serial.parseInt ();
Nästa konvertera värde från (0-1023 till 0-255) och lagra dem i en variabel:
int konvertera = karta (pwmval, 0,1023,0,255);
Skriv sedan det analoga värdet (PWM) till stift D10 där LED-anoden är ansluten:
analogWrite (ledpin, konvertera);
För att skriva ut PWM-värdet i 16x2 LCD-skärm
lcd.setCursor (0,0); lcd.print ("PWM FRÅN MASTER"); lcd.setCursor (0,1); lcd.print (konvertera);
Kontroll av LED-ljusstyrka med seriekommunikation RS485
När PWM-värdet är inställt på 0 med potentiometer stängs lysdioden av.
Och när PWM-värdet är inställt på 251 med potentiometer: LED-lampan tänds med full ljusstyrka enligt bilden nedan:
Så detta är hur RS485 kan användas för seriekommunikation i Arduino.