OK

Při poskytování služeb nám pomáhají soubory cookie. Používáním našich služeb vyjadřujete souhlas s naším používáním souborů cookie. Více informací

Úvodní stránka » Arduino » Arduino v příkladech - VI.díl - Konverze úrovní

Arduino v příkladech - VI.díl - Konverze úrovní

Koupíte si novou periférii (třeba displej), máte radost, že došel, sednete k počítači, vše zapojíte, nahrajete program a nic. Znovu zkontrolujete, stokrát projdete a přepájíte, všechno je v pořádku, ve specifikaci je napsáno 5V compatible, use with 3.3V or 5V logic – TAK TADY SE ZASTAVTE.

To že někdo něco napíše, ještě neznamená, že to je pravda. Hlavně na ebay, nevěřte vůbec ničemu a specifikaci považujte v lepším případě za přibližnou informaci. Co s tím na to se podíváme v tomto díle.

Používané úrovně

Úrovněmi v tomto článku mám na mysli napětí, které se používá při komunikaci UART, SPI, I2C a OneWire mezi Arduinem a perifériemi.

Při práci s Arduinem a perifériemi pro něj určenými, se setkáte s napětím 5V a 3,3V.

Pokud půjdete dál, velká serva, ústředny, kotle atd. tedy vše mimo komunitu Arduino, setkáte se s napětím 12V, výjimečně 1,5V a 24V. Jiná napětí se prakticky nepoužívají.

POZOR: vyskytují se zařízení, které můžete (nebo musíte) napájet 5V, ale komunikační rozhraní je 3,3V – obvykle to je to: "5V compatible, use with 3.3V or 5V logic".

Proč řešit konverzi úrovní

Když připojíte zařízení komunikující na 3,3V na zařízení s 5V, nic se nestane a někdy to bude i fungovat. Když ale 5V pošlete na 3,3V s velkou pravděpodobností to na 3,3V zničíte. Také pamatujte na to, že zařízení komunikují obousměrně – odešlu 3,3V na 5V a dostanu odpověď 5V na 3,3V a zase špatně.

Co vyřešit hned na začátku

Číst, číst a hledat. Když kupujete nové zařízení, je zapotřebí znát dvě věci – funkční knihovnu a parametry zařízení.

Bohužel na webech jako ebay se toho obvykle moc nedozvíte a až budete hledat na jiných webech s návody, neznamená že když fotka vypadá stejně tak se jedná o stejné zařízení. Tady nám neprofesionálům často nezbývá než experimentovat. Proto je dobré mít v zásobě pár převodníků úrovní, které si ukážeme dále.

Mám ale dobrou zprávu. Většina periférií pro Arduino používá napětí 3,3V.

Je to složité? Vskutku není. Ale je v tom takový bordel, že nejednou jsem byl opravdu zoufalý.

Jak na to

Existují 3 řešení, žádné není univerzální a je zapotřebí vybrat vhodnou cestu. Já používám to poslední.

Řešení 1 – žádnou konverzi neprovádíme

Nejjednodušší řešení je navrhnout celý projekt tak, aby jsme nepotřebovali nic konvertovat.

Mám všechny periférie na 3,3V, vyberu takové Arduino, které komunikuje na 3,3V. Pak jenom taháme kabely. Nebo mám 5V .....

Toto řešení má jedno omezení. Limituje nás ve výběru Arduina. MEGA, UNO, NANO komunikuje pouze na 5V, PRO má dvě verze 5V a 3,3V, DUE, GEMMA, MKR1000 na 3,3V. To nevadí, přinejhorším kombinujete s řešením 2 a 3.

Řešení 2 – použijeme napěťový dělič

Osobně to považuji za nouzovku na stole, které řeší konverzi úrovní tak napůl. V reálném provozu se tomu vyhněte.

Za pomoci napěťového děliče můžeme totiž pouze napětí snižovat. Tedy z Arduina nám jde 5V, děličem ho snížíme na 3,3V, ale zpátky z periférie nám do Arduina jde pouze 3,3V.

A tady začínají problémy. Bude potřeba trochu těch technikálií. Např. čip ATMEGA328P (NANO, UNO, PRO) považuje napětí, kdy bezpečně určí TTL logickou 1 min. 4,2V, napětí které by mělo být ještě považováno za TTL logickou 1 je min. 3V.

Jak to funguje v praxi, vrátíme-li Arduinu s ATMEGA328P 3,3V, jsme hluboko pod bezpečnou hranicí, započteme-li odpor vedení, nějaký ten špatný kontakt, je hotovo. Na stole vám to bude fungovat u UART a SPI jako ožralej králík, u I2C nedostaneme data zpět. Až to zapojíte a nasadíte do ostrého provozu, jenom odložíte řešení 3.

Přesto, jestli se s tím chcete mořit, následuje ukázka zapojení:

Jaké použít rezistory. Použijte co najdete na stole, např. kombinace R1/R2 – 1K/1K8 – 1K2/2K2, 3K3/5K6. Přesná hodnota se těžko počítá, protože neznáme proudový odběr přijímače, ale tyto kombinace Vám budou fungovat. Taky pozor, MASTER je ten v vyšším napětím.

Řešení 3 – použijeme převodník úrovní

To je konečně ono, jednoduché a 100% funkční řešení za dvacku. Tedy když převádíme 5V/3,3V. Existují i převodníky na 12V, tady se ceny pohybují v řádu stokorun.

Pro naše projekty s Arduino a perifériemi pro něj určenými se setkáme hlavně s dvěma typy, fungující na stejném principu, jenom je rozdíl v počtu pinů.

Převodník vlevo používáme na SPI, převodník vpravo je vhodný na UART a I2C.

Schéma zapojení převodníku:

Zapojení převodní je vskutku triviální. Prostě zapojíme stejné piny naproti sobě a je vyřešeno. Jenom nezapomeňte – UART se připojuje vysílač – přijímač. Aby převodník fungoval jak má, je nutné ho napájet z obou stran. Prostě přesně jak to vidíte ve schématu.

Názvy pinů se mohou lišit převodník od převodníku. HV1 (hight voltage) = LV1 (low voltage) atd. HV/LV bez čísla obvykle označují VIN.

Hlavní výhodou převodníku je, že funguje obousměrně. Nepohybujete se na mezních hodnotách a je jedno kdo je MASTER a kdo SLAVE.

POZOR – aby komunikace fungovala, musí mít všechna zařízení společnou zem. Je zapotřebí proměřit převodník zda jsou země propojeny, pokud ne, je zapotřebí ji spojit jiným způsobem.

One Wire

Např. čidla DS18B20 jsou tolerantní k napájení a komunikaci v rozsahu 3V – 5,5V. Tady převod úrovní řešit nemusíte.

Závěr

Konverze úrovní je téma, které je stejně důležité jako nákup sám. Existují v zásadě pouze dvě provozuschopná řešení a to 1 a 3. S konverzí úrovní také myslete na dostatečně stabilní zdroj napájení. Napájet GSM modul, nebo Wifi z regulátoru Arduina nebude fungovat. Vždy je lepší mít zvláštní zdroj napájení.

Někdy je také potřeba konvertovat prostý digitální signál, třeba od tlačítka. Také lze převádět úrovně pro proporcionální řízení automatizace 0-10V, 0-20mA, různé frekvence PWM. Na vše existují převodníky – ale např. převodník PWM 5V na 0-10V stojí stejně jako servomotor sám.

Příště se konečně dostaneme k těm displejům. Pro zkušenější bude začátek asi nuda, nebo možná ne až se začneme hrabat v knihovnách. Umíte si zobrazit ikonku uloženou ve flash paměti Arduina?

JB

jaroslav.bohac@arduinotech.cz

Přidat komentář

Zvýrazněné položky jsou povinné.

Přehled komentářů

  1. Dotaz (Jaromír Zeman, 9.5.2016 18:04:24) Odpovědět

    Dobrý den, děkuji za další poučný článek.
    Mám dotaz ohledně různých druhů převodníku 3.3-5v, které máte v článku.
    Pochopil jsem správně, že se tyto převodníky liší pouze počtem vstupů/výstupů ?
    Resp. mohu převodník SPI použít na převod uartu nebo I2C? (jen budu mít navíc 2 vstupy/výstupy).
    Předpokládám, že to tak je, ale proč se nezeptat?
    Díky za odpověď, s Pozudravem J.Zeman


    Ano skutečně je tomu tak. Princip fungování obou převodníku je stejný, 4 kanálový SPI můžete použít jak na UART, tak na I2C.
    JB

  2. 3vTtl (evzen, 5.9.2016 2:13:03) Odpovědět | Zobrazit odpovědi

    Pokud poslu něco z 3.3v zařízení na 5V nemel by byt problém.3V logika ma přísnější specifikaci, 0 je 0 i pro 5V a 1 he vys než minimum pro 5v logiku

    1. Re: 3vTtl (JB, 24.10.2016 22:47:07) Odpovědět

      Už jsem to někde řešil. Nechce se mi hledat přesné údaje, tak ty čísla považujte za orientační. Problém je v tom, že Arduino na 5V logice má 0 při napětí 0-1,2 V, 1,2-3,0 V je logika náhodná a 1 má od 3-5V. Tedy na stole Vám to bude fungovat spolehlivě. V provozu však podmínky bývají jiné. Klesne napájení, může tam být rušení, odpor dlouhého drátu a kde co dalšího. Tedy, klidně to připojte 3V logický výstup na 5V, ale nezlobte se na nikoho, když to bude fungotav tak nějak. jednou jo, pak ne. Věřte mi že strávíte hodiny přepisováním nefunkčního SW, než zjistíte že to marné. Mluvím ze zkušenosti. Prostě, jestli chcete aby to fungovalo na 100%, použijte konverzi úrovní i nahoru. Za tu dvacku to stojí.

  3. 2,8V (Jirka, 19.10.2016 18:12:11) Odpovědět | Zobrazit odpovědi

    Dobry den, dostal se ke mne GSM/GPRS+GPS development board, ten má prý UART 2,8V. Můžu použít převodník úrovní i pro napětí 2,8V? Díky za odpověď Jirka

    1. Re: 2,8V (JB, 24.10.2016 22:54:54) Odpovědět

      Neznám takové zařízení a prý, není moc přesná definice. Pokud jsem viděl tyto zařízení, mají minimální požadované napětí 2,8V, při kterém ještě výrobce zaručuje správnou funkčnost. Myslím (víte co to znamená myslet :-)) že se jedná právě o tuto hodnotu. Nejlepší je vzít datasheet, kde jsou tyto informace uvedené. Pokud je 2,8V minimální požadované napětí, můžete tyto převodníky použít. Pokud je to maximální napětí, lze na stranu logiky 3,3V přivést nižší napětí, třeba těch 2,8V, pak máte logiku 2,8V. Většina převodníků spolehlivě funguje až do 1,5V.

  4. 3,3V/5V (David Dlouhý, 26.1.2017 13:51:02) Odpovědět | Zobrazit odpovědi

    Dobrý den, chtěl bych se zeptat jestli je možné použít převodník (je to ten vlevo na SPI) i obráceně když chci k Due připojit 5V sensor. Konkrétně mám 5V mosfet driver který převádí pwm modulaci na 24V na unu funguje skvěle, ale když ho připojím na due tak mi to nějak neběží pokud odpojím mosfet driver tak mi převodník na výstupu sice ukazuje zhruba 5V ale jak ho připojím tak to spadne na 2,5V. Obráceně z 5-3v jede bez problémů, tak jsem se chtěl zeptat jestli něco dělám špatně, a nebo máte v prodeji něco co funguje lépe.

    1. Re: 3,3V/5V (Jaroslav Boháč, 9.2.2017 23:17:54) Odpovědět

      Aurdino DUE má 3,3V logiku. To může být důvod proč Vás zlobí 5V Mosfet. Osobně bych na to vsadil, alespoň podle toho jak si to představuji dle Vašeho popisu. Řešení jsou dvě. Buď použít převodník a zvýšit tak výstup na 5V. Tady záleží na frekvenci přepínání, otázka je zda to bude převodník stíhat. Druhé řešení je použít tranzistor. Proč - Mosfet spínáte napětím, tranzistor proudem. Tedy na tranzistor můžete přivést nižší napětí a pokud ho zvolíte správně bude to fungovat.

      Snad ještě doporučení na které se zapomíná. Mosfet, pokud není gate připojen k uzemnění se Vám bude sám otevírat. Existuje na to spousta článků na webu. Jinak to může být také důvod proč Vás to zlobí.


TOP produkty

Arduino DUE

Arduino DUE
696 Kč s DPH

Arduinotech GSM shield

Arduinotech GSM shield
877 Kč s DPH

Kontakt

Ing. Petr Foltýn
Kunčice pod Ondřejníkem 814, 73913
TOPlist