- Zaporedna komunikacija RS-485
- Potrebne komponente
- Shema vezja
- Programiranje STM32F103C8 in Arduino UNO za serijsko komunikacijo RS485
- Testiranje komunikacije RS485 med STM32F103C8 in Arduino UNO:
Komunikacijski protokoli so sestavni del digitalne elektronike in vgrajenega sistema. Kjerkoli obstaja povezava več mikrokrmilnikov in zunanjih naprav, je treba za izmenjavo kopice podatkov uporabiti komunikacijski protokol. Na voljo je veliko vrst serijskih komunikacijskih protokolov. RS485 je eden od serijskih komunikacijskih protokolov in se uporablja v industrijskih projektih in težkih strojih.
O serijski komunikaciji RS485 med Arduino Uno in Arduino Nano smo izvedeli v prejšnji vadnici . Ta vadnica govori o uporabi serijske komunikacije RS-485 v mikrokrmilniku STM32F103C8. Če ste nov v mikrokrmilniku STM32, začnite z Začetek uporabe STM32 z uporabo Arduino IDE: utripajoča LED in tukaj preverite vse projekte STM32.
V tej vadnici ima Master STM32F103C8 tri tipke, ki se uporabljajo za nadzor stanja treh LED, ki so prisotne na Slave Arduino Uno, s pomočjo serijske komunikacije RS-485.
Začnimo z razumevanjem delovanja serijske komunikacije RS-485.
Zaporedna komunikacija RS-485
RS-485 je asinhroni serijski komunikacijski protokol, ki ne zahteva ure. Uporablja tehniko, imenovano diferencialni signal, za prenos binarnih podatkov iz ene naprave v drugo.
Kaj je torej ta metoda diferencialnega prenosa signala ??
Metoda diferencialnega signala deluje tako, da ustvari diferenčno napetost z uporabo pozitivnih in negativnih 5V. Omogoča Half-Duplex komunikacijo pri uporabi dveh žic in Full-Duplex komunikacijo pri uporabi štirih žic.
S to metodo:
- RS-485 podpira višjo hitrost prenosa podatkov do največ 30 Mb / s.
- Zagotavlja tudi največjo razdaljo prenosa podatkov v primerjavi s protokolom RS-232. Prenaša podatke do največ 1200 metrov.
- Glavna prednost RS-485 pred RS-232 je več pomožnih enot z enim samim glavnim, medtem ko RS-232 podpira samo enega pomožnika.
- Lahko ima največ 32 naprav, povezanih s protokolom RS-485.
- Druga prednost RS-485 je odpornost na hrup, saj za prenos uporabljajo metodo diferencialnega signala.
- RS-485 je hitrejši od protokola I2C.
Modul RS-485 je mogoče priključiti na kateri koli mikrokrmilnik, ki ima serijska vrata. Za uporabo modula RS-485 z mikrokrmilniki je potreben modul, imenovan 5V MAX485 TTL do RS485, ki temelji na Maxim MAX485 IC, saj omogoča serijsko komunikacijo na dolgi razdalji 1200 metrov in je dvosmeren in pol dupleks ima hitrost prenosa podatkov 2,5 Mb / s. Ta modul zahteva napetost 5V.
Opis RS-485 Pin:
Pripnite ime |
Opis |
VCC |
5V |
A |
Neinvertirajoči vhod sprejemnika Izhod gonilnika, ki se ne spreminja |
B |
Spreminjanje vhoda sprejemnika Pretvarjanje izhodnih podatkov gonilnika |
GND |
GND (0 V) |
R0 |
Izhod sprejemnika (RX pin) |
RE |
Izhod sprejemnika (LOW-Enable) |
DE |
Izhod gonilnika (HIGH-Enable) |
DI |
Vhod za gonilnik (TX pin) |
Modul RS485 ima naslednje lastnosti:
- Delovna napetost: 5V
- Vgrajeni čip MAX485
- Nizka poraba energije za komunikacijo RS485
- Oddajnik z omejeno hitrostjo
- Terminal 2P z naklonom 5,08 mm
- Priročno komunikacijsko ožičenje RS-485
- Vse zatiče čipa, do katerih je bil pripeljan, je mogoče krmiliti prek mikrokrmilnika
- Velikost plošče: 44 x 14 mm
Uporaba tega modula s STM32F103C8 in Arduino UNO je zelo enostavna. Uporabljajo se serijska vrata strojne opreme mikrokrmilnikov. Serijski zatiči strojne opreme v STM32 in arduino UNO so navedeni spodaj.
- V STM32F103C8: nožice PA9 (TX) in PA10 (RX)
- V Arduino Uno: Pin 0 (RX) in 1 (TX)
Programiranje je tudi preprosto, samo uporabite Serial.print () za pisanje v RS-485 in Serial.Read () za branje iz RS-485, zatiči DE & RE RS-485 pa so NIZKI za sprejemanje podatkov in HIGH za zapisovanje podatkov na vodilo RS-485.
Potrebne komponente
- STM32F103C8
- Arduino UNO
- Pretvorniški modul MAX485 TTL v RS485 - (2)
- 10K potenciometer
- Potisni gumb - 3
- LED - 3
- Upori
- Breadboard
- Povezovanje žic
Shema vezja
V tej vadnici se STM32F103C8 uporablja kot glavni z enim modulom RS-485, Arduino UNO pa kot podrejeni z drugim modulom RS-485.
Povezava vezja med RS-485 in STM32F103C8 (glavni):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
A |
Do A podrejenega RS-485 |
B |
Na B Slave RS-485 |
STM32F103C8 s tremi gumbi:
Trije potisni gumbi s tremi vlečnimi upori 10k so povezani na zatiče PA0, PA1, PA2 STM32F103C8.
Krožna povezava med RS-485 in Arduino UNO (podrejeni):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2. |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Na A mojstra RS-485 |
B |
Na B mojstra RS-485 |
Uporabljajo se tri LED, kjer so anode LED z uporom 330 ohmov priključene na nožice 4, 7, 8 Arduino UNO, katoda LED pa na GND.
Programiranje STM32F103C8 in Arduino UNO za serijsko komunikacijo RS485
Arduino IDE se uporablja za razvoj in programiranje obeh plošč, tj. STM32 in Arduino UNO. Prepričajte se, da ste izbrali ustrezen PORT med Orodja-> Vrata in plošča iz Orodja-> Plošča. Če najdete kakršne koli težave ali dvome, si oglejte Programiranje vašega STM32 v ARDUINO IDE. Programiranje te vadnice je sestavljeno iz dveh odsekov za STM32F103C8 (Master) in drugega za Arduino UNO (Slave). Obe kodi bosta razloženi spodaj.
STM32F103C8 kot mojsterNa strani Master se prebere stanje gumba in nato serijsko zapiše te vrednosti na vodilo RS-485 prek serijskih vrat strojne opreme 1 (PA9, PA10) STM32F103C8. Prav tako od zdaj ni potrebna nobena zunanja knjižnica. Arduino ima vso potrebno knjižnico za serijsko komunikacijo.
Začnite serijsko komunikacijo z uporabo strojnih serijskih zatičev (PA9, PA10) s hitrostjo 9600.
Serial1.begin (9600);
Preberite stanje potisnega gumba na nožicah PA0, PA1, PA2 na STM32F103C8 in jih shranite v spremenljivko button1val, button2val, button3val. Vrednost je HIGH, če pritisnete gumb, in LOW, če ga ne pritisnete.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Pred pošiljanjem vrednosti gumbov na serijska vrata morajo biti zatiči DE & RE RS-485 VISOKI, ki je povezan z zatičem PA3 STM32F103C8 (Če želite pin PA3 VISOKO):
digitalWrite (enablePin, HIGH);
Nato vstavite te vrednosti v serijska vrata in pošljite vrednosti, odvisno od tega, kateri gumb je pritisnjen, uporabite stavek if else in ob pritisku gumba pošljite ustrezno vrednost.
Če pritisnete prvi gumb, se stanje ujema in vrednost '1' se pošlje v serijska vrata, kjer je povezan Arduino UNO.
if (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Podobno se ob pritisku gumba 2 vrednost 2 pošlje čez serijska vrata, ob pritisku gumba 3 pa se vrednost 3 pošlje čez serijska vrata.
sicer če (button2val == VISOKO) { int num2 = 2; Serial1.println (num2); } sicer če (button3val == VISOKO) { int num3 = 3; Serial1.println (num3); }
In ko ni pritisnjen noben gumb, se vrednost 0 pošlje v Arduino Uno.
sicer { int num = 0; Serial1.println (num); }
S tem se konča programiranje za konfiguriranje STM32 kot glavnega.
Arduino UNO kot suženjNa podrejeni strani Arduino UNO prejme celoštevilčno vrednost, ki je poslana iz glavne enote STM32F103C8, ki je na voljo v serijskih vratih strojne opreme Arduino UNO (P0, 1), kjer je priključen modul RS-485.
Preprosto preberite vrednost in shranite v spremenljivko. Odvisno od prejete vrednosti se ustrezna LED vklopi ali izklopi, ko je priključena na Arduino GPIO.
Če želite prejeti vrednosti od glavne enote, samo pripnite DE & RE modula RS-485 LOW. Torej je pin-2 (enablePin) Arduina UNO NIZK.
digitalWrite (enablePin, LOW);
Zdaj samo preberite celoštevilčne podatke, ki so na voljo na serijskih vratih, in jih shranite v spremenljivko.
int prejem = Serial.parseInt ();
Glede na prejeto vrednost, tj. (0, 1, 2, 3), se vklopi ustrezna ena od treh LED.
if (receive == 1) // Odvisno od prejete vrednosti se ustrezna LED vklopi ali izklopi { digitalWrite (ledpin1, HIGH); } sicer če (prejmi == 2) { digitalWrite (ledpin2, HIGH); } sicer če (prejmi == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
S tem se konča programiranje in konfiguriranje Arduino UNO kot podrejenega. S tem so zaključene tudi celotne konfiguracije za Arduino UNO in STM32. Delovni video in vse kode so priloženi na koncu te vadnice.
Testiranje komunikacije RS485 med STM32F103C8 in Arduino UNO:
1. Ko pritisnete gumb 1, ki je povezan z glavnim STM32, se LED 1 VKLOPI povezan s podrejenim Arduinom.
2. Ko pritisnete gumb 2, ki je povezan z glavnim STM32, se LED 2 VKLOPI povezan s podrejenim Arduinom.
3. Podobno, ko pritisnete gumb 3, se LED 3 vklopi, povezan s podrejenim Arduinom.
S tem je zaključena serijska komunikacija RS485 med STM32F103C8 in Arduino UNO. Plošči Arduino UNO in STM32 se pogosto uporabljajo za hitro prototipiranje in na teh ploščah smo izvedli že veliko uporabnih projektov. Če najdete kakršne koli dvome ali imate kakšen predlog za nas, pišite in komentirajte spodaj.