- RS-485 nuoseklioji komunikacija
- Būtini komponentai
- Grandinės schema
- STM32F103C8 ir „Arduino UNO“ programavimas RS485 nuosekliam ryšiui
- RS485 ryšio testavimas tarp STM32F103C8 ir „Arduino UNO“:
Ryšio protokolai yra neatsiejama skaitmeninės elektronikos ir įterptosios sistemos dalis. Kur yra daugelio mikrovaldiklių ir išorinių įrenginių sąsajos, norint pasikeisti krūva duomenų, reikia naudoti ryšio protokolą. Yra daugybė serijinio ryšio protokolo tipų. RS485 yra vienas iš nuoseklaus ryšio protokolo ir naudojamas pramoniniuose projektuose ir sunkiose mašinose.
Mes sužinojome apie RS485 nuoseklųjį ryšį tarp „Arduino Uno“ ir „Arduino Nano“ ankstesnėje pamokoje . Ši pamoka skirta RS-485 nuoseklaus ryšio naudojimui STM32F103C8 mikrovaldiklyje. Jei dar nesinaudojote „STM32“ mikrovaldikliu, pradėkite nuo „Pradėti naudoti„ STM32 “naudojant„ Arduino IDE “: mirksi šviesos diodas ir patikrinkite visus STM32 projektus čia.
Šioje pamokoje „Master STM32F103C8“ turi tris mygtukus, kurie naudojami valdant trijų „Slave Arduino Uno“ esančių šviesos diodų būseną naudojant RS-485 nuoseklųjį ryšį.
Pradėkime nuo supratimo apie RS-485 nuosekliojo ryšio veikimą.
RS-485 nuoseklioji komunikacija
RS-485 yra asinchroninis nuoseklaus ryšio protokolas, kuriam nereikia laikrodžio. Dvejetainiams duomenims iš vieno įrenginio į kitą perduoti naudojama diferencinio signalo technika.
Taigi, koks yra diferencinio signalo perdavimo metodas?
Diferencinio signalo metodas veikia kuriant diferencinę įtampą naudojant teigiamą ir neigiamą 5 V. Jis teikia „ Half-Duplex“ ryšį, kai naudojami du laidai, ir „ Full-Duplex“ ryšį, kai naudojami keturi laidai.
Naudodami šį metodą:
- RS-485 palaiko didesnį duomenų perdavimo greitį, maksimalų 30Mbps.
- Tai taip pat užtikrina didžiausią duomenų perdavimo atstumą, palyginti su RS-232 protokolu. Jis perduoda duomenis iki 1200 metrų.
- Pagrindinis RS-485 privalumas, palyginti su RS-232, yra daugybė vergų su vienu pagrindiniu, o RS-232 palaiko tik vieną vergą.
- Prie RS-485 protokolo gali būti prijungti daugiausia 32 įrenginiai.
- Kitas RS-485 privalumas yra apsaugotas nuo triukšmo, nes jie perduoda diferencinio signalo metodą.
- RS-485 yra greitesnis, palyginti su I2C protokolu.
RS-485 modulį galima prijungti prie bet kurio mikrovaldiklio, turinčio nuoseklųjį prievadą. Norint naudoti RS-485 modulį su mikrovaldikliais, reikalingas modulis, vadinamas „ 5V MAX485 TTL - RS485“, pagrįstas „Maxim MAX485 IC “, nes jis leidžia nuoseklųjį ryšį per ilgą 1200 metrų atstumą, jis yra dvikryptis, o pusės dvipusio duomenų perdavimo greitis yra 2,5 Mbps. Šiam moduliui reikalinga 5 V įtampa.
RS-485 kaiščių aprašymas:
PIN vardas |
apibūdinimas |
VCC |
5V |
A |
Neinvertuojantis imtuvo įėjimas Neišverčianti vairuotojo išvestis |
B |
Keisti imtuvo įvestį Keičiant tvarkyklės išvestį |
BND |
BND (0 V) |
R0 |
Imtuvo išėjimas (RX kaištis) |
RE |
Imtuvo išvestis (įjungta LOW) |
DE |
Tvarkyklės išvestis (įgalinta HIGH) |
DI |
Tvarkyklės įvestis (TX kaištis) |
RS485 modulis turi šias funkcijas:
- Darbinė įtampa: 5V
- Borto MAX485 lustas
- Mažai suvartojama RS485 ryšio energija
- Riboto greičio imtuvas
- 5,08 mm žingsnio 2P terminalas
- Patogus RS-485 ryšio laidas
- Visus lusto kaiščius galima valdyti per mikrovaldiklį
- Lentos dydis: 44 x 14 mm
Labai lengva naudoti šį modulį su STM32F103C8 ir „Arduino UNO“. Naudojami mikrovaldiklių nuoseklūs aparatinės įrangos prievadai. STM32 ir „arduino UNO“ aparatinės įrangos serijos kaiščiai pateikti žemiau.
- STM32F103C8: kaiščiai PA9 (TX) ir PA10 (RX)
- „Arduino Uno“: 0 kaiščių (RX) ir 1 (TX)
Programavimas taip pat paprastas, tiesiog naudokite „ Serial.print“ (), norėdami rašyti į RS-485 ir „ Serial“. Skaitykite (), norėdami skaityti iš RS-485, o RS-485 kaiščiai DE ir RE yra padaryti LOW, kad gautų duomenis, ir padaryta HIGH rašyti duomenis į RS-485 magistralę.
Būtini komponentai
- STM32F103C8
- „Arduino UNO“
- MAX485 TTL į RS485 keitiklio modulis - (2)
- 10K potenciometras
- Mygtukas - 3
- LED - 3
- Rezistoriai
- Bandomoji Lenta
- Laidų sujungimas
Grandinės schema
Šioje pamokoje STM32F103C8 naudojamas kaip pagrindinis su vienu RS-485 moduliu, o „Arduino UNO“ - kaip „Slave“ su kitu RS-485 moduliu.
Grandinės jungtis tarp RS-485 ir STM32F103C8 (pagrindinio):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
BND |
BND |
A |
Vergo RS-485 A |
B |
Į vergo RS-485 B vietą |
STM32F103C8 su trimis mygtukais:
Prie STM32F103C8 kaiščių PA0, PA1, PA2 yra prijungti trys mygtukai su trimis 10k varžais.
Grandinės jungtis tarp RS-485 ir „Arduino UNO“ („Slave“):
RS-485 |
„Arduino UNO“ |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5V |
BND |
BND |
A |
RS-485 magistro A |
B |
RS-485 magistro B daliai |
Trys šviesos diodai naudojami, kai šviesos diodų anodai su 330 omų rezistoriumi yra prijungti prie „Arduino UNO“ 4, 7, 8 kaiščių, o LED katodas - prie GND.
STM32F103C8 ir „Arduino UNO“ programavimas RS485 nuosekliam ryšiui
„Arduino IDE“ naudojamas kuriant ir programuojant abi plokštes, ty STM32 ir „Arduino UNO“. Bet įsitikinkite, kad pasirinkote atitinkamą Uostą iš Įrankiai-> Prievadas ir lenta iš Įrankiai-> Lenta. Jei pastebite sunkumų ar abejonių, tiesiog skaitykite STM32 programavimą ARDUINO IDE. Šios pamokos programavimą sudaro du skirsniai, skirti STM32F103C8 („Master“) ir kiti „Arduino UNO“ („Slave“). Abu kodai bus paaiškinti po vieną toliau.
STM32F103C8 kaip meistrasPagrindinėje pusėje nuspaudžiamas mygtuko būsena ir nuosekliai įrašomos šios vertės į RS-485 magistralę per STM32F103C8 aparatinės įrangos nuoseklius prievadus 1 (PA9, PA10). Taip pat dabar nėra reikalingos išorinės bibliotekos. „Arduino“ turi visą reikalingą biblioteką nuosekliam ryšiui palaikyti.
Pradėkite nuoseklųjį ryšį naudodami aparatinės įrangos nuosekliuosius kaiščius (PA9, PA10) esant 9600 buadratui.
Serial1.begin (9600);
Perskaitykite mygtuko „STM32F103C8“ kaiščių PA0, PA1, PA2 būseną ir išsaugokite juos kintamuose mygtukuose1val, button2val, button3val. Vertė yra HIGH, jei paspaudžiamas mygtukas, ir LOW, kai nespausite.
int mygtukas1val = digitalRead (mygtukas1); int mygtukas2val = digitalRead (mygtukas2); int mygtukas3val = digitalRead (mygtukas3);
Prieš siunčiant mygtuko reikšmes į nuoseklųjį prievadą, RS-485 kaiščiai DE ir RE turi būti aukšti, prijungti prie STM32F103C8 kaiščio PA3 (kad kaištis PA3 būtų aukštas):
„digitalWrite“ („enablePin“, HIGH);
Norėdami įdėti tas vertes į nuoseklųjį prievadą ir siųsti vertes, priklausomai nuo to, kuris mygtukas yra paspaustas, naudokite teiginį „if else“ ir nusiųskite atitinkamą vertę, kai paspausite mygtuką.
Jei paspaudžiamas pirmasis mygtukas, sąlyga sutampa ir reikšmė „1“ siunčiama į nuoseklųjį prievadą, kuriame prijungtas „Arduino UNO“.
if (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Panašiai, paspaudus mygtuką 2, reikšmė 2 siunčiama per nuoseklųjį prievadą, o paspaudus mygtuką 3, vertė 3 siunčiama per nuoseklųjį prievadą.
else if (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } else if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Nuspaudus nė vieno mygtuko, „Arduino Uno“ siunčiama vertė 0.
else { int num = 0; Serial1.println (skaičius); }
Tai baigia programuoti, kad sukonfigūruotų STM32 kaip pagrindinį.
Arduino UNO kaip vergasVergo pusėje „ Arduino UNO“ gauna sveiko skaičiaus vertę, siunčiamą iš „Master STM32F103C8“, kurią galima rasti „Arduino UNO“ (P0, 1) aparatinės įrangos serijos prievade, prie kurio prijungtas RS-485 modulis.
Tiesiog perskaitykite vertę ir išsaugokite kintamajame. Priklausomai nuo gautos vertės, atitinkamas šviesos diodas įjungiamas arba išjungiamas, prijungtas prie „Arduino GPIO“.
Norėdami gauti vertes iš magistro, tiesiog padarykite RS-485 modulio kaiščius DE ir RE žemai. Taigi „Arduino UNO“ kaištis-2 (enablePin) yra padarytas LOW.
„digitalWrite“ („enablePin“, „LOW“);
Dabar tiesiog perskaitykite sveikojo skaičiaus duomenis, esančius „Serial Port“, ir išsaugokite juos kintamajame.
int gauti = Serial.parseInt ();
Priklausomai nuo gautos vertės, ty (0, 1, 2, 3), įsijungia atitinkamai vienas iš trijų šviesos diodų.
if (gauti == 1) // Priklausomai nuo vertės Gauta, atitinkamas šviesos diodas įjungiamas arba išjungiamas { digitalWrite (ledpin1, HIGH); } else if (gauti == 2) { digitalWrite (ledpin2, HIGH); } else if (gauti == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); „digitalWrite“ („ledpin2“, „LOW“); „digitalWrite“ („ledpin3“, „LOW“); }
Tai baigia programuoti ir konfigūruoti „Arduino UNO“ kaip „Slave“. Taip pat tai užbaigia visas „Arduino UNO“ ir „STM32“ konfigūracijas. Darbinis vaizdo įrašas ir visi kodai pridedami šios pamokos pabaigoje.
RS485 ryšio testavimas tarp STM32F103C8 ir „Arduino UNO“:
1. Paspaudus mygtuką „1“, prijungtą prie „Master STM32“, 1 lemputė įsijungia prijungta prie „Slave Arduino“.
2. Paspaudus mygtuką 2, kuris prijungtas prie „Master STM32“, šviesos diodas 2 įsijungia, prijungtas prie „Slave Arduino“.
3. Panašiai paspaudus mygtuką 3, šviesos diodas 3 įsijungia prijungtas prie „Slave Arduino“.
Tai užbaigia RS485 nuoseklųjį ryšį tarp STM32F103C8 ir „Arduino UNO“. „Arduino UNO“ ir „STM32“ plokštės yra plačiai naudojamos plokštės, skirtos greitam prototipų kūrimui, ir šiose plokštėse atlikome daug naudingų projektų. Jei radote abejonių ar turite kokių nors pasiūlymų, parašykite ir pakomentuokite žemiau.