Optymalizacja poboru mocy układu IoT zaczyna się już na etapie wyboru czujników i układów scalonych towarzyszących procesorowi, takich jak przetwornice DC/DC. Należy przede wszystkim wybrać układy o małym poborze energii w stanie spoczynku. Prąd spoczynkowy IQ (Quiescent current) można zdefiniować jako prąd pobierany przez układ scalony w stanie włączonym bez obciążenia i przełączania [9]. Stanu spoczynku nie należy mylić ze stanami obniżonego poboru mocy, jak: stan oczekiwania (standby), drzemki (dormant), wybudzania (wake-up) czy uśpienia (sleep). Kolejnym warunkiem minimalizacji zużycia energii jest zapewnienie zastosowania w roli czujników odpowiednich układów małej mocy. Konstrukcja czujnika może w dużym stopniu wpływać na poziom energii pobieranej przez urządzenie.
Kluczowanie zasilania
Pierwszym sposobem ograniczania poboru mocy jest zastosowanie klucza do włączania zasilania czujnika. Na przykład w Thingy:52 IoT Sensor Kit firmy Nordic Semiconductor [6] układ scalony czujnika otoczenia CCS811 (26 mA podczas pomiaru) jest zasilany poprzez analogowy przełącznik scalony typu NX3DV2567 firmy NXP.
Drugi sposób kluczowania zasilania stanowi zasilanie czujnika bezpośrednio z wyprowadzenia IO procesora. Typowo z linii tej można pobierać prąd co najmniej 2 mA (RP2040 oferuje tryby obciążalności wyjść na poziomie 2, 4, 8 oraz 12 mA) [2]. Przykładowo: w module czujnikowym BP-BASSENSORSMKII firmy Texas Instruments [7] czujnik światła OPT3001 tej firmy pobiera tylko 3,7 μA prądu w trakcie pomiaru i jest dołączony bezpośrednio do wyprowadzenia procesora.
Trzeci sposób ograniczania poboru mocy to zastosowanie czujnika z tak małym poborem prądu w stanie oczekiwania, że można go zasilać cały czas (bez kluczowania). Przykładem jest ciągłe zasilanie czujnika ruchu ADXL362 firmy Analog Devices w Thingy:53 IoT prototyping platform firmy Nordic Semiconductor [5]. Prąd sensora w stanie czuwania sięga zaledwie 0,01 μA. Ciągła praca czujnika pozwala na wybudzanie urządzenia w przypadku detekcji ruchu.
Optymalizacja transmisji bezprzewodowej
Wybór rozwiązania łączności dla urządzenia IoT ma poważne konsekwencje dla selekcji komponentów do danej aplikacji oraz wydajności urządzenia i zużycia energii przez nie. Odległość między dwoma węzłami sieci bezprzewodowej, topologia, szybkość transmisji danych i rozmiar wiadomości wpływają na czas transmisji, co z kolei oddziałuje na budżet energetyczny.
Optymalizacja oprogramowania pod kątem niskiego zużycia energii
Zaprogramowanie urządzenia do pracy w trybach niskiego poboru mocy znacząco wpłynie na oszczędzanie energii baterii. Nowe rozwiązania w zakresie zarządzania zasilaniem wprowadziły szeroką gamę trybów uśpienia o bardzo niskim poborze mocy. Należy zaprogramować aplikację tak, aby pracowała możliwie najkrócej w aktywnym trybie MCU. Może to oznaczać uproszczenie obliczeń, operacje wsadowe lub przejście na projekt asynchroniczny i sterowany przerwaniami.
Płytka Raspberry Pi Pico W
Raspberry Pi Pico W firmy Raspberry Pi to płytka z mikrokontrolerem RP2040 wyposażonym w dwa rdzenie ARM Cortex-M0+ (pracujące z częstotliwością do 133 MHz) oraz 264 kB RAM [10]. Na płytce znajduje się również pamięć QSPI Flash o pojemności 2 MB. Mikrokontroler RP20240 udostępnia rozbudowane interfejsy komunikacyjne: 2×SPI, 2×I²C, 2×UART, 3×12-bit ADC, 16 kanałów PWM oraz obsługę trybów niskiego zużycia energii: uśpienia (sleep) i trybu drzemki (dormant). Układ może być programowany w języku C/C++ lub MicroPython.
Płytka ma zamontowane gniazdko microUSB służące do zasilania oraz przesyłania danych (USB 1.1 w trybach Host i Device). Ponadto wyposażona została w układ scalony CYW43439 firmy Infineon realizujący łączność bezprzewodową w standardzie Wi-Fi 4 (IEEE 802.11b/g/n) oraz Bluetooth 5.2 (BDR, EDR oraz BLE) z pojedynczą anteną współdzieloną.
Po obu stronach płytki znajdują się pady umożliwiające wlutowanie złączy goldpin (2×20) lub bezpośrednie przylutowanie do płytki drukowanej (SMD). Udostępniają one zasilanie oraz 26 wyprowadzeń GPIO.
Procesor RP2040 zapewnia szereg opcji redukcji mocy zasilania [2]:
- Bramkowanie zegara najwyższego poziomu poszczególnych urządzeń peryferyjnych i bloków funkcjonalnych.
- Automatyczna kontrola bramek zegara najwyższego poziomu w oparciu o stan uśpienia procesora.
- Możliwość zmiany „w locie” częstotliwości lub źródła zegara systemowego (np. przełączenie na wewnętrzny oscylator pierścieniowy i wyłączenie PLL oraz oscylatora kwarcowego).
- Stan drzemki (dormant) o zerowej mocy dynamicznej, wybudzenie po zdarzeniu od GPIO lub przerwaniu od zegara RTC.
- Wprowadzanie pamięci w stan wyłączenia zasilania (z zachowaniem zawartości RAM).
- Bramkowanie zasilania urządzeń peryferyjnych, które są obsługiwane, np. ADC, czujnika temperatury.
Warto pamiętać, że jeśli zostanie zastosowany RTC w celu wybudzenia ze stanu drzemki, to musi on mieć zewnętrzne źródło zegara.
Procesor RP2040 wyposażono w dwie domeny zasilania: cyfrową rdzenia (DVDD, 1,1 V) i bloków wejścia-wyjścia (IOVDD, 3,3 V).