Čím dál častěji se mezi digitálními obvody setkáváme s napájecím napětím 3,3 V, případně ještě nižším. Tyto obvody ale nejsou kompatibilní s TTL logikou a tím vzniká potřeba nějak tyto různé napětí konvertovat. V následujícím textu si ukážeme jednoduchý způsob, jak se s tímto problémem vypořádat.
Nejčastěji se s tímto problémem setkáte u FPGA a CPLD obvodů, které téměř výhradně pracují s 3,3 V logikou (někdy i nižší). Pokud tyto obvody chcete ovládat pomocí nějakého mikrokontroléru, je pravděpodobné, že se budeme muset vypořádat i s konverzí napěťových úrovní TTL a 3,3 V logiky. (Některé CPLD obvody, např. XC9572XL, jsou na svých vstupech tolerantní k 5 V, ale není tomu tak vždy.)
Konverze z 5 V na 3,3 V
Nebo obecně z vyššího napětí na nižší je možné realizovat pomocí obyčejného děliče napětí. Stačí nám tedy dva rezistory a můžeme v jednom směru komunikovat se zařízením, které pracuje na nižším napětí.
Konverze z 3,3 V na 5 V
Pokud potřebujeme komunikovat opačným směrem, již musíme použít nějaký tranzistor. Nejjednodušší co mně napadá je bipolární NPN tranzistor zapojený se společným emitorem. Opět se ale jedná o jednosměrnou komunikaci od zařízení pracujícího s nižším napětím k vyššímu.
V digitální technice ale většinou potřebujeme komunikovat obousměrně a na to se výše uvedené postupy nehodí. Co když chceme použít I²C sběrnici, která je obousměrná?
Obousměrná konverze
Jedním z možných řešení je použít například použít obvod SN74LVC2T45 (datasheet), což je dvoubitový napěťový konvertor. Jeden obvod tak dokáže konvertovat 2 bity v různém napětí oběma směry. Jeho nevýhoda je ale cena, která se pohybuje okolo 20 kč za kus. Pokud chceme používat I²C sběrnici, tak nám bude stačit jeden šváb, ale v případě že chceme používat SPI, nebo komunikovat paralelně, tak se nám toto řešení prodraží.
Ostatně, použití SN74LVC2T45 se prodraží i v případě, že chcete vyrábět více kusů vašeho zařízení. Naštěstí je tu ještě jedno řešení, které je levnější. Stačí nám k tomu jeden MOSFETový tranzistor a dva pull-up rezistory.
Tento obvod byl představen již docela dávno a pokud si správně pamatuji, tak se používal právě ve spojení s I²C sběrnicí. Dá se ale využít kdekoliv, kde je nutné převádět mezi různými úrovněmi napětí.
Princip obvodu je docela jednoduchý. VL označuje nižší napájecí napětí a VH zase vyšší. SL je signál s nižší (např. 3,3V) logikou a SH zase vyšší (např. 5V). Pokud ani jedna strana nekomunikuje, pull-up rezistory způsobí, že je linka na obou stranách v logické jedničce. Tedy SL=3,3V a SH=5V. Rozdíl napětí mezi vývody source a gate tranzistory je blízké nule a tranzistor je zavřen.
Jakmile levá strana (ta s nižším napětím) spojí linku se zemí (logická nula), rozdíl napětí mezi source a gate tranzistoru stoupne a tím se otevře. Logická nula se objeví i na pravé straně.
Pokud pravá strana spojí linku se zemí, dioda mezi source a drain tranzistoru způsobí, že se zvětší rozdíl napětí mezi source a gate a tranzistor se otevře. Tím se na levé straně objeví logická nula.
A to je všechno. Není to nic složitého a celé řešení vyjde na méně než 5 kč. Vhodný MOSFETem je například BSS123 nebo BSS138. Hodnoty pull-up rezistorů je vhodné zvolit například 10 kΩ.