- Techniki oszczędzania energii dla mikrokontrolerów
- 1. Tryby uśpienia
- 2. Dynamiczna modyfikacja częstotliwości procesora
- 3. Struktura oprogramowania układowego obsługi przerwań
- 4. Oprogramowanie sprzętowe zoptymalizowane pod kątem mocy
- Wniosek
Tak jak gaz (benzyna / olej napędowy) jest ważny dla poruszania się rowerów, ciężarówek i samochodów (tak, z wyłączeniem Teslasa!), Tak samo energia elektryczna jest w większości zastosowań elektronicznych, a także w przypadku aplikacji opartych na systemach wbudowanych, które zwykle są akumulatorami (ograniczona energia), od zwykłych telefonów komórkowych po urządzenia inteligentnego domu.
Ograniczony charakter mocy baterii implikuje potrzebę zapewnienia, że tempo zużycia energii przez te urządzenia powinno być rozsądne, aby zachęcić do ich przyjęcia i używania. Zwłaszcza w przypadku urządzeń opartych na IoT, w przypadku których można oczekiwać, że urządzenie będzie działać nawet przez 8-10 lat na jednym ładowaniu bez wymiany baterii.
Trendy te spowodowały uwzględnienie niskiego poboru mocy w projektowaniu systemów wbudowanych i przez lata projektanci, inżynierowie i producenci opracowali kilka inteligentnych sposobów efektywnego zarządzania energią zużywaną przez produkty, aby zapewnić ich dłuższą żywotność. pojedyncza opłata. Wiele z tych technik skupia się na mikrokontrolerze, który jest sercem większości urządzeń. W dzisiejszym artykule przyjrzymy się niektórym z tych technik i sposobom ich wykorzystania do zminimalizowania zużycia energii przez mikrokontrolery. Chociaż mikroprocesor zużywa mniej energii, ale może być używany w dowolnym miejscu na mikrokontrolerze, kliknij łącze, aby dowiedzieć się, czym różni się mikroprocesor od mikrokontrolera.
Techniki oszczędzania energii dla mikrokontrolerów
1. Tryby uśpienia
Tryby uśpienia (ogólnie określane jako tryby niskiego poboru mocy) są prawdopodobnie najpopularniejszą techniką zmniejszania zużycia energii w mikrokontrolerach. Zwykle obejmują wyłączenie pewnych obwodów lub zegarów, które sterują określonymi urządzeniami peryferyjnymi mikrokontrolerów.
W zależności od architektury i producenta mikrokontrolery mają zwykle różne rodzaje trybów uśpienia, przy czym każdy tryb ma możliwość wyłączenia większej liczby obwodów wewnętrznych lub urządzeń peryferyjnych w porównaniu z innymi. Tryby uśpienia zazwyczaj obejmują tryb głębokiego uśpienia lub wyłączenia, a także tryb bezczynności i drzemki.
Poniżej opisano niektóre z dostępnych trybów. Należy zauważyć, że charakterystyka, a także nazwa tych trybów mogą się różnić w zależności od producenta.
ja. Tryb bezczynności / uśpienia
Jest to zwykle najprostszy z trybów niskiego poboru mocy, który projektanci mogą wdrożyć. Tryb ten umożliwia powrót mikrokontrolera do pełnej pracy w bardzo szybkim tempie. Dlatego nie jest to najlepszy tryb, jeśli cykl zasilania urządzenia wymaga od niego bardzo częstego wychodzenia z trybu uśpienia, ponieważ duża ilość energii jest pobierana, gdy mikrokontroler wychodzi z trybu uśpienia. Powrót do trybu aktywnego z trybu czuwania jest zwykle oparty na przerwaniach. Ten tryb jest zaimplementowany w mikrokontrolerze poprzez wyłączenie drzewa zegara, które steruje obwodem procesora, podczas gdy główny zegar wysokiej częstotliwości MCU jest nadal uruchomiony. Dzięki temu procesor jest w stanie wznowić działanie natychmiast po aktywowaniu wyzwalacza wybudzenia. Bramkowanie zegarowe było szeroko stosowane do odcinania sygnałów w trybach niskiego poboru mocy dla mikrokontrolerów i ten tryb skutecznie bramkuje sygnały zegara w procesorze.
ii. Tryb czuwania
Tryb gotowości to kolejny tryb niskiego poboru mocy, łatwy do wdrożenia przez projektantów. Jest bardzo podobny do trybu bezczynności / uśpienia, ponieważ wymaga również użycia bramkowania zegara w procesorze, ale jedną główną różnicą jest to, że umożliwia zmianę zawartości pamięci RAM, co zwykle nie ma miejsca w trybie bezczynności / uśpienia. W trybie gotowości, szybkie urządzenia peryferyjne, takie jak DMA (bezpośredni dostęp do pamięci), porty szeregowe, urządzenia peryferyjne ADC i AES są stale uruchomione, aby zapewnić ich dostępność natychmiast po przebudzeniu procesora. W przypadku niektórych MCU pamięć RAM jest również aktywna i można uzyskać do niej dostęp przez DMA, umożliwiając przechowywanie i odbieranie danych bez interwencji procesora. Pobór mocy w tym trybie może wynosić nawet 50uA / MHZ dla mikrokontrolerów małej mocy.
iii. Tryb głębokiego uśpienia
Tryb głębokiego uśpienia zazwyczaj obejmuje wyłączenie zegarów wysokiej częstotliwości i innych obwodów w mikrokontrolerze, pozostawiając tylko obwód zegara używany do sterowania krytycznymi elementami, takimi jak zegar watchdog, wykrywanie brązowienia i obwód resetowania po włączeniu. Inne MCU mogą dodawać do niego inne elementy, aby poprawić ogólną wydajność. Zużycie energii w tym trybie może wynosić zaledwie 1uA w zależności od konkretnego MCU.
iv. Tryb Stop / OFF
Niektóre mikrokontrolery mają różne odmiany tego dodatkowego trybu. W tym trybie zarówno oscylatory wysokie, jak i niskie są zwykle wyłączone, pozostawiając włączone tylko niektóre rejestry konfiguracyjne i inne krytyczne elementy.
Funkcje wszystkich wyżej wymienionych trybów uśpienia różnią się w zależności od MCU, ale ogólna zasada jest taka; im głębszy sen, tym większa liczba urządzeń peryferyjnych wyłączonych podczas snu i mniejsza ilość zużywanej energii, chociaż zwykle to również oznacza; tym większa ilość energii zużywana do przywrócenia systemu do pracy. W związku z tym projektant powinien rozważyć tę odmianę i wybrać właściwy MCU do zadania bez kompromisów, które mają wpływ na specyfikację systemu.
2. Dynamiczna modyfikacja częstotliwości procesora
Jest to kolejna bardzo popularna technika efektywnego zmniejszania ilości energii pobieranej przez mikrokontroler. Jest to zdecydowanie najstarsza technika i nieco bardziej skomplikowana niż tryby uśpienia. Obejmuje to oprogramowanie układowe dynamicznie sterujące zegarem procesora, naprzemiennie między wysoką i niską częstotliwością, ponieważ zależność między częstotliwością procesora a ilością zużywanej energii jest liniowa (jak pokazano poniżej).
Implementacja tej techniki zwykle przebiega według tego wzorca; gdy system jest w stanie bezczynności, oprogramowanie układowe ustawia częstotliwość zegara na niską prędkość, umożliwiając urządzeniu zaoszczędzenie części energii, a gdy system musi wykonać ciężkie obliczenia, częstotliwość zegara jest przywracana.
Istnieją scenariusze, które mogą przynieść efekty odwrotne do zamierzonych, jeśli chodzi o modyfikację częstotliwości procesora, co jest zwykle wynikiem źle opracowanego oprogramowania układowego. Takie scenariusze pojawiają się, gdy częstotliwość zegara jest utrzymywana na niskim poziomie, podczas gdy system wykonuje ciężkie obliczenia. Niska częstotliwość w tym scenariuszu oznacza, że system zajmie więcej czasu niż jest to konieczne, aby wykonać ustalone zadanie, a tym samym będzie akumulował taką samą ilość energii, jaką projektanci starali się zaoszczędzić. Dlatego należy zachować szczególną ostrożność podczas wdrażania tej techniki w aplikacjach, w których czas ma krytyczne znaczenie.
3. Struktura oprogramowania układowego obsługi przerwań
To jedna z najbardziej ekstremalnych technik zarządzania energią w mikrokontrolerach. Jest to możliwe dzięki kilku mikrokontrolerom, takim jak rdzenie ARM cortex-M, które mają bit uśpienia przy wyjściu w rejestrze SCR. Ten bit zapewnia mikrokontrolerowi możliwość uśpienia po uruchomieniu procedury przerwania. Chociaż istnieje ograniczenie liczby aplikacji, które będą działać płynnie w ten sposób, może to być bardzo przydatna technika dla czujników terenowych i innych, długoterminowych aplikacji opartych na gromadzeniu danych.
Większość innych technik, moim zdaniem, to wariacje na temat technik wymienionych powyżej. Na przykład technika selektywnego taktowania urządzeń peryferyjnych jest zasadniczo odmianą trybów uśpienia, w których projektant wybiera urządzenia peryferyjne do włączenia lub wyłączenia. Ta technika wymaga dogłębnej znajomości docelowego mikrokontrolera i może nie być zbyt przyjazna dla początkujących.
4. Oprogramowanie sprzętowe zoptymalizowane pod kątem mocy
Jednym z najlepszych sposobów na zmniejszenie ilości energii zużywanej przez mikrokontroler jest pisanie wydajnego i dobrze zoptymalizowanego oprogramowania układowego. Ma to bezpośredni wpływ na ilość pracy wykonywanej przez procesor w danym czasie, a to z kolei wpływa na ilość energii pobieranej przez mikrokontroler. Podczas pisania oprogramowania układowego należy dołożyć starań, aby zapewnić zmniejszenie rozmiaru kodu i cykli, ponieważ każda niepotrzebna wykonywana instrukcja jest marnowaną częścią energii zgromadzonej w baterii. Poniżej znajduje się kilka typowych wskazówek opartych na C, dotyczących zoptymalizowanego tworzenia oprogramowania układowego;
- W miarę możliwości używaj klasy „Static Const”, aby zapobiec kopiowaniu w czasie wykonywania tablic, struktur itp., Które zużywają energię.
- Użyj wskaźników. Prawdopodobnie są one najtrudniejszą częścią języka C do zrozumienia dla początkujących, ale są najlepsze do efektywnego uzyskiwania dostępu do struktur i związków.
- Unikaj Modulo!
- Tam, gdzie to możliwe, zmienne lokalne zamiast zmiennych globalnych. Zmienne lokalne są zawarte w CPU, podczas gdy zmienne globalne są przechowywane w pamięci RAM, procesor uzyskuje dostęp do zmiennych lokalnych szybciej.
- Jeśli to możliwe, niepodpisane typy danych są Twoim najlepszym przyjacielem.
- Jeśli to możliwe, stosuj „odliczanie” dla pętli.
- Zamiast pól bitowych dla liczb całkowitych bez znaku użyj masek bitowych.
Podejścia do zmniejszenia ilości energii zużywanej przez mikrokontroler nie są ograniczone do wspomnianych powyżej podejść opartych na oprogramowaniu, istnieją podejścia sprzętowe, takie jak technika kontroli napięcia rdzenia, ale aby utrzymać długość tego postu w rozsądnym zakresie, zaoszczędzimy je na inny dzień.
Wniosek
Wdrożenie produktu małej mocy zaczyna się od wyboru mikrokontrolera i może być dość mylące, gdy spróbujesz przejrzeć różnorodne opcje dostępne na rynku. Podczas skanowania arkusz danych może dobrze się sprawdzić w celu uzyskania ogólnej wydajności mikrokontrolerów, ale w przypadku aplikacji o krytycznym znaczeniu może to być bardzo kosztowne podejście. Aby zrozumieć rzeczywistą charakterystykę mocy mikrokontrolera, programiści muszą wziąć pod uwagę specyfikacje elektryczne i funkcje niskiego poboru mocy dostępne dla mikrokontrolera. Projektanci powinni nie tylko martwić się o pobór prądu przez każdy z trybów zasilania reklamowanych w arkuszu danych MCU, powinni również przyjrzeć się czasowi budzenia, źródłom wybudzania i urządzeniom peryferyjnym które są dostępne do użytku w trybach niskiego poboru mocy.
Ważne jest, aby sprawdzić cechy mikrokontrolera, którego planujesz użyć, aby ustalić, jakie masz opcje implementacji małej mocy. Mikrokontrolery były jednym z największych beneficjentów postępu technologicznego, a obecnie istnieje kilka mikrokontrolerów o bardzo niskiej mocy, które zapewniają zasoby, które pomogą Ci utrzymać budżet mocy. Wiele z nich zapewnia również kilka narzędzi oprogramowania do analizy mocy, z których można skorzystać w celu efektywnego projektowania. Osobistym faworytem jest linia mikrokontrolerów MSP430 firmy Texas Instrument.