Энергопитание GPS-трекера на батарее: сон и ключи

Reading time: 10 minutes

Last modified:

Трекер, который отправляет позицию раз в сутки, должен работать годами. Наша таблица потребления показывает предел: при одной отправке в сутки половина суточной энергии уходит на отправку, половина на сон. Снизите затраты на отправку, и нижнюю границу задаст ток сна. Снизите ток сна, и нижнюю границу задаст отправка.

В статье разобраны решения по питанию в двух линейках трекеров: GAT (трекер птиц и животных) и Micare (трекер автомобилей). Мы опираемся на то, что записано в задачах и коде. Если в задаче есть число, берём его. Если считали сами, пишем об этом. Выбор модуля мы разобрали в сравнении модемов. Здесь речь о том, как им управлять.

Куда уходит энергия

В трекере четыре потребителя: микроконтроллер, GPS-приёмник, сотовый модем и акселерометр. Акселерометр остаётся под питанием ради пробуждения, его потребление в задачах не записано. Долгие и дорогие фазы в наших задачах: два поиска, GPS ищет фикс, модем ищет вышку.

В июне 2022 мы измерили прототип GAT в нескольких состояниях прошивки. Среднее потребление колебалось от 5,5 до 44 мА:

Состояние прошивки Среднее потребление
МК не спит, GPS не выключается, модем бодрствует при поиске GPS 44 мА
То же, но модем спит при поиске GPS 37 мА
МК не спит, GPS выключается между отправками 25 мА
Пробуждение раз в 30 с, сон модема, разрыв сессии GPRS каждый раз 21,6 мА
Пробуждение раз в 30 с, сон модема, сессия GPRS сохраняется 5,5 мА

В задаче есть оговорка: в показаниях учтены светодиод модема и погрешность USB-тестера. Сравнивайте по ним состояния, но не считайте батарею. Состояние на 44 мА к тому же работало через раз, с просадками напряжения.

Последние две строки показывают самый сильный эффект. Разрыв сессии GPRS и повторное подключение при каждом пробуждении стоили примерно в четыре раза больше тока, чем удержание сессии. Задача про сон GSM говорит то же словами: поиск вышек и инициализация модема съедают больше всего.

В июле вторая таблица превратила те же замеры в энергию на событие. Колонка в ней подписана «мА», но суммы сходятся только как миллиампер-часы, так мы её и читаем:

Событие Длительность Энергия
Поиск GPS и отправка 40 с 0,756 мАч
Тревога, 2 мин сна, проверка статуса 149 с 0,244 мАч
Тревога STOP, поиск GPS и отправка 40 с 0,488 мАч
Сутки сна 86 360 с 0,7197 мАч

Из этих чисел мы рассчитали две величины. Сорок секунд поиска GPS дают в среднем около 68 мА. Строка сна даёт около 30 мкА. Эту цифру мы получили делением, прибором её никто не снимал.

Одна отправка в сутки стоит 0,756 + 0,7197 = 1,4757 мАч. Таблица переводит это в 745 суток, или 24,5 месяца, и отсюда следует ячейка около 1100 мАч. Одна отправка в минуту стоит 44,5 мАч в сутки, примерно в 30 раз больше, и таблица даёт 0,8 месяца. При таком темпе ток сна почти не влияет. При одной отправке в сутки он весит столько же, сколько сама отправка.

Отключение питания ключами MOSFET

В прошивке ATmega328 из репозитория GAT заданы два вывода под MOSFET: один для GPS, один для модема. При старте оба стоят в LOW, поэтому ничто не питается, пока прошивка не включит. Перед каждым сном процедура сна выключает оба. Отдельный тестовый скетч на STM32 делает то же через вывод затвора на модеме, под флагом сборки, и ждёт пять секунд перед отключением питания.

GAT использует оба инструмента. Модем засыпает по линии DTR, пока GPS ищет фикс, а MOSFET снимает питание на долгий сон. Тест SIM7080G на Micare говорит в пользу снятия питания, а не режима сна самого модема. Выключение командой дало 3,12 мкА, как и PSM, а отключение питания ничего не изменило. Регистрация в сети заняла одинаковое время во всех трёх вариантах. Инженер, проводивший тест, отклонил PSM по четырём причинам:

  • модем может не войти в режим, и не все операторы его поддерживают;
  • вход занимает лишние время и энергию;
  • минимум таймера по стандарту 20 секунд, а наблюдаемый вход занял около 30;
  • если код не ждёт входа, он оказывается в неуправляемом состоянии, потому что модем может уснуть, а может нет.

При интервале отправки 10 минут в режимах ARMED и DISARMED выиграло выключение питания модема. Короткий интервал режима SOS в задаче остался непроверенным.

У ключей свои отказы, мы встретили три:

  • Бросок тока. Конденсаторы за транзистором потребляли большой зарядный ток при включении. Лучшим решением оказалось их удаление.
  • Перезагрузки. На плате с LC86G микроконтроллер перезагружался, когда питание GPS шло через транзистор. Мы заменили транзисторы на LDO с выводом включения, и перезагрузки прекратились.
  • Утечка в выключенном состоянии. Вывод резервного питания GPS потреблял 7 мкА на старом L80 и 13 мкА на LC86G. LDO в выключенном состоянии должен потреблять не больше 1,5 мкА, а мы измерили около 7 мкА. Программное исправление по выводу резервного питания снизило потребление. Итоговой цифры для LDO в задаче нет.

Сон GSM до фикса GPS

Самую дешёвую экономию на GAT дала смена порядка действий. В задаче четыре шага: подключить модем, отправить тревоги, усыпить модем на время поиска GPS, разбудить его и отправить всё вместе. Цель: меньше поисков вышек и меньше инициализаций модема.

Результат на стенде: шаг с 44 до 37 мА в таблице выше, около 16 процентов по нашему расчёту. Мы закрыли задачу после тестов, отдельной цифры энергии для этого изменения в ней нет.

В похожем тесте мы сравнили параллельную работу GPS и модема с последовательной. Параллельный вариант выполнил ту же работу на 50 секунд быстрее и потребил на 4 мА больше. Какой вариант проработает дольше, в задаче не записано, и мы этого не знаем.

Сон и источники пробуждения

В нашем репозитории лежит прошивка ATmega328 с версиями 1.4.x, которые цитируют задачи Micare, а микроконтроллер Micare работает на 8 МГц. Процедура сна делает пять вещей:

  1. Отключает АЦП и последовательные порты.
  2. Программно выключает детектор пониженного напряжения (brown-out).
  3. Входит в режим power-down.
  4. Просыпается по прерыванию watchdog каждые четыре секунды и считает циклы до конца заданного времени сна. Комментарий в коде ограничивает один сон 45 сутками.
  5. Просыпается сразу по переднему фронту от акселерометра или по кнопке.

Акселерометр (ADXL345) работает как датчик движения. Трекер спит до движения, отправляет тревогу и ищет фикс GPS. Тесты привели к двум решениям. Перед каждым сном прошивка читает вывод прерывания акселерометра: если триггер пришёл во время подготовки, устройство иначе уснёт до следующего. А на Micare мы разделили прерывание акселерометра и прерывание GPS, а также линию UART модема и линию GPS. В прошивке для обоих прерываний был назван один вывод.

На Micare мы добавили внешние часы DS3231. Перед сном прошивка заводит будильник на интервал, который сервер задаёт для каждого режима. Источники пробуждения: акселерометр, кнопка и будильник RTC. Часы синхронизируются по времени GPS при успешном фиксе. Синхронизацию по вышкам и NTP мы исключили: часы достаточно точны без неё.

RTC против watchdog

В мае 2024 мы сравнили два способа сна по документации и на устройстве.

Источник Ток
DS3231, даташит 0,84 мкА
DS3231, измерение 0,6-0,8 мкА
Watchdog включён, даташит при 1,8 В 3,5 мкА
Watchdog, запись из другой задачи (устройство выключено кнопкой) около 5 мкА

Стабильного показания для watchdog мы не получили. Ток медленно падает после ухода микроконтроллера в сон, поэтому показание зависит от момента замера. При 3,3 В цифра из даташита выше, чем при 1,8 В. Разница около 4,3 мкА (5 минус 0,7). За год это примерно 38 мАч, и это расчёт, около 3 процентов от ячейки 1200 мАч, под которую мы считали корпус GAT. Экономия небольшая. Вердикта в задачах нет, а прошивка в итоге просыпается по будильнику RTC. К тому же RTC хранит календарное время, а watchdog только отсчитывает интервалы.

RTC принёс и проблему. GPS-модуль вернул неверную дату после неудачного фикса, а единственной проверкой в прошивке было «год больше 2022». Одно устройство сохранило метку времени 2057 года и не смогло вернуться к текущему времени без сброса EEPROM.

FRAM вместо EEPROM

Трекер без сети должен хранить отчёты и отправлять их позже. На ATmega328 мы сначала использовали внутреннюю EEPROM. В задачах записана работа вокруг неё: проверка переполнения (запись просто не происходит, потому что EEPROM и flash разделены), лимит 70 записей, кольцевой буфер в отдельной библиотеке и обнаружение нестабильной нулевой ячейки, которая ломала нашу проверку «EEPROM чистая».

На плате 4G мы перешли на внешнюю FRAM по I2C. В задаче записано, что сделать, а причина не указана, поэтому измеренной выгоды назвать не можем. Один тест показал, что чип вмещает 544 записи, каждая из позиции и метки времени. Затем нас ждал конфликт: FM24CL16B отвечает по восьми адресам I2C от 0x50 до 0x57, а ADXL345 стоит на 0x53, поэтому память и акселерометр делили адрес.

Ограничение попыток

Две ошибки с расходом батареи были циклами без выхода. Одна версия прошивки пыталась подключиться к вышке без ограничения, не доходила до процедуры сна и разряжала ячейку. Теперь на вышку даётся три попытки. Для GPS: если фикс не получен два раза подряд на 24-м статусном сообщении, устройство перестаёт искать и отправляет один статус. Оба правила ничего не стоят в железе.

Процент заряда по напряжению

Цифра заряда в приложении влияет на решение клиента: заряжать или заменить. В марте 2024 мы измерили полный цикл разряда ячейки Micare и подготовили формулу. В серверном коде два преобразования. Первое: полином четвёртой степени выше 3,5 В и линейный участок от 3,4 до 3,5 В для последних процентов. Второе линейное: от 3,6 В (0 процентов) до 4,0 В (100 процентов). Сервер выбирает по версии прошивки: полином с 1.4.46 и выше, линейное ниже.

В апреле клиент пожаловался на отображение. Устройство, у которого ячейка опустела месяцы назад, показывало в приложении 40 процентов, а ниже 20 процентов устройства почти не могли отправить данные. Клиент написал, что показанные 40 процентов означают ноль. Мы считаем, что почти пустая ячейка проседает под импульсом модема, поэтому процент по напряжению покоя завышает то, что модем ещё получит. Порог 3,4 В в полиноме это минимум SIM800C из нашей таблицы расчёта ёмкости.

Расчёт ячейки для одной отправки в сутки

Ранняя таблица GAT считала батарею на шесть и двенадцать месяцев при одном пинге в сутки. Она брала среднее 73,84 мкА и отсечку 3,4 В и требовала 1600 мАч на шесть месяцев и 2900 мАч на двенадцать. Для пяти пингов в сутки взяты 129 мкА и 2900 и 5700 мАч.

Проверьте арифметику, и найдётся разрыв. 73,84 мкА за шесть месяцев дают 323 мАч, а за двенадцать 647 мАч. Таблица просит примерно в пять раз больше. Запаса и причины в задаче нет, поэтому мы не знаем, что покрывает множитель. Возможно, это поправка на холод, саморазряд и отсечку по напряжению. Мы приводим таблицу, потому что разрыв учит: записывайте запас рядом с формулой. Поздняя таблица с 1,48 мАч в сутки даёт заметно меньшую ячейку. Две оценки расходятся, и ни одна не проверена в поле.

Чего мы не измеряли

  • Ни в одной задаче нет ресурса батареи в поле для какого-либо трекера, и мы его не заявляем.
  • Ни одна задача не даёт ток сна итоговой платы Micare одной цифрой и мАч на отправку для платы 4G.
  • Ни одна задача не даёт время пробуждения по пути RTC.
  • В проекте GAT мы нашли интеграцию таймера TPL5110 с платой на STM32 с целью сверхнизкого потребления. Тока в задаче нет. Более поздние конструкции в наших репозиториях используют сон МК и MOSFET, а почему, в записях не сказано.

Чек-лист

  1. Измерьте каждое состояние, включая сон и выключено, убрав светодиод модема из расчёта или учтя его.
  2. Запишите энергию каждого события и суточный итог в одной таблице до выбора ячейки.
  3. Отключайте GPS и модем ключами, затем измерьте выключенное состояние вместе с утечкой самого стабилизатора.
  4. Держите конденсаторы за ключом маленькими или ограничьте бросок тока.
  5. Усыпляйте модем на время поиска GPS или выключайте его, и сравните с PSM у вашего оператора.
  6. Проверяйте вывод акселерометра перед сном.
  7. Ограничивайте каждый цикл повторов.
  8. Синхронизируйте часы по фиксу GPS и отбрасывайте даты, которым нельзя верить.
  9. Переводите напряжение в проценты по измеренной кривой разряда и проверяйте под нагрузкой.
  10. Записывайте запас рядом с формулой батареи.

Мы делаем прошивки, платы и облако для таких устройств. Смотрите разработку IoT-продуктов, трекер птиц GAT и GPS-трекер Micare. Чтобы обсудить ваш трекер, напишите нам.

Часто задаваемые вопросы

Что выгоднее: отключать питание модема ключом или использовать его режим сна?

На плате Micare с SIM7080G выключение модема оказалось лучше PSM. Команда PowerOFF и PSM дали одинаковые 3,12 мкА, но PSM включался только через 30 секунд, и его поддерживают не все операторы. Время повторной регистрации в сети не зависело от варианта. При интервале отправки 10 минут в задаче выбрали выключение питания.

Сколько экономит сон GSM-модема во время поиска GPS?

В стендовом тесте GAT среднее потребление упало с 44 до 37 мА, когда модем спал, пока GPS искал фикс. Это около 16 процентов. Цифра получена делением двух замеров, снятых USB-тестером, поэтому считайте её грубой.

RTC лучше watchdog микроконтроллера для сна?

В Micare RTC выиграл и по документации, и на стенде. DS3231 по даташиту потребляет 0,84 мкА, мы измерили 0,6-0,8 мкА. Для watchdog даташит даёт 3,5 мкА при 1,8 В, а отдельная проверка показала около 5 мкА. Чисто измерить watchdog не удалось: ток медленно падает после ухода МК в сон.

На сколько хватит батареи трекера при одной отправке в сутки?

По таблице GAT одна отправка с 40-секундным поиском GPS стоит 1,48 мАч в сутки. Это около 24 месяцев на ячейке примерно 1100 мАч. Это расчёт по стендовым замерам. Полевого результата у нас нет, и мы его не заявляем.

CimpleO IoT
Энергопитание GPS-трекера на батарее: сон и ключи
OCT 06 2026 · 10 MIN
Table of Contents