detekce výpadku napětí na Atmega 328P

Kvůli zápisu hodnot do EEPROM před vypnutím řeším realizaci detekce výpadku napětí. Chci to udělat pomocí komparátoru v AVR, který vygeneruje přerušení(při poklesu napětí za aku na polovic) pro zálohu do EEPROM. Na vstupu komparátoru Ain0 bude 2.5V ext. reference a na Ain1 napětí z odporového děliče na aku. Zároven ale chci měřit pomocí ADC další hodnoty.
Může komparátor fungovat současně s měřením na ADC?

Byl by tip na nějakou diodu s nízkým úbytkem napětí pro oddělení Ucc napájení před zálohovacím kondenzátorem?

Může být display napájen napětím před oddělovací diodou(nechci jeho běh živit ze zálohovacího kondu při výpadku napětí)

S jak velkým kondenzátorem mám cca počítat na zálohovaní pro zápis 20Byte do EEPROM při 20mA odběru?

A taky jak dlohou životnost u toho elytu očekávat?

Ja jsem to vyresil malym relatkem, spinanym tranzistorem podle obrazku. Zarizeni se pak spina pomoci spinace v bazi toho tranzistoru a nasledne relatkem. Vyhoda je maly kondenzator a nezavislost kapacity na odberu zarizeni. Komparator MCU pak meri ovladaci napeti baze toho tranzistoru. Jde pouzit i externi preruseni, protoze se jedna o logickou hodnotu, neni treba to resit analogove.

Chlapi neblaznite :slight_smile:

Take komplikovanosti by som si nevymyslel ani v najdivokejsich snoch a to dokonca ani s Pamelou :slight_smile:

Normalne treba pre prevod AD pouzit internu referenciu. Je uplne jedno aku, ci 1.25V alebo 2.5V. Stabilita a presnost v teplotnom rozsahu od nevidim do nevidim je lepsia ako 0.5% a to je na snimanie napatia z baterky viac ako dost. V normalnych teplotach je to presnost tak na 0.2%.

Uplne staci cez napatovy delic sledovat napatie pred diodou (s relativne nizkym ubytkom pri malych prudoch su shotky diody, ale lepsie je pouzit PNP tranzistor alebo nejaky FET). Kondenzator za diodou musi byt taky, aby jeho napatie nepokleslo pod 7V (ak je za nim nejaky linearny stabilizator na 5V) napriklad do jednej sekundy. Cas na zapis do EEPROM sa vypocita velmi jednoducho a to ako pocet bajtov * cas na zapis jedneho bajtu. Pokles napatia sa da jednoducho zratat zakladnym vztahom

u = U * e(-t/RC)

R je ekvivalentny odpor spotrebica. Ak je nieco napajane 5V a ma spotrebu 0.1A potom to ma “odpor” 50ohm.

Ak U je napr 10V, C musi byt taky, aby napriklad za 1s “u” nekleslo pod tych 7V. A to sa uz da lahko zratat. Poznas:

u = 7V
U = 10V
t = 1s
R = 50R
C = ?

Riesit nezmyselne komplikacie referencneho napatia pre meranie poklesu Ucc na komparatore, ci zapojenie tranzistora s relatkom k bohvie k comu, je viac menej kuriozne. Bez urazky, ak zapojenie plni svoj ucel - je to dobre zapojenie, ale naozaj “tudy vede cesta” ?.

Ak uz nic ine, tak ak mas na mcu 8 AD vstupov a z kazdeho spravis jeden prevod za 1ms, potom sa ku kazdemu z nich vratis 1x za 8ms. To je zanedbatelna casova neistota zistovania poklesu Ucc baterky cez jeden kanal AD, ak ma C zabezpecit napajanie po dobu napr. dalsej 1s.

Drzim palce a daj vediet ktorou cestou si sa vydal.

Martin:
Ještě jedna cesta je možná a to místo zálohovacího kondu(nemusím řešit jeho životnost) použít spodní článek aku,který se od MCU po záloze do EEPROM odepne. Protože mám jen bud 90V nebo 5V, tak by ten zálohovací kond musel být na pěti voltech a nevím co by MCU udělal při padajícím Ucc.

Souhlasím, že v případě neomezeného času(až se zazálohuje do EEPROM, tak si MCU odepne sám napájení) po výpadku Ucc nemá smysl používat komparátor, ale vystačím si s připojením baterie na analog pin.

S tou referencí to vidím asi furt na tu externí TL431(byt to bude stát cca 3mA z napájení navíc), při 90V už dělá teplotní stabilita(při tvých 2 o/oo - ale příjde mi to hodně málo, počítám s rozsahem teplot 5-35st) 200mV.
Scan10014.GIF

Ale no tak :slight_smile:

Ak akceptujes nemechanicke vypnutie ale automaticke vypnutie samotnym procesorom, preco to takto komplikovat?
Tak nech tlacitko zapne na kratku dobu mcu a ten si po svojom starte zapne tranzistor, ktorym bude cele zariadenie napajane. A opatovnym stlacenim tlacitka sa moze procesor s celym zariadenim od baterie odopnut. Ak sa bojis nejakeho dovodu sa bojis pouzit tranzistor, tak pouzi nizkoprikonove relatko a urcite budes mat zariadenie odpojene. Dvojkontaktne tlacitko jednou spinacou castou preklenuje kontakt relatka a na zele zaraidenie sa pripne napajanie. Zaroven sa zopne nejaky kontakt na pine procesora. Po zapnuti si mcu samozrejme vsimne aj stlaceny pin, ale mcu zaroven vie, ze zije velmi kratko, tak napriklad do 2-3 sekund po zapnuti bude pin ignorovat. Ak potom znovu nacapa pin stlaceny, rele (tranzistor) odopne - po zapisani do EEPROM samozrejme. K samotnemu vypnutiu pride k pusteniu tlacitka.

Stale nechapem naco je tam prud zeruca TL431. Pre vacsinu veci je 1% presnost viac ako dost a to v celom teplotnom rozsahu.

Celé kolo se vypíná klíčem. Čistě elektronické vypínání neakceptuju, pouze jsem ochoten to risknout u toho spodního článku(přes pojistku a malý omezovací odpor). Aku stojí kolem 10t kč, takže nechci riskovat při nějaké chybě elektroniky zkrat a možný požár.

Ve vedlejším vláknu už jsem psal, že beru “na milost” interní referenci 1,1V a pokusím se o teplotní kompenzaci, když má atmega v sobě “teploměr”.

Nejako nerozumiem, ako hrozi pri zblbnuti elektroniky skrat baterie.
A uz obzvlast nie pri ideovom navrhu ktory som popisal. Preto posielam ideovu schemu.

  1. zapnes kucikom zariadenie. Mcu dostane napatie , na odporovom delici R1 a R2 si zmeria napatie. Tym padom dokonca moze mcu indikovat pokles napatia baterie. To, ze existuje 5V a mcu moze zit sa dozvies prostrednictnom LED. MCU na zaklade pritomnosti napatia na delici zopne rele a zariadenie je napajane samopridrznym kontaktom. Spotreba rele je oproti hlavnemu spotrebicu zanedbatelna.

  2. vypnes klucikom zariadenie. Na odporovom delici tvorenom R1 a R2 mcu zisti okamzity pokles napatia. Pod slovom okamzity rozumej do 10-100ms uplne v klude. Ak to mcu zisti, pozapisuje si mcu behom dalsich 10-100ms vsetko co kde ma a na konci odpoji rele. LED dioda zhasne a Ty vies, ze do dalsieho zapnutia ziadne zlyhanie elektroniky nemoze principialne viest k skratu baterie. Z praktickeho hladiska dojde k vypnutiu zariadenia okamzite - rozumej 20-200ms.

Nic z vyssie uvedenej cinnosti nie je potrebne riesit s vyuzitim prerusenia.

Inak schema zapojenia pre dve tlacitka (ZAP a VYP) sa vola dvojtlacitko so samopridrznym kontaktom. Velmi casto sa pouziva v priemysle a to pre zariadenia, kde je samostatne automaticke zapnutie zariadenia po vypadku napajania napriklad z bezpecnostnych dovodov nepripustne. Strata napajania vedie k odpadnutiu samopridrzneho kontaktu a po nabehu napajania sa stroj sam od seba nerozbehne. Znovu je potrebne stlacit tlacitko start.

Miesto rele sa da pouzit FET, ale ja osobne by som pouzil rele. Za uvahu by stal aj optofet. Ten splna vsetko potrebne co sa bezpecnosti tyka a spotreba bude nizsia ako u relatka. Napriklad G3VM-61A1

www.tme.eu/sk/Document/9dba5f421caf7385 … M-61A1.PDF

pri prude max. 3mA vie zopnut aj stredavych 500mA, je v puzdre DIL4 a stoji do 2EUR.

Toť vsjo :slight_smile:

Daj vediet, ako si sa rozhodol problem riesit, moze to byt poucne pre dalsich.

P,S. Dioda D1 v scheme je zbytocna. Nakresli si tam miesto nej spoj.
zap_vyp_mcu.pdf (29 KB)

Jinymi slovy jsi mu doporucil s mensimi obmenami to, co jsi na zacatku zkritizoval. Trochu si protirecis.

Nemyslim ze si protirecim. Rozdiel je prave v tych malych obmenach a hlavne podmienka nespinat napatie elektronickymi prvkami zaznela az neskor. :slight_smile:

V mojom zapojeni nie je nic , co by bolo zavisle na merani pozvolneho poklesu Un alebo na "“vysychani” kondenzatora - aj ked toho by som sa nebal.

Tak to nakonec vypadá na využití RTC modulu, který má na sobě zároven 56B RAM zálohované z baterky.

ebay.com/itm/I2C-Tiny-RTC-DS … 2c749134b9

Cena je cca 35kč, údaje o které nechci přijít se budou ve vteřinových intervalech ukládat do RAM tohoto modulu ve třech sadách, tak aby se předešlo ztrátě pro případ vypnutí napájení přesně v momentě ukládání.

Jako bonus tohoto řešení je schopnost zařízení držet si čas, i když přesnost očekávám tak s chybou kolem 2sec. za den.

Len si musíš ošetriť prípad, keď sú všetky tri sady rôzne. Potom platí, že pravdu má prvá sada.

At ukladá střídavě do dvou a udělá to jako transakci. Odemkne sadu 1 - uloží data a CRC - zamkne sadu 1 - odemkne sadu 2.

Len ma tak napadlo, co ak vypadne napajanie v strede zapisu prvej sady ? potom by boli presnejsie udaje v druhej a tretej sade…

Ak nastane vypadok pri zapise v prvej skupine, potom bude druha a tretia skupina rovnaka. Tam niet co riesit. Ak su v prvej a druhej skupine hodnoty rovnake, platia tie. Ak su hodnoty rovnake vo vsetkych troch skupinach, potom je vysledok samozrejme jasny. Iba treba rozhodnut, co v pripade ked su vsetky tri skupiny s inymi hodnotami. Vteday pravdepodobne nastal vypadok napajania pri zapise do druhej skupiny s tym, ze prava skupina uz obsahuje spravne hodnoty. Ci ? :slight_smile:

no znie to logicky a uz nemam ziadne dalsie otazky :slight_smile:

Tedy mi to vyhodnocení vychází takto:

if (2.sada == 3.sada)
OK_hodnota = 2.sada;
else
OK_hodnota = 1.sada;