W wielu aplikacjach peryferia wbudowane w mikrokontroler mogą okazać się niewystarczające – lub nie oferować odpowiednich parametrów. W takich sytuacjach zachodzi potrzeba sięgnięcia po układy zewnętrzne. Za dobry przykład niech posłużą tu czujniki położenia i przyspieszenia używane w smartwatchach czy opaskach sportowych do monitorowania aktywności fizycznej. Kolejną grupę stanowią układy monitorujące tętno i natlenienie krwi użytkownika takiej opaski sportowej czy monitora kondycji. Innym przykładem mogą być czujniki środowiskowe do monitorowania pogody. W aplikacjach zasilanych bateryjnie układy takie nie tylko muszą wykazać się ekstremalną oszczędnością energii, ale także – zależnie od kontekstu – powinny pozwalać mikrokontrolerowi na wyłączenie bądź też wykazywać zdolność, by wspomniany mikrokontroler w razie potrzeby obudzić. Oczywiście, wybór dostępnych komponentów z omawianej kategorii jest równie szeroki, jak oferta mikrokontrolerów, warto więc przyjrzeć się choćby kilku z nich, by poznać ich parametry i możliwości – oraz ograniczenia.
Układy IMU
Na początek weźmy pod lupę prawdopodobnie najciekawsze komponenty stworzone dzięki zaawansowaniu technologii produkcji półprzewodników – sensory mierzące zmiany prędkości i orientację w przestrzeni. Technologia MEMS (ang. microelectromechanical system) pozwoliła na stworzenie akcelerometrów i żyroskopów mieszczących się w strukturze układu scalonego. Dzięki temu duże i kosztowne dotychczas urządzenia elektromechaniczne stały się integralną częścią m.in. smartfonów, smartwatchy i opasek sportowych. Ważną (i pożądaną) cechą układów IMU jest ich energooszczędność – w końcu pracują głównie w urządzeniach zasilanych bateryjnie.
Typowy układ IMU ma akcelerometr oraz żyroskop. Opcjonalnie może mieć wbudowany również magnetometr, choć on akurat w większości układów jest zewnętrznym komponentem dołączonym do IMU z użyciem pomocniczego interfejsu. Magnetometr pozwala na wskazanie bezwzględnej orientacji czujnika względem bieguna magnetycznego Ziemi – oraz zmian tej orientacji. Dodatkowo zapobiega on powolnemu dryftowi czujnika, spowodowanemu efektem Coriolisa. Nie zawsze jest to potrzebne, dlatego na rynku nie brakuje sensorów IMU pozbawionych magnetometru. Omawiane czujniki dostarczają zazwyczaj surowych danych o przyspieszeniu, zmianach prędkości kątowej i – opcjonalnie – intensywności pola magnetycznego. Często wyposażane są też we własny, wewnętrzny procesor, który zajmuje się przetwarzaniem surowych danych i generowaniem różnych przerwań lub rozpoznawaniem gestów czy aktywności, przy założeniu, że czujnik umocowany jest na nadgarstku (w opasce sportowej bądź w smartwatchu). Układ będzie generował wybrane przez programistę przerwania, które mogą wybudzać główny mikrokontroler celem podjęcia jakiejś akcji. Oznacza to, że układ IMU będzie musiał pracować cały czas.
Spójrzmy zatem na pobór prądu typowego przedstawiciela omawianej grupy czujników: BMI270 firmy Bosch. Wyposażony jest on jedynie w akcelerometr i żyroskop, ale udostępnia też dodatkowe funkcje, takie jak wykrywanie gestów nadgarstka, liczenie kroków czy rozpoznawanie podstawowych aktywności: brak ruchu/chodzenie/bieganie/inne. Układ został zoptymalizowany pod kątem pracy bateryjnej, dlatego w nocie podano pobór prądu dla napięcia zasilania 1,8 V. Maksymalnie układ pobiera 970 μA w trybie wysokiej wydajności akcelerometru i żyroskopu. W trybie niskiego poboru prądu z użyciem obu czujników MEMS pobór wynosi 420 μA, jeśli jednak zrezygnujemy z użycia żyroskopu, w trybie oszczędzania energii możemy osiągnąć pobór zaledwie 10 μA. W tym ostatnim trybie dane są zresztą aktualizowane 25 razy na sekundę, co wystarcza do wykrycia ruchu. Zaawansowane funkcje pobierają dodatkowo 3 μA dzięki optymalizacji wewnętrznego procesora pod konkretne zastosowania.
Inny przedstawiciel układów IMU to model LSM6DS3TR-C firmy STMicroelectronics. Układ oferuje podobne funkcje, co opisany wyżej, przy czym jest kompatybilny z urządzeniami opartymi na systemie operacyjnym Android, co pozwala na łatwą integrację ze smartfonami i smartwatchami bazującymi na tym systemie. Ciekawą funkcją odróżniającą opisywany układ od BMI270 jest opcja automatycznego wykrywania upadku – jednym z jej zastosowań może być sygnalizacja przewrócenia się osoby starszej. Nas jednak interesuje przede wszystkim zapotrzebowanie na energię. Maksymalny pobór prądu w trybie wysokiej wydajności wynosi 900 μA, w trybie normalnym 450 μA, a w trybie niskiego poboru prądu 290 μA. W ostatnim z wymienionych trybów dane z akcelerometru i żyroskopu odczytywane są z częstotliwością 52 Hz, czyli ponad dwa razy częściej niż w przypadku układu firmy Bosch. Rezygnacja z żyroskopu i ograniczenie częstotliwości próbkowania akcelerometru do 12,5 Hz obniża pobór prądu do zaledwie 9 μA.
Układ ICM-42670-P jest nowym produktem w ofercie TDK InvenSense. Nazwa ta może być znana hobbystom ze względu na niegdyś bardzo popularne moduły z układami MPU6050, wciąż dostępne za około 10 złotych. Układ ICM-42670-P oferuje akcelerometr i żyroskop MEMS o niskim poziomie szumów własnych, programowalne filtry cyfrowe oraz rozwiązanie o nazwie APEX Engine, które realizuje funkcje rozpoznawania gestów, liczenia kroków, itp. Pobór prądu jest dość niski: gdy pracuje akcelerometr i żyroskop, wynosi on 550 μA przy 1,8 V. Sam akcelerometr pobiera zaś 200 μA.
Wspomniany układ MPU6050 nie jest rekomendowany do nowych projektów, co może stanowić pewien problem, gdyż poza nim nie spotkamy na rynku tanich układów IMU zawierających wbudowany magnetometr. Podobnie sytuacja wygląda z układem ICM-20948 firmy TDK InvenSense. Producent chwali się technologią DMP występującą w wielu układach IMU tej firmy, czyli wbudowanym mikroprocesorem, do którego przygotowano firmware pozwalający przetwarzać dane lokalnie, bez udziału głównego mikrokontrolera. W efekcie układ rozpoznaje różne gesty, może automatycznie liczyć kroki i inne aktywności, wykrywać upadek czy też realizować inne funkcje, w tym automatyczną kalibrację w tle. DMP nie może jednak integrować surowych danych z sensorów – to zadanie wciąż należy do głównego mikrokontrolera. Co więcej, by używać DMP, trzeba przy każdym włączeniu zasilania załadować do niego firmware z nadrzędnego procesora. Producent chwali się też najniższym poborem prądu na świecie wśród układów IMU z magnetometrem. Przy użyciu wszystkich trzech sensorów i napięciu 1,8 V układ pobiera 3,11 mA. Sam żyroskop, przy próbkowaniu 102,3 Hz, pobiera 1,23 mA. Akcelerometr przy tej samej częstotliwości próbkowania w trybie oszczędności energii pobiera 68,9 μA, sam magnetometr zaś – przy próbkowaniu 8 Hz – pobiera 90 μA.
Kolejnym układem IMU z magnetometrem jest BNO055 firmy Bosch, wyposażony w akcelerometr, żyroskop i magnetometr, a także automatycznie integrujący pozyskiwane z nich dane i dostarczający bezwzględnych wartości położenia i kierunku. Zwalnia to główny mikrokontroler z konieczności przeprowadzania wymienionych obliczeń, ale sam układ IMU nie jest już tak wysoko energooszczędny. Przy napięciu 3 V i częstotliwości aktualizacji wartości 100 Hz układ pobiera do 12,3 mA. W trybie oszczędzania energii pobór wynosi 2,72 mA, dopiero uśpienie sensorów ogranicza go do wciąż wysokiego poziomu 40 μA.
Zaprezentowane modele to zaledwie część dostępnych na rynku układów IMU, ale łatwo zauważyć, że są to układy relatywnie „prądożerne”, zwłaszcza jeśli chcemy uzyskać wysoką częstotliwość próbkowania i dużą precyzję. W praktycznych zastosowaniach można jednak ograniczyć się do sporo niższego taktowania (lub nawet używać tylko samego akcelerometru) celem redukcji poboru prądu. Układy te mają też w większości przypadków kolejkę FIFO o pojemności rzędu 1 kB, co pozwala przetwarzać dane pakietami, zamiast na bieżąco. Jeszcze bardziej energooszczędną opcją jest utrzymywanie układu IMU w stanie uśpienia i wybudzanie go 2...5 razy na sekundę celem dokonania pojedynczego pomiaru przyspieszenia, orientacji i zmian prędkości kątowej. W większości zastosowań nawet takie zgrubne pomiary powinny pozwolić zorientować się w położeniu czujnika. Oczywiście będzie to adekwatne, gdy mówimy o urządzeniu noszonym bądź używanym przez człowieka. Takie urządzenia, jak kontrolery ruchowe, zestawy AR/VR, drony czy stabilizatory kamer, wymagają jednak wysokiej częstotliwości próbkowania, a więc i wyższego poboru prądu. W tych aplikacjach jednak układ IMU czy główny mikrokontroler odpowiadają jedynie za niewielką część zapotrzebowania na energię.