- Ero UART- ja RS485-tiedonsiirron välillä
- Tarvittavat komponentit
- Piirikaavio pitkän matkan langallista viestintää varten
- MAX485 UART-RS485 -muunninmoduuli
- Ethernet CAT-6E -kaapeli
- Arduino-koodin selitys
- Johtopäätös
Olemme käyttäneet mikrokontrollerien kehityskortteja, kuten Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 jne., Jo pitkään pienissä projekteissamme, joissa suurin osa kertaa antureiden ja kortin välinen etäisyys on enintään muutama senttimetri max ja näillä etäisyyksillä erilaisten anturimoduulien, releiden, toimilaitteiden ja ohjaimien välinen tiedonsiirto voidaan helposti tehdä yksinkertaisilla hyppyjohdoilla ilman, että me olemme huolissamme väliaineen signaalin vääristymästä ja siihen hiipivistä sähkömeluista. Mutta jos rakennat ohjausjärjestelmää näiden kehityskorttien kanssa yli 10-15 metrin etäisyydellä, sinun on otettava huomioon melu ja signaaliteho, koska jos haluat järjestelmän toimivan luotettavasti, sinulla ei ole varaa menettää tietoja siirtämisen aikana.
On olemassa monia erityyppisiä sarjaliikenneprotokollia, kuten I2C ja SPI, jotka voidaan helposti toteuttaa Arduinon kanssa, ja tänään aiomme tarkastella toista yleisimmin käytettyä protokollaa nimeltä RS485, jota käytetään hyvin yleisesti korkean melun teollisissa ympäristöissä tietojen siirtämiseksi yli pitkä matka. Tässä opetusohjelmassa aiomme oppia RS485-kommunikaatioprotokollasta ja siitä, miten se voidaan toteuttaa kahdella Arduino Nano -laitteella, joita meillä on, ja kuinka käyttää MAX485 RS485 - UART -muunnosmoduulia. Aikaisemmin olemme myös suorittaneet MAX485-viestinnän Arduinon kanssa ja myös MAX485-viestinnän Raspberry pi: n kanssa, voit myös tarkistaa ne, jos olet kiinnostunut.
Ero UART- ja RS485-tiedonsiirron välillä
Suurin osa Arduinon kanssa yleisesti käytetyistä edullisista antureista ja muista moduuleista, kuten GPS, Bluetooth, RFID, ESP8266, Raspberry Pi käyttää UART TTL-pohjaista viestintää, koska se vaatii vain 2 johtoa TX (lähetin) ja RX (Vastaanotin). Se ei ole tavallinen tiedonsiirtoprotokolla, mutta se on fyysinen piiri, jolla voit lähettää ja vastaanottaa sarjatietoja muiden oheislaitteiden kanssa. Se voi lähettää / vastaanottaa dataa vain sarjaan, joten se muuntaa ensin rinnakkaisdatan sarjatiedoksi ja lähettää sitten datan.
UART on asynkroninen lähetyslaite, joten ei ole kellosignaalia datan synkronoimiseksi kahden laitteen välillä, vaan se käyttää aloitus- ja lopetusbittejä vastaavasti kunkin datapaketin alussa ja lopussa merkitsemään siirrettävän datan ääripäät. UART-lähetetty data on järjestetty paketteihin. Jokainen paketti sisältää 1 aloitusbitin, 5-9 databittiä (UART: sta riippuen), valinnaisen pariteettibitin ja 1 tai 2 lopetusbittiä. Se on hyvin dokumentoitu ja laajalti käytetty, ja sillä on myös pariteettibitti virheen tarkistamiseksi. Mutta sillä on joitain rajoituksia, koska se ei voi tukea useita orjia ja useita isäntiä ja suurin datakehys on rajoitettu 9 bittiin. Tiedonsiirtoa varten sekä master- että slave-tiedonsiirtonopeuksien on oltava 10%: n välillä. Alla on esimerkki siitä, kuinka merkki on lähetin UART-tietolinjalla. Signaalin korkea ja matala arvo mitataan suhteessa GND-tasoon, joten GND-tason siirtämisellä on tuhoisa vaikutus tiedonsiirtoon.
Toisaalta RS485 on teollisuuteen perustuvampaa viestintää, joka on kehitetty useiden laitteiden verkolle, jota voidaan käyttää pitkiä matkoja ja suuremmilla nopeuksilla. Se toimii differentiaalisella signalointimenetelmällä pikemminkin kuin jännitteenmittauksella kirjoitettu GND-tappi. RS485-signaalit ovat kelluvia ja kukin signaali lähetetään Sig + -linjan ja Sig-linjan kautta.
RS485-vastaanotin vertaa molempien linjojen välistä jännite-eroa signaalilinjan absoluuttisen jännitetason sijaan. Tämä toimii hyvin ja estää maasilmukoiden, yleisen viestintäongelmien lähteen, olemassaolon. Parhaat tulokset saavutetaan, jos Sig +- ja Sig-linjat kierretään, koska kiertyminen mitätöi kaapelissa syntyvän sähkömagneettisen kohinan vaikutuksen ja tarjoaa paljon paremman immuniteetin melua vastaan, jonka avulla RS485 voi lähettää dataa jopa 1200 metrin kantamaan. Kierretty pari sallii myös siirtonopeuden olla paljon suurempi kuin mikä on mahdollista suorilla kaapeleilla. Pienillä lähetysetäisyyksillä jopa 35Mbps nopeus voidaan toteuttaa RS485: llä, vaikka lähetysnopeus pienenee etäisyyden myötä. Lähetysnopeudella 1200 m voit käyttää vain 100 kbps lähetysnopeutta. Tarvitset erityisen Ethernet-kaapelin tämän tiedonsiirtoprotokollan toteuttamiseksi. Voimme käyttää monia Ethernet-kaapeliluokkia, kuten CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A jne. Opetusohjelmassa aiomme käyttää CAT-6E-kaapelia jossa on 4 kierrettyä paria 24AWG-johtoa ja joka voi tukea jopa 600 MHz. Se on päätetty molemmista päistä RJ45-liittimellä. Tyypilliset verkkojännitetasot linjaajureilta ovat vähintään ± 1,5 V ja enintään noin 6 V. Vastaanottimen tuloherkkyys on ± 200 mV. Melu alueella ± 200 mV on olennaisesti estetty yhteismoodin melunvaimennuksen vuoksi. Esimerkki tavun (0x3E) siirtämisestä RS485-tiedonsiirron kahdella rivillä.
Tarvittavat komponentit
- 2 × MAX485-muunninmoduuli
- 2 × Arduino Nano
- 2 × 16 * 2 aakkosnumeerinen LCD-näyttö
- 2 × 10k pyyhinpotentiometrit
- Cat-6E-Ethernet-kaapeli
- Leipälaudat
- Neulalangat
Piirikaavio pitkän matkan langallista viestintää varten
Alla olevassa kuvassa näkyy lähettimen ja vastaanottimen kytkentäkaavio Arduinon langallisesta kaukoliikenteestä. Huomaa, että sekä lähetin- että vastaanotinpiirit näyttävät identtisiltä, ainoa eroava asia on siihen kirjoitettu koodi. Myös esittelyssä käytämme yhtä korttia lähettimenä ja yhtä korttia vastaanottimena, mutta voimme helposti ohjelmoida levyt toimimaan sekä lähettimenä että vastaanottimina samalla asetuksella
Yllä olevan piirin kytkentäkaavio on myös annettu alla.
Kuten yllä voit nähdä, on kaksi lähes identtistä piiriparia, joista jokaisella on Arduino-nano, 16 * 2 aakkosnumeerinen LCD-näyttö ja MAX485 UART – RS485-muunninpiiri, joka on kytketty Ethernet Cat-6E -kaapelin molempiin päihin RJ45-liittimen kautta. Opetuksessa käytetyn kaapelin pituus on 25 metriä. Lähetämme joitain tietoja lähettimen puolelta Nano-kaapelin kautta, joka muunnetaan RS485-signaaleiksi Master-tilassa toimivan MAX RS485 -moduulin kautta.
Vastaanottopäässä MAX485-muunninmoduuli toimii orjana, ja kuuntelemalla isännältä tulevaa lähetystä, se muuntaa vastaanotetut RS485-tiedot jälleen vakiomuotoisiksi 5 V TTL UART -signaaleiksi, jotka vastaanottava Nano lukee ja näytetään 16 * 2 siihen yhdistetty aakkosnumeerinen LCD-näyttö.
MAX485 UART-RS485 -muunninmoduuli
Tässä UART-RS485-muunninmoduulissa on sisäinen MAX485-siru, joka on pienitehoinen ja rajoitetun nopeuden rajoitettu lähetin-vastaanotin, jota käytetään RS-485-viestintään. Se toimii yhdellä + 5 V: n virtalähteellä ja nimellisvirta on 300 μA. Se toimii puoliduplex-tiedonsiirrossa ja toteuttaa toiminnon, jolla TTL-taso muunnetaan RS-485-tasoksi, mikä tarkoittaa, että se voi joko lähettää tai vastaanottaa milloin tahansa, ei molempien, vaan saavuttaa enimmäislähetysnopeuden 2,5 Mbps. MAX485-lähetinvastaanotin vetää 120--500 μA: n syöttövirran kuormittamattomissa tai täysin kuormitetuissa olosuhteissa, kun kuljettaja on pois käytöstä. Ohjainta on rajoitettu oikosulkuvirralle, ja ohjaimen lähdöt voidaan sijoittaa korkean impedanssin tilaan lämpösammutuspiirin kautta. Vastaanottimen tulossa on vikaturvallinen ominaisuus, joka takaa logiikan korkean tehon, jos tulo on avoin piiri.Lisäksi sillä on vahva häiriöidenesto. Siinä on myös LED-merkkivalot, jotka näyttävät sirun nykyisen tilan, eli onko sirulla virtaa vai lähetetäänkö tai lähetetäänkö tietoja helpottamaan virheenkorjausta ja käyttöä.
Yllä oleva piirikaavio selittää, kuinka sisäinen MAX485 IC on kytketty eri komponentteihin, ja tarjoaa 0,1 tuuman vakiovälitunnistimet, joita voidaan käyttää leivän kanssa, jos haluat.
Ethernet CAT-6E -kaapeli
Kun ajattelemme pitkän matkan tiedonsiirtoa, ajattelemme välittömästi yhteyden muodostamista Internetiin Ethernet-kaapeleilla. Nykyään käytämme enimmäkseen Wi-Fi-yhteyttä Internet-yhteyteen, mutta aiemmin käytimme jokaisen henkilökohtaisen tietokoneen Ethernet-kaapeleita yhdistääksesi sen Internetiin. Tärkein syy näiden Ethernet-kaapeleiden käyttämiseen tavallisilla johdoilla on, että ne tarjoavat paljon paremman suojan melua hiipivältä ja signaalin vääristymiseltä suurilla etäisyyksillä. Heillä on suojavaippa eristekerroksen päällä suojaamaan sähkömagneettisilta häiriöiltä, ja myös jokainen johtopari on kierretty yhteen estämään virtasilmukan muodostuminen ja siten paljon parempi suoja melua vastaan. Ne on usein päätetty 8-napaisilla RJ45-liittimillä kummassakin päässä. Voimme käyttää useita Ethernet-kaapeliluokkia, kuten CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A jne. Opetusohjelmassa aiomme käyttää CAT-6E-kaapelia, jossa on 4 kierrettyä paria 24AWG-johtoa ja joka voi tukea jopa 600 MHz.
Kuva siitä, kuinka johdinpari kiertyy CAT-6E-kaapelin eristekerroksen sisällä
RJ-45-liitin Tarkoitettu CAT-6E Ethernet-kaapelille
Arduino-koodin selitys
Tässä projektissa käytämme kahta Arduino Nanoa, yhtä lähettimenä ja yhtä vastaanottimena, jotka kumpikin käyttävät 16 * 2 aakkosnumeerista LCD-näyttöä tulosten näyttämiseen. Joten Arduino-koodissa keskitymme lähetettyjen tai vastaanotettujen tietojen lähettämiseen ja näyttöön LCD-näytöllä.
Lähettimen puoli:
Aloitetaan sisällyttämällä nestekidenäytön tavallinen kirjasto ja julistetaan Arduino Nanon D8-tappi lähtötappiksi, jota myöhemmin käytämme julistamaan MAX485-moduulin lähettimeksi tai vastaanottimeksi.
int enablePin = 8; int potval = 0; #sisältää
Nyt tulossa asennusosaan. Vedämme aktivointitapin korkealle, jotta MAX485-moduuli lähetetään lähetintilaan. Koska se on puoliduplex IC, se ei voi sekä lähettää että vastaanottaa samanaikaisesti. Alustamme myös nestekidenäytön tähän ja tulostamme tervetuloviestin.
Sarjan alku (9600); // alustaa sarja nopeudella 9600: pinMode (enablePin, OUTPUT); lcd-alku (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Lähetin Nano"); viive (3000); lcd.clear ();
Nyt silmukassa kirjoitamme jatkuvasti kasvavan kokonaisluvun sarjajohtoihin, joka sitten lähetetään toiselle nanolle. Tämä arvo tulostetaan myös nestekidenäyttöön näyttöä ja virheenkorjausta varten.
Sarja.tulos ("Lähetetty arvo ="); Sarja.println (potval); // Sarja kirjoita POTval RS-485-väylään lcd.setCursor (0,0); lcd.print ("Lähetetty arvo"); lcd.setCursor (0,1); lcd.print (potval); viive (1000); lcd.clear (); potval + = 1;
Vastaanottimen puoli:
Tässä taas aloitetaan sisällyttämällä standardikirjasto nestekidenäytön ajamiseen ja julistetaan Arduino Nanon D8-nasta ulostulotapiksi, jota myöhemmin käytämme julistamaan MAX485-moduulin lähettimeksi tai vastaanottimeksi.
int enablePin = 8; #sisältää
Nyt tulossa asennusosaan. Vedämme aktivointitapin korkealle, jotta MAX485-moduuli saadaan vastaanottotilaan. Koska kyseessä on puoliduplex IC, se ei voi sekä lähettää että vastaanottaa samanaikaisesti. Alustamme myös nestekidenäytön tähän ja tulostamme tervetuloviestin.
Sarjan alku (9600); // alustaa sarja nopeudella 9600: pinMode (enablePin, OUTPUT); lcd-alku (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Vastaanotinano"); viive (3000); digitalWrite (enablePin, LOW); // (Nasta 8 aina MATALA saada arvoa Masterilta)
Nyt silmukassa tarkistamme, onko sarjaportissa mitään käytettävissä, ja sitten lukemme tiedot ja koska saapuvat tiedot ovat kokonaisluku, jäsennämme ne ja näytämme liitetyllä LCD-näytöllä.
int pwmval = Sarja.parseInt (); // Vastaanota INTEGER-arvo Master kautta RS-485 Serial.print ("I got value"); Sarja.println (pwmval); lcd.setCursor (0,0); lcd.print ("Vastaanotettu arvo"); lcd.setCursor (0,1); lcd.print (pwmval); viive (1000); lcd.clear ();
Johtopäätös
Tämän projektin testausasetukset löytyvät alla.
Tämän projektin täydellinen toiminta löytyy alla olevasta videosta. Tämä menetelmä on yksi yksinkertaisista ja helposti toteutettavissa olevista menetelmistä datan siirtämiseksi pitkiä matkoja. Tässä projektissa olemme käyttäneet vain 9600 siirtonopeutta, joka on selvästi alle MAX-485-moduulilla saavutettavan enimmäissiirtonopeuden, mutta tämä nopeus sopii useimmille anturimoduuleille siellä, emmekä todellakaan tarvitse kaikki enimmäisnopeudet työskennellessäsi Arduinon ja muiden kehityskorttien kanssa, ellet käytä kaapelia ethernet-yhteytenä ja tarvitset kaiken saatavan kaistanleveyden ja siirtonopeuden. Pelaa itse siirtonopeudella yksin ja kokeile myös muita Ethernet-kaapelityyppejä. Jos sinulla on kysyttävää, jätä ne alla olevaan kommenttiosioon tai käytä foorumeitamme ja yritän parhaani vastata niihin. Siihen asti, adios!