- RS-485 soros kommunikáció
- Szükséges alkatrészek
- Kördiagramm
- STM32F103C8 és Arduino UNO programozása RS485 soros kommunikációhoz
- Az STM32F103C8 és az Arduino UNO közötti RS485 kommunikáció tesztelése:
A kommunikációs protokollok a digitális elektronika és a beágyazott rendszer szerves részét képezik. Ahol több mikrovezérlő és periféria kapcsolódik egymáshoz, a kommunikációs protokollt kell használni annak érdekében, hogy csomó adatot cseréljenek. Sokféle soros kommunikációs protokoll érhető el. Az RS485 az egyik soros kommunikációs protokoll, amelyet ipari projektekben és nehéz gépekben használnak.
Az előző oktatóanyagban megtudtuk az Arduino Uno és az Arduino Nano közötti RS485-ös soros kommunikációt . Ez az oktatóanyag az RS-485 soros kommunikáció használatáról szól az STM32F103C8 mikrovezérlőben. Ha még nem ismeri az STM32 mikrovezérlőt, akkor kezdje az Első lépések az STM32 használatával az Arduino IDE használatával: Villogó LED és itt ellenőrizze az összes STM32 projektet.
Ebben az útmutatóban a Master STM32F103C8 három nyomógombbal rendelkezik, amelyek segítségével a Slave Arduino Uno-ban lévő három LED állapotát az RS-485 soros kommunikáció segítségével szabályozhatja.
Kezdjük azzal, hogy megértsük az RS-485 soros kommunikáció működését.
RS-485 soros kommunikáció
Az RS-485 aszinkron soros kommunikációs protokoll, amelyhez nincs szükség órára. A differenciáljelnek nevezett technikát használja a bináris adatok egyik eszközről a másikra történő átvitelére.
Mi tehát ez a differenciális jelátviteli módszer ??
A differenciáljel módszer a feszültségkülönbség létrehozásával működik pozitív és negatív 5 V használatával. Ez biztosítja a Half-Duplex kommunikáció használata esetén a két vezetéket és Full-duplex kommunikáció használata esetén négy vezetéket.
Ezzel a módszerrel:
- Az RS-485 támogatja a nagyobb, 30Mbps sebességű adatátviteli sebességet.
- Az RS-232 protokollhoz képest maximális adatátviteli távolságot is biztosít. Adatokat továbbít maximum 1200 méterig.
- Az RS-485 fő előnye az RS-232-vel szemben az egyetlen mesterrel rendelkező többszörös szolga, míg az RS-232 csak egyetlen szolga-t támogat.
- Legfeljebb 32 eszköz csatlakozhat az RS-485 protokollhoz.
- Az RS-485 másik előnye immunis a zajjal szemben, mivel differenciális jelmódszert alkalmaznak az átvitelhez.
- Az RS-485 gyorsabb az I2C protokollhoz képest.
Az RS-485 modul bármely soros porttal rendelkező mikrovezérlőhöz csatlakoztatható. Az RS-485 modul mikrokontrollerekkel történő használatához 5V MAX485 TTL - RS485 nevű modulra van szükség, amely a Maxim MAX485 IC-n alapul, mivel lehetővé teszi a soros kommunikációt 1200 méteres távolságon, kétirányú, a fél duplex adatátviteli sebessége 2,5 Mbps. Ehhez a modulhoz 5V feszültség szükséges.
RS-485 tű Leírás:
PIN neve |
Leírás |
VCC |
5V |
A |
Nem invertáló vevő bemenet Nem invertáló illesztőprogram kimenete |
B |
A vevő bemenetének megfordítása Az illesztőprogram kimenetének megfordítása |
GND |
GND (0V) |
R0 |
Vevő kimenet (RX tű) |
ÚJRA |
Vevő kimenete (LOW-Enable) |
DE |
Illesztőprogram kimenete (HIGH-Enable) |
DI |
Illesztőprogram bemenet (TX tű) |
Az RS485 modul a következő tulajdonságokkal rendelkezik:
- Üzemi feszültség: 5V
- Fedélzeti MAX485 chip
- Alacsony energiafogyasztás az RS485 kommunikációhoz
- Korlátozott sebességű adó-vevő
- 5,08 mm-es 2P terminál
- Kényelmes RS-485 kommunikációs vezeték
- A chip összes érintkezõjét a mikrokontrolleren keresztül lehet vezérelni
- Tábla mérete: 44 x 14 mm
A modul használata az STM32F103C8 és az Arduino UNO segítségével nagyon egyszerű. A mikrovezérlők hardveres soros portjait használják. Az STM32 és az arduino UNO hardver soros csapjai az alábbiakban láthatók.
- STM32F103C8-ban: PA9 (TX) és PA10 (RX) csapok
- Arduino Uno-ban: Pin 0 (RX) & 1 (TX)
Programozás is egyszerű, csak használja a Serial.print (), hogy írjon az RS-485 és Serial.Read () olvasható az RS-485 és a csapokat DE & RE RS-485 készül LOW adatok fogadására és tette MAGAS írjon adatokat az RS-485 buszra.
Szükséges alkatrészek
- STM32F103C8
- Arduino UNO
- MAX485 TTL - RS485 átalakító modul - (2)
- 10K potenciométer
- Nyomógomb - 3
- LED - 3
- Ellenállások
- Kenyérlemez
- Vezetékek csatlakoztatása
Kördiagramm
Ebben az oktatóanyagban az STM32F103C8-t egy RS-485-ös modullal, az Arduino UNO-t pedig egy másik RS-485-ös modullal Slave-ként használják.
Áramköri kapcsolat az RS-485 és az STM32F103C8 (Master) között:
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE ÚJRA |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
A |
A Slave RS-485 A-hoz |
B |
Az RS-485 szolga B-hez |
STM32F103C8 három nyomógombbal:
Három nyomógomb három 10k-os lehúzható ellenállással van összekötve az STM32F103C8 PA0, PA1, PA2 érintkezőivel.
Áramköri kapcsolat az RS-485 és az Arduino UNO (Slave) között:
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE ÚJRA |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Az RS-485 mester A-hoz |
B |
Az RS-485 mester B-hez |
Három LED-et használnak, ahol a 330 ohmos ellenállású LED-ek anódjai az Arduino UNO 4, 7, 8 érintkezõihez vannak csatlakoztatva, a LED-ek katódja pedig a GND-hez.
STM32F103C8 és Arduino UNO programozása RS485 soros kommunikációhoz
Az Arduino IDE mindkét tábla, azaz az STM32 és az Arduino UNO fejlesztésére és programozására szolgál. De győződjön meg arról, hogy a megfelelő Portot választotta az Eszközök-> Port és tábla menüpontból az Eszközök-> Tábla menüpontból. Ha bármilyen nehézséget vagy kétséget észlel, olvassa el az STM32 programozását az ARDUINO IDE-ben. Ennek az oktatóanyagnak a programozása két szakaszból áll, az egyik az STM32F103C8 (Master) és az Arduino UNO (Slave) számára. Mindkét kódot alább egyesével magyarázzuk el.
STM32F103C8 mesterkéntA Master oldalon a nyomógomb állapotát beolvassa, majd sorba írja ezeket az értékeket az RS-485 buszra az STM32F103C8 1. hardver soros portjain (PA9, PA10) keresztül. Mostantól nincs szükség külső könyvtárra. Az Arduino rendelkezik a soros kommunikációhoz szükséges összes könyvtárral.
Kezdje el a soros kommunikációt hardver soros csapok (PA9, PA10) használatával 9600-os buadrate mellett.
Serial1.begin (9600);
Olvassa el a nyomógomb állapotát az STM32F103C8 PA0, PA1, PA2 érintkezõinél, és tárolja azokat egy változó gomb1val, button2val, button3val változóban. Az érték HIGH, ha megnyomják a gombot, és LOW, ha nem nyomják meg.
int button1val = digitalRead (gomb1); int button2val = digitalRead (gomb2); int gomb3val = digitalRead (gomb3);
Mielőtt elküldené a gombértékeket a soros portra, az RS-485 DE és RE csapjainak MAGASAKnak kell lenniük, amelyek az STM32F103C8 PA3 tűjéhez vannak csatlakoztatva (A PA3 tű magasá tételéhez):
digitalWrite (enablePin, HIGH);
Ezután tegye ezeket az értékeket a soros portba és küldje el az értékeket attól függően, hogy melyik nyomógombot nyomja meg, használja az if else utasítást, és a gomb megnyomásakor küldje el a megfelelő értéket.
Ha megnyomja az első gombot, akkor a feltétel megegyezik, és az '1' értéket elküldi a soros portra, ahova az Arduino UNO csatlakozik.
if (button1val == HIGH) { int szám1 = 1; Serial1.println (num1); }
Hasonlóképpen, amikor megnyomja a 2 gombot, a 2 értéket soros porton keresztül küldi, és amikor a 3 gombot megnyomja, akkor a 3 értéket a soros porton keresztül küldi el.
else if (button2val == HIGH) { int szám2 = 2; Soros1.println (szam2); } else if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Ha pedig egyetlen gombot sem nyom meg, akkor a 0 értéket elküldi az Arduino Uno-nak.
else { int num = 0; Sorozat1.println (szám); }
Ezzel befejeződik a programozás az STM32 Master konfigurálásához.
Arduino UNO mint rabszolgaA Slave oldalon az Arduino UNO egy egész értéket kap, amelyet a Master STM32F103C8 küld, amely az Arduino UNO (P0, 1) Hardver soros portjánál érhető el, ahová az RS-485 modul csatlakozik.
Egyszerűen olvassa el az értéket és tárolja egy változóban. A kapott értéktől függően a megfelelő LED be- vagy kikapcsol, az Arduino GPIO-hoz csatlakozik.
Ha meg akarja kapni az értékeket a Master-től, egyszerűen tegye LOW -ra az RS-485 modul DE és RE csapjait. Tehát az Arduino UNO pin-2 (enablePin) LOW.
digitalWrite (enablePin, LOW);
Most csak olvassa el a Serial Porton elérhető egész adatokat, és tárolja azokat egy változóban.
int fogad = Soros.parseInt ();
A kapott értéktől (azaz 0, 1, 2, 3) függően a három LED közül az egyik bekapcsol.
if (vétel == 1) // A beérkezett értéktől függően a megfelelő LED be- vagy kikapcsol { digitalWrite (ledpin1, HIGH); } else if (vétel == 2) { digitalWrite (ledpin2, HIGH); } else if (fogad = = 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Ezzel befejeződik az Arduino UNO Slave programozása és konfigurálása. Ezzel befejeződik az Arduino UNO és az STM32 teljes konfigurációja is. A működő videó és az összes kód az oktatóanyag végén található.
Az STM32F103C8 és az Arduino UNO közötti RS485 kommunikáció tesztelése:
1. A Master STM32-hez csatlakoztatott 1-es nyomógomb megnyomásakor az 1 LED bekapcsol a Slave Arduino-hoz csatlakoztatva.
2. A Master STM32-hez csatlakoztatott 2-es nyomógomb megnyomásakor a 2 LED bekapcsol, és csatlakozik a Slave Arduino-hoz.
3. Hasonlóképpen, amikor a 3-as gombot megnyomja, a 3 LED bekapcsol a Slave Arduino-hoz csatlakoztatva.
Ezzel befejeződik az RS485 soros kommunikáció az STM32F103C8 és az Arduino UNO között. Az Arduino UNO és STM32 táblák széles körben használt táblák a gyors prototípus készítéshez, és sok hasznos projektet végeztünk ezeken a táblákon. Ha bármilyen kétsége van, vagy bármilyen javaslata van számunkra, írjon és kommenteljen alább.