Энергосбережение: режимы сна и работа с Power Profiler

Материал носит ознакомительный характер. Работа с электроникой и микроконтроллерами требует соблюдения техники безопасности; автор не несет ответственности за возможные повреждения оборудования или иной ущерб, возникший в ходе обучения.

В Arduino микроконтроллер обычно работает на полную мощность 100% времени, даже если просто ждет нажатия кнопки в пустом цикле loop(). Для nRF52840 это фатально: батарейка CR2032 «умрет» за пару дней. Наша цель — заставить устройство работать месяцами, используя продвинутые механизмы управления питанием.

Что такое ток покоя?

Прежде чем оптимизировать код, определим цель. Ток покоя (Quiescent Current) — это минимальный ток, который потребляет устройство в режиме ожидания, когда процессор спит, а радио выключено.

Для nRF52840 в глубоком сне это единицы микроампер (μA\mu A). Время жизни устройства считаем по формуле:

T=CIavgT = \frac{C}{I_{avg}}

Где:

  • TT — время работы (в часах);
  • CC — емкость батареи (в мАч);
  • IavgI_{avg} — средний потребляемый ток (в мА).

Снизив среднее потребление с 10 мА до 20 мкА, вы увеличите автономность устройства в 500 раз.

Режим System ON: Сон «в пол-уха»

В Zephyr RTOS вам не нужно вручную усыплять чип. Планировщик сам понимает, когда потокам (threads) нечего делать, и автоматически переводит систему в режим System ON.

Особенности режима:

  • Процессор Cortex-M4 остановлен.
  • Данные в RAM сохраняются.
  • Периферия (таймеры, датчики) может работать.
  • Мгновенное пробуждение по любому прерыванию.

Важно: Если вы оставили включенным UART или не закрыли сессию RTT-логирования, периферия будет «удерживать» питание, и чип не сможет глубоко уснуть.

Режим System OFF: Глубокая консервация

Если устройству предстоит долгое бездействие (например, ожидание нажатия кнопки для активации), используйте System OFF.

Что происходит в этом состоянии:

  • Почти вся периферия и процессор обесточены.
  • Содержимое RAM теряется (если не настроено удержание).
  • Пробуждение возможно только по сбросу (Reset), сигналу NFC или через специальный пин GPIO.

После выхода из System OFF программа стартует с нуля, как при первом включении питания.

Визуализация: Power Profiler Kit

Обычные мультиметры слишком медленные, чтобы поймать короткие пики потребления Bluetooth. Мы используем Power Profiler Kit (PPK) — инструмент, который строит график потребления тока в реальном времени.

СостояниеТипичный токВид на графике
Активная работа4–7 мАВысокие «полки»
Передача BLE10–15 мАОстрые «иглы» (пики)
System ON (Idle)2–5 мкАПлоская линия у нуля

Три приема быстрой оптимизации

Чтобы увидеть заветные микроамперы на графике PPK, соблюдайте три правила:

  1. Включите DC/DC преобразователь. По умолчанию nRF52 использует линейный регулятор (LDO), который тратит лишнюю энергию на нагрев. Включение DC/DC одной строчкой в prj.conf снижает потребление почти вдвое.
  2. Настройте GPIO. «Висящий в воздухе» входной пин работает как антенна и генерирует шум, мешая чипу уснуть. Переводите неиспользуемые пины в высокоимпедансное состояние или подтягивайте к питанию/земле.
  3. Забудьте про задержки. Никогда не используйте блокирующие циклы. Вместо них — аппаратные таймеры и события.

Сравнение кода

Плохо (стиль Arduino):

while (1) {
    if (sensor_ready()) {
        read_data();
    }
    // Процессор молотит вхолостую, потребляя ~4-5 мА
}

Хорошо (Zephyr RTOS):

// В prj.conf: CONFIG_PM=y

void main(void) {
    // Настраиваем прерывание от датчика и засыпаем
    k_sem_take(&sensor_sem, K_FOREVER); 
    
    // Пока семафор не получен, чип в System ON (единицы мкА)
    read_data();
}

Чек-лист перед замером

Перед подключением PPK проверьте:

  • Отладчик (J-Link) физически отсоединен от платы.
  • Логгеры (UART/RTT) программно выключены.
  • В prj.conf добавлена строка CONFIG_DCDC_NRF52X=y.

Оптимизация питания превращает макет в профессиональный продукт. Теперь, когда устройство работает долго, пора научиться обновлять его без проводов. В следующем уроке разберем механизм беспроводной прошивки (OTA DFU). 🔋