Supervisor pro MCU, laciný a solidní reset pro 8051.

Jelikož se stává, že 8051 není jednoduchým resetem při použití kondenzátoru za všech okolností zresetována (což se může dít i u jiných MCU, pokud nejsou vybaveny např. BOD), navrhl jsem toto malé zapojení, které sice neoplývá nijak zázračnými parametry, ale je laciné a pracuje dobře. Jen je to zase trochu více součástek, než když se použije integrovaný obvod. V SMD provedení nezabere toto zapojení mnoho místa a je laciné. Využitím také může být postavení tohoto supervisoru na malou destičku se třemi piny a používání do nepájivého pole pro bastl účely.

Co budeme potřebovat ?

3 tranzistory BC547C (nebo jiné, s uvedenými je konstrukce vyzkoušena a změřena), 7 odporů a jeden kondenzátor. Možná se Vám to bude zdát na tak jednoduchou věc docela hodně součástek, ale zase je celkem s přehledem najdete v šuplíku, tedy dá se použít i v nouzi, kdy potřebujete s resetem něco udělat v okamžiku, kdy si nejste jisti, zda zlobí program nebo prostě jen nedochází k resetu jak by mělo a jednochip běží mimo očekávaný program, tedy třeba při ladění aplikace.

Jak to pracuje ?

V zapojení zleva doprava první tranzistor slouží jako detektor, hlídající, zda je napájecí napětí dostatečné. Napájecí napětí je odporovým děličem poděleno tak, že se tranzistor otevírá v okamžiku, kdy napájecí napětí dosáhne zvoleného napětí. Protože je toto napětí dáno přechodem BE tranzistoru, není nějak extrémně přesné, ale nakonec ani nijak šíleně přesnou hodnotu nepotřebujeme a pokud ano, pak je na čase použít nějaký vhodný integrovaný obvod :). Dále je zapojen další tranzistor jako invertor a navíc ještě zvyšuje zesílení prvního stupně, přičemž je ještě zavedena kladná zpětná vazba do báze prvního tranzistoru. Pokud se Vám bude uvedená hodnota 470k zdát příliš malá (že už by hystereze byla příliš velká), je potřeba si uvědomit, že na kolektoru druhého tranzistoru bude napětí maximálně kolem 0.6V, protože odpor 10R vedoucí do báze třetího tranzistoru je proti odporu 100k v kolektoru druhého tranzistoru naprosto zanedbatelný. Pak tedy zpětná vazba vlastně připojuje přes odpor 470k ke vstupnímu děliči k bázi prvního tranzistoru odpor 470k k 0V nebo 0.6V a tudíž s odporem 470k není hystereze nijak veliká. Následuje zapojení kondenzátoru a to tak, že se nabíjí určitou dobu (podle jeho hodnoty) a tedy k otevření posledního tranzistoru nedojde okamžitě, ale až v okamžiku, kdy napětí na kondenzátoru dosáhne hodnoty, kdy se třetí tranzistor otevře. Napětí na tomto kondenzátoru navíc nedosáhne hodnoty vyšší, než je napětí UBE tranzistoru. Když pak napájecí napětí poklesne, tedy zavře se první tranzistor, dojde k otevření druhého tranzistoru a rychlému vybití kondenzátoru. Poslední tranzistor se tedy zavře a protože je kondenzátor nabit jen na hodnotu UBE a vybíjen jen přes odpor 10R, který je zde aby nedošlo k poškození tranzistoru přes který se vybíjí, zavření posledního tranzistoru proběhne rychle. Tedy po dosažení požadovaného napájecího napětí je výstup zapojení ještě chvíli přidržen ve vysoké úrovni pro (kvalitní reset), ale po jeho poklesu pod požadované napětí jde výstup k Vcc co možná nejrychleji. Myslím, že funkce zapojení je zřejmá ze schématu. V obrázku jsou také uvedeny hodnoty odporu R1 pro různá hlídaná napětí, jak jsem je naměřil a zaokrouhlil. Vzhledem k malé hysterezi není rozdíl hodnoty nad kterou se první tranzistor otevře a hodnoty pod kterou se uzavře z hlediska čísla podstatný a uvedení jedné zaokrouhlené hodnoty je přehlednější. Uvedené hodnoty napětí pro různé R1 tedy berte jen orientačně, jsou to hodnoty naměřené s odpory s běžnou tolerancí a zaokrouhlené. Pokud budete s hodnotami R1 experimentovat, pak lze jen doporučit pro nastavení vynechat kondenzátor, čímž dochází k překlápění stavů na výstupu zapojení ihned, čímž máme možnost hodnotu napětí pro překlopení lépe změřit. Vhodný kondenzátor C1 je v řádu desítek uF.

Rád bych ještě upozornil na jednu věc. V případě že bude celé zařízení napájeno z akumulátorů či alkalických článků a za běhu MCU roste jeho odběr, pak dojde při provozu k vybití aku na úroveň, kdy dojde k resetu. Tím se sníží odběr z akumulátorů, vzroste jejich napětí a tak dojde zase k povolení resetu na MCU. Tedy celé zařízení se rozběhne a tím sníží zase napětí na aku a celý děj se stále opakuje až do vybití aku na hodnotu, kdy už k uvolnění resetu nedojde. Co jsem chtěl naznačit je to, že v okamžiku, kdy potřebujeme u bateriemi napájeného zařízení zaznamenávat nějaká data do EEPROM a nemůžeme si dovolit po vybití baterií ztrátu dat chybným zápisem, je nutné řešit ukončení funkce buď jiným způsobem (i vzhledem k nezničení si aku uplným vybitím), nebo zvětšením hystereze tohoto supervisoru tak, aby po přechodu do resetu snížení spotřeby nazpůsobilo opětovné naběhnutí funkce nárůstem napětí na napájení (v případě jednorázových zdrojů, kde jejich úplné vybití nehraje roli). Velikost hystereze je možno nastavit změnou hodnoty odporu 470k, pro zvětšení hystereze je potřeba hodnotu odporu snížit a opačně.

Toto zapojení je vhodné třeba v případě, kdy celek má pomalý náběh napájecího napětí nebo dlouhou dobu po kterou klesá napájecí napětí po odpojení, protože tam spolehlivě zajistí, že pod určité napětí bude MCU v resetu a tedy nebude např. páchat škody na datech již zmíněné EEPROM. Dále je vhodné použít rozumnou kapacitu na napájení MCU, kde důvody asi vysvětlovat nemusím.

Záruky.

Autor neručí za jakékoli škody způsobené využitím tohoto materiálu. Pro další publikování kontaktujte autora.

Autor: Jiří Bezstarosti