- Sériová komunikácia RS-485
- Súčasti sú povinné
- Schéma zapojenia
- Programovanie STM32F103C8 a Arduino UNO pre sériovú komunikáciu RS485
- Testovanie komunikácie RS485 medzi STM32F103C8 a Arduino UNO:
Komunikačné protokoly sú neoddeliteľnou súčasťou digitálnej elektroniky a zabudovaného systému. Všade tam, kde existuje prepojenie viacerých mikrokontrolérov a periférií, je potrebné na výmenu množstva údajov použiť komunikačný protokol. Existuje veľa druhov sériového komunikačného protokolu. RS485 je jedným zo sériových komunikačných protokolov a používa sa v priemyselných projektoch a ťažkých strojoch.
O sériovej komunikácii RS485 medzi Arduino Uno a Arduino Nano sme sa dozvedeli v predchádzajúcom tutoriále . Tento tutoriál sa týka používania sériovej komunikácie RS-485 v mikrokontroléri STM32F103C8. Ak ste v mikrokontroléri STM32 nováčikom, začnite kapitolou Začíname s programom STM32 pomocou Arduino IDE: Blikajúca LED a tu skontrolujte všetky projekty STM32.
V tomto návode má Master STM32F103C8 tri tlačidlá, ktoré sa používajú na riadenie stavu troch LED diód prítomných v Slave Arduino Uno pomocou sériovej komunikácie RS-485.
Začnime pochopením fungovania sériovej komunikácie RS-485.
Sériová komunikácia RS-485
RS-485 je asynchrónny sériový komunikačný protokol, ktorý nevyžaduje hodiny. Na prenos binárnych údajov z jedného zariadenia do druhého používa techniku nazývanú diferenciálny signál.
Aká je teda táto metóda diferenciálneho prenosu signálu?
Metóda diferenciálneho signálu funguje tak, že sa vytvára diferenčné napätie pomocou kladného a záporného napätia 5 V. Poskytuje Half-Duplex komunikáciu pri použití dvoch vodičov a Full-Duplex komunikáciu pri použití štyroch vodičov.
Použitím tejto metódy:
- RS-485 podporuje vyššiu rýchlosť prenosu dát maximálne 30 Mbps.
- Poskytuje tiež maximálnu vzdialenosť prenosu dát v porovnaní s protokolom RS-232. Prenáša dáta maximálne do 1 200 metrov.
- Hlavnou výhodou RS-485 oproti RS-232 je viacnásobný slave s jedným Masterom, zatiaľ čo RS-232 podporuje iba jedného slave.
- Môže mať maximálne 32 zariadení pripojených k protokolu RS-485.
- Ďalšou výhodou RS-485 je odolnosť voči šumu, pretože na prenos používajú metódu diferenciálneho signálu.
- RS-485 je rýchlejší v porovnaní s protokolom I2C.
Modul RS-485 je možné pripojiť k ľubovoľnému mikrokontroléru so sériovým portom. Pre použitie modulu RS-485 s mikrokontrolérmi je potrebný modul s názvom 5V MAX485 TTL to RS485, ktorý je založený na Maxim MAX485 IC, pretože umožňuje sériovú komunikáciu na veľkú vzdialenosť 1 200 metrov a je obojsmerný a poloduplexný s rýchlosťou prenosu 2,5 Mb / s. Tento modul vyžaduje napätie 5V.
Popis kolíka RS-485:
Názov špendlíka |
Popis |
VCC |
5V |
A |
Neinvertujúci vstup prijímača Neinvertujúci výstup ovládača |
B |
Obrátenie vstupu prijímača Obrátenie výstupu ovládača |
GND |
GND (0 V) |
R0 |
Prijímač (pin RX) |
RE |
Výstup prijímača (LOW-Enable) |
DE |
Výstup ovládača (HIGH-Enable) |
DI |
Driver Driver (TX pin) |
Modul RS485 má nasledujúce vlastnosti:
- Prevádzkové napätie: 5V
- Palubný čip MAX485
- Nízka spotreba energie na komunikáciu RS485
- Transceiver s obmedzenou rýchlosťou
- 2P terminál s rozstupom 5,08 mm
- Pohodlné komunikačné vedenie RS-485
- Všetky kolíky čipu, ku ktorým boli pripojené, je možné ovládať pomocou mikrokontroléra
- Veľkosť dosky: 44 x 14mm
Používanie tohto modulu s STM32F103C8 a Arduino UNO je veľmi jednoduché. Používajú sa hardvérové sériové porty mikrokontrolérov. Ďalej sú uvedené hardvérové sériové piny v programoch STM32 a arduino UNO.
- V STM32F103C8: Piny PA9 (TX) a PA10 (RX)
- V Arduino Uno: Pin 0 (RX) a 1 (TX)
Programovanie je tiež jednoduché, stačí použiť Serial.print () na zápis na RS-485 a Serial.Read () na čítanie z RS-485 a kolíky DE & RE na RS-485 sú NÍZKE na príjem dát a VYSOKÉ na zapisovať dáta na zbernicu RS-485.
Súčasti sú povinné
- STM32F103C8
- Arduino UNO
- Modul prevodníka MAX485 TTL na RS485 - (2)
- 10K potenciometer
- Tlačidlo - 3
- LED - 3
- Rezistory
- Nepál
- Pripojenie drôtov
Schéma zapojenia
V tomto návode sa STM32F103C8 používa ako Master s jedným modulom RS-485 a Arduino UNO sa používa ako Slave s iným modulom RS-485.
Pripojenie obvodu medzi RS-485 a STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
A |
K slave RS-485 |
B |
Na B slave RS-485 |
STM32F103C8 s tromi tlačidlami:
Tri tlačidlá s tromi odporom Pull Down 10k sú pripojené k pinom PA0, PA1, PA2 na STM32F103C8.
Okruhové pripojenie medzi RS-485 a Arduino UNO (Slave):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (PR) |
VCC |
5V |
GND |
GND |
A |
Na A z hlavnej RS-485 |
B |
Do B hlavnej stanice RS-485 |
Používajú sa tri LED diódy, kde sú anódy LED s odporom 330 ohmov pripojené k pinom 4, 7, 8 modulu Arduino UNO a katóda LED sú pripojené k GND.
Programovanie STM32F103C8 a Arduino UNO pre sériovú komunikáciu RS485
Arduino IDE sa používa na vývoj a programovanie oboch dosiek, tj STM32 a Arduino UNO. Uistite sa však, že ste vybrali zodpovedajúci PORT z ponuky Nástroje-> Port a doska z ponuky Nástroje-> Doska. Ak narazíte na nejaké ťažkosti alebo pochybnosti, jednoducho sa obráťte na Programovanie vášho STM32 v ARDUINO IDE. Programovanie tohto tutoriálu pozostáva z dvoch častí, jednej pre STM32F103C8 (Master) a druhej pre Arduino UNO (Slave). Oba kódy budú vysvetlené jeden po druhom nižšie.
STM32F103C8 ako MasterNa strane Master sa načíta stav tlačidla a potom sa tieto hodnoty sériovo zapíšu na zbernicu RS-485 cez hardvérové sériové porty 1 (PA9, PA10) STM32F103C8. Odteraz tiež nie je potrebná žiadna externá knižnica. Arduino má všetku potrebnú knižnicu pre sériovú komunikáciu.
Začnite sériovú komunikáciu pomocou hardvérových sériových pinov (PA9, PA10) na čísle 9600.
Serial1.begin (9600);
Prečítajte si stav tlačidla na pinoch PA0, PA1, PA2 na STM32F103C8 a uložte ich do premennej button1val, button2val, button3val. Hodnota je VYSOKÁ, ak je stlačené tlačidlo, a NÍZKA, keď nie je stlačené.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Pred odoslaním hodnôt tlačidiel na sériový port by mali byť kolíky DE & RE na RS-485 VYSOKÉ, ktoré sú pripojené ku kolíku PA3 na STM32F103C8 (Aby bol kolík PA3 VYSOKÝ):
digitalWrite (enablePin, HIGH);
Ďalej vložte tieto hodnoty do sériového portu a pošlite hodnoty podľa toho, ktoré tlačidlo je stlačené, použite príkaz if else a po stlačení tlačidla pošlite zodpovedajúcu hodnotu.
Ak stlačíte prvé tlačidlo, potom sa podmienka zhoduje a hodnota '1' sa odošle na sériový port, kde je pripojené Arduino UNO.
if (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Podobne, keď je stlačené tlačidlo 2, hodnota 2 je odoslaná cez sériový port a keď je stlačené tlačidlo 3, hodnota 3 je odoslaná cez sériový port.
else if (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } else if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
A keď nestlačíte žiadne tlačidlo, hodnota 0 sa odošle do Arduino Uno.
else { int num = 0; Serial1.println (num); }
Týmto sa dokončí programovanie na konfiguráciu STM32 ako Master.
Arduino UNO ako otrokNa strane Slave prijíma Arduino UNO celočíselnú hodnotu, ktorá sa odosiela z Master STM32F103C8, ktorý je k dispozícii na hardvérovom sériovom porte Arduino UNO (P0, 1), kde je pripojený modul RS-485.
Jednoducho prečítajte hodnotu a uložte ju do premennej. V závislosti na prijatej hodnote sa príslušná LED rozsvieti alebo zhasne pripojená k Arduino GPIO.
Ak chcete prijímať hodnoty z Masteru, urobte kolíky DE & RE modulu RS-485 LOW. Takže pin-2 (enablePin) Arduino UNO je NÍZKY.
digitalWrite (enablePin, LOW);
Teraz stačí prečítať celočíselné údaje dostupné na sériovom porte a uložiť ich do premennej.
int receive = Serial.parseInt ();
V závislosti na prijatej hodnote tj. (0, 1, 2, 3) sa príslušne jedna z troch LED rozsvieti.
if (receive == 1) // V závislosti na prijatej hodnote je príslušná LED zapnutá alebo vypnutá { digitalWrite (ledpin1, HIGH); } else if (receive == 2) { digitalWrite (ledpin2, HIGH); } else if (receive == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Týmto je programovanie a konfigurácia Arduino UNO ako Slave ukončená. Týmto sa tiež dokončuje kompletná konfigurácia pre Arduino UNO a STM32. Pracovné video a všetky kódy sú pripojené na konci tohto tutoriálu.
Testovanie komunikácie RS485 medzi STM32F103C8 a Arduino UNO:
1. Po stlačení tlačidla 1, ktoré je pripojené k Master STM32, sa rozsvieti LED 1 pripojená k Slave Arduino.
2. Po stlačení tlačidla 2, ktoré je pripojené k Master STM32, sa rozsvieti LED 2 pripojená k Slave Arduino.
3. Podobne pri stlačení tlačidla 3 sa rozsvieti LED 3 pripojená k zariadeniu Slave Arduino.
Týmto je ukončená sériová komunikácia RS485 medzi STM32F103C8 a Arduino UNO. Dosky Arduino UNO a STM32 sú často používané dosky na rýchle prototypovanie a na týchto doskách sme vykonali veľa užitočných projektov. Ak nájdete nejaké pochybnosti alebo máte nejaké návrhy, napíšte a komentujte nižšie.