- RS-485 sērijas sakari
- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- STM32F103C8 un Arduino UNO programmēšana RS485 sērijas sakariem
- RS485 sakaru pārbaude starp STM32F103C8 un Arduino UNO:
Sakaru protokoli ir digitālās elektronikas un iegultās sistēmas neatņemama sastāvdaļa. Ja pastāv vairāku mikrokontrolleru un perifērijas ierīču saskarne, datu apmaiņai ir jāizmanto sakaru protokols. Ir pieejami daudzu sērijveida sakaru protokolu veidi. RS485 ir viens no sērijveida sakaru protokoliem un tiek izmantots rūpnieciskos projektos un smagās mašīnās.
Mēs uzzinājām par RS485 sērijas komunikāciju starp Arduino Uno un Arduino Nano iepriekšējā apmācībā . Šī apmācība ir par RS-485 sērijas sakaru izmantošanu mikrokontrollerī STM32F103C8. Ja esat jauns STM32 mikrokontrollera lietotājs, sāciet ar Darba sākšana ar STM32, izmantojot Arduino IDE: Mirgojošs LED un pārbaudiet visus STM32 projektus šeit
Šajā apmācībā Master STM32F103C8 ir trīs spiedpogas, kuras tiek izmantotas, lai kontrolētu trīs Slave Arduino Uno esošo gaismas diožu statusu, izmantojot RS-485 sērijas sakarus.
Sāksim ar izpratni par RS-485 sērijas sakaru darbību.
RS-485 sērijas sakari
RS-485 ir asinhronais sērijveida sakaru protokols, kuram nav nepieciešams pulkstenis. Lai bināros datus pārsūtītu no vienas ierīces uz otru, tiek izmantota tehnika, ko sauc par diferenciālo signālu.
Kas tad ir šī diferenciālā signāla pārneses metode ??
Diferenciālā signāla metode darbojas, izveidojot diferenciālo spriegumu, izmantojot pozitīvu un negatīvu 5V. Tas nodrošina pusdupleksu sakarus, ja tiek izmantoti divi vadi, un pilndupleksu sakarus, izmantojot četrus vadus.
Izmantojot šo metodi:
- RS-485 atbalsta lielāku datu pārraides ātrumu līdz 30Mbps.
- Tas nodrošina arī maksimālu datu pārraides attālumu, salīdzinot ar RS-232 protokolu. Tas pārsūta datus līdz maksimāli 1200 metriem.
- RS-485 galvenā priekšrocība salīdzinājumā ar RS-232 ir vairāku vergu pakāpe ar vienu Master, savukārt RS-232 atbalsta tikai vienu vergu.
- Var būt ne vairāk kā 32 ierīces, kas savienotas ar RS-485 protokolu.
- Vēl viena RS-485 priekšrocība ir imūna pret troksni, jo pārsūtīšanai tiek izmantota diferenciālā signāla metode.
- RS-485 ir ātrāks nekā I2C protokols.
RS-485 moduli var pieslēgt jebkuram mikrokontrollerim ar seriālo portu. Lai lietotu RS-485 moduli ar mikrokontrolleriem, ir nepieciešams modulis ar nosaukumu 5V MAX485 TTL - RS485, kas balstīts uz Maxim MAX485 IC, jo tas ļauj sērijveida sakarus lielos 1200 metru attālumos, divvirzienu un pusdupleksā datu pārraides ātrums ir 2,5 Mbps. Šim modulim nepieciešams 5V spriegums.
RS-485 tapas apraksts:
Piespraudes nosaukums |
Apraksts |
VCC |
5V |
A |
Neinvertējoša uztvērēja ievade Neinvertējoša draivera izeja |
B |
Uztvērēja ievades invertēšana Apgriezt draivera izvadi |
GND |
GND (0V) |
R0 |
Uztvērēja izeja (RX tapa) |
RE |
Uztvērēja izeja (LOW-Enable) |
DE |
Vadītāja izeja (HIGH-Enable) |
DI |
Vadītāja ievade (TX tapa) |
RS485 modulim ir šādas funkcijas:
- Darba spriegums: 5V
- Borta MAX485 mikroshēma
- Zems enerģijas patēriņš RS485 sakariem
- Ierobežots uztvērējs
- 5,08 mm solis 2P terminālis
- Ērta RS-485 sakaru elektroinstalācija
- Visas mikroshēmas tapas var novest, izmantojot mikrokontrolleru
- Dēļa izmērs: 44 x 14mm
Šī moduļa lietošana ar STM32F103C8 un Arduino UNO ir ļoti vienkārša. Tiek izmantoti mikrokontrolleru aparatūras sērijas porti. Aparatūras sērijveida tapas STM32 un arduino UNO ir norādītas zemāk.
- STM32F103C8 : tapas PA9 (TX) un PA10 (RX)
- Arduino Uno: Pin 0 (RX) un 1 (TX)
Programmēšana ir arī vienkārša, vienkārši izmantojiet Serial.print (), lai rakstītu uz RS-485 un Serial. Lasiet (), lai lasītu no RS-485, un RS-485 tapas DE & RE tiek padarītas par zemām, lai saņemtu datus, un AUGSTS rakstīt datus RS-485 kopnei.
Nepieciešamās sastāvdaļas
- STM32F103C8
- Arduino UNO
- MAX485 TTL līdz RS485 pārveidotāja modulis - (2)
- 10K potenciometrs
- Spiedpoga - 3
- LED - 3
- Rezistori
- Maizes dēlis
- Vadu savienošana
Ķēdes shēma
Šajā apmācībā STM32F103C8 tiek izmantots kā Master ar vienu RS-485 moduli, bet Arduino UNO tiek izmantots kā Slave ar citu RS-485 moduli.
Ķēdes savienojums starp RS-485 un STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
A |
Uz vergu RS-485 A |
B |
Uz vergu RS-485 B |
STM32F103C8 ar trīs spiedpogām:
Trīs spiedpogas ar trim 10k pretestības pretestību ir savienotas ar STM32F103C8 tapām PA0, PA1, PA2.
Ķēdes savienojums starp RS-485 un Arduino UNO (Slave):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Uz RS meistara RS-485 |
B |
Uz meistara RS-485 B |
Tiek izmantoti trīs gaismas diodes, kur LED anodi ar rezistoru 330 omi ir savienoti ar Arduino UNO 4., 7., 8. tapām un LED katodi ir savienoti ar GND.
STM32F103C8 un Arduino UNO programmēšana RS485 sērijas sakariem
Arduino IDE tiek izmantots abu dēļu, ti, STM32 un Arduino UNO, izstrādei un programmēšanai. Bet pārliecinieties, ka esat izvēlējies atbilstošo PORT no Tools-> Port and Board no Tools-> Board. Ja jums rodas kādas grūtības vai šaubas, vienkārši skatiet STM32 programmēšanu ARDUINO IDE. Šīs apmācības programmēšana sastāv no divām sadaļām STM32F103C8 (Master) un citām Arduino UNO (Slave). Abi kodi tiks paskaidroti pa vienam zemāk.
STM32F103C8 kā kapteinisGalvenajā pusē spiedpogas statuss tiek nolasīts un pēc tam sērijveidā tiek ierakstītas šīs vērtības RS-485 kopnē caur STM32F103C8 1. aparatūras seriālajiem portiem (PA9, PA10). Arī šobrīd nav nepieciešama ārēja bibliotēka. Arduino ir visa nepieciešamā bibliotēka sērijveida saziņai.
Sāciet sērijveida saziņu, izmantojot aparatūras sērijas tapas (PA9, PA10) ar 9600 buadrātu.
Serial1.begin (9600);
Izlasiet spiedpogas statusu pie STM32F103C8 tapām PA0, PA1, PA2 un saglabājiet tos mainīgajos button1val, button2val, button3val. Vērtība ir HIGH, ja tiek nospiesta poga, un LOW, kad netiek nospiesta.
int button1val = digitalRead (poga1); int button2val = digitalRead (poga2); int button3val = digitalRead (poga3);
Pirms pogas vērtību nosūtīšanas uz seriālo portu, RS-485 tapām DE & RE jābūt AUGSTĀM, kas ir savienotas ar STM32F103C8 tapu PA3 (Lai izveidotu tapu PA3 HIGH):
digitalWrite (enablePin, HIGH);
Blakus, lai šīs vērtības ievietotu sērijas portā un nosūtītu vērtības atkarībā no tā, kura spiedpoga ir nospiesta, izmantojiet paziņojumu if else, un nosūtiet atbilstošo vērtību, nospiežot pogu.
Ja tiek nospiesta pirmā poga, nosacījums sakrīt un vērtība “1” tiek nosūtīta uz seriālo portu, kurā ir pievienots Arduino UNO.
ja (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Līdzīgi, nospiežot pogu 2, vērtība 2 tiek nosūtīta pa seriālo portu un, nospiežot pogu 3, vērtība 3 tiek nosūtīta pa seriālo portu.
else if (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } else if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Un, kad netiek nospiesta neviena poga, vērtība 0 tiek nosūtīta uz Arduino Uno.
cits { int num = 0; Serial1.println (num); }
Ar to tiek pabeigta programmēšana, lai konfigurētu STM32 kā Master.
Arduino UNO kā vergsSlave pusē Arduino UNO saņem veselu skaitli, kas tiek nosūtīts no Master STM32F103C8, kas ir pieejama Arduino UNO aparatūras sērijas portā (P0, 1), kur ir pievienots RS-485 modulis.
Vienkārši nolasiet vērtību un saglabājiet mainīgajā. Atkarībā no saņemtās vērtības attiecīgā gaismas diode tiek ieslēgta vai izslēgta, pievienojot to Arduino GPIO.
Lai saņemtu vērtības no Master, vienkārši izveidojiet RS-485 moduļa tapas DE & RE LOW. Tātad Arduino UNO pin-2 (enablePin) tiek izgatavots LOW.
digitalWrite (enablePin, LOW);
Tagad vienkārši izlasiet sērijas ostā pieejamos veselos skaitļus un saglabājiet tos mainīgajā.
int saņemt = Serial.parseInt ();
Atkarībā no saņemtās vērtības, ti, (0, 1, 2, 3), attiecīgi ieslēdzas viens no trim LED.
if (saņemt == 1) // Atkarībā no vērtības, kas saņemta, atbilstošā gaismas diode tiek ieslēgta vai izslēgta { digitalWrite (ledpin1, HIGH); } else if (saņemt == 2) { digitalWrite (ledpin2, HIGH); } else if (saņemt == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Tas beidz programmēt un konfigurēt Arduino UNO kā vergu. Arī tas pabeidz visas Arduino UNO un STM32 konfigurācijas. Darba video un visi kodi ir pievienoti šīs apmācības beigās.
RS485 sakaru pārbaude starp STM32F103C8 un Arduino UNO:
1. Nospiežot pogu-1, kas ir savienots ar Master STM32, gaismas diode 1 ieslēdzas, kas savienota ar Slave Arduino.
2. Nospiežot taustiņu-2, kas savienots ar Master STM32, gaismas diode 2 ieslēdzas, kas savienota ar Slave Arduino.
3. Līdzīgi, nospiežot pogu-3, gaismas diode 3 ieslēdzas, kas savienota ar Slave Arduino.
Tas pabeidz RS485 sērijas sakarus starp STM32F103C8 un Arduino UNO. Arduino UNO un STM32 dēļi ir plaši izmantoti dēļi ātrai prototipu veidošanai, un mēs uz šiem dēļiem esam veikuši daudz noderīgu projektu. Ja atrodat šaubas vai jums ir kādi ieteikumi, rakstiet un komentējiet tālāk.