Większość mikrokontrolerów (np. AVR, MSP430, PIC itp.) Obsługuje wiele różnych trybów uśpienia. „Najgłębszy” tryb uśpienia to taki, który ma najniższy pobór mocy (np. „Wyłączanie”, „wyłączanie”), ale wszystkie systemy zegarowe są zwykle zatrzymywane w tych trybach i wydaje mi się, że to jedyny sposób na „ pobudka ”z nich odbywa się za pośrednictwem zewnętrznego bodźca (np. przerwania zmiany pinów, reset chipa). Czy coś brakuje? Czy istnieją wyjątkowo niskie metody generowania okresowego sygnału budzenia dla MCU?
Zakładając, że moim celem jest zminimalizowanie zużycia energii (tj. Śpij głęboko jak najdłużej, nie śpij tak krótko, jak to możliwe), a okresowo budząc się, aby wykonać funkcję, jaki jest typowy sposób na osiągnięcie tego rodzaju zachowania? Aby jeszcze bardziej uprościć sprawy, załóżmy, że moja funkcja jest bezstanowa (nie muszę niczego pamiętać z przeszłości, aby ją wykonać).
Odniosłem pewien sukces używając WDT na MSP430, aby uzyskać ten efekt. Właśnie sprawiłem, że moja główna rutyna będzie moją funkcją, a ostatnia linia umożliwiła wygaśnięcie timera watchdoga po pewnym czasie i przejście do LPM4.5 lub jakikolwiek inny tryb „głębokiego uśpienia”. Wynik netto to funkcja jest wykonywana, MCU śpi, WDT wygasa, a chip resetuje się, ad nauseum. Wydaje się, że działa, tylko zastanawiam się, czy istnieje „lepszy”, „bardziej elegancki” lub „bardziej energooszczędny” sposób uzyskania tego rodzaju zachowania?
Nie próbowałem jeszcze tego podejścia z AVR, ale myślę, że WDT jest bardziej „wymagający mocy” w AVR niż w MSP430, więc może być mniej atrakcyjny dla pracy przy niskiej mocy. Być może nie ma „uniwersalnego” podejścia do niskiej mocy i musisz korzystać z narzędzi oferowanych przez daną linię produktów? Wiem, że nowa linia picoPower ma wiele funkcji Whiz-Bang, takich jak Event System i Sleep Walking, które w niektórych przypadkach wcale nie wymagają, aby procesor był w stanie czuwania, jeśli możesz dopasować aplikację do tej struktury ...
OK, dość mojej wędrówki, niech tu będzie to, co będziesz musiał powiedzieć :)
Edytuj Konkretne przykłady ilustrujące techniki również byłyby fajne!
źródło
Odpowiedzi:
Większość mikrofonów obsługuje kryształowy oscylator zegarka o niskiej mocy 32,768 kHz z pewnym rodzajem preskalera i przerwania timera. Ustaw prescaler tak, aby licznik czasu był odliczany powoli, a przerwanie nastąpi w wybranym przez ciebie czasie.
Niektóre mikroskopy mają również wbudowany zegar RC małej mocy, jeśli dokładne taktowanie nie jest krytyczne.
Arkusz danych dla każdego mikroprocesora małej mocy wyszczególnia moc przy uruchomionym oscylatorze 32.768 (i nic więcej). Jest prawie zerowy. Możesz wykonać obliczenia matematyczne, aby sprawdzić, czy jest to dopuszczalne, i porównać je z bieżącym rysowanym przez organ nadzorczy.
OK, na przykład na msp430f2013, spójrzmy na moc w arkuszu danych.
0,5 μA to prawie zero, chociaż jest to pięciokrotność rzeczywistego trybu WYŁĄCZENIA.
Aby uzyskać więcej informacji, możemy zajrzeć do arkusza danych.
Przejście z LPM4 (wszystko wyłączone) do LPM3 (uruchomienie oscylatora) to różnica między 0,5 μA a 1 μA.
Załóżmy, że bateria to CR2032 o pojemności 225 mAh. Zatem czas gotowości w LPM4 wynosi około 50 lat, aw LPM3 około 25 lat. 25 lat wystarcza na wiele zastosowań, ponieważ prąd WŁ (podczas samego pomiaru) dominuje w zużyciu.
źródło
Niektóre części mają dość oscylatory o niskiej mocy (kilka uA) do budzenia, a niektóre PIC mają również sprzęt, który pozwala obudzić bardzo wolno rosnące napięcie na szpilce - może to być z zewnętrznego kondensatora skonfigurowanego przed snem, aby naładować przez wymagany okres budzenia.
źródło
PIC z RTC mogą mieć ustawiony RTC na stan alarmowy, więc obudzi MCU w danym momencie za pomocą zewnętrznego kryształu 32,768 kHz. Pobierają ~ 450nA IIRC w trybie uśpienia RTC +, ale tylko 20nA przy wyłączonym RTC.
źródło
Liczniki watchdoga AVR nie są tak złe, jak się wydaje. Zgodnie z arkuszem danych ATTiny13A, pobór prądu w trybie wyłączania @ 3V wynosi 2μA bez włączonego WDT i 4μA z. Jasne, to 2x więcej, ale sam prąd jest wystarczająco mały, aby działać przez około 6,2 lat, co oznacza mniej więcej tyle samo czasu, ile potrzeba, by bateria sama się zniszczyła (źródło: data przydatności do spożycia).
Dodatkowo, praktycznie wszystko, co podłączysz wokół μC, przyciągnie znacznie więcej. W rzeczywistości najtrudniejszą częścią zaprojektowania takiego obwodu małej mocy jest odcięcie całego prądu w pozostałej części schematu podczas okresu uśpienia.
Opóźnienie budzenia jest również ładnie konfigurowalne, od ~ 12 ms do 8 s, jeśli pamięć służy. Rzeczywista częstotliwość nie robi zauważalnej różnicy, jeśli stosowane są krótkie procedury przerywania: uciekłem z włączania ADC, próbkowania puli 1K, obliczania niektórych wyników i wracania do snu bez zauważalnej zmiany w ogólnym zużyciu ( wygładzony dużym kondensatorem, aby skompensować powolność mojego multimetru).
Pamiętaj, że WDT nie jest dokładnym narzędziem do pomiaru czasu, więc możesz chcieć podłączyć zewnętrzny RTC. Mogą zużywać zwykłe nanoampery, więc powinno to być dobre połączenie. W rzeczywistości, jeśli RTC, o którym mowa, może generować regularne impulsy, możesz użyć tego jako źródła pobudki zamiast WDT, kosztem użycia szpilki.
źródło