- Különbség az UART és az RS485 kommunikáció között
- Szükséges alkatrészek
- Áramkör a nagy távolságú vezetékes kommunikációhoz
- MAX485 UART-RS485 átalakító modul
- Ethernet CAT-6E kábel
- Arduino kód magyarázat
- Következtetés
Már régóta használunk olyan mikrokontroller fejlesztőtáblákat, mint az Arduino, a Raspberry Pi, a NodeMCU, az ESP8266, az MSP430 stb., Olyan kis projektjeinkben, ahol az érzékelők és a kártya közötti távolság legtöbbször max. ezeken a távolságokon a különböző érzékelő modulok, relék, működtetők és vezérlők közötti kommunikáció egyszerűen megtehető egyszerű áthidaló vezetéken keresztül anélkül, hogy aggódnánk a közeg jel torzulásáért és az abba kúszó elektromos zajokért. De ha egy vezérlő rendszert épít ilyen fejlesztő táblákkal 10 és 15 méter közötti távolságra, akkor vegye figyelembe a zaj- és jelerősséget, mert ha azt szeretné, hogy a rendszere megbízhatóan működjön, akkor nem engedheti meg magának, hogy elveszítse a adatátvitel közben.
Számos különféle soros kommunikációs protokoll létezik, mint például az I2C és az SPI, amelyek könnyen megvalósíthatók az Arduino-val, és ma egy másik, leggyakrabban használt RS485 protokollt fogunk megvizsgálni, amelyet nagyon gyakran használnak magas zajszintű ipari környezetekben az adatok továbbítására nagy távolság. Ebben az oktatóanyagban megismerkedünk az RS485 kommunikációs protokollal és annak megvalósításával a nálunk lévő két Arduino Nano-val, valamint a MAX485 RS485 - UART átalakító modul használatával. Korábban MAX485 kommunikációt folytattunk az Arduinóval és a MAX485 kommunikációt a Raspberry pi-vel is, ha érdekli őket, akkor is megnézheti őket.
Különbség az UART és az RS485 kommunikáció között
A legtöbb olcsó érzékelő és egyéb modul, például GPS, Bluetooth, RFID, ESP8266 stb., Amelyeket az Arduino, a Raspberry Pi és a piacon általában használnak, UART TTL alapú kommunikációt használ, mert csak 2 vezetékes TX (adó) és RX szükséges (Vevő). Ez nem egy szabványos kommunikációs protokoll, hanem egy fizikai áramkör, amellyel soros adatokat továbbíthat és fogadhat más perifériákkal. Csak sorosan képes továbbítani / fogadni az adatokat, ezért először a párhuzamos adatokat soros adatokká alakítja, majd továbbítja az adatokat.
Az UART aszinkron átviteli eszköz, ezért nincs órajel az adatok szinkronizálására a két eszköz között, ehelyett az egyes adatcsomagok kezdeténél és végén egy kezdő és egy leállító bitet használ az átvitt adatok szélső pontjainak megjelölésére. Az UART által továbbított adatok csomagokba vannak rendezve. Minden csomag tartalmaz 1 kezdőbitet, 5–9 adatbitet (az UART-tól függően), egy opcionális paritásbitet és 1 vagy 2 stopbitet. Nagyon jól dokumentált és széles körben használt, és van egy paritásbitje is, amely lehetővé teszi a hibák ellenőrzését. De vannak bizonyos korlátai, mivel nem képes több rabszolgát és több mesteret támogatni és a maximális adatkeret 9 bitre korlátozódik. Az adatátvitelhez mind a Master, mind a Slave adatátviteli sebességének egymás 10% -a között kell lennie. Az alábbiakban bemutatjuk azt a példát, hogy egy karakter hogyan továbbít egy UART adatsort. A magas és alacsony jelet a GND szinthez viszonyítva mérik, így a GND szintjének eltolása katasztrofális hatással lesz az adatátvitelre.
Másrészt az RS485 inkább ipari alapú kommunikáció, amelyet több eszköz hálózatához fejlesztettek ki, amelyek nagy távolságokon és nagyobb sebességeken is használhatók. Differenciál jelzési módszerrel működik, nem pedig feszültségméréssel, a GND-csavarral. Az RS485 jelek lebegnek, és mindegyik jelet Sig + vonalon és Sig-vonalon továbbítják.
Az RS485 vevő mindkét jel közötti feszültségkülönbséget hasonlítja össze a jelvezeték abszolút feszültségszintje helyett. Ez jól működik, és megakadályozza a földi hurkok létezését, amely a kommunikációs problémák általános forrása. A legjobb eredményt akkor érjük el, ha a Sig + és a Sig-vonalak megcsavarodnak, mivel a csavarás semmissé teszi a kábelben előidézett elektromágneses zaj hatását, és sokkal jobb immunitást biztosít a zaj ellen, amely lehetővé teszi az RS485 számára, hogy az adatokat akár 1200 m hatótávolságig továbbítsa. A sodrott pár lehetővé teszi, hogy az átviteli sebesség sokkal nagyobb legyen, mint ami egyenes kábelekkel lehetséges. Kis átviteli távolságokon akár 35Mbps sebesség is megvalósítható az RS485 segítségével, bár az átviteli sebesség a távolságtól csökken. 1200 m átviteli sebességnél csak 100 kbps sebességet használhat. A kommunikációs protokoll megvalósításához speciális Ethernet-kábelre van szükség. Az Ethernet-kábelek sok kategóriája létezik, például CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A stb. Oktatóanyagunkban CAT-6E kábelt fogunk használni amely 4 sodrott 24AWG vezetékpárral rendelkezik, és 600 MHz-ig képes támogatni. Mindkét végén egy RJ45 csatlakozó zárja le. A vonali meghajtók tipikus hálózati feszültségszintje minimum ± 1,5 V, de legfeljebb ± 6 V. A vevő bemeneti érzékenysége ± 200 mV. A ± 200 mV tartományban lévő zaj lényegében blokkolva van a közös üzemmódú zajcsökkentés miatt. Példa arra, hogy a bájt (0x3E) hogyan kerül az RS485 kommunikáció két vonalára.
Szükséges alkatrészek
- 2 × MAX485 átalakító modul
- 2 × Arduino Nano
- 2 × 16 * 2 alfanumerikus LCD
- 2 × 10k ablaktörlő potenciométerek
- Cat-6E Ethernet kábel
- Kenyérlapok
- Jumper huzalok
Áramkör a nagy távolságú vezetékes kommunikációhoz
Az alábbi kép az adó és vevő kapcsolási rajzát mutatja az Arduino távolsági vezetékes kommunikációjához. Ne feledje, hogy mind az adó, mind a vevő áramköre azonos, az egyetlen dolog, ami különbözik, az a beleírt kód. A bemutatón is egy táblát használunk adóként és egy kártyát vevőként, de könnyen beprogramozhatjuk, hogy a táblák adóként és vevőként is működjenek, ugyanazzal a beállítással
A fenti áramkör csatlakozási rajzát az alábbiakban is megadjuk.
Amint a fentiekből látható, két közel azonos áramkör van, mindegyiknek Arduino nano, 16 * 2 alfanumerikus LCD és MAX485 UART – RS485 átalakító IC van csatlakoztatva az Ethernet Cat-6E kábel mindkét végéhez RJ45 csatlakozón keresztül. A kábel, amelyet az oktatóanyagban használtam, 25 m hosszú. Néhány adatot elküldünk az adó oldaláról a Nano kábelén keresztül, amelyet RS485 jelekké alakítunk át a Master módban dolgozó MAX RS485 modulon keresztül.
A fogadó végén a MAX485 átalakító modul Slave-ként működik, és a Master-től érkező adást hallgatva ismét átalakítja a kapott RS485-ös adatokat standard 5V TTL UART jelekké, amelyeket a fogadó Nano olvashat és 16-on jelenít meg 2 alfanumerikus LCD csatlakozik hozzá.
MAX485 UART-RS485 átalakító modul
Ez az UART-RS485 átalakító modul beépített MAX485 chipet tartalmaz, amely alacsony fogyasztású és korlátozott sebességű korlátozott adó-vevő, amelyet RS-485 kommunikációhoz használnak. Egyetlen + 5 V-os tápegységen működik, és a névleges áram 300 μA. Fél-duplex kommunikáción működik, hogy megvalósítsa a TTL szint RS-485 szintre konvertálásának funkcióját, ami azt jelenti, hogy bármikor továbbíthat vagy fogadhat, mindkettő nem, maximális 2,5 Mbps sebességet képes elérni. A MAX485 adó-vevő terheletlen vagy teljesen megterhelt körülmények között 120μA és 500μA közötti tápáramot von le, amikor a vezető le van tiltva. A meghajtó rövidzárlati áramra korlátozott, és a meghajtó kimenetei nagy impedanciájú állapotba helyezhetők a hőkapcsoló áramkörön keresztül. A vevő bemenetének van egy hibabiztos funkciója, amely garantálja a logikai magas kimenetet, ha a bemenet nyitott áramkörű.Ezenkívül erős anti-interferencia teljesítményt nyújt. Ezenkívül fedélzeti LED-ekkel jeleníti meg a chip aktuális állapotát, vagyis hogy a chip működik-e, vagy továbbítja vagy fogadja az adatokat, megkönnyítve ezzel a hibakeresést és a felhasználást.
A fent megadott kapcsolási rajz elmagyarázza, hogy a fedélzeti MAX485 IC hogyan kapcsolódik a különféle alkatrészekhez, és 0,1 hüvelykes szabványos távolságtartó fejléceket biztosít, amelyeket a kenyérlemezzel lehet használni, ha úgy tetszik.
Ethernet CAT-6E kábel
Ha nagy távolságú adatátvitelre gondolunk, azonnal gondolkodunk azon, hogy Ethernet kábelen keresztül csatlakozzunk-e az internethez. Manapság leginkább a Wi-Fi-t használjuk az internetkapcsolathoz, de korábban az egyes személyi számítógépekhez tartozó Ethernet kábeleket használtuk az internethez való csatlakozáshoz. Az Ethernet kábelek normál vezetéken történő használatának fő oka az, hogy sokkal jobb védelmet nyújtanak a zaj behatolása és a jel torzulása ellen nagy távolságokon. Az elektromágneses interferencia elleni védelem érdekében a szigetelőrétegen árnyékoló kabát van, és mindegyik huzalpár össze van csavarva, hogy megakadályozzák az áram hurokképződését, és ezáltal sokkal jobb védelmet nyújtsanak a zaj ellen. Gyakran végződik 8 tűs RJ45 csatlakozókkal mindkét végén. Az Ethernet-kábelek sok kategóriája létezik, például CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A stb. Oktatóanyagunkban CAT-6E kábelt fogunk használni, amely 4 sodrott 24AWG vezetékpárral rendelkezik, és 600 MHz-ig képes támogatni.
A CAT-6E kábel szigetelőrétegén belül egy pár vezeték sodródása
RJ-45 csatlakozó CAT-6E Ethernet kábelhez
Arduino kód magyarázat
Ebben a projektben két Arduino Nano-t használunk, egyet adóként és egyet vevőként, melyek mindegyike 16 * 2-es alfanumerikus LCD-t vezet az eredmények megjelenítéséhez. Tehát az Arduino kódban az adatok küldésére és az elküldött vagy fogadott adatok megjelenítésére koncentrálunk az LCD képernyőn.
Adóoldal esetén:
Először az LCD meghajtó szabványos könyvtárának beillesztésével kezdjük, és kimeneti tűként deklaráljuk az Arduino Nano D8-as tűjét, amelyet később a MAX485 modul adónak vagy vevőnek nyilvánításával fogunk használni.
int enablePin = 8; int potval = 0; #include
Most jön a beállítási rész. Magasra húzzuk az engedélyező csapot, hogy a MAX485 modult adó módba állítsuk. Mivel ez egy fél-duplex IC, ezért nem képes egyszerre továbbítani és fogadni. Itt inicializáljuk az LCD-t is, és üdvözlő üzenetet nyomtatunk.
Serial.begin (9600); // soros inicializálása 9600-as sebességgel: pinMode (enablePin, OUTPUT); lcdbegin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Nano adó"); késés (3000); lcd.clear ();
Most a ciklusban folyamatosan növekvő egész értéket írunk a soros vonalakra, amelyet ezután továbbítunk a másik nanóra. Ezt az értéket az LCD-re is nyomtatják a megjelenítés és a hibakeresés céljából.
Soros.nyomtatás ("Elküldött érték ="); Soros.println (potval); // POTval soros írása az RS-485 buszra lcd.setCursor (0,0); lcd.print ("Elküldött érték"); lcd.setCursor (0,1); lcd.print (potval); késés (1000); lcd.clear (); potval + = 1;
Vevőoldal:
Itt ismét az LCD meghajtó szabványos könyvtárának beillesztésével kezdjük, és kimeneti tűként deklaráljuk az Arduino Nano D8-as tűjét, amelyet később felhasználunk a MAX485 modul adónak vagy vevőnek nyilvánítására.
int enablePin = 8; #include
Most jön a beállítási rész. Magasra húzzuk az engedélyező csapot, hogy a MAX485 modult vevő módba állítsuk. Mivel ez egy fél-duplex IC, ezért nem képes egyszerre továbbítani és fogadni. Itt inicializáljuk az LCD-t is, és üdvözlő üzenetet nyomtatunk.
Serial.begin (9600); // soros inicializálása 9600-as sebességgel: pinMode (enablePin, OUTPUT); lcdbegin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Nano vevő"); késés (3000); digitalWrite (enablePin, LOW); // (A 8. tű mindig alacsony, hogy értéket kapjon a Mestertől)
Most a ciklusban ellenőrizzük, hogy van-e valami elérhető a soros porton, majd elolvassuk az adatokat, és mivel a bejövő adatok egész számok, ezeket elemezzük és megjelenítjük a csatlakoztatott LCD-n.
int pwmval = Soros.parseInt (); // INTEGER érték fogadása a master-től RS-485 Serial.print ("értéket kaptam"); Soros.println (pwmval); lcd.setCursor (0,0); lcd.print ("Fogadott érték"); lcd.setCursor (0,1); lcd.print (pwmval); késés (1000); lcd.clear ();
Következtetés
Az ehhez a projekthez használt tesztbeállítás az alábbiakban található.
A projekt teljes működése megtalálható az alábbi videóban. Ez a módszer az egyszerű és könnyen megvalósítható módszerek egyike az adatok nagy távolságokra történő továbbítására. Ebben a projektben csak 9600 átviteli sebességet használtunk, amely jóval a maximális átviteli sebesség alatt van, amelyet a MAX-485 modullal el tudunk érni, de ez a sebesség alkalmas a legtöbb érzékelőmodulra, és nem igazán kell az összes maximális sebesség az Arduino és más fejlesztőkártyák használata közben, kivéve, ha a kábelt Ethernet-kapcsolatként használja, és nem igényli az összes elérhető sávszélességet és átviteli sebességet. Játsszon egyedül az átviteli sebességgel, és próbáljon meg más Ethernet-kábeltípusokat is. Ha bármilyen kérdése van, hagyja meg őket az alábbi megjegyzés részben, vagy használja fórumunkat, és megpróbálok minden tőlük telhetőt megválni. Addig, Adios!