Режимы сна микроконтроллера
Режим сна — состояние микроконтроллера, в котором остановлены тактовые сигналы ненужных узлов, а ток падает с миллиампер до долей микроампера. Устройство на батарее большую часть времени спит и просыпается только для работы по прерыванию или таймеру.
Обновлено Редакция GAW
Режим сна (sleep mode) — состояние микроконтроллера, в котором программа останавливается, а тактовые сигналы части узлов выключаются, чтобы снизить потребление. Чем глубже сон, тем меньше узлов работает, тем меньше ток и тем меньше источников могут разбудить кристалл. Пробуждение обычно происходит по прерыванию — от таймера, вывода или интерфейса, — после чего программа продолжает работу.
Режимы ATmega328P
| Режим | Что работает | Ток, тип., 25 °C |
|---|---|---|
| Idle | вся периферия, остановлены ядро и флеш-память | 0,04 мА при 1 МГц и 2 В |
| Power-save | асинхронный Timer/Counter2 с часовым кварцем | 0,9 мкА при 3 В |
| Power-down со сторожевым таймером | только асинхронные узлы и WDT | 4,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 по низкому уровню и прерыванием по изменению состояния вывода. Для периодического пробуждения обычно используют сторожевой таймер в режиме прерывания.
Почему ток во сне больше, чем в даташите?
Даташит указывает ток с остановленной периферией. Ток добавляют включённые сторожевой таймер, детектор пониженного питания и внутренний источник опорного напряжения, «висящие» в воздухе входы, светодиоды и стабилизатор с большим током покоя. Часто главным потребителем спящего устройства оказывается не микроконтроллер, а стабилизатор.
Источники
- 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 В
- AVR-LibC: <avr/sleep.h> (github.com/avrdudes/avr-libc) — set_sleep_mode, sleep_enable, sleep_cpu, sleep_disable; засыпание без гонки с прерыванием
Нашли ошибку?