Zasilanie energooszczędnych mikrokontrolerów

Zasilanie energooszczędnych mikrokontrolerów

W miarę zwiększania zakresu zastosowań mikrokontrolerów we wszystkich rodzajach aplikacji, czynnikiem coraz istotniejszym przy ich wyborze stało się niskie zużycie energii. Wymagania dotyczące ekologii oraz lepszego wykorzystania zasobów, wydłużenie czasu pracy na baterii, etc. przekładają się na wzrost zainteresowania układami o niskim poborze mocy podczas pracy oraz trybie gotowości czy uśpienia. Z drugiej strony rosną również oczekiwania dotyczące funkcjonalności i mocy obliczeniowej, co zazwyczaj nie idzie w parze z obniżeniem zużycia energii. Przyjrzyjmy się, w jaki sposób należy wybierać i zasilać współczesne mikrokontrolery, aby zaspokoić oba te wymagania w nowoczesnych projektach cyfrowych, a także jak wymaganie to wpływa na firmware.

Współczesne urządzenia korzystające z mikrokontrolerów często zasilane są za pomocą wewnętrznego źródła energii (baterii lub akumulatorów) bądź za pośrednictwem przewodów sygnałowych. Wspólne dla tych wszystkich aplikacji jest wymaganie bardzo niskiego zużycia energii, ale jednocześnie urządzenia te często muszą się cechować wystarczającą mocą obliczeniową do spełnienia innych wymagań produktu. Niniejszy artykuł ma za zadanie zwrócić uwagę na niektóre z wyzwań projektowania współczesnych systemów mikroprocesorowych i sposób, w jaki są one zasilane.

Szacowanie zużycia energii

Aby zmaksymalizować żywotność układu przy zasilaniu bateryjnym, projektanci systemów muszą minimalizować zużycie energii przez cały okres życia urządzenia. Całkowite zużycie mocy P (1) i pobór energii E (2) są określane jako:

 (1)

gdzie I to pobierany przez układ prąd, a U to jego napięcie zasilania oraz

 (2)

gdzie t to czas pracy układu.

W celu oszacowania zużycia mocy lub energii przez mikrokontroler wystarczy tylko przejrzeć kartę katalogową układu, aby określić prąd pobierany przy wymaganej przez projektanta częstotliwości taktowania CPU. Należy pomnożyć ten prąd przez napięcie zasilania, a następnie przez czas pracy, aby uzyskać wartość zużytej w tym okresie energii. Na pierwszy rzut oka zadanie wydaje się zatem dosyć proste... W rzeczywistości przy takiej analizie należy wziąć pod uwagę jeszcze kilka innych elementów:

  • Czy system przechodzi w tryb gotowości, gdy mikrokontroler nie jest uruchomiony?
  • Czy system musi automatycznie wybudzać się np. w określonych odstępach czasu?
  • Czy system dokonuje pomiarów sygnałów analogowych?
  • Czy system musi rejestrować jakiekolwiek dane do analizy lub transmisji w późniejszym czasie?

W większości systemów bazujących na mikrokontrolerach odpowiedź przynajmniej na jedno z powyższych pytań brzmi „tak”. Z uwagi na to prosta metoda – polegająca na obliczaniu energii z prądu i napięcia mikrokontrolera – nie zapewnia dokładnej reprezentacji zużycia przez niego energii w całym cyklu pracy. Aby uzyskać kompletny obraz tego, jak nasz układ pracować będzie przy zasilaniu bateryjnym, należy uwzględnić cztery typy zużycia energii w systemie:

Zasilanie w trybie gotowości – w typowych aplikacjach mikrokontrolery spędzają większość swojego życia w trybie gotowości. Znaczna część układu pozostaje uśpiona, a system oczekuje na sygnał do wybudzenia układu, co spowoduje uruchomienie procesora i wymaganych w danej aplikacji peryferiów. W wielu systemach zasilanych bateryjnie ten pobór energii jest największym w całym cyklu życia urządzenia.

Zasilanie peryferiów mikrokontrolera – układy te integrują w sobie wiele peryferiów umożliwiających m.in. komunikację z otoczeniem czy też pomiary zewnętrznych sygnałów. W systemach, w których mikrokontroler odpowiedzialny jest za np. akwizycję danych z sensorów, konieczność zasilania wbudowanego w układ przetwornika analogowo-cyfrowego (ADC) może znacząco wpłynąć na całkowity pobór energii systemu.

Zasilanie podczas rejestrowania danych – w większości aplikacji mikrokontroler rejestruje dane do analizy lub w celu późniejszego przesłania ich dalej. Dane te są zapisywane w pamięci nieulotnej wbudowanej w sam układ lub dołączonej zewnętrznie. W zależności od tego, ile danych i jak często jest zapisywanych, pobór energii będzie ulegał zmianie.

Zasilanie aktywne – zużycie energii podczas aktywnego przetwarzania danych przez mikrokontroler. To wartość energii, którą układ wykorzystuje podczas normalnej pracy, tj. realizacji kodu, zapisanego w firmware.

Informacje, jakie musimy zebrać przed rozpoczęciem projektowania systemu, to – oprócz całkowitego zużycia energii, stanowiącego odzwierciedlenie średniego poboru prądu przez mikrokontroler – także chwilowe zużycie w różnych momentach pracy układu. Wykres przykładowej charakterystyki poboru prądu przez mikrokontroler w czasie pracy pokazano na rysunku 1.

Rysunek 1. Wykres poboru prądu typowego mikrokontrolera w funkcji czasu

Standardowo mikrokontrolery w układach niskomocowych przez większość czasu są w jakimś stanie uśpienia bądź standby, z wyłączonymi peryferiami i wieloma elementami wewnętrznymi, a nawet uśpionym rdzeniem, zależnie od konkretnego mikrokontrolera i jego ustawień. W tym trybie procesor pobiera z zasilacza pojedyncze mikroampery. Układ jest aktywowany tylko przez krótką chwilę i zużywa wtedy relatywnie duży prąd – typowo na poziomie kilkunastu bądź kilkudziesięciu miliamperów. Tak zróżnicowany poziom poboru energii ma spore implikacje, jeśli chodzi o sekcję zasilania, która musi wykazywać wysoką sprawność w szerokim zakresie dynamiki.

Projekt zasilacza

Z uwagi na specyficzne wymagania opisane powyżej konieczne jest dobranie odpowiedniego zasilacza do mikrokontrolera. Musi on zapewniać wymagane napięcie (lub napięcia) systemowi i maksymalizować sprawność podczas pracy w typowym dla danego systemu zakresie prądów.

W pierwszej kolejności należy wybrać napięcie zasilania. Wybór ten może wydawać się prosty: „im niższe napięcie, tym niższa moc”. W pewnym sensie zdanie to jest prawdą, ale niekoniecznie zawsze znajdzie odzwierciedlenie w rzeczywistej pracy urządzeń. Wiele procesorów ma wewnętrzny stabilizator napięcia, obniżający napięcie i oferujący stałe zużycie energii w przeważającej części zakresu wejściowych napięć zasilania. Dzięki temu zasilanie układu napięciem 3 V lub 5 V (a w niektórych przypadkach nawet 1,8 V) nie wpływa na wynikowe zużycie energii przez mikrokontroler. Oczywiście zasilanie całego systemu 3 V może dobrze wpłynąć na całkowite zużycie energii, ale jest to wybór zależny od obwodów znajdujących się poza samym mikrokontrolerem.

Obecnie wiele układów pracować może przy bardzo niskich napięciach – na przykład procesor RL78/L12 firmy Renesas jest w stanie działać przy zasilaniu od 1,6 V. Dzięki tak szerokiemu zakresowi napięć realne okazuje się wydłużenie czasu pracy na baterii lub akumulatorze bez konieczności częstej wymiany lub ładowania źródła energii. Warto zauważyć, że maksymalna częstotliwość taktowania układu jest często zależna od napięcia i podczas pracy z bardzo niskim napięciem zasilania niemożliwe będzie osiągnięcie maksymalnej mocy obliczeniowej układu. Z tego względu należy zachować ostrożność przy konfiguracji zegara przy zasilaniu procesora napięciami od 1,8 V do 3,3 V i upewnić się, że częstotliwość taktowania jest odpowiednia dla danego napięcia. Maksymalna częstotliwość wewnętrznego oscylatora w przypadku wspomnianego RL78/L12 przy 1,6 V może wynosić od 1 MHz do 4 MHz (dla porównania – w zakresie od 2,7 V do 5,5 V układ może już pracować z taktowaniem od 1 MHz do 24 MHz).

Dodatkowo należy pamiętać, że możliwe jest okresowe obniżenie napięcia zasilania układu podczas jego bezczynności – niższe napięcie pozwala podtrzymać zawartość rejestrów i pamięci RAM, jednakże rozwiązanie takie komplikuje projekt systemu zasilania i wymaga zachowania ostrożności przy tworzeniu oprogramowania (m.in. sekwencjonowania napięć podczas wyłączania i włączania systemu z zachowaniem odpowiednich opóźnień, aby nie wpłynąć na układy zewnętrzne podłączone do mikrokontrolera). Opisane podejście przekłada się także na wydłużenie czasu uruchamiania i wybudzania układu ze stanu uśpienia. Ostateczna decyzja co do zastosowania koncepcji sekwencjonowania napięć wynika z prostej kalkulacji opłacalności – czy warto tak komplikować układ w celu np. wydłużenia czasu pracy na jednym naładowaniu akumulatora?

Drugim aspektem, który należy wziąć pod uwagę podczas projektowania sekcji zasilania, jest szeroki zakres prądu wyjściowego – od pojedynczych mikroamperów do nawet kilkudziesięciu miliamperów (lub więcej, jeśli weźmiemy pod uwagę również zasilanie pozostałych układów w systemie). Nie jest to problemem dla stabilizatorów liniowych, jednakże ich zastosowanie wiąże się z relatywnie niską sprawnością systemu, szczególnie jeśli napięcie zasilania mikrokontrolera jest dużo niższe od napięcia wejściowego. Znacznie wyższą sprawność (nawet ponad 95%) zaoferować mogą przetwornice impulsowe, jednakże charakteryzują się one zazwyczaj kiepską sprawnością przy niewielkich obciążeniach, jak pokazano na rysunku 2.

Rysunek 2. Przykładowe krzywe sprawności stabilizatora liniowego (linia czerwona) oraz impulsowego (linia niebieska) w funkcji pobieranego prądu

Jednym ze sposobów rozwiązania tego problemu okazuje się równoległe dołączenie do stabilizatora impulsowego układu LDO, którego sprawność wprawdzie jest niższa niż typowa sprawność stabilizatora impulsowego, ale w przypadku niewielkich prądów zależność ta odwraca się. Wystarczy znaleźć punkt przecięcia obu charakterystyk, jak pokazano na rysunku 3 i przełączać pomiędzy dwoma stabilizatorami, np. wykorzystując ich wejście zezwalające.

Rysunek 3. Sprawność stabilizatora LDO TPS709 (linia niebieska) i impulsowego TPS54331 (linia czerwona) w funkcji obciążenia. Widać, że powyżej około 0,3 mA stabilizator impulsowy ma wyższą sprawność niż LDO

Rozwiązanie z użyciem LDO oraz stabilizatora impulsowego nie należy oczywiście do najprostszych i należy pamiętać, że konieczne jest przełączanie stabilizatorów przez zewnętrzne układy (np. sam mikrokontroler). Można przy okazji takiego rozwiązania ustawić również dwa różne napięcia na wyjściach obu układów.

Oczywiście można również wybrać stabilizator impulsowy zaprojektowany pod kątem wysokiej sprawności przy niewielkich obciążeniach. Uwagę należy tutaj zwrócić głównie na obecność funkcji tzw. pulse skipping, czyli pomijania impulsów. Modulacja ta jest jedną z technik zmniejszania strat przełączania przy zachowaniu dobrej stabilizacji napięcia wyjściowego. Tryb pomijania impulsów polega na utrzymywaniu tranzystorów MOSFET w stanie wyłączenia przez kilka cykli przełączania, przez co straty związane z kluczowaniem w układzie sterowania tranzystorem MOSFET ulegają zredukowaniu, a ogólna sprawność wzrasta. Przetwornice wyposażone w taką opcję idealnie nadają się do aplikacji w systemach bateryjnych.

Architektura oprogramowania

Aby zoptymalizować pobór energii w systemie, programiści powinni rozważyć użycie szeregu funkcji i możliwości w oprogramowaniu mikrokontrolera. Zaprezentowana poniżej lista nie jest wyczerpująca, ale zawiera szereg kluczowych koncepcji, które warto rozważyć poza wspomnianymi wcześniej trybami uśpienia itp.

Wykonywanie oprogramowania z pamięci nieulotnej lub RAM

Tworząc system, należy dokładnie przeanalizować, czy oprogramowanie mikrokontrolera ma być wykonywane z pamięci nieulotnej, czy operacyjnej układu – ogromnie wpływa to na pobór prądu. Uruchamianie kodu z pamięci RAM oferuje zwykle niższe zużycie energii, jednak praktyczne aplikacje okazują się często zbyt obszerne, by móc wykonywać je tylko z pamięci RAM.

Włączone lub wyłączone zegary magistrali

Funkcjonowanie mikrokontrolera wymaga dostępu do pamięci i bloków peryferyjnych, co z kolei generuje potrzebę włączenia licznych zegarów dla ich magistrali i musi zostać uwzględnione przy szacowaniu aktywnego prądu. Z tego też powodu istotne okazuje się wyłączanie zegarów peryferiów nieużywanych w danym momencie pracy MCU.

DMA i CIP

Wiele mikrokontrolerów wyposażonych jest w kontroler bezpośredniego dostępu do pamięci (DMA), który pozwala peryferiom na wykonywanie pewnych działań niezależnie od aktywności rdzenia. Rozwiązanie takie umożliwia znaczne obniżenie prądu na poziomie systemu. Ważne, aby rozważyć, czy jest to możliwe w przypadku konkretnego peryferium lub zadania, ponieważ można w ten sposób zaoszczędzić znaczną ilość prądu.

Pewne rozwinięcie opisanego podejścia stanowią tzw. Core Independent Peripherals (CIP), obecne w 8-bitowych układach PIC i AVR firmy Microchip. Są one peryferiami mikrokontrolera, oferującymi dodatkowe funkcjonalności do obsługi różnorodnych zadań, bez konieczności interwencji CPU. Działanie modułów CIP procesora bazuje na osobnych instrukcjach wprowadzonych do jego pamięci. Dzięki takiej automatyzacji moduły te nie obciążają CPU i pozwalają mu na realizację innych zadań lub przejście w stan bezczynności.

Akceleracja

Mikrokontrolery przeznaczone do aplikacji o niskim zużyciu energii często wyposażone są w specjalne akceleratory, które obniżają liczbę cykli oraz energii wymaganej do realizacji określonych zadań. Na przykład: szyfrowanie AES256 może wymagać nawet 7 000 cykli klasycznego procesora, a akcelerator sprzętowy realizuje ten sam proces w zaledwie ok. 500 cykli. W tym przypadku akceleracja sprzętowa może zredukować czas aktywnego przetwarzania ponad 10-krotnie, a dodatkowo wiele akceleratorów może działać asynchronicznie, dzięki czemu – w czasie gdy realizują one swoje zadanie – procesor może wykonywać inne instrukcje, jeszcze wyraźniej skracając czas aktywności.

Używanie zoptymalizowanego kodu

Kod mikrokontrolera powinien zostać zoptymalizowany pod kątem najkrótszego czasu wykonania, za pomocą odpowiedniej struktury kodu i optymalizacji kompilatora. Jakkolwiek zalecenie to może brzmieć trywialnie i być oczywiste, to – jak pokazuje praktyka – często w pośpiechu i nawale prac projektowych optymalizacja kodu jest traktowana bardzo powierzchownie. Redukcja czasu realizacji zadań w trybie aktywnym procesora pozwala na istotne zmniejszenie zużycia energii przez układ.

Podsumowanie

Zasilanie mikrokontrolerów o niskim poborze mocy nie jest proste, podobnie jak tworzenie całych systemów, które mają zużywać mało prądu. W obecnych czasach jednak coraz więcej aplikacji stawia takie wymagania. Systemy zasilane bateryjnie, rozproszone sensory, urządzenia IoT etc. – wszędzie tam znajdziemy systemy mikroprocesorowe zoptymalizowane do zużywania jak najmniejszej ilości energii.

Powyższy artykuł jest jedynie zarysowaniem pewnego szerszego tematu, ale mam nadzieję, że pozwoli na wprowadzenie w zagadnienie optymalizacji zużycia energii w systemach wykorzystujących mikrokontrolery. Oprócz opisanych powyżej podstaw, warto zapoznać się z notami aplikacyjnymi mikrokontrolerów różnych producentów, które dotyczą stosowania ich układów w aplikacjach o niskim bądź ultraniskim poborze prądu. Istnieje też wiele rodzin mikrokontrolerów specjalnie zaprojektowanych w tym celu, takich jak STM32L0/4/5 oraz – niedawno dodana – seria STM32U5, PIC32CM Lx00, AVR z serii DD czy wreszcie układy takie, jak MAX32670 lub C8051F98x. Procesory te często wyposażone są w dosyć unikatowe rozwiązania, pozwalające zredukować pobór prądu w systemie.

Nikodem Czechowski, EP

Źródła:

  1. Jacob Borgeson, Stefan Schauer, Horst Diewald „Benchmarking MCU power consumption for ultra-low-power applications”, Texas Instruments White Paper SLAY023, listopad 2012
  2. Michael Hartshorne „How to Improve Buck Converter Light Load Efficiency with an LDO” Powerhouse, Texas Instruments, 2014
  3. Sitthipong Angkititrakul, Haitao Hu, „Design and analysis of buck converter with pulse-skipping modulation”, 2008 IEEE Power Electronics Specialists Conference
Artykuł ukazał się w
Elektronika Praktyczna
marzec 2024
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik listopad 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje październik 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna listopad 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich listopad 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów