Как сэкономить энергию в ваших проектах Arduino?
Энергопотребление является важнейшей проблемой для устройства, которое постоянно работает в течение длительного времени без отключения. Чтобы решить эту проблему, каждый контроллер включает спящий режим, который помогает разработчикам проектировать электрические устройства с наименьшим потреблением энергии. Спящий режим экономит энергию, отключая все модули, которые не используются.
Сегодня мы узнаем о спящих режимах Arduino и используем амперметр для демонстрации энергопотребления. Спящий режим для Arduino также известен как режим энергосбережения или режим ожидания.
Спящие режимы позволяют пользователю останавливать или выключать неиспользуемые модули в микроконтроллере, что значительно снижает энергопотребление. Arduino UNO, Arduino Nano и Pro-mini поставляются с ATmega328P и имеют детектор отключения питания (BOD), который контролирует напряжение питания во время спящего режима.
Распиновка Arduino
Atmega328P предлагает шесть различных режимов ожидания. В зависимости от режима большая или меньшая часть его функций отправляется в спящий режим. Соответственно отличается и остаточная потребляемая мощность.
Конечно, вы должны быть в состоянии разбудить ATmega328P, если вы усыпите его. Каждый режим имеет свой собственный набор потенциальных «звонков для пробуждения».
В зависимости от «глубины сна» ATmega328P требуется разное время для пробуждения.
В таблице ниже показано, какие функции остаются активными в различных спящих режимах и как вывести ATmega328P из спящего режима. Хорошей новостью является то, что таблица применима ко всем ATmega.
Активные домены часов и источники пробуждения в различных режимах сна
Активация спящих режимов
Управление спящими режимами через SMCR
Спящие режимы управляются соответствующими записями в регистре управления спящим режимом SMCR. Биты SM0…SM2 устанавливают режим, бит SE (разрешение сна) запускает режим сна.
Регистр управления спящим режимом SMCR
Экономия энергии с помощью регистра снижения мощности
В зависимости от спящего режима и желаемого метода пробуждения можно еще больше снизить энергопотребление, отключив некоторые компоненты вручную. Это контролируется регистром снижения мощности PRR:
Регистром снижения мощности PRR
Установленные биты отключают соответствующий компонент:
PRTWI : отключает двухпроводной интерфейс (I2C). После пробуждения его необходимо повторно инициализировать.PRTIM2 : выключает Timer2 в синхронном режиме.
PRTIM0/PRTIM1 : эти биты управляют таймерами Timer0 и Timer1.
Таймеры 0/1/2 продолжают свою работу после пробуждения без каких-либо дальнейших действий.
PRSPI : отключает интерфейс SPI. SPI необходимо повторно инициализировать после пробуждения.
PRUSART0 : отключает последовательный порт, то есть RX/TX (универсальный синхронный и асинхронный последовательный приемник и передатчик). Интерфейс USART должен быть повторно инициализирован после пробуждения.
PRADC : отключает аналого-цифровой преобразователь
Что такое БПК?
Термин «блэк-аут» относится к полной потере питания. Это выражение, я думаю, знакомо каждому. С другой стороны, снижение напряжения происходит, когда напряжение питания микроконтроллера падает ниже определенного порога. Обычно это происходит, когда батарея, питающая ваш проект, разряжается. Когда микроконтроллер получает недостаточное напряжение, он ведет себя непредсказуемым образом.
Отключение БПК экономит электроэнергию.
В пикомощных вариантах микроконтроллеров AVR детектор пониженного напряжения можно отключить. Вы можете распознать модели pico power по букве «P» в названии, например. ATmega328P. Регистр управления MCU MCUCR управляет BOD:
.
Другие способы снижения энергопотребления
Понижение тактовой частоты
Понижение тактовой частоты в непрерывном активном режиме позволяет экономить электроэнергию. Однако вы заметили, что энергопотребление микроконтроллера не зависит от частоты, по крайней мере, в режиме пониженного энергопотребления. Если вы собираетесь усыпить микроконтроллер и вам нужно разбудить его всего на несколько минут, чтобы что-то выполнить, предпочтительнее использовать высокую тактовую частоту.
Понижение рабочего напряжения
Микроконтроллер действует как конденсатор или, точнее, как множество маленьких конденсаторов, заряд которых зависит от рабочего напряжения. Это называется паразитными способностями. Кроме того, существуют токи утечки, т.е. с проводника на другой. В режиме отключения питания вы можете снизить энергопотребление ATmega328P с 0,15 мА (запрограммировано через Arduino IDE) до 0,12 мА при снижении напряжения с 5 В до 3,3 В.
Методы пробуждения
ESP32, несомненно, является достойным конкурентом многих SoC WiFi/MCU, превосходя их как по производительности, так и по цене. Однако, в зависимости от того, в каком режиме он находится, ESP32 может быть относительно энергоемким устройством.
Когда ваш проект IoT питается от электрической розетки, энергопотребление не имеет большого значения; однако, если вы планируете питать свой проект от батареи, каждый мА имеет значение.
Решение здесь состоит в том, чтобы воспользоваться одним из спящих режимов ESP32 для снижения энергопотребления. Это отличная стратегия для значительного увеличения времени автономной работы проекта, который не должен быть активным все время.
Что такое спящий режим ESP32?
Спящий режим ESP32 — это энергосберегающий режим. Когда ESP32 не используется, он может войти в этот режим, сохраняя все данные в оперативной памяти. В этот момент все ненужные периферийные устройства отключены, а ОЗУ получает достаточно энергии для сохранения своих данных.
Знание того, что находится внутри чипа, поможет нам лучше понять, как ESP32 управляет энергосбережением. Блок-схема чипа ESP32 показана ниже.
Чип ESP32 содержит двухъядерный 32-разрядный микропроцессор, а также 448 КБ ПЗУ, 520 КБ SRAM и 4 МБ флэш-памяти.
Кроме того, чип содержит модуль WiFi, модуль Bluetooth, криптографический ускоритель (сопроцессор, предназначенный специально для выполнения криптографических операций), модуль RTC и ряд периферийных устройств.
Благодаря расширенному управлению питанием ESP32 предлагает пять настраиваемых режимов питания. В зависимости от потребности в мощности чип может переключаться между различными режимами питания. Это следующие режимы:
Каждый режим имеет свои особенности и возможности энергосбережения. Давайте посмотрим на них один за другим.
Нормальный режим также называется активным режимом. В этом режиме все периферийные устройства чипа остаются активными.
Поскольку в этом режиме все постоянно активно (особенно модуль WiFi, процессорное ядро и модуль Bluetooth), то чип потребляет около 240 мА питания. Также было замечено, что чип иногда потребляет более 790 мА, особенно при одновременном использовании Wi-Fi и Bluetooth.
Согласно техническому описанию ESP32, энергопотребление при операциях RF в активном режиме составляет:
Wi-Fi Tx packet 13dBm~21dBm | 160~260mA |
Wi-Fi/BT Tx packet 0dBm | 120mA |
Wi-Fi/BT Rx and listening | 80~ 90мА |
Этот режим, безусловно, потребляет больше всего тока и наименее эффективен. В целях экономии энергии необходимо отключить функции, которые не используются, переключившись в другой режим питания.
В спящем режиме модема все активно, кроме WiFi, Bluetooth и радио. ЦП остается активным, а часы настраиваются.
В этом режиме микросхема потребляет примерно 3 мА на низкой скорости и 20 мА на высокой скорости.
Чтобы соединение оставалось активным, Wi-Fi, Bluetooth и радио активируются через определенные промежутки времени. Это называется ассоциативным режимом сна .
Во время этого спящего режима ESP32 переключается между активным режимом и спящим режимом модема.
Для этого ESP32 подключается к маршрутизатору в режиме станции, используя механизм маяка DTIM. Модуль Wi-Fi отключается между двумя интервалами маяка DTIM, а затем автоматически включается непосредственно перед поступлением следующего маяка. Это приводит к энергосбережению.
Время ожидания определяется интервалом маякового сигнала DTIM маршрутизатора, который обычно составляет от 100 до 1000 мс.
Что такое сигнальный механизм DTIM?
DTIM расшифровывается как сообщение индикации трафика доставки.
В этом механизме точка доступа (AP)/маршрутизатор периодически передает кадры-маяки. Каждый кадр содержит информацию, относящуюся к сети. Он используется для оповещения о наличии беспроводной сети, а также для синхронизации всех подключенных участников.
Легкий сон аналогичен модемному спящему режиму в том смысле, что микросхема следует схеме ожидания ассоциации. Единственное отличие состоит в том, что в легком спящем режиме процессор, большая часть оперативной памяти и цифровые периферийные устройства синхронизируются.
Что такое синхронизация?
Синхронизация — популярный метод управления питанием для уменьшения динамического рассеивания мощности за счет удаления или игнорирования тактового сигнала, когда схема не используется.
Синхронизация тактовых импульсов снижает энергопотребление за счет сокращения дерева тактовых импульсов. Обрезка часов отключает части схемы, предотвращая переключение состояний триггеров в них. Поскольку состояния переключения потребляют энергию, когда они не переключаются, потребление энергии падает до нуля.
В режиме легкого сна ЦП приостанавливается, отключая его тактовый импульс. С другой стороны, RTC и ULP-сопроцессор остаются активными. Это приводит к более низкому энергопотреблению, чем в спящем режиме модема, которое составляет около 0,8 мА.
Перед переходом в легкий спящий режим ESP32 сохраняет свое внутреннее состояние в ОЗУ и возобновляет работу после выхода из спящего режима. Это называется Full RAM Retention .
В режиме глубокого сна ЦП, большая часть оперативной памяти и все цифровые периферийные устройства отключены. Остаются работоспособными только следующие части микросхемы:
В режиме глубокого сна микросхема потребляет от 0,15 мА (когда сопроцессор ULP включен) до 10 мкА.
В режиме глубокого сна основной ЦП отключается, тогда как сопроцессор со сверхнизким энергопотреблением (ULP) может снимать показания датчиков и при необходимости активировать ЦП. Этот шаблон сна называется шаблоном ULP, контролируемым датчиком 9.0004 . Это полезно для разработки приложений, в которых ЦП необходимо разбудить внешним событием, таймером или комбинацией этих событий при сохранении минимального энергопотребления.
Вместе с ЦП отключается и основная память микросхемы. В результате все, что хранится в этой памяти, стирается и становится недоступным.
Поскольку память RTC остается активной, ее содержимое сохраняется даже во время глубокого сна и может быть восстановлено после пробуждения микросхемы. Вот почему чип сохраняет данные о соединениях Wi-Fi и Bluetooth в памяти RTC перед переходом в режим глубокого сна.
Если вы хотите использовать данные после перезагрузки, сохраните их в памяти RTC, определив глобальную переменную с атрибутом RTC_DATA_ATTR . Например, RTC_DATA_ATTR int myVar = 0;
Когда микросхема выходит из глубокого сна, она выполняет сброс и начинает выполнение программы сначала.
При выходе из глубокого сна ESP32 может запускать заглушку пробуждения из глубокого сна. Это фрагмент кода, который выполняется, как только чип просыпается, до того, как будет выполнена любая обычная инициализация, загрузчик или код ESP-IDF. После выполнения пробуждающей заглушки чип может либо вернуться в спящий режим, либо продолжить обычный запуск ESP-IDF.
Если вы хотите узнать больше о глубоком сне ESP32 и его источниках пробуждения, посетите наш подробный учебник ниже.
ESP32 Глубокий сон и его источники пробуждения
Когда ваш проект IoT питается от настенного адаптера, вы не слишком заботитесь об энергопотреблении. Но если вы собираетесь включить свой…
Спящий режим очень похож на глубокий сон. Единственное отличие состоит в том, что в режиме гибернации чип отключает внутренний генератор 8 МГц, а также ULP-сопроцессор, оставляя только один таймер RTC (на медленных часах) и несколько RTC GPIO для пробуждения чипа.