- Rozdíl mezi komunikací UART a RS485
- Požadované komponenty
- Schéma zapojení pro dálkovou kabelovou komunikaci
- Modul převaděče MAX485 UART-RS485
- Kabel Ethernet CAT-6E
- Vysvětlení kódu Arduino
- Závěr
Vývojové desky pro mikrokontroléry jako Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 atd. Používáme již dlouho v našich malých projektech, kde vzdálenost mezi senzory a deskou většinou není maximálně několik centimetrů a na tyto vzdálenosti lze komunikaci mezi různými moduly senzorů, relé, akčními členy a řadiči snadno provádět pomocí jednoduchých propojovacích vodičů, aniž bychom se museli obávat zkreslení signálu v médiu a vnikání elektrických zvuků do něj. Pokud ale stavíte řídicí systém s těmito vývojovými deskami na vzdálenost větší než 10 až 15 metrů, měli byste vzít v úvahu hluk a sílu signálu, protože pokud chcete, aby váš systém fungoval spolehlivě, pak si nemůžete dovolit ztratit data při přenosu.
Existuje mnoho různých typů sériových komunikačních protokolů, jako jsou I2C a SPI, které lze snadno implementovat pomocí Arduina a dnes se podíváme na další nejčastěji používaný protokol s názvem RS485, který se velmi často používá v průmyslovém prostředí s vysokým šumem k přenosu dat na velkou vzdálenost. V tomto tutoriálu se budeme učit o komunikačním protokolu RS485 a o tom, jak jej implementovat pomocí dvou Arduino Nano, které máme u sebe, a jak používat konverzní modul MAX485 RS485 na UART. Dříve jsme také prováděli komunikaci MAX485 s Arduinem a také komunikaci MAX485 s Raspberry pi, v případě zájmu si je také můžete prohlédnout.
Rozdíl mezi komunikací UART a RS485
Většina levných snímačů a dalších modulů, jako jsou GPS, Bluetooth, RFID, ESP8266 atd., Které se běžně používají s Arduino, používá Raspberry Pi na trhu komunikaci založenou na UART TTL, protože vyžaduje pouze 2 vodiče TX (vysílač) a RX (Přijímač). Nejedná se o standardní komunikační protokol, ale o fyzický obvod, pomocí kterého můžete vysílat a přijímat sériová data s dalšími periferiemi. Může odesílat a přijímat data pouze sériově, takže nejprve převede paralelní data na sériová data a poté je přenese.
UART je asynchronní přenosové zařízení, a proto neexistuje žádný hodinový signál pro synchronizaci dat mezi dvěma zařízeními, místo toho používá počáteční a koncové bity na začátku a na konci každého datového paketu k označení konců přenášených dat. UART přenášená data jsou organizována do paketů. Každý paket obsahuje 1 počáteční bit, 5 až 9 datových bitů (v závislosti na UART), volitelný paritní bit a 1 nebo 2 stop bity. Je velmi dobře zdokumentován a široce používán a má také paritní bit umožňující kontrolu chyb. Existují však určitá omezení, protože nemůže podporovat více otroků a více pánů a maximální datový rámec je omezen na 9 bitů. Pro přenos dat musí být přenosové rychlosti Master i Slave mezi 10% navzájem. Níže je uveden příklad toho, jak je postava vysílačem přes datovou linku UART. Vysoké a nízké hodnoty signálu se měří proti úrovni GND, takže posunutí úrovně GND bude mít katastrofální vliv na přenos dat.
Na druhou stranu je RS485 více průmyslovou komunikací, která je vyvinuta pro síť více zařízení, která lze použít na dlouhé vzdálenosti a také při vyšších rychlostech. Pracuje spíše na metodě diferenciální signalizace než na měření napětí pomocí GND pinu. Signály RS485 jsou plovoucí a každý signál je přenášen po lince Sig + a lince Sig-.
Přijímač RS485 porovnává rozdíl napětí mezi oběma linkami namísto absolutní úrovně napětí na signálním vedení. To funguje dobře a zabraňuje existenci pozemních smyček, běžného zdroje komunikačních problémů. Nejlepších výsledků je dosaženo, pokud jsou linky Sig + a Sig zkroucené, protože zkroucení ruší účinek elektromagnetického šumu indukovaného v kabelu a poskytuje mnohem lepší imunitu proti hluku, což umožňuje rozhraní RS485 přenášet data až do vzdálenosti 1200 m. Twisted pair také umožňuje, aby přenosové rychlosti byly mnohem vyšší, než je možné u přímých kabelů. Na malých přenosových vzdálenostech lze s RS485 dosáhnout rychlostí až 35 Mb / s, i když se přenosová rychlost bude se vzdáleností snižovat. Při přenosové rychlosti 1200 m můžete použít pouze přenosovou rychlost 100 kb / s. Pro realizaci tohoto komunikačního protokolu potřebujete speciální ethernetový kabel. Existuje mnoho kategorií ethernetových kabelů, které můžeme použít, jako CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A atd. V našem výukovém programu použijeme kabel CAT-6E který má 4 kroucené páry vodičů 24AWG a může podporovat až 600 MHz. Na obou koncích je zakončen konektorem RJ45. Typické úrovně síťového napětí od budičů vedení jsou minimálně ± 1,5 V až maximálně přibližně ± 6 V. Vstupní citlivost přijímače je ± 200 mV. Hluk v rozsahu ± 200 mV je v podstatě blokován kvůli potlačení šumu v běžném režimu. Příklad toho, jak se bajt (0x3E) přenáší přes dvě linky komunikace RS485.
Požadované komponenty
- 2 × modul převaděče MAX485
- 2 × Arduino Nano
- 2 × 16 * 2 alfanumerický LCD
- Potenciometry stěrače 2 × 10k
- Ethernetový kabel Cat-6E
- Nepájivé pole
- Propojovací dráty
Schéma zapojení pro dálkovou kabelovou komunikaci
Níže uvedený obrázek ukazuje schéma zapojení vysílače a přijímače pro kabelovou komunikaci Arduino na velké vzdálenosti. Mějte na paměti, že obvody vysílače i přijímače vypadají stejně, jediná věc, která se liší, je kód do nich zapsaný. Také pro demonstraci používáme jednu desku jako vysílač a jednu desku jako přijímač, ale můžeme desky snadno naprogramovat tak, aby fungovaly jako vysílač i přijímač se stejným nastavením
Schéma připojení výše uvedeného obvodu je také uvedeno níže.
Jak vidíte výše, existují dva téměř identické páry obvodů, z nichž každý má Arduino nano, 16 * 2 alfanumerický LCD a převaděč MAX485 UART na RS485 IC připojený ke každému konci kabelu Ethernet Cat-6E přes konektor RJ45. Kabel, který jsem použil v tutoriálu, je dlouhý 25 metrů. Některá data pošleme ze strany vysílače po kabelu z Nano, který je převeden na signály RS485 přes MAX RS485 modul pracující v režimu Master.
Na přijímacím konci pracuje modul převodníku MAX485 jako Slave a při poslechu přenosu z Masteru znovu převádí přijímaná data RS485 na standardní signály 5V TTL UART, které mají být načteny přijímajícím Nano a zobrazeny na 16 * 2 Alfanumerický LCD displej připojený k němu.
Modul převaděče MAX485 UART-RS485
Tento modul převaděče UART-RS485 má integrovaný čip MAX485, což je nízkoenergetický transceiver s omezenou rychlostí, který se používá pro komunikaci RS-485. Funguje na jeden napájecí zdroj + 5 V a jmenovitý proud je 300 μA. Funguje na poloduplexní komunikaci k implementaci funkce převodu úrovně TTL na úroveň RS-485, což znamená, že může vysílat nebo přijímat kdykoli, ne obojí, může dosáhnout maximální přenosové rychlosti 2,5 Mb / s. Transceiver MAX485 odebírá napájecí proud mezi 120 μA a 500 μA za nezatížených nebo plně načtených podmínek, když je ovladač deaktivován. Budič je omezen na zkratový proud a výstupy budiče mohou být umístěny ve stavu vysoké impedance přes obvod tepelného vypnutí. Vstup přijímače má funkci zabezpečenou proti selhání, která zaručuje logický vysoký výstup, pokud je vstup otevřený obvod.Kromě toho má silný účinek proti rušení. Má také integrované LED diody, které zobrazují aktuální stav čipu, tj. Zda je čip napájen, nebo zda přenáší nebo přijímá data, což usnadňuje ladění a používání.
Schéma zapojení uvedené výše vysvětluje, jak je integrovaná karta MAX485 IC připojena k různým komponentům, a poskytuje standardní rozteče záhlaví 0,1 palce, které lze použít s prkénkem, pokud chcete.
Kabel Ethernet CAT-6E
Když přemýšlíme o přenosu dat na velké vzdálenosti, okamžitě přemýšlíme o připojení k internetu pomocí ethernetových kabelů. V dnešní době většinou používáme pro připojení k internetu Wi-Fi, ale dříve jsme k jeho připojení k internetu používali ethernetové kabely vedoucí ke každému osobnímu počítači. Hlavním důvodem použití těchto ethernetových kabelů přes normální vodiče je to, že poskytují mnohem lepší ochranu proti pronikání hluku a zkreslení signálu na velké vzdálenosti. Mají stínící plášť přes izolační vrstvu, aby chránili před elektromagnetickým rušením, a také každý pár vodičů je zkroucen dohromady, aby se zabránilo tvorbě proudové smyčky, a tím mnohem lepší ochrana proti hluku. Často jsou zakončeny 8kolíkovými konektory RJ45 na obou koncích. Existuje mnoho kategorií ethernetových kabelů, které můžeme použít, jako CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A atd. V našem výukovém programu použijeme kabel CAT-6E, který má 4 kroucené páry vodičů 24AWG a může podporovat až 600 MHz.
Obrázek ukazuje, jak je pár vodičů zkroucen uvnitř izolační vrstvy kabelu CAT-6E
Konektor RJ-45 určený pro ethernetový kabel CAT-6E
Vysvětlení kódu Arduino
V tomto projektu používáme dva Arduino Nano, jeden jako vysílač a jeden jako přijímač, z nichž každý řídí 16 * 2 alfanumerický LCD displej pro zobrazení výsledků. V kódu Arduino se tedy zaměříme na odesílání dat a zobrazení odeslaných nebo přijatých dat na obrazovce LCD.
Pro stranu vysílače:
Začneme začleněním standardní knihovny pro řízení LCD a deklarujeme pin D8 Arduino Nano jako výstupní pin, který později použijeme pro deklaraci modulu MAX485 jako vysílač nebo přijímač.
int enablePin = 8; int potval = 0; #zahrnout
Nyní přichází do části nastavení. Vytáhneme aktivační kolík vysoko, aby se modul MAX485 dostal do režimu vysílače. Jelikož se jedná o poloduplexní IC, nemůže odesílat a přijímat současně. Zde také inicializujeme LCD a vytiskneme uvítací zprávu.
Serial.begin (9600); // inicializace seriálu při přenosové rychlosti 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("OKRUH DIGEST"); lcd.setCursor (0,1); lcd.print ("Vysílač Nano"); zpoždění (3000); lcd.clear ();
Nyní ve smyčce zapisujeme nepřetržitě rostoucí celočíselnou hodnotu na sériové linky, která se poté přenáší na další nano. Tato hodnota je také vytištěna na LCD pro zobrazení a ladění.
Serial.print ("Odeslaná hodnota ="); Serial.println (potval); // Sériový zápis POTval na sběrnici RS-485 lcd.setCursor (0,0); lcd.print ("Odeslaná hodnota"); lcd.setCursor (0,1); lcd.print (potval); zpoždění (1000); lcd.clear (); potval + = 1;
Strana přijímače:
Zde opět začneme se zahrnutím standardní knihovny pro řízení LCD a deklarujeme pin D8 Arduino Nano jako výstupní pin, který později použijeme k deklaraci modulu MAX485 jako vysílače nebo přijímače.
int enablePin = 8; #zahrnout
Nyní přichází do části nastavení. Vytáhneme aktivační kolík vysoko, aby se modul MAX485 dostal do režimu přijímače. Jelikož se jedná o poloduplexní IC, nemůže odesílat a přijímat současně. Zde také inicializujeme LCD a vytiskneme uvítací zprávu.
Serial.begin (9600); // inicializace seriálu při přenosové rychlosti 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("OKRUH DIGEST"); lcd.setCursor (0,1); lcd.print („Přijímač Nano“); zpoždění (3000); digitalWrite (enablePin, LOW); // (Pin 8 vždy NÍZKÝ pro příjem hodnoty od Master)
Nyní ve smyčce zkontrolujeme, zda je na sériovém portu něco k dispozici, a poté data přečteme, a protože příchozí data jsou celé číslo, analyzujeme je a zobrazíme na připojeném LCD.
int pwmval = Serial.parseInt (); // Příjem hodnoty INTEGER z Master přes RS-485 Serial.print ("Mám hodnotu"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("přijatá hodnota"); lcd.setCursor (0,1); lcd.print (pwmval); zpoždění (1000); lcd.clear ();
Závěr
Nastavení testu, které jsme použili pro tento projekt, najdete níže.
Kompletní fungování tohoto projektu najdete ve videu, na které odkazujete níže. Tato metoda je jednou z jednoduchých a snadno implementovatelných metod pro přenos dat na velké vzdálenosti. V tomto projektu jsme použili pouze přenosovou rychlost 9600, která je hluboko pod maximální přenosovou rychlostí, kterou můžeme dosáhnout s modulem MAX-485, ale tato rychlost je vhodná pro většinu senzorových modulů tam venku a opravdu nepotřebujeme všechny maximální rychlosti při práci s Arduino a dalšími vývojovými deskami, pokud nepoužíváte kabel jako ethernetové připojení a nevyžadujete veškerou šířku pásma a přenosovou rychlost, které můžete získat. Hrajte si s přenosovou rychlostí sami a vyzkoušejte i jiné typy ethernetových kabelů. Máte-li jakékoli dotazy, nechte je v sekci komentářů níže nebo použijte naše fóra a já se pokusím co nejlépe odpovědět. Do té doby, adios!