STM8L: энергосберегающее решение

 

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

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

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

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

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

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

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

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

avr054img00

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

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

Первый режим — 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 тактов. Потребление тока в данном режиме мы можем посмотреть по данному графику

avr054img01

Следующий режим — 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-доктором).
Читайте также  Программа энергосбережения на 2021 – 2023 годы

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

STM8L: энергосберегающее решение

Несмотря на постоянное удешевление 16- и 32-битных микроконтроллеров, 8-битные не сдают позиций, особенно в области систем с низким энергопотреблением. Очередным доказательством этого утверждения следует считать новую серию микроконтроллеров STM8L [1] (рис. 1) компании STMicroelectronics.

Структура семейства МК STM8L

Рис. 1. Структура семейства МК STM8L

Микроконтроллеры серии STM8L обладают рекордно низкими токами утечки, а также рядом особенностей, позволяющих добиться в активном режиме потребления на уровне 150 мкА/МГц.

Особенности архитектуры

Несмотря на то, что изделия семейства STM8L являются микроконтроллерами с 8-битной Гарвардской архитектурой, их ядро имеет ряд особенностей, значительно повышающих конечную производительность:

  • 32-битный интерфейс памяти программ позволяет производить выборку большинства команд за один цикл;
  • 16-битные индексный регистр и регистр указателя стека обеспечивают повышенную плотность кода и скорость работы с табличными данными;
  • усовершенствованные механизмы работы с указателем стека, что обеспечивает улучшенную поддержку СИ-кода и операционных систем реального времени (RTOS);
  • 16 Мб линейное адресное пространство;
  • расширенный набор методов адресации позволяет добиться большей эффективности СИ-кода и обеспечивает высокую плотность исполняемого кода;
  • расширенный набор инструкций повышает скорость выполнения арифметических операций.

В ядре микроконтроллеров используется трехступенчатый конвейер, позволяющий выполнять большинство команд за один такт, что приводит к повышению пиковой производительности до 16 CISC MIPS при тактовой частоте 16 МГц. Эти и другие особенности микроконтроллеров семейства STM8L подробно рассматриваются в [2] (электронная версия доступна на http://www.compeljournal.ru/enews/2010/6/3).

Вся линейка STM8L производится по технологии 130 нм, позволяющей получать структуры с ультранизкими токами утечки. Встроенный регулятор напряжения позволяет микроконтроллерному ядру работать с максимальной производительностью при питании устройства в широком диапазоне входных напряжений от 1,65 до 3,6 В. Данная особенность позволяет значительно увеличить время работы микроконтроллера от батарейных элементов питания.

Режимы энергосбережения микроконтроллеров STM8L

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

Таблица 1. Режимы пониженного энергопотребления STM8L

Режимы пониженного энергопотребления Функциональные блоки Энергопотребеление, мкА
ЦПУ Периферия Основной осцил (HSI) RTC LSI LSE Флэш-
память
RAM @ 3V/25°C @ 3V/85°C
Low power run* ВКЛ выборочно ВЫКЛ ВКЛ ВКЛ ВЫКЛ ВКЛ 5,4 6,8
Low power wait* ВЫКЛ выборочно ВЫКЛ ВКЛ ВКЛ ВЫКЛ ВКЛ 3,3 4,4
Active-halt (RTC тактир-ся HSI)* ВЫКЛ ВКЛ ВКЛ ВЫКЛ ВКЛ 1,0 (1) 1,4
Active-halt (RTC тактир-ся LSI) ВЫКЛ ВКЛ ВЫКЛ ВКЛ 0,8 (1) 1,2
Halt ВЫКЛ ВЫКЛ ВЫКЛ ВКЛ 0,35 (1) 1,0
* только для STM8L15x/162
(1) — BOR и внутреннее опорное напряжение отключены
RTC – real time clock; HSI — High Speed Internal oscillator; LSI — Low Speed Internal oscillator; LSE — Low Speed External oscillator.

STM8L101

Микроконтроллеры данной линейки имеют три режима пониженного энергопотребления:

  • Wait- CPU остановлен, периферия работает;
  • Active-halt- CPU остановлен, AWU и WDT продолжают работать;
  • Halt- тактирование CPU и периферии прекращено.

STM8L15x/162

В этой линейке микроконтроллеров реализовано пять режимов энергосбережения:

  • Wait- CPU остановлен, периферия работает;
  • Low power run- программа выполняется из RAM с тактированием медленными осцилляторами (LSI, LSE), выбранная периферия активна;
  • Low power wait- CPU остановлен, выбранная периферия активна;
  • Active-halt- CPU остановлен, AWU, WDT и RTC продолжают работать, если включены;
  • Halt- тактирование CPU и периферии прекращено (все остановлено).

Особенности работы памяти

Flash-память всех линеек серии STM8L поддерживает режим низкого энергопотребления IDDQ, в котором память, по сути, является неактивной. Flash-память автоматически переходит в IDDQ-режим, когда микроконтроллер входит в Halt, Active-halt или Low power wait режимы.

Линейки STM8L15x/162 также имеют специальный флаг EEPM в регистре управления Flash-памятью FLASH_CR1. Если данный флаг установлен, то Flash-память автоматически входит в IDDQ-режим, когда программа исполняется из RAM-памяти или микроконтроллер находится в Wait-режиме.

Если Flash-память находится в IDDQ-режиме, то время восстановления и выхода из режимов пониженного энергопотребления увеличивается (вплоть до 2,8 мкс) и зависит от напряжения питания микроконтроллера и его температуры. Кроме того, из-за разницы в размерности шины данных и программ (Flash — 32 бита, RAM — 8 бит), программа из RAM выполняется медленнее, чем из Flash.

Далее рассмотрены особенности функционирования микроконтроллера в энергосберегающих режимах. На рисунке 2 проиллюстрировано потребеление МК линейки STM8L101x в различных режимах. Более подробно с процедурами входа и выхода из режимов можно ознакомиться в [3].

Энергопотребеление МК линейки STM8L101x

Рис. 2. Энергопотребеление МК линейки STM8L101x

Wait-режим

Предусмотрено 2 типа Wait-режима: WFI (wait-for-interrupt — ожидание прерывания) и WFE (wait-for-event — ожидание события). Вход в эти режимы осуществляется одноименными командами. Для успешного входа в режимы должно быть разрешено хотя бы одно прерывание или событие, соответственно.

Выход из режимов осуществляется:

  • для WFI — по прерываниям от интерфейсов, AWU/RTC, ADC, компаратора, таймеров, внешнего источника прерывания, по команде переключения тактового источника (см. «Управление тактированием»);
  • для WFE — по событиям от интерфейсов, ADC, компаратора, таймеров, внешнего источника прерывания.

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

Low power run-режим

Режим основан на выполнении программы из RAM-памяти с использованием низкочастотного источника тактовых импульсов. Flash-память при этом находится в режиме IDDQ. Работа АЦП не поддерживается данным режимом, т.к. АЦП требует для своей работы тактовой частоты не ниже 1 МГц. Обработка прерываний в данном режиме также недоступна — таблица векторов расположена во Flash, а она включена. Данный режим доступен только в линейках STM8L15x/162.

Low power wait

Переход в этот режим осуществляется из Low power run режима путем выполнения команды WFE. Обратный переход происходит только по внутреннему или внешнему событию. WFI-инструкция не может использоваться из-за невозможности разрешения и обработки прерываний.

Active halt-режим

В данном режиме тактирование ЦПУ и почти всей периферии прекращено. Активным остаются только LSI- и LSE-источники, которые используются для тактирования SWIM-, WDT-, RTC- или LCD-модулей. Вход в режим осуществляется командой HALT в случае, когда активен хоть один из перечисленных выше модулей периферии. Время выхода из режима в стандартный активный режим занимает около 4 мкс.

Halt-режим

В этом режиме системное тактирование прекращено. Это означает, что ЦПУ и все модули периферии неактивны, за исключением следующих случаев:

  • HSI активен, если он используется как тактовый источник для SWIM (однопроводной интерфейс);
  • системное тактирование не прекращается, если выполняется процедура записи в Flash или EEPROM;
  • LSI активен, если он используется для тактирования SWIM или WDT.

Вход в режим осуществляется командой HALT. Перед выполнением данной инструкции необходимо очистить флаги всех необработанных прерываний, иначе выход из Halt-режима произойдет сразу после входа в него.

Выход из режима осуществляется по приходу внешнего прерывания от порта ввода-вывода, предварительно сконфигурированного в качестве источника прерывания. Выход из режима происходит за 5…6 мкс. Данный режим следует использовать для построения приложений, основная работа которых состоит в обработке внешних прерываний.

На рисунке 3 проиллюстрировано потребление МК линеек STM8L15x/162 в различных режимах.

Энергопотребление МК линеек STM8L15x/162

Рис. 3. Энергопотребление МК линеек STM8L15x/162

Схема питания STM8L

Одной из особенностей микроконтроллеров семейства STM8L, позволяющей добиться дополнительного снижения энергопотребления, является наличие двух внутренних регуляторов напряжения — MVR и LPVR.

MVR-регулятор — это основной регулятор питания, обеспечивающий напряжение питания ядра микроконтроллера на уровне 1,8 В и ток до 25 мА. Регулятор используется только при стандартных режимах работы микроконтроллера, т.к. сам потребляет значительный ток.

LPVR-регулятор обладает очень низким собственным током потребления и обеспечивает питание ядра напряжением 1,55 В и током до 200 мкА. Этот регулятор используется для работы МК в различных режимах пониженного энергопотребления.

При сбросе МК включается MVR, который обеспечивает питание 1,8 В цифровой части микроконтроллера. В зависимости от текущего режима энергопотребления он может быть выключен, и тогда его функции примет LPVR. Напряжение питания ядра отслеживается системами POR/PDR (power-on-reset/power_down-reset), которые обеспечивают корректность запуска и сброса МК. Ниже приводится описание способов включения регуляторов для различных линеек микроконтроллеров серии STM8L:

  • в Run- и Wait-режимах напряжение питания ядра обеспечивается обоими регуляторами;
  • в LPR-(Low Power Run) и LPW-(Low Power Wait) режимах питание обеспечивает LPVR, MVR- выключен;
  • в Active halt-режиме в ходе halt-фазы пользователь сам может назначать активный регулятор;
  • в Halt-режиме автоматически используется LPVR-регулятор, MVR- выключен.

Микроконтроллеры STM8L15x/162 содержат детектор напряжения питания (BOR — Brownout detector), который гарантирует правильную работу аналоговой периферии. Этот детектор включен по умолчанию, но может быть отключен пользователем для того, чтобы дополнительно снизить энергопотребление микроконтроллера примерно на 2,8 мкА.

Читайте также  Как оформить кредит по программе энергосбережения

Управление тактированием

  • Энергопотребление микроконтроллера линейно зависит от тактовой частоты работы ядра и периферии: Idyn= CV 2 f, где

С — паразитная емкость транзисторов;

V — напряжение питания микросхемы;

f — тактовая частота.

Таким образом, управление частотами тактирования ядра и различных модулей оказывает значительное влияние на общее энергопотребление микроконтроллера. Рассмотрим особенности тактирования ядра и периферии у различных линеек STM8L.

STM8L101

Данная линейка микроконтроллеров имеет два возможных источника тактирования:

  • внутренний высокоскоростной осциллятор на 16МГц (HSI — high speed internal), используемый для тактирования ядра микроконтроллера;
  • внутренний низкоскоростной осциллятор на 38кГц (LSI- low speed internal), используемый для тактирования сторожевого таймера (IWDG) и устройства автоматического выхода из sleep-режимов (AWU — auto-wakeup unit).

После сброса микроконтроллера в качестве системного сигнала тактирования автоматически выбирается HSI/8. После этого, пользователь может назначить другой сигнал тактирования с помощью несложной процедуры:

  • выбрать делитель (/1, /2, /4 или /8) для внутреннего источника (HIS), используя HSIDIV[1:0] биты в регистре CLK_CKDIVR.

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

STM8L15x/162

Для тактирования системы в данной линейке используются несколько типов источников тактовых импульсов:

  • внешний высокоскоростной осциллятор 1…16Мгц (HSE crystal);
  • внешний высокоскоростной генератор до 16Мгц (HSE bypass);
  • внутренний высокоскоростной осциллятор 16МГц (HSI);
  • внешний низкоскоростной осциллятор 32,768кГц (LSE);
  • внутренний низкоскоростной осциллятор 38кГц (LSI).

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

Таблица 2. Источники тактирования STM8L15x/162

HSE осцил. HSE генер. HSI LSE генер. LSE резон. LSI
Цена Низ. – средн. Низ. – высок. Низ. – средн. Низ. – средн.
Точность ~ppm/% генератор ~% генератор ~ppm ~%
Потребление TBD Выс./средн. 100…200 мкA TBD 100…400 нA
Установление 2 мс генератор 2 мкс генератор TBD TBD
Примечание кристалл или керамический резонатор внешний
генератор
внутренний внешний
генератор
часовой кварц внутренний

После сброса микроконтроллера в качестве системного сигнала тактирования автоматически выбирается HSI/8. После этого пользователь может назначить другой сигнал тактирования с помощью несложной процедуры:

  • выбрать делитель (/1, /2, … /128) для внутреннего источника (HIS), используя CKM[2:0] биты в регистре CLK_CKDIVR;
  • изменить источник тактирования (HSE, LSE или LSI).

Перед тем, как отключить любой из источников тактовых импульсов (HSI, HSE и т.д.), пользователь должен убедиться в том, что данный источник больше не используется для тактирования ядра. Это означает, что источник может быть выключен только после того, как был установлен флаг SWIF. Если пользователь попробует отключить источник до того, как флаг будет установлен аппаратно, то отключения не произойдет, т.к. система до сих пор использует обозначенный источник для своего тактирования.

В связи с тем, что переключение тактового источника может производиться в Wait-режиме (например, если HSE выбран новым источником), исполнение процедуры переключения источников может вывести MCU из Wait-режима. Это позволяет синхронизировать AWU с новым источником.

Переключение источников тактового сигнала может также применяться в начале и в конце любой рабочей подпрограммы или процедуры обработки прерываний для повышения скорости ее выполнения (например, если для тактирования системы используется LSI, но некоторые подпрограммы требуют более быстрого исполнения с применением HSI).

Влияние тактирования на энергопотребление

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

  • любое тактирование периферии может быть включено или отключено настройками, производимыми в регистрах CLK_PCKENRx. Т.к. микроконтроллеры серии STM8L ориентированы на минимальное энергопотребление, то все тактирование периферии выключено по умолчанию. Для работы периферийных модулей тактирование всегда необходимо предварительно включать;
  • для линейки STM8L101x может быть выбран делитель в диапазоне от 1 до 8 (биты HSIDIV[1:0] в регистре CLK_CKDIVR);
  • для линейки STM8L15x/162 может быть выбран делитель в диапазоне от 1 до 128 (биты CKM[2:0] в регистре CLK_CKDIVR).

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

Методы снижения энергопотребления

Все микроконтроллеры симейства STM8L выполнены по CMOS-технологии. В устройствах такого типа полное энергопотребление является суммой статического и динамического потреблений:

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

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

Как было сказано выше, микроконтроллеры STM8L выполнены по особой 130 нм технологии, обеспечивающей ультранизкие значения токов утечки. Таким образом, статическое потребление микроконтроллеров очень мало, а динамическое потребление может быть снижено следующими методами:

1) снижение напряжения питания микроконтроллера — влияет на динамические потери. Для микроконтроллеров серии STM8L данный метод имеет малое значение, т.к. все линейки STM8L снабжены встроенными регуляторами напряжения (см. «Схема питания»), и выигрыш получается незначительным;

2) снижение частоты тактирования ЦПУ для задач, не требующих высокой производительности;

3) отключение питания и тактирования неиспользуемых модулей периферии — один из самых эффективных способов снижения энергопотребления;

4) использование режимов пониженного энергопотребления;

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

Средства отладки и программирования

Для быстрого освоения микроконтроллеров серии STM8L компания STMicroelectronics предлагает ряд отладочных наборов. Все отладочные наборы можно разделить на два типа:

  • оценочные платы- предназначены для знакомства с линейками STM8L101 и STM8L15x;
  • демонстрационная плата — для линейки STM8L15x.

Оценочные платы представлены тремя изделиями — STM8L-Discovery, STM8L101-EVAL и STM8L1526-EVAL. STM8L101-EVAL содержит в своем составе:

  • микроконтроллер соответствующей линейки;
  • микросхему EEPROM;
  • ЖКИ 122х32 с последовательным интерфейсом;
  • светодиоды;
  • механический джойстик;
  • разъем для micro-SD карты.

Блок-схема оценочной платы STM8L101-EVAL приведена на рисунке 4.

Энергопотребление МК линеек STM8L15x/162

Рис. 4. Энергопотребление МК линеек STM8L15x/162

Для начального знакомства с МК серии STM8L лучше всего подойдет оценочная плата STM8L-Discovery (рис. 5). Одним из достоинств этой платы является ее низкая цена (порядка 20$). В ближайшее время данная оценочная плата будет доступна на складе КОМПЭЛ.

Внешний вид оценочной платы STM8L-DISCOVERY

Рис. 5. Внешний вид оценочной платы STM8L-DISCOVERY

Более подробную информацию об отладочных платах можно найти на сайте компании ST — http://www.st.com/mcu/inchtml-pages-stm8_tools.html, а отладочные средства и среды разработчика для микроконтроллеров семейства STM8 подробно рассмотрены в [4] (электронная версия доступна на http://www.compeljournal.ru/enews/2010/6/4).

Заключение

В статье была рассмотрена новая серия микроконтроллеров STM8L фирмы ST, обладающих очень низким энергопотреблением — 150 мкА/МГц (STM8L101x) и 192 мкА/МГц (STM8L15x/162) в активном режиме. Приведено описание различных стандартных режимов пониженного энергопотребления, а также даны рекомендации по методам обеспечения минимального энергопотребления.

Микроконтроллеры серии STM8L отлично подойдут для применения в тех направлениях, где низкое энергопотребление должно совмещаться со стоимостью и производительностью 8-битных микроконтроллеров. Для приложений, требующих значительно более высокой производительности, компания STMicroelectronics выпускает серию МК STM32L [5] (электронная версия доступна на http://www.compeljournal.ru/enews/2010/6/5) на базе ядра Cortex-M3, имеющую идентичный STM8L набор периферийных модулей.

Литература

1. Алексей Пантелейчук «Новые 8-битные микроконтроллеры STM8L», журнал «Новости электроники», №14, 2009, сс. 26-28.

2. Джафер Меджахед (КОМПЭЛ) «Восемь преимуществ STM8», журнал «Новости электроники», №6, 2010, сс. 6-7.

3. AN3147 «STM8L family power management».

4. Попов Роман (КОМПЭЛ) «Микроконтроллеры STM8 «с нуля», журнал «Новости электроники», №6, 2010, сс. 8-14.

5. Алексей Пантелейчук «Новое семейство МК STM32L с ультранизким энергопотреблением», журнал «Новости электроники», №6, 2010, с.15.

Получение технической информации, заказ образцов, поставка — e-mail: mcu.vesti@compel.ru

Энергосбережение в микроконтроллерах STM32

Снижение энергопотребления микроконтроллером может быть достигнуто путем уменьшения его тактовой частоты (что связано с замедлением работы) или путем выборочного отключения периферийных систем, встроенных в его структуру. Этот второй механизм идеально подходит для микроконтроллеров STM32, которые конструктивно адаптированы для выборочного включения и выключения большинства встроенных периферийных блоков.

3 image

energosberezhenie v mikrokontrolerach png1

Мы начнем с обсуждения доступных режимов сохранения, которые были протестированы на наборе STM3210B — EVAL / A.

Спящий режим

Этот режим энергосбережения является неотъемлемой частью ядра Cortex-M3, поэтому информацию о нем следует искать не в документации, подготовленной производителем микроконтроллеров STM32, а в описании ядра, подготовленное ARM.

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

Читайте также  Статья 25. Обеспечение энергосбережения и повышения энергетической эффективности организациями с участием государства или муниципального образования и организациями, осуществляющими регулируемые виды деятельности

Максимальное потребление, когда микроконтроллер работает с тактовой частотой 72 МГц (HSE и PLL включены) и все периферийные устройства включены, микроконтроллер может потреблять около 15 мА. Минимальное потребление — работа ядра с тактовой частотой 125 кГц с использованием внутреннего генератора HSI и после отключения всех периферийных устройств. В таких условиях микроконтроллер потребляет ток не более 0,5 мА.

7 image

В зависимости от механизмов «сна» и «пробуждения» различают несколько типов режимов работы. За управление этими режимами отвечают две инструкции: WFI (ожидание прерывания) и WFE (ожидание события). Использование этих инструкций в программе, написанной на C, требует использования двойного подчеркивания в качестве префикса. Например: чтобы вызвать инструкцию WFI, используйте следующую запись:

Sleep-on-exit

Использование инструкции WFI позволяет, помимо прочего, перевести ядро ​​в состояние ожидания на выходе. В этом случае ядро ​​переводится в спящий режим только после завершения всех прерываний. Выход из режима происходит тогда, когда в системе обнаружен запрос обработки прерывания. Примером программы, которая работает, как описано, является пример 1 . Контроль за режимами сна осуществляет NVIC, поэтому были использованы функции, контролирующие его работу.

Пример 1. Фрагмент программы, иллюстрирующий режим энергосбережения в режиме ожидания.

Прерывание от вывода PD0 микроконтроллера, к которому была подключена кнопка, было настроено по спадающему фронту. После его появления ядро ​​выйдет из спящего режима и будет вызвана функция обработки прерываний.

Функция обработки прерываний выглядит следующим образом:

Ядро просыпается примерно на 2 секунды, зажигает четыре светодиода, гасит их и снова «засыпает».

Запуск этого режима во время отладки остановит отладчик. Ядро не работает, поэтому нет необходимости искать ошибки. Однако микроконтроллер можно настроить таким образом, чтобы даже в режимах пониженного энергопотребления соединение отладчика и микроконтроллера не нарушалось. Для этого используется функция DBGMCU_Config (), например, если вы используете спящий режим, введите в программе следующую строку:

Sleep-now

Работа этого режима заключается в немедленном переводе ядра в режим пониженного энергопотребления. Это можно сделать с помощью инструкций WFI и WFE. Разница заключается в том, что в первом случае система будет ожидать прерывания, а во втором — события.

Время, необходимое для выхода ядра из спящего режима в ожидании события (команда WFE), почти в два раза короче и составляет около 2 с. Это связано с тем, что для обработки прерывания не требуется времени. Вывод заключается в том, что использование инструкции WFE очень хорошо подходит для работы с часами реального времени RTC, задачей которых может быть генерация событий (аварийных сигналов).

Пример 2. Программа, которая выводит микроконтроллер из спящего режима каждые 30 секунд

В программе примера 2 RTC настроен на пробуждение микроконтроллера каждые полминуты. Светодиод LD1 загорается в нормальном режиме работы. Кроме того, в этом примере состояние текущей задачи достигает наивысшего приоритета, и, таким образом, NVIC не будет прерывать ее выполнение для обслуживания прерывания. Это можно увидеть, например, если активировано прерывание от кнопки (PB9) и фрагмент кода помещен в функцию обработки прерываний, которая будет оказывать видимое влияние на оценочную плату.

Пример такой функции:

Чтобы проверить, работает ли приложение должным образом, вы можете запустить программу из примера 2, добавив следующую строку в начале основного бесконечного цикла:

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

Deep-sleep

Последний режим пониженного энергопотребления ядра — Deep-sleep (глубокий сон). Это не какой-то отдельный режим. Его получают путем объединения режима ожидания или режима ожидания после обработки всех прерываний (режим ожидания при выходе). Режим активируется установкой бита SLEEPDEEP в регистре управления питанием контроллера прерываний NVIC.

Программист, использующий библиотеку API, не должен вдаваться в эти детали, просто используйте соответствующую функцию: если приложение требует перевода ядра в состояние глубокого сна, вы должны поместить в код дополнительную строку:

Следствием активации Deep-sleep является отключение часов, тактирующих ядро, включая систему PLL. Это позволяет дополнительно снизить энергопотребление по сравнению с предыдущими режимами. Негативный эффект от глубокого сна заключается в более длительном времени, необходимом для полного пробуждения и начала нормальной работы. Это связано с тем, что контур фазовой синхронизации требует времени для генерации стабильного тактового сигнала.

Stop Mode

Он использует режим глубокого сна, который обсуждался ранее. Все тактовые сигналы отключены (система PLL и оба быстрых генератора: HSI и HSE). Кроме того, внутренний регулятор напряжения 1,8 В может быть установлен за счет более позднего и более длительного запуска системы в состоянии пониженного энергопотребления.

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

Если часы реального времени и медленные генераторы (LSE и LSI) не были выключены ранее, они находятся в активном состоянии во всех режимах пониженной мощности.

Пример 3. Способ перевода микроконтроллера в режим остановки

Способ перевода микроконтроллера в режим остановки показан на примере 3, Задача этой простой программы — переводить микроконтроллер в режим остановки примерно каждые 2 секунды, а сама остановка длится 10 секунд. Сигнализация нормальной работы осуществляется путем свечения светодиода LD1. Пробуждение происходит под воздействием сигналов тревоги, генерируемых с использованием часов реального времени.

После сброса флага события из RTC устанавливается время, после которого должен быть сформирован следующий сигнал тревоги. В этом примере микроконтроллер должен просыпаться каждые 10 секунд, поэтому каждый раз к текущему значению счетчика RTC следует прибавлять значение 10. Достижение числа, полученного таким образом, приведет к тревоге. Задача следующей вызываемой функции PWR_EnterSTOPMode () — правильно перевести систему в состояние остановки. В программе, из-за отсутствия специальных требований относительно минимального времени запуска системы, регулятор напряжения переводиться в режим low power

В этот момент работа микроконтроллера будет приостановлена ​​и начнется с этого места после пробуждения. В связи с тем, что в режиме остановки отключаются фазовая синхронизация и быстрые генераторы, их следует снова включить после возврата к нормальной работе. Если приложение использует внутренний генератор HSI и не использует систему PLL, то перенастройка этих устройств не требуется: система автоматически задействует HSI в качестве источника своего тактового сигнала.

Standby mode

Использование этого режима позволяет максимально снизить энергопотребление. Как и в режиме остановки, также в режиме ожидания используется глубокий сон, но стабилизатор 1,8 В отключается без дополнительного вмешательства пользователя. Переход в режим ожидания приводит к потере данных, содержащихся в оперативной памяти, чего нет в предыдущих режимах. Однако данные, содержащиеся в регистрах, защищенных от потери, не изменяются, и свободные генераторы (резервный домен) все еще работают при условии, что резервный источник питания батареи Vbatt подключен к микроконтроллеру. Работа продолжается с независимой сторожевой системой (если ранее была включена) и системами восстановления.

Потребляемый ток при включенном медленном генераторе и часов реального времени варьируется от 3 до 3,5 мА, в зависимости от значения напряжения питания.

Микроконтроллер активируется, сигнал сброса появляется после независимого переполнения сторожевого таймера (IWDG), с нарастающим фронтом на линии пробуждения или после тревоги RTC.

Система начинает нормальную работу так же, как после сигнала аппаратного сброса. По этой причине время, необходимое для нормальной работы системы, является самым длительным (около 50 сек.). Индикатором того, что активация произошла после выхода из режима ожидания, является флаг SBF, установленный в регистре PWR_CSR. В библиотеке функций API это называется PWR_FLAG_SB.

Пример 4. Фрагмент программы, иллюстрирующий использование режима ожидания

В примере 4 приведен фрагмент программы , использующий режим ожидания. Приложение информирует о состоянии микроконтроллера с помощью светодиода LD1. Когда он загорается, он указывает на нормальную работу, а при его тушении — режим ожидания. Система возвращается в нормальное состояние при нажатии кнопки RESET или WAKEUP.

В дополнение к перечисленным функциям также настроена система часов реального времени. Благодаря этому текущее состояние микроконтроллера можно наблюдать во время отладки. Режим ожидания возвращается в режим после нажатия кнопки (PB9).

Задача основного, бесконечного цикла программы — постоянно проверять состояние линии PB9. Когда на нем появляется низкое состояние, система готова к переходу в режим ожидания. Наконец, вызов PWR_EnterSTANDBYMode () включает режим ожидания.

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

Другим важным шагом является проверка, начинает ли микроконтроллер работать после пробуждения или нет. Если установлен флаг PWR_FLAG_SB, светодиод LD2 горит, и вызов функции PWR_ClearFlag () сбрасывает флаг ожидания. Наконец, функция RTC_WaitForSynchro () заставляет микроконтроллер ожидать синхронизацию со схемой часов реального времени. Это необходимо, поскольку эта система подключена к внутренней шине APB1, и ее тактирование было отключено в режиме ожидания.

В случае, если флаг PWR_FLAG_SB был сброшен, то конфигурируются часы реального времени и ее сигнал синхронизации.

Источник https://narodstream.ru/avr-urok-54-rezhimy-ponizhennogo-energopotrebleniya-chast-1/

Источник https://www.compel.ru/lib/54888

Источник https://fornk.ru/5021-energosberezhenie-v-mikrokontrollerax-stm32/

Понравилась статья? Поделиться с друзьями: