- RS-485 seriel kommunikation
- Komponenter, der kræves
- Kredsløbsdiagram
- Programmering STM32F103C8 & Arduino UNO til RS485 seriel kommunikation
- Test af RS485-kommunikationen mellem STM32F103C8 og Arduino UNO:
Kommunikationsprotokollerne er den integrerede del af et digitalt elektronik- og integreret system. Uanset hvor der er grænseflade mellem flere mikrocontroller og perifere enheder, skal kommunikationsprotokollen bruges til at udveksle flok data. Der findes mange typer seriel kommunikationsprotokol. RS485 er en af de serielle kommunikationsprotokoller og bruges i industrielle projekter og tunge maskiner.
Vi lærte om RS485 seriel kommunikation mellem Arduino Uno og Arduino Nano i den foregående vejledning . Denne tutorial handler om at bruge en RS-485 seriel kommunikation i STM32F103C8 Microcontroller. Hvis du er ny hos STM32 Microcontroller, skal du starte med Kom godt i gang med STM32 ved hjælp af Arduino IDE: Blinkende LED og kontrollere alle STM32-projekterne her.
I denne vejledning har Master STM32F103C8 tre trykknapper, der bruges til at kontrollere status for tre lysdioder, der er til stede ved Slave Arduino Uno ved hjælp af RS-485 seriel kommunikation.
Lad os begynde med at forstå, hvordan RS-485 seriel kommunikation fungerer.
RS-485 seriel kommunikation
RS-485 er en asynkron seriel kommunikationsprotokol, som ikke kræver ur. Det bruger en teknik kaldet differentielt signal til at overføre binære data fra en enhed til en anden.
Så hvad er denne differentielle signaloverførselsmetode ??
Differentialsignalmetoden fungerer ved at skabe en differentieret spænding ved hjælp af en positiv og negativ 5V. Det giver en halv-dupleks kommunikation, når du bruger to ledninger, og fuld-dupleks kommunikation, når du bruger fire 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.
- Kan maksimalt have 32 enheder tilsluttet til RS-485-protokollen.
- En anden fordel ved RS-485 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-modulet kan tilsluttes enhver mikrocontroller, der har seriel port. Til brug af RS-485-modul med mikrocontrollere er der behov 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 og halv duplex har en dataoverførselshastighed på 2,5 Mbps. Dette modul kræver en spænding på 5V.
RS-485 Pin Beskrivelse:
Pin-navn |
Beskrivelse |
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) |
RS485-modulet 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
Brug af dette modul med STM32F103C8 og Arduino UNO er meget let. Hardwarens serielle porte på mikrokontrollere bruges. Hardware-serielle ben i STM32 og arduino UNO er angivet nedenfor.
- I STM32F103C8: Pins PA9 (TX) & PA10 (RX)
- I Arduino Uno: Pin 0 (RX) & 1 (TX)
Programmering er også enkel, brug bare Serial.print () til at skrive til RS-485 og Serial.Læs () for at læse fra RS-485, og stifterne DE & RE på RS-485 er lavet LAVT for at modtage data og gøres HØJ skriv data til RS-485 bus.
Komponenter, der kræves
- STM32F103C8
- Arduino UNO
- MAX485 TTL til RS485 konverteringsmodul - (2)
- 10K Potentiometer
- Trykknap - 3
- LED - 3
- Modstande
- Brødbræt
- Tilslutning af ledninger
Kredsløbsdiagram
I denne vejledning bruges STM32F103C8 som Master med et RS-485-modul, og Arduino UNO bruges som Slave med et andet RS-485-modul.
Kredsforbindelse mellem RS-485 og STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
EN |
Til A af Slave RS-485 |
B |
Til B af Slave RS-485 |
STM32F103C8 med tre trykknapper:
Tre trykknapper med tre Pull Down-modstand på 10k er forbundet til benene PA0, PA1, PA2 på STM32F103C8.
Kredsforbindelse mellem 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 fra Master RS-485 |
B |
Til B af Master RS-485 |
Tre lysdioder bruges, hvor anoder til lysdioder med modstand på 330 ohm er forbundet til ben 4, 7, 8 i Arduino UNO og katode på lysdioder er forbundet til GND.
Programmering STM32F103C8 & Arduino UNO til RS485 seriel kommunikation
Arduino IDE bruges til udvikling og programmering af begge kort, dvs. STM32 og Arduino UNO. Men sørg for at du har valgt den tilsvarende PORT fra Tools-> Port og Board fra Tools-> Board. Hvis du finder vanskeligheder eller tvivl, skal du blot henvise til Programmering af din STM32 i ARDUINO IDE. Programmeringen til denne vejledning består af to sektioner en til STM32F103C8 (Master) og anden til Arduino UNO (Slave). Begge koder vil blive forklaret en efter en nedenfor.
STM32F103C8 som MasterPå mastersiden læses trykknappenes status og derefter disse værdier serielt til RS-485-bussen gennem hardware-serielle porte 1 (PA9, PA10) på STM32F103C8. Der er heller ikke noget eksternt bibliotek nødvendigt lige nu. Arduino har alt det nødvendige bibliotek til seriel kommunikation.
Begynd seriel kommunikation ved hjælp af serielle pins til hardware (PA9, PA10) ved buadrate på 9600.
Serial1.begin (9600);
Læs status på trykknappen ved benene PA0, PA1, PA2 på STM32F103C8, og gem dem i en variabel knap1val, knap2val, knap3val. Værdien er HØJ, hvis der trykkes på knappen og LAV, når den ikke trykkes.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Inden du sender knapværdierne til den serielle port, skal stifterne DE & RE på RS-485 være HØJ, der er forbundet til stiften PA3 på STM32F103C8 (For at gøre stiften PA3 HØJ):
digitalWrite (enablePin, HIGH);
Næste for at placere disse værdier i den serielle port og sende værdier afhængigt af hvilken trykknap der trykkes på, brug ellers udsagn og send den tilsvarende værdi, når der trykkes på knappen.
Hvis der trykkes på den første knap, matcher betingelsen, og værdien '1' sendes til den serielle port, hvor Arduino UNO er tilsluttet.
hvis (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Tilsvarende sendes værdien 2, når der trykkes på knap 2, over den serielle port, og når der trykkes på knap 3, sendes værdien 3 over den serielle port.
ellers hvis (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } ellers hvis (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Og når der ikke trykkes på nogen knap, sendes værdien 0 til Arduino Uno.
ellers { int num = 0; Serial1.println (num); }
Dette afslutter programmeringen for at konfigurere STM32 som Master.
Arduino UNO som slavePå slave-siden modtager Arduino UNO et heltal, der sendes fra Master STM32F103C8, som er tilgængelig i hardwareserieporten på Arduino UNO (P0, 1), hvor RS-485-modulet er tilsluttet.
Du skal blot læse værdi og gemme i en variabel. Afhængig af den modtagne værdi tændes eller slukkes den tilsvarende LED til Arduino GPIO.
For at modtage værdierne fra masteren skal du bare gøre stifterne DE & RE i RS-485-modulet LAV. Så pin-2 (enablePin) af Arduino UNO er lav.
digitalWrite (enablePin, LOW);
Læs nu bare de tilgængelige heltalsdata i Serial Port, og gem dem i en variabel.
int modtage = Serial.parseInt ();
Afhængigt af den modtagne værdi, dvs. (0, 1, 2, 3), tændes den tilsvarende en af de tre lysdioder.
hvis (modtag == 1) // Afhængig af modtaget værdi tændes eller slukkes den tilsvarende LED { digitalWrite (ledpin1, HIGH); } ellers hvis (modtag == 2) { digitalWrite (ledpin2, HIGH); } ellers hvis (modtag == 3) { digitalWrite (ledpin3, HIGH); } andet { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Dette afslutter programmering og konfiguration af Arduino UNO som slave. Dette afslutter også de komplette konfigurationer til Arduino UNO og STM32. Arbejdsvideoen og alle koder er vedhæftet i slutningen af denne vejledning.
Test af RS485-kommunikationen mellem STM32F103C8 og Arduino UNO:
1. Når der trykkes på trykknap-1, som er tilsluttet til Master STM32, tændes LED 1 TIL tilsluttet til Slave Arduino.
2. Når der trykkes på trykknap-2, der er tilsluttet til Master STM32, tændes LED 2 TIL tilsluttet til Slave Arduino.
3. På samme måde, når der trykkes på trykknap-3, tændes LED 3 tilsluttet til Slave Arduino.
Dette afslutter RS485 seriel kommunikation mellem STM32F103C8 og Arduino UNO. Arduino UNO- og STM32-tavlerne er meget anvendte tavler til hurtig prototyping, og vi har udført mange nyttige projekter på disse tavler. Hvis du finder nogen tvivl eller har forslag til os, så skriv og kommenter nedenfor.