- RS-485 Seriell kommunikation
- Komponenter krävs
- Kretsschema
- Programmering STM32F103C8 & Arduino UNO för RS485 seriell kommunikation
- Testar RS485-kommunikationen mellan STM32F103C8 och Arduino UNO:
Kommunikationsprotokollen är den integrerade delen av en digital elektronik och ett inbäddat system. Överallt där det finns gränssnitt mellan flera mikrokontroller och kringutrustning måste kommunikationsprotokollet användas för att utbyta massa data. Det finns många typer av seriell kommunikationsprotokoll tillgängliga. RS485 är ett av seriekommunikationsprotokollet och används i industriprojekt och tunga maskiner.
Vi lärde oss om RS485 seriell kommunikation mellan Arduino Uno och Arduino Nano i föregående handledning . Denna handledning handlar om att använda en RS-485 seriell kommunikation i STM32F103C8 Microcontroller. Om du är ny på STM32 Microcontroller, börja med Komma igång med STM32 med Arduino IDE: Blinkande LED och kontrollera alla STM32-projekt här.
I denna handledning har Master STM32F103C8 tre tryckknappar som används för att styra statusen för tre lysdioder som finns på Slave Arduino Uno med hjälp av RS-485 seriell kommunikation.
Låt oss börja med att förstå hur RS-485 seriell kommunikation fungerar.
RS-485 Seriell kommunikation
RS-485 är ett asynkront seriellt kommunikationsprotokoll som inte kräver klocka. 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-duplexkommunikation när du använder fyra ledningar.
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 maximalt 1200 meter.
- 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.
- Kan ha högst 32 enheter anslutna till RS-485-protokollet.
- En annan fördel med RS-485 är immun mot bruset eftersom de använder differentiell signalmetod för att överföra.
- RS-485 är snabbare jämfört med I2C-protokollet.
RS-485-modulen kan anslutas till vilken mikrokontroller som helst som har seriell port. För användning av RS-485-modul med mikrokontroller behövs en modul som kallas 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 och halv duplex har en dataöverföringshastighet på 2,5 Mbps. Denna modul kräver en spänning på 5V.
RS-485 stiftbeskrivning:
Pin-namn |
Beskrivning |
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) |
RS485-modulen 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
Att använda den här modulen med STM32F103C8 och Arduino UNO är väldigt enkelt. Maskinvarans seriella portar på mikrokontroller används. Hårdvarans seriella stift i STM32 och arduino UNO ges nedan.
- I STM32F103C8: Pins PA9 (TX) & PA10 (RX)
- I Arduino Uno: Pin 0 (RX) & 1 (TX)
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 och stiften DE & RE för RS-485 görs LÅG för att ta emot data och görs HÖG till skriva data till RS-485-bussen.
Komponenter krävs
- STM32F103C8
- Arduino UNO
- MAX485 TTL till RS485 omvandlingsmodul - (2)
- 10K Potentiometer
- Tryckknapp - 3
- LED - 3
- Motstånd
- Bakbord
- Anslutande ledningar
Kretsschema
I denna handledning används STM32F103C8 som Master med en RS-485-modul och Arduino UNO används som Slave med en annan RS-485-modul.
Kretsanslutning mellan RS-485 och STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
A |
Till A av Slave RS-485 |
B |
Till B av Slave RS-485 |
STM32F103C8 med tre tryckknappar:
Tre tryckknappar med tre nedåtriktade motstånd på 10k är anslutna till stiften PA0, PA1, PA2 på STM32F103C8.
Kretsförbindelse mellan RS-485 och Arduino UNO (slav):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Till A av Master RS-485 |
B |
Till B av Master RS-485 |
Tre lysdioder används där anoder på lysdioder med motstånd på 330 ohm är anslutna till stift 4, 7, 8 i Arduino UNO och katod på lysdioderna är anslutna till GND.
Programmering STM32F103C8 & Arduino UNO för RS485 seriell kommunikation
Arduino IDE används för utveckling och programmering av båda korten, dvs. STM32 och Arduino UNO. Men se till att du har valt motsvarande PORT från Tools-> Port och Board från Tools-> Board. Om du hittar några problem eller tvivel, se bara Programmera din STM32 i ARDUINO IDE. Programmeringen för denna handledning består av två avsnitt en för STM32F103C8 (Master) och andra för Arduino UNO (Slave). Båda koderna kommer att förklaras en efter en nedan.
STM32F103C8 som MasterPå mastersidan läses tryckknappens status och skrivs sedan dessa värden i serie till RS-485-bussen genom hårdvaruserieportarna 1 (PA9, PA10) på STM32F103C8. Dessutom behövs inget externt bibliotek för närvarande. Arduino har allt nödvändigt bibliotek för seriekommunikation.
Börja seriekommunikation med hjälp av hårdvaru-seriella stift (PA9, PA10) vid buadrate på 9600.
Serial1.begin (9600);
Läs status för tryckknappen vid stiften PA0, PA1, PA2 på STM32F103C8 och lagra dem i en variabel knapp1val, knapp2val, knapp3val. Värdet är HÖG om knappen trycks ned och LÅG när den inte trycks in.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Innan du skickar knappvärdena till serieporten ska stiften DE & RE på RS-485 vara HÖG som är ansluten till stift PA3 på STM32F103C8 (För att göra stift PA3 HÖG):
digitalWrite (enablePin, HIGH);
Nästa för att placera dessa värden i Serial Port och skicka värden beroende på vilken tryckknapp som trycks in använd om annat uttalande och skicka motsvarande värde när du trycker på knappen.
Om den första knappen trycks in matchar villkoret och värdet '1' skickas till den seriella porten där Arduino UNO är ansluten.
om (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
På liknande sätt, när knapp 2 trycks in, skickas värdet 2 över den seriella porten och när knappen 3 trycks in, skickas värdet 3 över den seriella porten.
annars om (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } annat om (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Och när ingen knapp trycks in skickas värdet 0 till Arduino Uno.
annars { int num = 0; Serial1.println (num); }
Detta avslutar programmeringen för att konfigurera STM32 som Master.
Arduino UNO som slavPå slavsidan får Arduino UNO ett heltal som skickas från Master STM32F103C8 som finns i maskinvaruporten på Arduino UNO (P0, 1) där RS-485-modulen är ansluten.
Läs bara värdet och lagra i en variabel. Beroende på det mottagna värdet tänds eller släcks motsvarande lysdiod till Arduino GPIO.
För att ta emot värdena från Master gör du bara stiften DE & RE i RS-485-modulen LÅG. Så pin-2 (enablePin) av Arduino UNO görs LÅG.
digitalWrite (enablePin, LOW);
Läs nu heltalsdata som finns tillgängliga i Serial Port och lagra dem i en variabel.
int mottag = Serial.parseInt ();
Beroende på det mottagna värdet, dvs. (0, 1, 2, 3), tänds motsvarande en av de tre lysdioderna.
if (mottag == 1) // Beroende på mottaget värde slås motsvarande lysdiod PÅ eller AV { digitalWrite (ledpin1, HIGH); } annat om (mottag == 2) { digitalWrite (ledpin2, HIGH); } annat om (mottag == 3) { digitalWrite (ledpin3, HIGH); } annat { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Detta avslutar programmering och konfigurering av Arduino UNO som slav. Detta avslutar också de fullständiga konfigurationerna för Arduino UNO och STM32. Arbetsvideon och alla koder bifogas i slutet av denna handledning.
Testar RS485-kommunikationen mellan STM32F103C8 och Arduino UNO:
1. När tryckknapp-1, som är ansluten till Master STM32, trycks ned lyser lysdioden 1 ansluten till Slave Arduino.
2. När tryckknapp-2, som är ansluten till Master STM32, trycks in lyser LED 2 PÅ ansluten till Slave Arduino.
3. På samma sätt när tryckknapp-3 trycks in tänds lysdioden 3 ansluten till Slave Arduino.
Detta avslutar RS485 seriell kommunikation mellan STM32F103C8 och Arduino UNO. Arduino UNO- och STM32-kort är allmänt använda kort för snabb prototypning och vi har gjort många användbara projekt på dessa kort. Om du hittar några tvivel eller har några förslag till oss, skriv och kommentera nedan.