- RS-485 Seriell kommunikasjon
- Komponenter kreves
- Kretsdiagram
- Programmering STM32F103C8 og Arduino UNO for RS485 seriell kommunikasjon
- Testing av RS485-kommunikasjonen mellom STM32F103C8 og Arduino UNO:
Kommunikasjonsprotokollene er den integrerte delen av et digitalt elektronikk- og innebygd system. Uansett hvor det er grensesnitt mellom flere mikrokontroller og eksterne enheter, må kommunikasjonsprotokollen brukes for å utveksle haug med data. Det er mange typer seriell kommunikasjonsprotokoll tilgjengelig. RS485 er en av seriell kommunikasjonsprotokoller og brukes i industriprosjekter og tunge maskiner.
Vi lærte om RS485 seriell kommunikasjon mellom Arduino Uno og Arduino Nano i forrige opplæring . Denne opplæringen handler om å bruke en RS-485 seriell kommunikasjon i STM32F103C8 mikrokontroller. Hvis du er ny på STM32 Microcontroller, så start med Komme i gang med STM32 ved hjelp av Arduino IDE: Blinkende LED og sjekk alle STM32-prosjektene her.
I denne opplæringen har Master STM32F103C8 tre trykknapper som brukes til å kontrollere statusen til tre lysdioder som er tilstede på Slave Arduino Uno ved hjelp av RS-485 seriell kommunikasjon.
La oss begynne med å forstå hvordan RS-485 seriell kommunikasjon fungerer.
RS-485 Seriell kommunikasjon
RS-485 er en asynkron seriell kommunikasjonsprotokoll som ikke krever klokke. 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. Det gir en halv-dupleks kommunikasjon når du bruker to ledninger og full-dupleks kommunikasjon når du bruker fire 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.
- Kan ha maksimalt 32 enheter koblet til RS-485-protokollen.
- En annen fordel med RS-485 er immun mot støyen når de bruker differensial signalmetode for å overføre.
- RS-485 er raskere sammenlignet med I2C-protokollen.
RS-485-modulen kan kobles til hvilken som helst mikrokontroller som har seriell port. For bruk av RS-485-modul med mikrokontroller 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 og halv dupleks har en dataoverføringshastighet på 2,5 Mbps. Denne modulen krever en spenning på 5V.
RS-485 Pin Beskrivelse:
Pin-navn |
Beskrivelse |
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) |
RS485-modulen 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
Å bruke denne modulen med STM32F103C8 og Arduino UNO er veldig enkelt. Maskinvarens serielle porter til mikrokontrollere brukes. Maskinvarens serielle pinner i STM32 og arduino UNO er gitt nedenfor.
- I STM32F103C8: Pins PA9 (TX) & PA10 (RX)
- I Arduino Uno: Pin 0 (RX) & 1 (TX)
Programmering er også enkelt, bruk bare Serial.print () for å skrive til RS-485 og Serial.Read () for å lese fra RS-485 og pinnene DE & RE til RS-485 er laget LAV for å motta data og gjøres HØY til skriv data til RS-485 buss.
Komponenter kreves
- STM32F103C8
- Arduino UNO
- MAX485 TTL til RS485 omformermodul - (2)
- 10K potensiometer
- Trykknapp - 3
- LED - 3
- Motstander
- Brettbrett
- Koble ledninger
Kretsdiagram
I denne opplæringen brukes STM32F103C8 som Master med en RS-485-modul og Arduino UNO brukes som Slave med en annen RS-485-modul.
Kretsforbindelse mellom RS-485 og STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
EN |
Til A av Slave RS-485 |
B |
Til B av Slave RS-485 |
STM32F103C8 med tre trykknapper:
Tre trykknapper med tre nedtrekksmotstander på 10k er koblet til pinnene PA0, PA1, PA2 på STM32F103C8.
Kretsforbindelse mellom RS-485 og Arduino UNO (Slave):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
EN |
Til A av Master RS-485 |
B |
Til B av Master RS-485 |
Tre lysdioder brukes der anoder av lysdioder med motstand på 330 ohm er koblet til pinnene 4, 7, 8 av Arduino UNO og katoden til lysdiodene er koblet til GND.
Programmering STM32F103C8 og Arduino UNO for RS485 seriell kommunikasjon
Arduino IDE brukes til utvikling og programmering av begge kort, dvs. STM32 og Arduino UNO. Men sørg for at du har valgt tilsvarende PORT fra Verktøy-> Port og brett fra Verktøy-> Brett. Hvis du finner vanskeligheter eller tvil, er det bare å se Programmering av STM32 i ARDUINO IDE. Programmeringen for denne opplæringen består av to seksjoner en for STM32F103C8 (Master) og annen for Arduino UNO (Slave). Begge kodene vil bli forklart en etter en nedenfor.
STM32F103C8 som MasterPå mastersiden blir statusen til trykknappen lest og deretter seriøst skrevet disse verdiene til RS-485-bussen gjennom maskinvareserieportene 1 (PA9, PA10) på STM32F103C8. Det er heller ikke behov for noe eksternt bibliotek per nå. Arduino har alt det nødvendige biblioteket for seriell kommunikasjon.
Begynn seriekommunikasjon ved hjelp av maskinvareseriepinner (PA9, PA10) med en buadrate på 9600.
Serial1.begin (9600);
Les status for trykknappen ved pinnene PA0, PA1, PA2 på STM32F103C8 og lagre dem i en variabel knapp1val, knapp2val, knapp3val. Verdien er HØY hvis knappen trykkes og LAV når den ikke trykkes.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Før du sender knappverdiene til serieporten, bør pinnene DE & RE på RS-485 være HØY som er koblet til pinnen PA3 på STM32F103C8 (For å lage pinne PA3 HØY):
digitalWrite (enablePin, HIGH);
Neste for å plassere disse verdiene i serieporten og sende verdiene, avhengig av hvilken trykknapp som trykkes, bruk hvis annet uttalelse og send den tilsvarende verdien når knappen trykkes.
Hvis du trykker på den første knappen, samsvarer tilstanden og verdien '1' sendes til den serielle porten der Arduino UNO er koblet til.
hvis (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Tilsvarende, når knapp 2 trykkes, sendes verdien 2 over seriell port, og når knapp 3 trykkes, sendes verdien 3 over den serielle porten.
annet hvis (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } ellers hvis (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Og når ingen knapper trykkes, blir verdien 0 sendt til Arduino Uno.
annet { int num = 0; Serial1.println (num); }
Dette avslutter programmeringen for å konfigurere STM32 som Master.
Arduino UNO som slavePå Slave-siden mottar Arduino UNO et heltall som sendes fra Master STM32F103C8 som er tilgjengelig på maskinvareserieporten til Arduino UNO (P0, 1) der RS-485-modulen er koblet til.
Bare les verdien og lagre i en variabel. Avhengig av mottatt verdi blir den tilhørende LED slått PÅ eller AV koblet til Arduino GPIO.
For å motta verdiene fra mesteren, gjør du bare pinnene DE & RE til RS-485-modulen LAV. Så pin-2 (enablePin) av Arduino UNO er laget LAV.
digitalWrite (enablePin, LOW);
Nå er det bare å lese heltalsdataene som er tilgjengelige i Serial Port og lagre dem i en variabel.
int motta = Serial.parseInt ();
Avhengig av verdien som mottas (0, 1, 2, 3), blir den tilsvarende av de tre lysdiodene slått PÅ.
hvis (motta == 1) // Avhengig av mottatt verdi blir den tilsvarende lysdioden slått PÅ eller AV { digitalWrite (ledpin1, HIGH); } annet hvis (motta == 2) { digitalWrite (ledpin2, HIGH); } annet hvis (motta == 3) { digitalWrite (ledpin3, HIGH); } annet { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Dette avslutter programmering og konfigurering av Arduino UNO som slave. Dette fullfører også de komplette konfigurasjonene for Arduino UNO og STM32. Arbeidsvideoen og alle kodene er vedlagt på slutten av denne opplæringen.
Testing av RS485-kommunikasjonen mellom STM32F103C8 og Arduino UNO:
1. Når trykknapp-1, som er koblet til Master STM32, trykkes, slås LED 1 PÅ koblet til Slave Arduino.
2. Når trykknapp-2, som er koblet til Master STM32, trykkes, slås LED 2 på koblet til Slave Arduino.
3. På samme måte når trykknapp-3 trykkes inn, slås LED 3 på PÅ koblet til Slave Arduino.
Dette avslutter RS485 seriell kommunikasjon mellom STM32F103C8 og Arduino UNO. Arduino UNO- og STM32-brett er mye brukt brett for rask prototyping, og vi har gjort mange nyttige prosjekter på disse brettene. Hvis du finner noen tvil eller har noen forslag til oss, så skriv og kommenter nedenfor.