Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Mikrokontroler i dłuższe działanie z zasialniem bateryjnym

WiesioShow
-
-
Posty:25
Rejestracja:18 maja 2007, o 16:26
Lokalizacja:Koszalin
Mikrokontroler i dłuższe działanie z zasialniem bateryjnym

Postautor: WiesioShow » 11 cze 2007, o 20:52

Chciałbym zmaksymalizować czas pracy attiny2313 przy zasilaniu baterią 9V + stabilizator 7805. Do attiny będzie dołączony czujnik temperatury ds1820 i wyświetlacz LCD 2x16 bez podświetlenia. Czas pomiędzy odczytami temperatury planowałem na około 1 min. Dobrze by było w czasie nieaktywnym usypiać attiny i oczywiście odłączać czujnik temperatury. Z odłączaniem czujnika jest prosto, ale nie wiem jak uśpić mikrokontroler. Może również coś da się zaoszczędzić na wyświetlaczu :)

Mrrudzin
-
-
Posty:71
Rejestracja:16 maja 2007, o 17:55
Lokalizacja:Polska

Postautor: Mrrudzin » 11 cze 2007, o 22:16

Na Twoim miejscu oszczędnośći rozpocząłbym od wymiany 7805 na coś innego. Myśle że zysk będzie spory.

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 11 cze 2007, o 22:26

Zamiast czujnika na 1-wire lepszy byłby np na I²C - w tym przypadku możesz dowolnie w dół zmniejszyć częstotliwość pracy mikrokontrolera, co przyczyni się do znaczącego spadku poboru prądu. LCD2x16 nie jest najlepszym rozwiązaniem, na nim zbytnio nie oszczędzisz prądu. Lepszy byłby zwykły "szkiełkowy" LCD z jakimś energooszczędnym sterownikiem, ewentualnie zmiana procka na jakiś z grupy LCD AVR.
ale nie wiem jak uśpić mikrokontroler.
Hint : IDLE, POWERSAVE, POWERDOWN

Mrrudzin
-
-
Posty:71
Rejestracja:16 maja 2007, o 17:55
Lokalizacja:Polska

Postautor: Mrrudzin » 11 cze 2007, o 22:35

Zwróć uwagę również na podświetlenie LCD. Jeśli chcesz takie zastosować - dużo mniejszego prądu wymaga podświetlenie niebieskie/białe niż zielone/żółte.

MDz
-
-
Posty:365
Rejestracja:29 mar 2003, o 13:35
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: MDz » 11 cze 2007, o 23:28

Chciałbym zmaksymalizować czas pracy attiny2313
Chwalebne :)
dołączony czujnik temperatury ds1820
Pobór prądu przez DS18B20 jest znikomy zwłaszcza, że włączasz go tylko na krótkie chwile, raz na minutę. Przy okazji zwróć uwagę na zakres napięć zasilania: 3.0...5.5V. Czyli w razie potrzeby zadziala również przy 3.3V.
przy zasilaniu baterią 9V + stabilizator 7805.
Przestępstwo przeciwko trwałości baterii. Ścigane z urzędu. ;)
7805 pobiera na własne potrzeby przeciętnie 4 .. 4.5mA. Nawet przy zerowym obciążeniu!
Ponadto wymaga spadku napięcia między wejściem a wyjściem co najmniej 1.7..2..2.5V (zależnie od producenta). Ogniwa alkaliczne opłaca się eksploatować nawet do 0.9V/ogniwo czyli w tym wypadku 5.4V/baterię. Stosując 7805 nie wykorzystasz baterii do końca a większość energii i tak puścisz w gwizdek.

Poszukaj jakiegoś oszczędnego stabilizatora LDO (low drop..). Jako pierwszy z brzegu przyszedł mi do głowy np. L4949 (STM), ale powinieneś znaleźć również inne. Jeżeli wybrany stabilizator będzie miał wejście ShutDown to również da się je z pożytkiem wykorzystać w projekcie.

Poza tym ogniwa alkaliczne 9V mają wyjątkowo niekorzystny wskaźnik cena/energia. Już bardziej opłaca się zastosować dwa ogniwa alk. AA lub AAA (1.8...3.0V) i podnosić napięcie do wymaganego poziomu 3.3 lub 5.0V.
wyświetlacz LCD 2x16 bez podświetlenia.
(...)
Może również coś da się zaoszczędzić na wyświetlaczu :)


Wyświetlacze alfanumeryczne z HD44780 i podobnymi potrzebują zasilania prądem kilku mA przy typowym zasilaniu Vcc=5V. Niektóre ze stosowanych w nich kontrolerów LCD pracują również przy zasilaniu 3.3V, ale wtedy do uzyskania sensownego kontrastu trzeba przyłożyć ujemne napięcie polaryzującego Vlcd, co trochę komplikuje układ Choć nie jest też specjalnie trudne - wymaga poświęcenia dodatkowego ICL7660 i dodatkowych kilkuset uA z zasilania.

Konkurencyjnie możesz użyć w projekcie wyświetlacza graficznego z telefonu komórkowego. Taniutki obecnie LCD z Nokii 3310 pobiera zaledwie 300uA przy zasilaniu 3.3V.
Czas pomiędzy odczytami temperatury planowałem na około 1 min. Dobrze by było w czasie nieaktywnym usypiać attiny i oczywiście odłączać czujnik temperatury. Z odłączaniem czujnika jest prosto, ale nie wiem jak uśpić mikrokontroler.
Oszczędzanie poboru mocy przez mikrokontroler może mieć 4 formy:

- Wybór oszczędnego uC. Np. MSP430. Aczkolwiek obecnie o prawie każdym współczesnym mikrokontrolerze da się powiedzieć, że przy mądrze dobranych warunkach pracy będzie oszczędny.

- Obniżanie napięcia zasilania. Np. przez zrezygnowanie z Vcc=5.0V na rzecz Vcc=3.3V. Na przeszkodzie mogą stanąć potrzeby urządzeń peryferyjnych (np. wspomniane LCD)

- Spowalnianie taktowania do granic możliwości. W zastosowaniach-niewiele-robiących udaje się czasem pogonić uC nawet z kwarcu zegarkowego (2^16Hz). W twoim przypadku do liczenia masz wprawdzie niewiele, ale zarazem napotkasz twarde ograniczenie w postaci reżimu czasowego dyktowanego przez 1-wire. Jednak nie opłaca się również tracić pary na najszybszy zegar jaki tylko może znieść dany uC.

- Wprowadzanie mikrokontrolera w stan obniżonego poboru mocy.
Nie problem uśpić uC. Problemem może być znalezienie sensownego źródła zdarzeń, które ten uC wybudzą ze stanu uśpienia.
Zazwyczaj masz do wyboru kilka trybów usypiania uC - od "płytkiej drzemki", gdy uC zachowuje większość funkcji życiowych (np. zamiera tylko wykonywanie kodu przez CPU, ale pozostają działające liczniki/timery i zdolność do przyjmowania przerwań), aż do stanu "śmierci klinicznej" wymagającej reanimacji w postaci twardego RESET-u lub wyłączenia i ponownego załączenia zasilania.
Usypianie ATTiny2313 znajdziesz w karcie katalogowej w rozdziale "Power Management
and Sleep Modes" (coś ok. str. 33).

Wprowadzanie uC w stany głębokiego uśpienia (pobór prądu rzędu pojedynczych uA) ma sens, gdy jednocześnie da się zredukować do podobnego poziomu pobór mocy przez pozostałe urządzenia peryferyjne. W tym również przez układ zasilania (po co walczyć o uA na uC skoro sam stabilizator nieprzerwanie pochłania mA ?)

Niedocenianym źródłem strat energii może być również samorozładowanie ogniw. Do odbiorników o bardzo małym średnim poborze mocy i długim oczekiwanym czasie życia najlepiej kwalifikują się jednorazowe ogniwa litowe. Cynkowe alkaliczne (zwłaszcza porządnych firm) są Ok. Akumulatory litowo-jonowe mogą być - pod warunkiem, że utrudnienia związane z ładowaniem nie przekroczą ew. korzyści (duża gęstość energii, powolne samorozładowanie). Akumulatory niklowe (Ni-Cd, Ni-MH) w takich zastosowaniach zupełnie nie mają sensu.

Zastanów się nad takimi koncepcjami:

0) Pozostając przy bateryjce 9V, po pierwsze zastosować stabilizator LDO z małym poborem prądu na potrzeby własne.

1) Obniżyć napięcie zasilania do 3.3V (zyskując m.in. mniejszy pobór prądu przez uC). Jako LCD użyć modułu z telefonu GSM.

2a) Po wykonaniu pomiaru i wystawieniu wyniku na LCD ustawić timer na odliczanie opóźnienia 1min i wprowadzić uC w teryb SLEEP (z zachowaniem działającego timera i wybudzania w wyniku przerwania od tegoż timera)

2b) Po wykonaniu pomiaru i wystawieniu wyniku na LCD wprowadzić uC w stan PowerDown (czyli stan "smierci klinicznej" z poborem prądu na poziomie 1uA ) a wybudzenie go powierzyć prostemu ale możliwie oszczędnemu generatorowi generującemu przebieg z okresem ok. 1min cyklicznie RESETujący uC.

Co jako dodatkowy generator wybudzający? CMOSowa wersja 555? Układ generatora astabilnego na bramce 4093? Albo poszukaj w układach D.Johnsona na http://www.discovercircuits.com - przewija się tam kilka _naprawdę_energooszczędnych_ perełek.

3) Zamiast baterii 9V użyć dwóch tańszych ogniw AA i podwyższać napięcie do 3.3V lub 5.0V za pomocą przetwornicy step-up (np. TPS61040 (TI) ). Oszczędzisz na kosztach baterii.

4) Jeżeli urządzenie nie musi pokazywać wyniku non-stop a jedynie na życzenie, to możesz wykonać pomiar, pokazać go na wyświetlaczu np. przez 1min. po czym wyłączyć _wszystko_ za pomocą wejścia SHDN na stabilizatorze (ustawiasz SHDN stabilizatora i w następnym kroku wprowadzasz uC w stan PowerDown).
Do ponownego uruchomienia potrzeba będzie zdarzenia zewnętrznego w postaci wciśnięcia przycisku przez użytkownika. Wciśnięty przycisk uruchamia zasilanie a następnie uC samodzielnie podtrzymuje je aż do zakończenia pomiaru i prezentacji wyniku.
W ten sposób można ograniczyć sumaryczny pobór prądu w czasie bezczynności do pojedynczych uA a żywotność baterii wydłużyć do granic absudru ;-)

--
MDz

WiesioShow
-
-
Posty:25
Rejestracja:18 maja 2007, o 16:26
Lokalizacja:Koszalin

Postautor: WiesioShow » 14 cze 2007, o 22:14

Dzięki za rady postaram się je sprawdzić i co lepsze wykorzystać. Myślałem również o usypianiu attiny i wybudzaniu jej watchdogiem, ale maksymalny czas jaki można ustawić w watchdogu to około 2 sekundy. U mnie by się przydało z 60 sek, ma ktoś może pomysł jak tego dokonać ?

Fredy
-
-
Posty:141
Rejestracja:27 mar 2005, o 21:45
Lokalizacja:Małopolska

Postautor: Fredy » 18 cze 2007, o 16:05

Przecież może się budzić co 2 sekundy ale tylko aby zwiększyć wartość licznika a potem znowu zapaść w błogi sen. I tak 30 razy - a potem już może wykonać właściwą procedurke.
Takie chwilowe przebudzenie będzie trwało tak krótko że średni pobór prądu i tak będzie b. mały. :637:

WiesioShow
-
-
Posty:25
Rejestracja:18 maja 2007, o 16:26
Lokalizacja:Koszalin

Postautor: WiesioShow » 30 lip 2007, o 11:03

Dzięki poradom użyłem baterii AA i podwajacza napięcia ICL7660. Wydajność prądowa nie jest zbyt duża ale do poprawnej pracy wystarczy. Mam jednak pewną wątpliwość z wykorzystaniem watchdoga i usypianiem mikrokontrolera. Maksymalny czas watchdoga to około 2 sek, dla mnie optymalny byłby 1 min. Zatem, aby osiągnąć ten czas wykorzystałem zapis zmiennej w eppromie (aby uniknąć kasowania zmiennych przy resecie). Fragment wygląda następująco:

Kod: Zaznacz cały

$eeprom Label: Data 1 $data Dim A As Byte Config Watchdog = 2048 Stop Watchdog 'reset wystąpi po 2048ms Do Readeeprom A , Label If A >= 30 Then A = 0 ... End If A = A + 1 Writeeeprom A , Label Start Watchdog Powerdown Loop End
Całość działa na Atmedze8.

Obawiam się jednak, ilości cykli zapisu w pamięci epprom (wynosi ona ponad 100 tys. cykli), przy zapisie wartości co 2 sek, da to czas pracy około 55 godzin - u mnie i tak już pracuje dłużej ale nie wiem czy długo to potrwa. Moje pytanie jest takie - czy jest jakiś inny sposób na wydłużenie czasu uśpienia mikrokontrolera, może jakaś inna forma zapisu zmiennych ?

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 30 lip 2007, o 12:24

100 tys, to jest wartosc gwarantowana przez producenta, rownie dobrze moze wytrzymac 150... 200... 300 tys. Jednak liczenie ze wytrzyma jest naciaganiem szczescia.

1). zapisuj pod roznymi adresami eprom :619: np. co 100 tys zmieniaj <- joke


2) a moze by tak wykozystac timer 16 bitowy + preskaler 1024 + idle?? Do tego maksymalnie zmniejszyc taktowanie procka (samo nizsze taktowanie juz da oszczednosc energii).

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 30 lip 2007, o 15:00

... Maksymalny czas watchdoga to około 2 sek, dla mnie optymalny byłby 1 min. Zatem, aby osiągnąć ten czas wykorzystałem zapis zmiennej w eppromie (aby uniknąć kasowania zmiennych przy resecie).
A kto Ci powiedział , że reset proca powoduje kasowanie zmiennych :?:
Jeśli nie chcemy by procedura rozruchowa zerowała SRAM , to "nakazujemy" kompilatorowi , by takowego kodu nie generował i tyle.

Fragment może wyglądać następująco:

Kod: Zaznacz cały

$regfile = "m8def.dat" $noramclear Dim A As Byte If Mcucsr.porf = 1 Then A = 0 'ten kod zostanie wykonany TYLKO po włączeniu zasilania i ... Reset Mcucsr.porf '... żaden inny reset , nie spowoduje wyzerowania zmiennej A End If Config Watchdog = 2048 Stop Watchdog 'reset wystąpi po 2048ms Do If A >= 30 Then A = 0 ... End If A = A + 1 Start Watchdog Powerdown Loop End
Piotrek

WiesioShow
-
-
Posty:25
Rejestracja:18 maja 2007, o 16:26
Lokalizacja:Koszalin

Postautor: WiesioShow » 15 maja 2008, o 23:06

Do tamtego projektu użyłem podwajacza napięcia ICL7660 - wprawdzie ma małą wydajność prądową, ale wystarczył. Chciałbym jednak jakiś układzik (najlepiej w normalnej cenie), który by z dwóch akumulatorków AA zrobił 5 V i miał większą wydajność prądową niż ICL7660, pewnie potrzebna będzie jakaś ceweczka ale to nie problem.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość