Ano je to neuvěřitelné - narazil jsem na problém, který jsem ještě neprobral, který je až natolik důležitý, že si zasluhuje oživení starého dobrého seriálu článků o "vidlácké elektronice". Před týdnem jsem se rozčiloval, že programovací port pro AVR procesory není odolný, proti zapojení konektoru "naopak" a vyzýval jsem k navržení konektoru, který je blbuvzdorný, a zároveň jsem spekuloval jak blbuvzdornost a nepřepólovatelnost a nespálitelnost nějak "dodělat" do programátoru procesorů Atmel AVR. Přestože vím, že je to zpozdilost, protože příznivci Arduína vědí, že se programuje "přes USB" tak my "elektro-důchodci" víme, že Arduino bez bootloaderu by bylo mrtvý kus křemíku na rozdíl od stejného procesoru - tedy AVR programovaného tak jak bylo původně výrobcem zamýšleno - to jest paralelním programátorem, nebo ISP portem.
Takže co je příčinou "neblbuvzdornosti" digitálních výstupů. Princip je v tom, že moderní CMOS Vstupy mají prakticky nekonečný odpor, ochranné diody na vstupu a pokud před ně předřadíte nějaké další externí ochrany v podobě dalších diod, odporů, transilů, trisilů, doutnavek a bleskojistek - lze vstup obvodu ochránit téměř pred čímkoliv - snad kromě přímého úderu blesku kdy magnetickým polem "vyskáčou" i kovové trubky ze zdi.
Pak tady máme analogové obvody - u kteréhokoliv modernějšího ( než první generace ) operačního zesilovače se dočtete, že "output" je "short circuit protected" a někdy ( skoro vždy ) se dočtete i to, že výstup je "neomezeně zkratuvzdorný". Patrně si řeknete - pchá - co má archaický operační zesilovač společného s mou jedinečnou digitální elektronikou, ale už tady máme první náznak jak blbuvzodrný - zkratuvzdorný výstup udělat. Tedy použít operační zesilovač vhodné rychlosti ( rychlý ), zapojit jej jako neinvertující sledovač a využít jeho vestavěné ochrany jako zdroj "blbuvzdornosti". Například pro programátor AVR, kde rychlosti nejdou příliš přes 1 MHZ by to klidně bylo možné, stejně tak třeba pro sériové porty pracující na "normálních" v robotech používaných rychlostech ( 2400 - 1M baud )
Tohle samozřejmě je někdy dosti nepraktické řešení, proto je potřeba prozkoumat v čem tkví zranitelnost výstupů digitálních obvodů. Pomůžeme si schémátkem nejjednoduššího CMOS invertoru na prvním obrázku. Je zjevné, že se jedná o tzv Push Pull řešení. Přestavte si situaci, kdy tento výstup omylem zkratujeme na zem. Pokud bude výstup ve stavu LOW - pak bude horní tranzistor uzavřen a dolní tranzistor otevřen - pokud bude výstup na napětí země - nic se nestane. Protože náhoda je blbec - blbuvzdornost MUSÍ být vestavěna v HARDWARU - jinak váš obvod nepřežije softwarovou chybu. Pokud si tedy elektronika usmyslí přepnout výstup do stavu HIGH - horní trazistor se stane vodivým a bude zkratován přímo na zem, což povede k tomu že proud jím poroste až k přehřátí a spálení obvodu.
Takže se krom zapojení "přes operační zesilovač" nabízí druhé jednoduché zupojení "přes odpor" ano skutečně - CMOS výstupy většinou dají proud okolo 4 mA takže odpor 1K na výstupu "vše řeší" Nebo ne ? Bohužel příliš ne - protože odpor spolu s parazitními kapacitami v drátech na DPS v ( případném ) koaxu a vůbec všude dělá RC článek typu dolní propust, která snižuje rychlost přechodu signálu. Pokud to nevadí - je to řešení. Povšimněte si na ovrázku ještě třetí variantu "přes operační zesilovač i odpor" - díky zpětné vazbě operačního zesilovače můžeme takto zapojený odpor použít jako "externí omezení proudu" aniž by to mělo příliš velký vliv na omezení přenášené frekvence - neboť zpětná vazba se stará o nabíjení parazitních kapacit jak jen může.
Pak je další možnost - většina konstrukcí - stroji počínaje, roboty a auty konče je typu "uzemněná kostra" zkrat na zem je tedy mnohem pravděpodobnější než zkrat na napájecí napětí - takže místo výstupu typu Push Pull stačí použít napájení typu "Open collector" tedy něco - co připomíná "nejubožejší" analogový zesilovač se společným emitorem. K zemi stahuje signál tranzistor zatímco signál "High" se vytváří přes odpor - nebo v integrovaných obvodech přes proudový zdroj. Tohle zapojení je notoricky známé třeba z I2C sběrnice ( viz obrázek) - a taky pro jeho vlastnosti je mnou "notoricky nedoporučované" problém je totiž v tom, že na rozdíl od PUSH PULL zapojení je vybíjení parazitních kapacit přes tranzistor - a tudíž rychlé, ale jejicn nabíjení je přes odpor - pomalé a citlivé na elektromagnetické rušení.
I přesto má "open collector" své kouzlo na krátkýh sběrnicích můžete zapojovat výstupy libovolně k sobě a nic se nestane, dokud signál omylem nezkratujete na napájení - pak je průser - protože pokud se dolní ( jediný ) tranzistor ve výstupním obvodu otevře - velkým proudem shoří.....
OK nezbývá tedy nic než marnost že. Není to tak beznadějné - dokonale blbuvzdorný push - pull výstup se totiž nápadně podobná H-můstkům - driverům motorů, se kterými vám veliké zkušenosti. Kouzlo je totiž v tom, že pokud chcete mít push pull výstup "zkratuvzdorný" je nutné mít proudovou pojistku jak proti spálení horního tranzistoru ( zkratem na zem) tak proti spálení dolního tranzistoru ( zkratem na napájení ). A opět máme dvě možnosti - složitější, která spočívá v tom, že proudová pojistka měří proud který vstupuje i vystupuje do výstupních tranzistorů a pokud zjistí, že proud je příliš vysoký ohrožený tranzistor ( nebo oba ) vypne - tím se výstup dostane do stavu "vysoké impedance" a je ( většínou ) zachráněn. Velice hrubé blokové schémátko máte na obrázku kde ARB1 a ARB2 jsou obvody které měří proud a při "nadproudu" shodí svůj výstup na 0.
Tohle je ideální pokud máte výstupy, které musí dávat opravdu veliký proud a to můstky do motorů skutečně musí. Pokud budete něco v tomto stylu stavět tak se procvičíte ve stavbě "měření proudu na horní straně", "měření proudu na dolní straně", komparátorech a logice, která vypne oba výstupní tranzistory. Pak je ale jiná možnost - napájet celý výstupní obvod ze dvou proudových zdrojů - které mohou být různě složité od aktivních "proudových zrcadel" po obyčejné dva odpory omezujících "proud do zkratu". Na obrázku tedy vidíte výstupní obvod který je kompromisem mezi jednoduchostí a blbuvzdorností :
Jenom několik poznámek pro hnidopichy a tak vůbec :
- Proboha - nesnažte se takto přes dva odpory zapojit procesor - jeho spotřeba se nahodile mění a tím by se nahodile měnilo napětí na něm.
- Snažte se aby výstupní obvod byl co nejjednodušší - nejlépe ve formě oddělovací 74HC04 - která obsahuje 6 invertorů, ze kterých lze sestavit 3 neivertující výstupní kanály.
- Zapojení je vhodné jen pro "nevýkonové" signály - nejlépe tam, kde na druhé straně je CMOS vstup s "nekonečným" odporem. Při větším odběru proudu než asi 2mA se mohou napěťové úrovně výrazně posunout.
- Výstupní napětí může díky odporům a spotřebe proudu trochu plavat - a taky za určitých nepříznivých okolností - pravoúhlý vstup do tohoto obvodu může vést k prapodivným tvarům výstupního signálu - nutno vyzkoušet v konkrétní aplikaci.
A samozřejmě otázka k čemu je tam užitečný ( nezbytný ) ten kondenzátor a proč nemůže být "téměř nekonečné" velikosti třeba 1000 uF?
A vítězem se stává.... : poté co jsem článek dopsal a vyšel - rozvinula se kolem něj diskuse - vizte diskusi - a v ní čtenář pan Mariánek - měl nápad vskutku geniální do té míry, že jsem jej musel do článku dopsat jako "nejvidláčtější ochranu digitálních výstupů". Schéma jsem zde dopsal zejména proto aby budoucí čtenářové věděli - že toto je ten ideální bod mezi jednoduchostí a účinností. Vizte schéma nad odstavečkem. Tedy o co jde - povšimněte si že "ochrana" je čistě pasivní a tím pádem je dokonce obousměrná - to jest IN a OUT se mohou vzájemně zaměnit. Kouzlo je v tom, že C1 musí být takové kapacity aby byl přibližně stejný ( nebo poněkud větší) než všechny parazitní kapacity na cestě - uvedených 33pF je pro krátké programovací dráty v desítkách cm. Běda ovšem, pokud se najde vůl, který by tam dal nějakou "obrovskou kapacitu". Celá věc pak funguje takto - "rychlá komunikace" - přesněji rychlá složka komunikace alias "vyšší harmonické" signálu probíhají přes kondenzátor - ten taky nabíjí "parazitní kapacity" - pomalá složka signálu alias "stejnosměrná úroveň" jde přes odpor.
Když potom dojde k nebezpečnému zkratu - kondenzátor se v mžiku nabije - což digitální výstup vydrží, a zbytek proudu už je omezen odoporem R1 - tak geniální, že nechápu, proč mě to nenapadlo, zejména, když podobné finty používám pro "tvarování signálu" v analogové oblasti. Tento obvod můžete zapojit rovnou k pinu vašeho "milovaného Arduína" ovšem pozor - "disclaimer" z následujícího odstavce je i přesto stále platný....
Poznámka při druhém čtení - oblast ochrany výstupů před zkratem obsahuje "magické slovo ochrana" - tím pádem přitahuje jednak množství perpeťáků s jejich "vejvary z netopejra" a jednak přitahuje "Docenty z ČVUT", kteří konstruují zásadně dle ČSN/EN/DIN/ISO 000000 - 999999 a proto za posledních 30 let nepostavili ani blikátko. Takže mějte na paměti že "zkrat" v dnešní kapitole je připojení AVR ISP nebo jiného konektoru s napětím 5 ( 3-24V ) na druhý konektor obráceně - nikoliv zapojení tohoto konektoru do zásuvky na 220V nebo dokonce úder blesku do komína - velína - Temelína - tam se používají úplně jiné ochrany. A stejně tak obvyklý disclaimer - neříkejte na zkoušce u "Docenta z ČVUT", že "Kubáč psal" - toto je vidlácká elektronika domácí výroby - nikoliv kurs "inženýrem snadno a rychle" jasné ?!