Vidlákovo Elektro 102. Blbuvzdorné výstupy

26. listopadu 2015 v 5:47 | Petr |  Vidlákovo Elektro
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é ?!
 

Buď první, kdo ohodnotí tento článek.

Komentáře

1 wek wek | 26. listopadu 2015 v 14:06

Nepochopil som, v com je posledny obrazok lepsi ako jeden seriovy 330Ohm rezistor do vystupu...

2 m.marianek m.marianek | 26. listopadu 2015 v 15:02

[1]: Takhle v ničem, ale když by se ty odpory ještě přeblokovaly kondíkama, nebo diodama, tak by výstup byl schopen dát krátkodobě větší proud na nabití parazitní kapacity sběrnice. Já osobně ale nejsem zastánce řešení kdy sama funkce blbuvzdornosti je obvodově složitější a dražší, než původní neblbuvzdorné zařízení. Celkem dobře blbuvzdorné řešení by bylo realizovat sběrnici jako impedančně přizpůsobené vedení, signály tahat krouceným, nebo stíněným vedením zakončeným jmenovitou impedancí a buzeným přes odpor s jmenovitou impedancí. Rychlost zůstává vysoká nezávisle na délce vedení, výstup je zkratuvzdorný, jenom na vstupu si musíme poradit s polovičním signálem, ale to v dnešní době snad není takový problém.

3 Dalík Dalík | 26. listopadu 2015 v 19:58

m.marianek: no, tak když budeme mít výstup z 3,3V cmos hradla, tak by z něj teklo nějakých 30 mA. To není pro vidláka myslím moc dobré.

4 petr-kubac petr-kubac | 26. listopadu 2015 v 20:12

[2]: odpory už jsou "přeblokované" a to C1 o kterém je tam dotaz k čemu je - není problém spočítat, že kondenzátory paralelně s R1 a R2 by neměly jiný význam než změna kapacity C1.

Druhá otázka - tedy udělat "funkci blbuvzdornosti" tak aby celý obvod byl nakonec jednodušší než původní - je mimo nějaké triviální obvody poměrně složité

5 m.marianek m.marianek | 27. listopadu 2015 v 2:04

[4]: Odpory právě přeblokované nejsou. Kapacita vedení na výstupu je proti zemi a ne proti napájení toho integráče, takže celé napájení toho IO potom plave na těch odporech, jak se přes ně a přes otevřený tranzistor snaží nabít/vybít kapacitu vedení. Situaci by vylepšily diody paralelně k odporům. Nicméně stejnou práci by udělal paralelní RC člen na výstupu budiče, déle trvající proud se odporem omezí a kapacita vedení se přes kondenzátor rychle nabije.

6 m.marianek m.marianek | 27. listopadu 2015 v 2:17

[3]: Kroucený dvoudrát z UTP kabelu má impedanci 100 ohmů, odpory jsou dva, jeden na straně budiče (do serie) a druhý na konci vedení. Z hlediska výstupu jsou odpory v serii, takže to nebude 30mA, ale jen 15mA. Dá se samozřejmě udělat i vedení o vyšší impedanci, ale to už je takové krkolomné. Já měl spíš na mysli podělit napětí výstupu děličem na nějakou menší úroveň řekněme třeba z 5V na 1V, tím se dostáváme na nějakých 10mA a na straně vstupu upravíme úroveň třeba tranzistorovým spínačem, jemuž 1V k otevření bohatě stačí. Nechci samozřejmě tvrdit, že tohle řešení je nejlepší a univerzální, vždy záleží na okolnostech při návrhu zařízení, ale je to jedno z možných řešení.

7 petr-kubac petr-kubac | 27. listopadu 2015 v 6:08

[5]: [6]: idea s paralelením RC článkem na výstupu je vskutku vborná a vidlácká - klidně by stačiy kapacita v desítkách pF, ale idea impedančně přizpůsobeného vedení je v siutaci programátoru AVR na nic - kvůli ochraby jednoho programátoru by se musela předělávat každá jedna programovaná deska

8 wtc wtc | 2. prosince 2015 v 13:56

Komentáře jsou uzavřeny.


Aktuální články

Reklama