AVR Урок 54. Режимы пониженного энергопотребления. Часть 1



В данном занятии мы попытаемся познакомиться с режимами пониженного энергопотребления микроконтроллера AVR.

Зачем нужны такие режимы контроллеру?

Любое устройство, работающее от автономного источника питания, если будет эксплуатироваться только в основном (динамическом) режиме, скорее всего, долго не проработает. Поэтому и существуют данные режимы — режимы пониженного энергопотребления.

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

Поэтому, перед разработчиком, который пишет программу для того или иного устройства, стоит всегда две задачи: чтобы в этом режиме обеспечивался тот функционал, который необходим для функционирования устройства во время «сна», а также чтобы при этом устройство потребляло минимум энергии.

 

 

Перед нами сейчас такие задачи не стоят. Перед нами сейчас стоят другие задачи, а именно разобраться, какие именно у контроллера AVR, в частности у ATMega328, бывают режимы пониженного энергопотребления, как эти режимы включить, сколько в том или ином режиме контроллер будет потреблять и, конечно же, проверить и закрепить данные знания, которые мы получим, на практике. Также немаловажно понять, какие данные сохранятся после входа и выхода в режим, а какие — нет.

Поэтому откроем в технической документации на контроллер ATMega328 раздел Power Management and Sleep Modes и посмотрим для начала вот такую таблицу

 

 

Из данной таблицы мы видим, что таких режимов у нашего контроллера целых шесть!

 

 

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

Первый режим — IDLE или режим холостого хода, в котором прекращается только тактирование процессора, памяти RAM, и FLASH и EEPROM памяти, остальная периферия остаётся в работе. Ток в таком режиме, если посмотреть таблицу в разделе Electrical Characteristics, не сильно ниже, чем в обычном режиме (Active), больше всего разница между этими режимами чувствуется при тактировании большими частотами. Так, например при напряжении питания 5 вольт и при частоте тактирования CPU 8 МГц потребление в режиме ACTIVE5,2-12 мА, а в режиме IDLE1,2-5,5 мА. Максимальные токи здесь предусматриваются при повышенных и пониженных температурах работы, а минимальные — при температуре 25 градусов. Выход из данного режима возможен по внешним прерываниям INT и PCINT, по совпадению адреса на шине I2C, прерывании по таймеру TIMER2, прерывании по готовности SPM/EEPROM, при генерации запроса на прерывание по завершению преобразования АЦП, по сбросу сторожевого таймера (WDT) , также возможно пробуждение и по другим прерываниям (от аналогово компаратора, от шины USART по окончанию передачи).

Следующий режим — ADC Noise Reduction или режим подавления шума при работе АЦП. В этом режиме создаются более благоприятные условия для аналогово-цифрового преобразования с повышенной разрешающей способностью за счет снижения влияния шумов на результат измерения. Если разрешена работа АЦП, то преобразование автоматически запускается при переводе в данный режим. Выход из данного режима допускается не только при генерации запроса на прерывание по завершению преобразования АЦП, но и при внешнем сбросе, сбросе по сторожевому таймеру, сбросе при недопустимом снижении питания, прерывании при обнаружении установленного адреса на I2C, прерывании по таймеру TIMER2, прерывании по готовности SPM/EEPROM, прерывании по внешнему уровню на выводах INT7:4 или внешнем прерывании по входам INT3:0. Сколько в данном режиме должен потреблять контроллер, я нигде не нашел. Пока, в принципе, нам данный режим не требуется, когда потребуется, думаю, разберёмся. Тем не менее мы вход во все режимы в данном занятии испытаем и выход из них тоже, а также замеряем ток, который будет контроллер в данных режимах потреблять.

Следующий режим — POWER-DOWN. Это, можно сказать, самый глубокий сон. В этом режиме останавливается почти всё, остаются в действии лишь внешние прерывания, наблюдение за адресом на шине I2C и сторожевой таймер (Watchdog Timer или WDT) при условии, что они включены. Выход из данного режима возможен только по внешнему прерыванию на контакте INT0 и INT1, если их включить, также по прерыванию от WDT, если его тоже включить и по совпадению адреса на шине I2C, если её тоже включить и настроить подобающим образом. При нахождении в данном режиме производитель обещает, что контроллер будет потреблять менее 1 микроампера (причём это правда и мы в этом ещё убедимся, конечно, всё, кроме внешнего прерывания надо будет отключить).

Следующий режим — POWER-SAVE или экономичный режим. Данный режим аналогичен режиму POWER-DOWN кроме того, что если таймер TIMER2 будет включен, устройство может просыпаться либо из события переполнения таймера, либо с помощью совпадения значений в таймере 2, если соответствующее прерывание в TIMER2 будет разрешено. В данном режиме контроллер должен при идеальных условиях, а также при питании от 3 вольт, потреблять около 0,9 мкА.

Следующий режим — Standby Mode или режим ожидания. Этот режим рекомендуется задействовать только при использовании внешнего резонатора. Он аналогичен режиму POWER DOWN, за исключением того, что тактовый генератор продолжает работать. Поэтому, выход из данного режима требует всего лишь 6 тактов. Потребление тока в данном режиме мы можем посмотреть по данному графику

 

 

Следующий режим — Extended Standby Mode или расширенный режим ожидания. Полностью идентичен режиму STANDBY, только остаётся работать тактирование асинхронной шины таймера 2, поэтому пробуждаться может также и от данного таймера. В режиме Extended Standby потребляемый ток также меньше 0.2 мА.

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

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

Также для эффективного использования того или иного режима пониженного энергопотребления желательно проделать следующие вещи.

  1. Отключение ADC (АЦП), если таковой включен, как правило он по умолчанию включается и после перехода в режим пониженного энергопотребления остаётся включенным.
  2. Супервизор питания (Brown-out Detector или BOD), который следит за напряжением питания и при его уходе за «порог» отключает контроллер. Его также необходимо отключить с помощью фьюзов, иначе получим лишние 20 мкА потребления.
  3. Аналоговый компаратор также необходимо отключить.
  4. Внутренний источник опорного напряжения (Internal Voltage Reference) тоже необходимо отключить, но если мы отключаем (или не включаем) аналоговый компаратор, то ИОН отключится сам.
  5. Сторожевой таймер (WDT) также желательно отключить, если мы, конечно, не будем его использовать для пробуждения. В противном случае около 8 микроампер лишнего тока.
  6. Ножки портов также не должны потреблять лишней энергии. Если на них есть нагрузка и они настроены на выход, то желательно выставить такой уровень, который не даст протекать току через нагрузку. Например если у нас висит светодиод с резистором на ножке порта и с другой стороны они подключены к общему проводу, то необходимо перед переходом в режим сна выставить на данной ножке низкий уровень, а если к питанию, то высокий. Также существуют различные мнения по поводу перевода не подключенных никуда ножек в режим входа и подтягиванию к ним резисторов. Второе мнение — наоборот выставить на них режим выхода и установить какой-нибудь уровень. Так или иначе, самое главное, чтобы ни один вывод порта не остался «незамеченным», то есть не оказался в состоянии открытого коллектора (Open Drain), иначе в таком случае будет нагрузка на буфер входа и он начнёт потреблять внушительную энергию. Также, в случае, если ножка порта настроена на вход и есть подозрение в том, что она может находиться в состоянии, близком к половине напряжения питания, то входной буфер также может долго определять состояние и потреблять энергию.
  7. Если система отладки включена с помощью соответствующего фьюза (в случае ATMega328 это фьюз DWEN), то её также желательно отключить. Хотя, скорее всего, она мало у кого включена, так как для отладки требуется специальный программатор. Но даже если он есть и она включена, то необходимо отключить. Помните только, что она включается установкой бита DWEN в 0 (в Avrdude установлена галка, так как там всё отображается в инверсном режиме), а отключается установкой в 1 (в Avrdude галки нет). Иначе, если перепутать и, наоборот, её (систему отладки) включить сбросом бита DWEN (установкой галки в Avrdude), то потом, не имея соответствующего программатора или AVR-доктора, контроллер станет неопределяемым и непрошиваемым (у меня так было, вылечил AVR-доктором).

 

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

 

 

Предыдущий урок Программирование МК AVR Следующая часть

 

 

Приобрести программатор USBASP USBISP с адаптером можно здесь USBASP USBISP 3.3 с адаптером

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

AVR Режимы пониженного энергопотребления

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*