Энергосбережение: режимы сна и работа с Power Profiler
Материал носит ознакомительный характер. Работа с электроникой и микроконтроллерами требует соблюдения техники безопасности; автор не несет ответственности за возможные повреждения оборудования или иной ущерб, возникший в ходе обучения.
В Arduino микроконтроллер обычно работает на полную мощность 100% времени, даже если просто ждет нажатия кнопки в пустом цикле loop(). Для nRF52840 это фатально: батарейка CR2032 «умрет» за пару дней. Наша цель — заставить устройство работать месяцами, используя продвинутые механизмы управления питанием.
Что такое ток покоя?
Прежде чем оптимизировать код, определим цель. Ток покоя (Quiescent Current) — это минимальный ток, который потребляет устройство в режиме ожидания, когда процессор спит, а радио выключено.
Для nRF52840 в глубоком сне это единицы микроампер (). Время жизни устройства считаем по формуле:
Где:
- — время работы (в часах);
- — емкость батареи (в мАч);
- — средний потребляемый ток (в мА).
Снизив среднее потребление с 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 мА | Высокие «полки» |
| Передача BLE | 10–15 мА | Острые «иглы» (пики) |
| System ON (Idle) | 2–5 мкА | Плоская линия у нуля |
Три приема быстрой оптимизации
Чтобы увидеть заветные микроамперы на графике PPK, соблюдайте три правила:
- Включите DC/DC преобразователь. По умолчанию nRF52 использует линейный регулятор (LDO), который тратит лишнюю энергию на нагрев. Включение DC/DC одной строчкой в
prj.confснижает потребление почти вдвое. - Настройте GPIO. «Висящий в воздухе» входной пин работает как антенна и генерирует шум, мешая чипу уснуть. Переводите неиспользуемые пины в высокоимпедансное состояние или подтягивайте к питанию/земле.
- Забудьте про задержки. Никогда не используйте блокирующие циклы. Вместо них — аппаратные таймеры и события.
Сравнение кода
Плохо (стиль 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). 🔋