- RS-485 soros kommunikációs protokoll
- RS-485 Arduinóban
- Szükséges alkatrészek
- Kördiagramm
- Arduino UNO és Arduino Nano programozása az RS485 soros kommunikációhoz
- A LED fényerejének vezérlése az RS485 soros kommunikációval
A mikrokontrollerek és perifériák közötti kommunikációhoz szükséges kommunikációs protokoll kiválasztása a beágyazott rendszer fontos része. Fontos, mert bármely beágyazott alkalmazás teljes teljesítménye a kommunikációs eszközöktől függ, mivel a költségek csökkentéséhez, a gyorsabb adatátvitelhez, a távolsági lefedettséghez stb. Kapcsolódik.
Az előző oktatóanyagokban megtudtuk az I2C kommunikációs protokollt és az SPI kommunikációs protokollokat az Arduino-ban. Most van egy másik soros kommunikációs protokoll, az úgynevezett RS-485. Ez a protokoll aszinkron soros kommunikációt használ. Az RS-485 fő előnye a két eszköz közötti nagy távolságú adatátvitel. És leggyakrabban elektromos zajos ipari környezetben használják őket.
Ebben az oktatóanyagban megtudhatjuk az RS-485 soros kommunikációját két Arduino között, majd bemutatjuk azt azáltal, hogy a Master Arduino-tól egy Slave Arduino-hoz csatlakoztatott LED fényerejét vezéreljük az ADC-értékek RS-485 modulon keresztül történő elküldésével. 10k potenciométert használnak az ADC értékek változtatásához a Master Arduino-nál.
Kezdjük azzal, hogy megértsük az RS-485 soros kommunikáció működését.
RS-485 soros kommunikációs protokoll
Az RS-485 egy aszinkron soros kommunikációs protokoll, amelyhez nincs szükség órajelre. 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 igényel 4 négyes vezetékek.
E módszer alkalmazásával
- 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. Legfeljebb 1200 méterig továbbítja az adatokat.
- 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 lehet RS-485 protokollhoz csatlakoztatva.
- Az RS-485 további előnye, hogy immunis a zajjal szemben, mivel differenciális jelmódszert alkalmaznak az átvitelhez.
- Az RS-485 gyorsabb az I2C protokollhoz képest.
RS-485 Arduinóban
Az RS-485 Arduino alkalmazásához az 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, és kétirányú. Fél duplex módban adatátviteli sebessége 2. 5Mbps.
Az 5 V MAX485 TTL - RS485 modul 5 V feszültséget igényel, és 5 V logikai szinteket használ, hogy összekapcsolhatók legyenek az Arduino-hoz hasonló mikrokontrollerek hardveres soros portjaival.
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
Az RS-485 kitűzése:
PIN neve |
Használat |
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ű) |
Ez az RS-485 modul egyszerűen összekapcsolható az Arduino-val. Használjuk az Arduino 0 (RX) és 1 (TX) (UNO, NANO) hardveres soros portjait. A programozás is egyszerű, csak a Serial.print () segítségével írjon az RS-485-re, és a Serial.Read () segítségével olvassa el az RS-485-öt.
A programozási részt később részletesen ismertetjük, de először ellenőrizhetjük a szükséges alkatrészeket és a kapcsolási rajzot.
Szükséges alkatrészek
- Arduino UNO vagy Arduino NANO (2)
- MAX485 TTL - RS485 átalakító modul - (2)
- 10K potenciométer
- 16x2 LCD kijelző
- VEZETTE
- Kenyérlemez
- Vezetékek csatlakoztatása
Ebben az oktatóanyagban az Arduino Uno mester, az Arduino Nano pedig Slave. Két Arduino alaplapot használnak itt, így két RS-485 modulra van szükség.
Kördiagramm
Áramköri kapcsolat az első RS-485 és az Arduino UNO (Master) között:
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE ÚJRA |
8. |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
A Slave RS-485 A-hoz |
B |
Az RS-485 szolga B-hez |
Kapcsolat a második RS-485 és az Arduino Nano (Slave) között:
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE ÚJRA |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Az RS-485 mester A-hoz |
B |
Az RS-485 mester B-hez |
Áramköri kapcsolat egy 16x2 LCD és az Arduino Nano között:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Potenciométer középső csapjához az LCD kontrasztszabályozásához |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
10K potenciométer van csatlakoztatva az Arduino UNO A0 analóg csatlakozójához az analóg bemenet biztosításához, és egy LED csatlakozik az Arduino Nano D10 tűjéhez.
Arduino UNO és Arduino Nano programozása az RS485 soros kommunikációhoz
Mindkét kártya programozásához az Arduino IDE-t használják. 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.
A bemutató végén egy teljes kódot és egy bemutató videót adunk meg. Itt elmagyarázzuk a kód fontos részét. Ebben az oktatóanyagban két program található, az egyik az Arduino UNO (Master) és a másik az Arduino Nano (Slave) számára.
Kódmagyarázat a Master számára: Arduino UNO
A Master oldalon egyszerűen vegye be az analóg bemenetet az A0 tűnél a potenciométer változtatásával, majd írja be ezeket az értékeket az RS-485 buszra az Arduino UNO Hardver soros portjain (0,1) keresztül.
A soros kommunikáció megkezdéséhez hardver soros csapoknál (0,1) használja:
Serial.begin (9600);
Az analóg érték leolvasása az Arduino UNO A0-as érintkezőjénél és tárolásuk egy változó potval használatban:
int potval = analogRead (pushval);
Írása előtt a potval értéket soros port, csapok DE & RE RS-485 legyen HIGH hogy csatlakozik a csap 8 Arduino UNO így készítsünk pin 8 HIGH:
digitalWrite (enablePin, HIGH);
Az értéket az RS-485 modullal összekapcsolt soros portba helyezve használja a következő állítást
Soros.println (potval);
Kódmagyarázat a Slave-hez: Arduino NANO
A Slave oldalon egy egész értéket kap az RS-485 Master, amely az Arduino Nano Hardver soros portjánál érhető el (-0,1 láb). Egyszerűen olvassa el ezeket az értékeket, és tárolja egy változóban. Az értékek a (0 -1023) formában vannak. Tehát (0–255) alakításra kerül, mivel a PWM technikát használják a LED fényerejének szabályozására.
Ezután Analogírja az átalakított értéket a D10 LED csapra (ez egy PWM tű). Tehát a PWM értéktől függően a LED fényereje megváltozik, és ezeket az értékeket 16x2 LCD kijelzőn is megjeleníti.
Annak érdekében, hogy a Slave Arduino RS-485-ös készüléke megkapja az értékeket a Mestertől, egyszerűen állítsa az RS-485 LOW csavarjait DE és RE-re. Tehát az Arduino NANO D8 csapja (enablePin) LOW.
digitalWrite (enablePin, LOW);
És elolvassa a soros porton elérhető egész adatokat és tárolja azokat változó használatban
int pwmval = Soros.parseInt ();
Következő értéket konvertáljon (0-1023 - 0-255) értékre, és tárolja őket egy változóban:
int konvert = térkép (pwmval, 0,1023,0,255);
Ezután írja az analóg értéket (PWM) a D10 tűre, ahol a LED anód van csatlakoztatva:
analogWrite (ledpin, konvertálás);
Ezeknek a PWM értékeknek a nyomtatásához használja a 16x2 LCD kijelzőt
lcd.setCursor (0,0); lcd.print ("PWM MASTER-től"); lcd.setCursor (0,1); lcd.print (konvertálás);
A LED fényerejének vezérlése az RS485 soros kommunikációval
Ha a PWM értékét potenciométerrel 0-ra állítják, a LED kikapcsol.
És amikor a PWM értékét potenciométerrel 251-re állítják: A LED teljes fényerővel bekapcsol, ahogy az alábbi képen látható:
Tehát az RS485 használható soros kommunikációra az Arduino-ban.