4927 subscribers

Микроконтроллеры для начинающих. Часть 37. Управление питанием и режимы работы

225 full reads
477 story viewsUnique page visitors
225 read the story to the endThat's 47% of the total page views
2 minutes — average reading time

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

Работа, сон, глубокий сон, и другие

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

Основной режим работы микроконтроллера, когда все модули, включая процессор, работают, называется активным режимом (Active mode). Микропроцессор можно полностью остановить переведя его в спящий режим (sleep mode), или режим останова (halt mode). Между этими двумя крайностями существует множество вариантов частично ограниченной работы. Причем количество вариантов и их особенности зависят не только от линейки микроконтроллера, но иногда и от конкретной модели.

Давайте рассмотрим эти варианты, пока в упрощенном и обобщенном виде

Active mode, Run mode

Активный режим или режим выполнения. Работает и процессор и все модули микроконтроллера. Однако, почти всегда существует возможность отключения отдельных модулей (периферийных устройств) если они не нужны в данном устройстве или в данный момент времени.

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

В STM8L есть активный режим малого потребления (Low power run mode) при котором микроконтроллер переключается на работу от низкочастотного внутреннего генератора.

Idle mode, wait mode

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

В этом режиме АЦП может продолжать преобразование, таймеры отсчитывать временные интервалы или подсчитывать события, генератор ШИМ продолжает формировать управляющие импульсы.

Но для PIC этот режим, в явном виде отсутствует. Вместо этого отдельные периферийные устройства (модули) могут быть выполнены как независимые от ядра. В другой терминологии, работающие во время сна. Фактически, такие модули просто имеют свой, независимый от системного, тактовый генератор.

При этом в PIC18 режим ожидания есть.

В STM8L есть режим ожидания малого потребления (Low power wait mode) при котором микроконтроллер переключается на работу от низкочастотного внутреннего генератора.

Active-halt mode, Standby, Power save mode, Sleep mode

Это вариации режимов ожидания отличающие степенью ограничений. В STM8 при этом отключается кварцевый тактовый генератор. В AVR отключается тактирование почти всех периферийных устройств, но главный тактовый генератор продолжает работать. При этом в AVR есть менее ограниченный режим Extended Standby в котором таймеры продолжат работать.

При этом в ATtiny этих режимов работы нет. В PIC в режим сна останавливается системный тактовый генератор не зависимо от его типа.

Power down mode, Halt mode

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

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

ADC Noise Reduction

Это не совсем режим энергосбережения. Специфика AVR. Режим предназначен для уменьшения помех, которые могут снизить точность преобразования АЦП. В этом режиме останавливается тактирование памяти и портов ввода-вывода.

Переключение в режим энергосбережения

В большинстве случаев переключение в один из режимов энергосбережения выполняет машинная команда SLEEP. Однако в STM8 этой команды нет. Зато есть команда WFI, которая переключает микроконтроллер в режим ожидания (wait mode). В режим останова, в разные его варианты, можно переключиться командой HALT. Далее мы рассмотрим различные варианты переключения для каждой линейки микроконтроллеров в отдельности.

Управление режимами энергосбережения

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

AVR

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

Режимы работы микроконтроллера ATmega328. Из документации
Режимы работы микроконтроллера ATmega328. Из документации
Режимы работы микроконтроллера ATmega328. Из документации

В микроконтроллерах AVRmega вид режима ожидания, в который микроконтроллер будет переведен по команде SLEEP, определяется регистром SMCR – Sleep Mode Control Register, а в ATtiny регистром MCUCR – MCU Control Register.

Регистр SMCR микроконтроллера ATmega328. Из документации
Регистр SMCR микроконтроллера ATmega328. Из документации
Регистр SMCR микроконтроллера ATmega328. Из документации
Регистр MCUCR микроконтроллера ATtuny13. Из документации
Регистр MCUCR микроконтроллера ATtuny13. Из документации
Регистр MCUCR микроконтроллера ATtuny13. Из документации

Бит SE=1 соответствующего регистра разрешает переход в режим энергосбережения по команде SLEEP. А нулевое значение бита SE запрещает переход в режим энергосбережения.

Биты SM0, SM1, SM2 (ATmega) выбирают один режимов энергосбережения.

Доступные режимы энергосбережения, в которые можно перейти командой SLEEP, для микроконтроллера ATmega328. Из документации
Доступные режимы энергосбережения, в которые можно перейти командой SLEEP, для микроконтроллера ATmega328. Из документации
Доступные режимы энергосбережения, в которые можно перейти командой SLEEP, для микроконтроллера ATmega328. Из документации
Доступные режимы энергосбережения, в которые можно перейти командой SLEEP, для микроконтроллера ATtiny13. Из документации
Доступные режимы энергосбережения, в которые можно перейти командой SLEEP, для микроконтроллера ATtiny13. Из документации
Доступные режимы энергосбережения, в которые можно перейти командой SLEEP, для микроконтроллера ATtiny13. Из документации

Кроме того, существует регистр PRR – Power Reduction Register с помощью которого можно отключить неиспользуемые периферийные устройства установив соответствующий им бит в 1. Я не буду приводить формат или примеры для этого регистра. При необходимости это будет указано при изучении периферийных модулей микроконтроллеров. Однако отмечу, что в некоторых случаях требуется повторная инициализация модуля после его повторного включения.

PIC

В микроконтроллерах PIC нет способов управления режимами энергосбережения. Команда SLEEP просто останавливает системный тактовый генератор. А это полностью прекращает выполнение всех операций процессором и периферийными модулями, которые не являются независимыми от ядра (не имеют отдельных тактовых генераторов).

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

PIC18

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

Доступные режимы работы для микроконтроллера PIC18F1хK50. Из документации
Доступные режимы работы для микроконтроллера PIC18F1хK50. Из документации
Доступные режимы работы для микроконтроллера PIC18F1хK50. Из документации

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

Переключение в режимы Sleep и xxx_IDLE выполняется командой SLEEP после установки бит в OSCCON в нужное значение.

Регистр OSCCON микроконтроллеров PIC18 F1xK50. Из документации
Регистр OSCCON микроконтроллеров PIC18 F1xK50. Из документации
Регистр OSCCON микроконтроллеров PIC18 F1xK50. Из документации

Бит IDLEN определяет, будет ли остановлен системный тактовый генератор по команде SLEEP. Биты SCS1 и SCS0 задают используемый тактовый генератор. Причем происходит немедленное переключение тактового генератора, не дожидаясь команды SLEEP. Кроме этого, тип используемого тактового генератора задается битами FOSC в байтах конфигурации микроконтроллера (при заливке программы в микроконтроллер). Задание конфигурации микроконтроллеров PIC мы рассмотрим в отдельной статье.

STM8

Микроконтроллеры STM8S и STM8A могут работать в нескольких режимах. Управление режимами работы и переключение между ними в STM8 более сложное, чем ранее рассмотренные случаи. Подробно рассмотреть их в рамках данной общей статьи сложно. Поэтому я ограничусь довольно обзорным рассмотрением, что бы вы поняли самое основное. А вот более подробно это будем изучать при проектировании устройств с малым энергопотреблением. В данном случае это не самая простая тема для начинающих.

Режим Active в следующей таблице не показан

Режимы энергосбережения микроконтроллеров STM8S и STM8A. Из документации
Режимы энергосбережения микроконтроллеров STM8S и STM8A. Из документации
Режимы энергосбережения микроконтроллеров STM8S и STM8A. Из документации

У микроконтроллеров STM8L набор режимов энергосбережения несколько иной

Режимы энергосбережения микроконтроллеров STM8L. Из документации
Режимы энергосбережения микроконтроллеров STM8L. Из документации
Режимы энергосбережения микроконтроллеров STM8L. Из документации

Как я уже говорил, переход в режим ожидания выполняется командами WFI или WFE (для STM8L). Перед использованием команды WFE нужно установить в 1 биты соответствующие событиям, которые будут будить микроконтроллер, в регистрах WFE control register 1 (WFE_CR1), WFE control register 2 (WFE_CR2), WFE control register 3 (WFE_CR3) и WFE control register 4 (WFE_CR4). Я не буду сейчас приводить формат этих регистров. Если потребуется, мы вернемся к этому в отдельной статье.

Все остальные переключения выполняет команда HALT. В STM8L режим Active halt подобен режиму Halt, так в этих микроконтроллерах нет модуля Auto-wakeup (AWU). А вот в STM8S и STM8Aтакой модуль есть. Если перед выполнением команды HALT модуль AWU настроен (регистры Control/status register (AWU_CSR), Asynchronous prescaler register (AWU_APR), Timebase selection register (AWU_TBR)) и включен, то микроконтроллер перейдет в режим активного отключения (Active halt).

В режиме Active halt with MVR auto power off дополнительно выключается внутренний главный регулятор напряжения. Для этого, кроме ранее описанных для перехода в режим Active halt действий, нужно установить бит REGAH в регистре Internal clock register (CLK_ICKR).

Дополнительно можно отключить тактирование отдельных периферийных модулей сбросив соответствующий ему бит в одном из регистров Peripheral clock gating register 1 (CLK_PCKENR1), Peripheral clock gating register 2 (CLK_PCKENR2). А для STM8L и в регистре Peripheral clock gating register 3 (CLK_PCKENR3).

Специальные режимы энергосбережения в STM8L - Low power run mode и Low power wait mode являются самыми сложными ли использования. И, скорее всего, я не буду их описывать подробно в рамках данного цикла статей, так как начинающие с ними не справятся. И сейчас вы поймете, почему они такие сложные.

В режимах Low Power код программы выполняется не из ПЗУ, а из ОЗУ. Соответственно, нужный фрагмент кода сначала нужно туда перенести, а потом переключиться на перенесенный в ОЗУ фрагмент кода. Затем нужно переключиться на низкочастотный тактовый генератор и отключить питание высокочастотного. Отключить АЦП и все не нужные периферийные модули. Отключить питание ПЗУ. Переключить главный регулятор напряжения в режим ультранизкого потребления. После этого микроконтроллер перейдет в режим Low power run mode. Переход в режим Low power wait mode возможен только из режима Low power run mode. При этом нужно настроить источники пробуждения и выполнить команду WFE, как это уже описывалось ранее. Выход из режимов Low power немного попроще.

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

Заключение

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

Для STM8 знакомство было далеко не полным, так как эти микроконтроллеры настраиваются довольно гибко, что особенно хорошо видно на примере STM8L.

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

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

А на сегодня, пожалуй, хватит.

До новых встреч!