Каковы (или как я использую) варианты энергосбережения Arduino для продления срока службы батареи?

40

Для проектов с питанием от солнечных батарей и батарей снижение энергопотребления является необходимостью.

Я немного знаю об использовании таймера и прерываний, чтобы перевести микроконтроллер в режим сна, когда он ничего не делает.

Я также прочитал, что вы можете отключить некоторые периферийные устройства для дальнейшего энергосбережения.

Вот страница, объясняющая это: Методы энергосбережения

Мой вопрос:

  • Какие еще методы существуют для экономии энергии?
  • Существуют ли какие-либо библиотеки, облегчающие использование этих функций AVR?
sachleen
источник

Ответы:

33

Примечание: я хотел бы отметить, что, хотя мой ответ был принят, читатель (вы) должен действительно сначала прочитать ответ Anindo, если вы действительно хотите сэкономить энергию на любой плате Arduino. Как только вы решите эти вопросы в своем проекте, вам следует прочитать мой ответ и побеспокоиться о том, как установить MCU в режим пониженного энергопотребления.

Сказав это, есть несколько методов, чтобы заставить Arduino экономить энергию. Я перечислю несколько, а затем укажу на страницу, которая объясняет их все более подробно.

  1. Хотя контроллер не делает ничего важного (например, между чтением датчика и следующим), вы можете перевести контроллер в один из приведенных ниже режимов ожидания с помощью команды set_sleep_mode (SLEEP_MODE_PWR_DOWN). Рядом с каждым режимом указано приблизительное энергопотребление каждого режима.

    • SLEEP_MODE_IDLE: 15 мА
    • SLEEP_MODE_ADC: 6,5 мА
    • SLEEP_MODE_PWR_SAVE: 1,62 мА
    • SLEEP_MODE_EXT_STANDBY: 1,62 мА
    • SLEEP_MODE_STANDBY: 0,84 мА
    • SLEEP_MODE_PWR_DOWN: 0,36 мА
  2. Отключить обнаружение отключения (схема, которая отключает контроллер при обнаружении низкого напряжения).

  3. Отключить АЦП (аналого-цифровое преобразование)

  4. Используйте внутренние часы

Затем, когда вы переводите контроллер в спящий режим, вам нужно использовать один или несколько механизмов ниже, чтобы активировать контроллер и что-то с ним сделать:

  • Проснись с сигналом

  • Проснись с таймером

Это резюме, из которого я сделал -

Эта статья в основном относится к ATmega328P, но эта техника применима и к другим Arduino-совместимым контроллерам. Как хорошо сказал TheDoctor, вам нужно проверить набор данных, чтобы убедиться, что ваш контроллер поддерживает любые из этих методов и как сделать это более точно.

Рикардо
источник
2
Спасибо за ссылку на мою страницу www.gammon.com.au/power . Использование всех методов, упомянутых на нем, должно позволить вам потреблять около 100 нА (0,1 мкА). Другие методы, которые могут оказать большое влияние, должны работать на более низкой частоте и более низком напряжении. Плюс то, что Аниндо Гош сказал о неиспользовании регуляторов напряжения. Я сделал датчик температуры и влажности - работающий от батареи, который использует многие из этих методов, и он продолжает работать после нескольких лет работы от батарей.
Ник Гэммон
@NickGammon - Чтобы быть справедливым, я думаю, что ваша отличная статья заслуживает лучшей ссылки, поэтому я отредактировал свой ответ до такой степени. Спасибо за отличную статью - очень ясную и полную! И добро пожаловать в Arduino.SE. Хорошо, что ты здесь.
Рикардо
24

Реально, самая большая потеря мощности на плате Arduino - это линейный регулятор напряжения на ней.

  1. Пока микроконтроллер на плате, светодиоды или любые другие периферийные устройства потребляют ток, линейный регулятор расходует энергию, равную difference between supply and board voltagex current drawn.

    Итак, первым исправлением было бы отключить светодиодный индикатор питания на плате и не использовать какие-либо другие светодиодные индикаторы, насколько это возможно. Во-вторых, подайте на плату как можно более низкое напряжение, которого достаточно для питания встроенного регулятора.

  2. В оригинальных конструкциях используемые регуляторы напряжения не обладают низким током покоя. Это означает, что даже если ничто не потребляет энергию внутри платы, сам регулятор тратит немало энергии все время, пока он включен.

    Простое решение - заменить встроенный регулятор на LDO (линейный регулятор с малым падением напряжения), рассчитанный на чрезвычайно низкий ток покоя. Параметрические поиски на сайтах различных поставщиков приведут к вероятным заменам.

  3. Даже с учетом описанных выше шагов плата Arduino не предоставляет механизм для перевода LDO в режим пониженного энергопотребления, если выбранная LDO поддерживает это. В энергосберегающих конструкциях обычно используется вывод «спящего режима» на стабилизаторах напряжения, чтобы сэкономить немало энергии - здесь не вариант.

Даже при всех возможных режимах энергосбережения и приемах, применяемых на уровне микроконтроллера, Arduino просто не предназначен для использования в качестве устройства с ультранизким энергопотреблением. Поэкспериментировав с несколькими нетривиальными приложениями, я обнаружил, что лучшее, что реально достижимо, - это экономия энергии от 10% до 30% в зависимости от приложения, поскольку регулятор напряжения и светодиоды в любом случае будут потреблять остальное.

Аниндо Гош
источник
2
Подайте на плату как можно более низкое напряжение, которого достаточно для питания встроенного регулятора. Или подайте напряжение 5 В через взломанный USB-кабель.
Анонимный Пингвин
13

Вы можете прочитать 200-страничную таблицу данных, а затем связываться с некоторыми запутанными битовыми сдвигами и регистрами, но я рекомендую эту библиотеку: http://playground.arduino.cc/Code/Enerlib

Кроме того, если вы используете Uno или любой другой с чипом от USB к последовательному порту, вы можете отключить это или удалить его.

Доктор
источник
3
Вы должны прочитать технические данные независимо от того, что вы делаете.
Коннор Вольф
9

Как только ваш проект заработает, и вам нужно будет развернуть его в «производственной» среде, вы можете заменить Arduino на чистую мета-версию ATMega328 или любой из чипов семейства ATTiny. Это избавит от всех пожирателей энергии на плате Arduino, которые вам не нужны. Я нашел:

  • Arduino плата 9В блок батареи - 56 мА
  • ATTiny85 голая на 8 МГц без спящих режимов и т. Д. - 10 мА
  • ATTiny85 голой на 8 МГц в спящем режиме - 0,03 мА

Еще немного информации

Программируй ATtiny с Arduino

ATTiny файлы для Arduino IDE

Маартен
источник