Pierwszym krokiem do zrozumienia prawdziwego znaczenia ULP jest przeanalizowanie różnorodności zastosowań tej technologii. W niektórych projektach wymagany jest najniższy prąd podczas normalnej pracy urządzenia, ponieważ parametry zasilania są mocno ograniczone – na przykład energia elektryczna jest odzyskiwana ze źródeł niestandardowych metodą określaną mianem energy harvesting. Jednak częściej spotykany schemat działania jest taki, że przez większość czasu urządzenie pozostaje w trybie czuwania i dopiero jakieś zdarzenie powoduje wybudzenie systemu w celu wykonania określonych zadań. W takim przypadku wymagany jest jak najniższy prąd w trybie uśpienia oraz jak najszybsze wybudzanie układu do stanu pełnej funkcjonalności oraz wykonanie zadania. Z tego wynika, że ULP nie koncentruje się tylko na bezpośrednim zmniejszeniu poboru energii, ale także na różnych mechanizmach optymalizacji, które umożliwiają realizację zadań w jak najkrótszym czasie i przy minimalnym użyciu zasobów danego systemu.
Straty energii w układach cyfrowych
Dzisiejsze systemy elektroniczne to przede wszystkim układy cyfrowe oparte na mikrokontrolerach. Całkowita moc pobierana przez układy cyfrowe to suma dwóch czynników:
- mocy statycznej, czyli traconej na skutek prądów upływu struktur półprzewodnikowych. Występuje nawet przy braku sygnału taktującego, w czasie stanu ustalonego i zwiększa się wraz ze wzrostem temperatury;
- mocy dynamicznej spowodowanej przełączaniem stanów logicznych. Wynika ona z ładowania i rozładowywania pojemności pasożytniczych oraz tzw. prądu zwarciowego występującego w chwili przełączania stanu tranzystorów na wyjściach cyfrowych, a uwarunkowanego przede wszystkim czasami narastania i opadania sygnałów.
Moc dynamiczną redukuje się zmniejszając rozmiary tranzystorów, dlatego tak ważna jest generacja technologii litograficznej stosowanej przy produkcji półprzewodników. Moc dynamiczną można również zmniejszyć obniżając częstotliwość taktowania, co niestety obniża również moc obliczeniową układu i wydłuża czas wykonywania zadań. Innym sposobem jest obniżenie wartości napięcia zasilającego, co z kolei generuje kilka innych problemów, m.in. wydłuża czasy propagacji, zmniejsza margines szumów prądu statycznego, a dodatkowo podwyższa statyczny pobór mocy, co wymusza stosowanie skomplikowanych struktur półprzewodnikowych.
Moc statyczną redukuje się poprzez zaawansowane technologie wytwarzania półprzewodników oraz takie techniki jak VTCMOS (variable threshold CMOS). Wymaga to dodatkowych obwodów sterujących i zasilających, które wytwarzają napięcia wyższe od napięcia zasilającego oraz ujemne względem potencjału masy. Wbrew pozorom, moc statyczna jest istotnym składnikiem całkowitego poboru energii. W stosowanych obecnie niskonapięciowych półprzewodnikach jej udział wynosi ok. 10%, a w najbardziej zaawansowanych układach staje się porównywalna ze stratami dynamicznymi. Więcej informacji na temat mocy dynamicznej i statycznej oraz metod ich redukowania można znaleźć tu: https://elektronikab2b.pl/technika/1872-redukcja-mocy-pobieranej-przez-uklady-cmos.
Nowoczesne metody zarządzania poborem energii
Biorąc pod uwagę wcześniejsze informacje wnioskujemy, że cyfrowy układ scalony powinien być taktowany możliwie niską częstotliwością i dostosowany do zasilania możliwie niskim napięciem, aby był odpowiedni do zastosowań ULP. Nie jest to łatwe do zrealizowania, ponieważ pozostaje sprzeczne z wymaganiami niezbędnymi do osiągnięcia wysokiej wydajności obliczeniowej. Bardziej elastycznym rozwiązaniem jest wydzielenie w strukturze mikrokontrolera bloków funkcyjnych i niezależne aktywowanie tylko tych, które są w danym momencie używane. Wymaga to rozbudowanych obwodów zasilania, takich jak PMD (Peripheral Module Disable) lub PMU (Power Management Unit), ale daje świetne rezultaty.
Mikrokontrolery oferują zwykle kilka podstawowych trybów oszczędzania energii. Każdy kolejny tryb wyłącza więcej wewnętrznych bloków funkcjonalnych i obniża zużycie prądu kosztem ograniczonej funkcjonalności lub wydajności. Najczęściej stosowane tryby obniżonego poboru prądu to:
- Tryb czuwania (Idle Mode, Low Power Mode) – jest kompromisem między szybką reakcją a oszczędnością energii. Rdzeń zostaje zatrzymany, ale podstawowe peryferia, zegar systemowy i pamięć RAM pozostają aktywne i zasilane. Mikrokontroler może być natychmiast wybudzony w odpowiedzi na przerwanie, np. z timera, UART czy SPI. Pobór prądu jest znacznie niższy niż w trybie aktywnym, ale w dalszym ciągu relatywnie wysoki.
- Tryb uśpienia (Sleep Mode, Power-Down Mode) – to podstawowy tryb oszczędzania energii. Większość funkcji mikrokontrolera jest wyłączona, zatrzymywane są główne oscylatory i sygnały taktujące, a działają tylko niezbędne bloki: pamięć RAM (w celu zachowania danych), zegar czasu rzeczywistego (RTC) czy kontrolery przerwań zewnętrznych. Pobór prądu w tym trybie spada do poziomu mikroamperów, ale wybudzenie może trwać nieco dłużej niż w przypadku trybu Idle.
- Tryb głębokiego uśpienia (Deep Sleep Mode, Standby Mode, Hibernate) oferuje maksymalną redukcję zużycia energii. Niemal wszystkie bloki funkcjonalne i zasilanie są odcięte. Często tracona jest zawartość pamięci RAM, a podtrzymywane są jedynie podstawowe rejestry, stany pinów I/O i moduł RTC – w efekcie pobór prądu spada często poniżej 1 μA. Wybudzenie z tego trybu trwa najdłużej i zazwyczaj następuje tylko poprzez zewnętrzne zdarzenie (np. wynikające ze zmiany stanu logicznego na odpowiednim pinie) lub po upływie zadanego czasu ustawionego w RTC.
W zaawansowanych układach o ultra niskim poborze mocy może być dużo więcej trybów niskiego poboru mocy – np. 7. Wybór odpowiedniego zależy od wymagań aplikacji – głównie od tego, czy konieczna jest natychmiastowa reakcja, czy jednak dopuszczalne jest niewielkie opóźnienie w zamian za możliwość uzyskania wielu lat pracy na jednej baterii.
Niektóre bloki funkcyjne, które mają zatrzymane taktowanie oraz odłączone zasilanie wymagają złożonej procedury wybudzenia – dotyczy to np. przetworników ADC (Analog Digital Converter). Użycie takiego bloku wymaga odblokowania zasilania, podania sygnału taktującego i czasami uruchomienia prostej procedury kalibracji. Cały ten proces może trwać relatywnie długo i pochłonąć znacznie więcej energii, niż w trakcie normalnej pracy danego bloku. Dlatego jest to kolejne pole optymalizacji w zakresie techniki ULP (pod względem szybkości wybudzania lub czasu potrzebnego do osiągnięcia pełnej funkcjonalności, czyli tzw. wake-up time). Układy lub bloki funkcyjne, w których zoptymalizowano ten proces, są oznaczane jako fast wake-up time.