Na co czujnik LTE-M zużywa baterię
Spis treści8 ▾
Niemal każde urządzenie bateryjne z modemem komórkowym, przy którym pracowałem, zaczynało się od arkusza kalkulacyjnego obiecującego pięć lat pracy na jednym ogniwie. Potem z terenu wracały pierwsze prototypy z bateriami rozładowanymi do połowy po czterech miesiącach. Prąd uśpienia arkusz zwykle liczył dobrze, za to mylił się niemal we wszystkim, co modem robi po wybudzeniu, a to właśnie modem zjada baterię.
Poniżej opisuję, jak dziś liczę budżet energetyczny czujnika LTE-M lub NB-IoT, i kilka decyzji, które wpływają na niego najmocniej.
Zacznij od energii na jeden raport
Najważniejsza liczba to ładunek, który urządzenie zużywa przy każdej wysyłce danych. Prąd uśpienia przyciąga sporo uwagi, bo łatwo go zmierzyć i widnieje na pierwszej stronie każdego datasheetu, a w dobrym projekcie między raportami nie przekracza kilku mikroamperów. W skali doby daje to około jednej dziesiątej miliamperogodziny, czyli niewiele.
Z raportem jest zupełnie inaczej. Modem się budzi, szuka sieci, czasem ponownie wykonuje attach, otwiera połączenie, zestawia sesję TLS, wysyła kilkaset bajtów, czeka na potwierdzenie, a potem jeszcze przez jakiś czas pozostaje aktywny, zanim sieć pozwoli mu zasnąć. W trakcie nadawania moduł komórkowy potrafi impulsowo pobierać kilkaset miliamperów, a cała sekwencja nawet przy bezproblemowym przebiegu trwa często kilka sekund. Przy średnim poborze rzędu stu miliamperów przez dwie sekundy wychodzi około 0,055 mAh na raport.
Weźmy teraz czujnik, który wysyła raport co piętnaście minut. To 96 raportów na dobę i nieco ponad pięć miliamperogodzin, mniej więcej pięćdziesiąt razy więcej niż zużycie w uśpieniu. Litowe ogniwo AA o pojemności około 2600 mAh wytrzyma przy takim profilu mniej więcej rok i trzy miesiące, i to zanim swoje zabiorą temperatura i starzenie. Niemal cały budżet pochłaniają raporty, więc o czasie życia urządzenia decydują ich liczba i koszt pojedynczego raportu.
Raportuj rzadziej, ale wysyłaj więcej naraz
Najtańsza optymalizacja to prawie zawsze grupowanie danych. Większość czujników, które mierzą co piętnaście minut, wcale nie musi dostarczać każdego odczytu w ciągu piętnastu minut. Jeśli urządzenie zbierze cztery odczyty i wyśle je raz na godzinę, koszt wybudzenia ponosi 24 razy na dobę zamiast 96, a dodatkowe bajty w wiadomości nie kosztują prawie nic, bo stały narzut na zestawienie połączenia wielokrotnie przewyższa sam payload. W naszym przykładzie już to jedno zmniejsza dobowy budżet z ponad pięciu do około półtorej miliamperogodziny.
Wyjątkiem są alarmy. Urządzenie może grupować rutynowe odczyty, a mimo to wysłać dane natychmiast po przekroczeniu progu. Ten podział na dane rutynowe i zdarzenia to zwykle najcenniejszy temat do omówienia z zespołem produktowym na wczesnym etapie, bo od niego zależy cały budżet energetyczny.
Niech sieć porządnie cię uśpi
LTE-M i NB-IoT mają dwa mechanizmy zaprojektowane właśnie z myślą o takich urządzeniach. Power Saving Mode (PSM) pozwala urządzeniu pozostać zarejestrowanym w sieci przy całkowicie wyłączonym radiu, dzięki czemu po wybudzeniu może wysłać dane bez pełnej procedury attach. Extended discontinuous reception, w skrócie eDRX, pozwala urządzeniu, które musi pozostać osiągalne, tylko co jakiś czas sprawdzać, czy czekają na nie dane, zamiast nasłuchiwać bez przerwy.
W PSM urządzenie prosi sieć o dwa timery. Pierwszy określa, jak długo po wysłaniu danych pozostaje osiągalne, drugi, jak długo może spać, zanim znów będzie musiało zgłosić się do sieci. Haczyk, na którym wiele osób się wykłada, polega na tym, że to tylko prośby. Wartości przydziela sieć i różnią się one między operatorami, czasem nawet między komórkami tego samego operatora. Modem podaje, co faktycznie dostał. Przydzielone wartości zawsze loguję z urządzeń w terenie, bo urządzenie, które poprosiło o krótkie okno aktywności, a po cichu dostało dużo dłuższe, potrafi po każdym raporcie spalić zaskakująco dużo ładunku na nasłuchiwanie, w którym nic nie przychodzi.
Protokoły, które walczą z radiem
Standardowy klient MQTT po TCP projektowano z myślą o urządzeniach stale podłączonych do sieci. Domyślnie wysyła pingi keepalive co minutę lub dwie (w kliencie ESP-IDF co 120 sekund), a każdy z nich budzi radio, co całkowicie przekreśla sens PSM. Urządzenie, które całą dobę trzyma otwarte połączenie MQTT, będzie tkwić w stanie o znacznie wyższym poborze mocy niż takie, które łączy się, wysyła dane i rozłącza.
Podobnie kosztowny jest TLS. Pełny handshake to kilka round tripów i sporo danych na certyfikaty, a na łączu komórkowym każdy kolejny round trip trzyma radio włączone trochę dłużej. Pomagają wznawianie sesji i krótsze łańcuchy certyfikatów. W produktach o najniższym poborze energii CoAP po UDP z DTLS i connection ID potrafi zredukować całą wymianę do jednego krótkiego impulsu, kosztem mniej znanego stosu i backendu, który musi obsługiwać CoAP. Wiele zespołów zostaje przy MQTT i po prostu łączy się dopiero wtedy, gdy ma coś do wysłania. Uważam to za rozsądny kompromis.
Zasięg zmienia wszystko
Powyższe liczby zakładają przyzwoity sygnał. Przy słabym zasięgu LTE-M i NB-IoT powtarzają transmisje, czasem wielokrotnie, żeby urządzenie schowane głęboko w budynku nadal mogło się połączyć. Każde powtórzenie wydłuża czas pracy radia, więc urządzenie w piwnicy może na jeden raport zużyć wielokrotnie więcej energii niż to samo urządzenie na parapecie.
Dlatego przy każdym raporcie zawsze odpytuję modem o jakość sygnału i parametry zasięgu, a wyniki wysyłam do backendu. Kiedy flota już działa, te dane tłumaczą większość przypadków nietypowo szybkiego rozładowania baterii. Pozwalają też sformułować konkretne wytyczne montażowe, bo przesunięcie urządzenia o metr czy dwa potrafi czasem mocno wpłynąć na czas pracy na baterii.
Bateria też ma coś do powiedzenia
Ogniwa litowo-chlorkowo-tionylowe to typowy wybór do czujników o długim czasie pracy ze względu na pojemność i bardzo niskie samorozładowanie. Źle znoszą jednak nagłe impulsy dużego prądu, zwłaszcza w niskiej temperaturze albo po długim okresie bezczynności, a podczas impulsu nadawczego modemu napięcie potrafi spaść na tyle, że w trakcie raportu dochodzi do resetu brownout. Typowe rozwiązanie to kondensator albo HLC (hybrid layer capacitor) przy ogniwie, który dostarcza krótkie szczyty prądu, a bateria powoli go doładowuje. Warto to uwzględnić już na etapie projektu sprzętu, bo dodanie go później oznacza nową rewizję płytki.
Deklarowana pojemność również zakłada łagodne warunki. Niska temperatura, duże obciążenia impulsowe i lata leżakowania w magazynie zmniejszają to, co faktycznie da się z ogniwa wyciągnąć, więc zanim uwierzę w jakikolwiek szacunek czasu pracy, odejmuję od wartości z datasheetu solidny zapas.
Zmierz to
Kiedy mam już prototyp, chcę zmierzyć prawdziwe urządzenie w prawdziwej sieci. Power profiler, który rejestruje zarówno mikroamperowy prąd uśpienia, jak i szybkie impulsy dużego prądu podczas transmisji, pokazuje dokładnie, na co każdy raport wydaje ładunek, i zwykle kogoś zaskakuje. Lubię nagrać kilkadziesiąt pełnych cykli wybudzenia w sieci docelowego operatora, przy dobrym i słabym sygnale, a potem wstawić zmierzony ładunek na raport z powrotem do budżetu.
Co z tego wszystkiego wynika
Składając to wszystko w całość, dochodzę zwykle do podobnego planu dla czujnika komórkowego, który ma długo działać na baterii. Urządzenie zbiera rutynowe odczyty w kilka raportów na dobę, a zdarzenia wysyła od razu. Śpi w PSM z timerami, które ktoś porównał z tym, co sieć faktycznie przydziela, a każde połączenie utrzymuje tak krótko, jak pozwala protokół. Przy każdym raporcie zapisuje jakość sygnału, żeby później dało się wyjaśnić przypadki odstające, a jego zasilanie zaprojektowano pod szczytowy pobór modemu. Potem całość się mierzy, zanim ktokolwiek obieca klientowi konkretny czas pracy na baterii.
Jeśli dobierasz baterię do urządzenia z modemem komórkowym i liczby nie do końca się zgadzają, chętnie na nie spojrzę.