Перейти к содержанию

Режимы сна микроконтроллера

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

Обновлено Редакция GAW

Режим сна (sleep mode) — состояние микроконтроллера, в котором программа останавливается, а тактовые сигналы части узлов выключаются, чтобы снизить потребление. Чем глубже сон, тем меньше узлов работает, тем меньше ток и тем меньше источников могут разбудить кристалл. Пробуждение обычно происходит по прерыванию — от таймера, вывода или интерфейса, — после чего программа продолжает работу.

Режимы ATmega328P

РежимЧто работаетТок, тип., 25 °C
Idleвся периферия, остановлены ядро и флеш-память0,04 мА при 1 МГц и 2 В
Power-saveасинхронный Timer/Counter2 с часовым кварцем0,9 мкА при 3 В
Power-down со сторожевым таймеромтолько асинхронные узлы и WDT4,2 мкА при 3 В
Power-downтолько асинхронные узлы0,1 мкА при 3 В

Токи — из таблицы 29-8 даташита DS40002061B; в активном режиме на 4 МГц ATmega328P потребляет около 1,7 мА. Чтобы заснуть, программа выбирает режим, устанавливает бит SE и выполняет команду SLEEP; в avr-libc для этого есть макросы sleep.h. Все шесть режимов, источники пробуждения и пример засыпания без гонки с прерыванием разобраны в статье о режимах сна AVR.

Что мешает экономить

  • Сторожевой таймер работает во всех режимах сна и поднимает ток Power-down с 0,1 до 4,2 мкА.
  • Детектор пониженного питания тоже потребляет ток; у picoPower-кристаллов его можно выключить на время сна.
  • Окружение микроконтроллера — стабилизатор с большим током покоя, светодиоды, подтяжки, плавающие входы — часто потребляет больше самого спящего кристалла.

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

Частые вопросы

Сколько потребляет ATmega328P во сне?

По таблице 29-8 даташита при 3 В и 25 °C: в режиме Power-down — типично 0,1 мкА с выключенным сторожевым таймером и 4,2 мкА с включённым, в Power-save с часовым кварцем — 0,9 мкА. Для сравнения, в активном режиме на 4 МГц — около 1,7 мА, в десятки тысяч раз больше.

Чем разбудить микроконтроллер из Power-down?

Только асинхронными источниками, которым не нужен основной генератор: сбросом, сторожевым таймером, детектором пониженного питания, совпадением адреса TWI, прерыванием INT0 или INT1 по низкому уровню и прерыванием по изменению состояния вывода. Для периодического пробуждения обычно используют сторожевой таймер в режиме прерывания.

Почему ток во сне больше, чем в даташите?

Даташит указывает ток с остановленной периферией. Ток добавляют включённые сторожевой таймер, детектор пониженного питания и внутренний источник опорного напряжения, «висящие» в воздухе входы, светодиоды и стабилизатор с большим током покоя. Часто главным потребителем спящего устройства оказывается не микроконтроллер, а стабилизатор.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — гл. 10 — режимы сна, табл. 10-1 и 10-2, SMCR, BOD Disable, PRR; табл. 29-8 — токи: Power-down 0,1 мкА, с WDT 4,2 мкА, Power-save 0,9 мкА при 3 В
  2. AVR-LibC: <avr/sleep.h> (github.com/avrdudes/avr-libc) — set_sleep_mode, sleep_enable, sleep_cpu, sleep_disable; засыпание без гонки с прерыванием

Нашли ошибку?