Atmega128. Управление энергопотреблением и режимы сна
Управление энергопотреблением и режимы сна
Использование режимов сна позволяет отключать неиспользуемые модули микроконтроллера, тем самым уменьшая потребляемую мощность. Микроконтроллер поддерживает несколько режимов сна, позволяющих программисту оптимизировать энергопотребление под требования приложения.
Для перевода микроконтроллера в один из шести режимов сна необходимо предварительно установить бит SE в регистре MCUCR, а затем выполнить инструкцию SLEEP. Биты SM2, SM1 и SM0 регистра MCUCR задают в какой именно режим будет переведен микроконтроллер (холостой ход "Idle", уменьшение шумов АЦП "ADC Noise Reduction", выключение "Power-down", экономичный "Power-save", дежурный "Standby" или расширенный дежурный "Extended Standby") после выполнения команды SLEEP (см. табл. 17). Выход из режима сна происходит при возникновении разрешенного прерывания. В этом случае, помимо времени старта микроконтроллер приостанавливается на 4 машинных цикла, выполняет процедуру обработки прерывания и продолжает выполнять команды следующие за SLEEP. Содержимое файла регистров и статического ОЗУ остается неизменным после выхода из режима сна. Если во время действия режима сна возникает условие сброса, то микроконтроллер пробуждается и исполняет код программы по вектору сброса.
На рисунке 18 представлены различные системы синхронизации микроконтроллера ATmega128 и их распределение. Данный рисунок может быть полезным при выборе соответствующего режима сна.
Регистр управления микроконтроллером – MCUCR
Регистр управления микроконтроллером содержит биты управления энергопотреблением.
Разряд 5 – SE: Разрешение перевода в режим сна
В бит SE должна быть записана лог. 1, когда необходимо микроконтроллер перевести в режим сна командой SLEEP. Во избежание незапланированного программистом перевода микроконтроллера в режим сна рекомендуется устанавливать этот бит непосредственно перед выполнением инструкции SLEEP и сбрасывать сразу после пробуждения.
Разряды 4..2 – SM2..0: Биты 2, 1 и 0 выбора режима сна
С помощью данных бит можно выбрать один из шести режимов сна в соответствии с таблицей 17.
Таблица 17 – Выбор режима сна
SM2 | SM1 | SM0 | Наименование режима сна |
0 | 0 | 0 | Холостой ход |
0 | 0 | 1 | Уменьшение шумов АЦП |
0 | 1 | 0 | Выключение |
0 | 1 | 1 | Экономичный |
1 | 0 | 0 | Зарезервирован |
1 | 0 | 1 | Зарезервирован |
1 | 1 | 0 | Дежурный (1) |
1 | 1 | 1 | Расширенный дежурный (1) |
Прим. 1: Дежурный режим и расширенный дежурный режим доступны только при использовании внешних кварцевых или керамических резонаторов.
Режим холостого хода (Idle)
Если значение бит SM2..0 равно 000, то после выполнения инструкции SLEEP микроконтроллер переходит в режим холостого хода, в котором останавливается ЦПУ, но продолжают работу SPI, УСАПП, аналоговый компаратор, АЦП, двухпроводной интерфейс, таймеры-счетчики, сторожевой таймер и система прерываний. По сути, в данном режиме останавливается синхронизация ядра ЦПУ и флэш-памяти (clkCPU и clkFLASH), а остальная продолжает работу.
В режиме холостого хода допускается пробуждение от любого внешнего или внутреннего прерывания, например, при переполнении таймера или завершении передачи УСАППом. Если пробуждение по прерыванию аналогового компаратора не требуется, то аналоговый компаратор может быть отключен путем установки бита ACD в регистре управления и состояния аналогового компаратора ACSR. Это позволит уменьшить потребляемый ток в режиме холостого хода. Если разрешена работа АЦП, то преобразование автоматически запускается после перевода в данный режим.
Режим уменьшения шумов АЦП (ADC Noise Reduction)
Если значениям бит SM2..0 присвоить 001, то выполнение инструкции SLEEP приведет к переводу микроконтроллера в режим уменьшения шумов АЦП, в котором останавливается ЦПУ, но продолжают работу АЦП, внешние прерывания, наблюдение за адресом двухпроводной последовательного шины, таймер-счетчик 0 и сторожевой таймер (конечно, если были предварительно активизированы). Фактически в данном режиме прекращается синхронизация ввода-вывода (clkI/O), ядра ЦПУ (clkCPU) и флэш-памяти (clkFLASH), а остальная синхронизация продолжает работу.
В этом режиме создается более благоприятные условия для аналогово-цифрового преобразования с повышенной разрешающей способностью за счет снижения влияния шумов на результат измерения. Если разрешена работа АЦП, то преобразование автоматически запускается при переводе в данный режим. Выход из данного режима допускается не только при генерации запроса на прерывание по завершению преобразования АЦП, но и при внешнем сбросе, сбросе по сторожевому таймеру, сбросе при недопустимом снижении питания, прерывании при обнаружении установленного адреса на двухпроводной последовательной шине, прерывании по таймеру-счетчику 0, прерывании по готовности SPM/EEPROM, прерывании по внешнему уровню на выводах INT7:4 или внешнем прерывании по входам INT3:0.
Режим выключения (Power-down)
Если SM2..0 = 010, то выполнение команды SLEEP означает перевод микроконтроллера в режим выключения. В данном режиме прекращает работу внешний генератор, но в действии остаются внешние прерывания, наблюдение за адресом на двухпроводной последовательной шине и сторожевой таймер (при условии, что они активизированы). Выход из данного режима возможен только по внешнему сбросу, сбросу сторожевым таймером, сбросу супервизором питания, прерывании по обнаружении установленного адреса на двухпроводной последовательной шине, прерывании по внешнему уровню на выводах INT7:4 или внешним прерывании INT3:0. В данном режиме фактически отключена генерация всех тактовых частот, поэтому дальнейшая работа модулей продолжается только в асинхронном режиме.
Обратите внимание, что если для выхода из прерывания используется прерывание по установке заданного уровня на внешнем входе, то выход из режима сна возможен только если этот уровень присутствует в течение определенного времени (см. также “Внешние прерывания”).
Выход из режима выключения сопровождается задержкой с момента выполнения условия прерывания до эффективного пробуждения. Данная задержка позволяет перезапустить синхронизацию и дождаться стабильности ее работы. Период пробуждения определяется некоторыми конфигурационными битами CKSEL, которые определяют период задержки при сбросе (см. “Источники синхронизации”).
Экономичный режим (Power-save)
Если установить значения бит SM2..0 равным 011, то действие команды SLEEP приведет к переводу микроконтроллера в экономичный режим. Данный режим идентичен режиму выключения за некоторыми исключениями:
Если таймер-счетчик 0 тактируется асинхронно, т.е. установлен бит AS0 в регистре ASSR, то таймер-счетчик 0 в режиме сна продолжит работу. Выход из режима сна возможен как по переполнению таймера, так и при выполнении условия сравнения, если соответствующее прерывание для таймера-счетчика разрешено в регистре TIMSK, а также установлен бит общего разрешения прерываний в регистре SREG.
Если для асинхронного таймера НЕ включено асинхронное тактирование, то рекомендуется использовать режим выключения вместо экономичного, т.к. содержимое регистров асинхронного таймера должно рассматриваться как неопределенное после выхода из экономичного режима, в котором значение AS0 было равно 0.
В данном режиме сна останавливаются все тактовые источники за исключением асинхронных (clkASY), работающих только совместно с асинхронными модулями, в т.ч. таймер-счетчик 0 с разрешенной опцией асинхронного тактирования.
Дежурный режим (Standby)
После установки значения SM2..0 = 110 и выбора опции тактирования от внешнего кварцевого или керамического резонатора выполнение инструкции SLEEP приводит к переходу микроконтроллера в дежурный режим. Данный режим идентичен режиму выключению за исключением того, что генератор продолжает свою работу. Из дежурного режима микроконтроллер выходит за 6 машинных циклов.
Расширенный дежурный режим (Extended Standby)
Запись в SM2..0 значения 111 с учетом выбора в качестве тактового источника внешнего кварцевого или керамического резонатора означает, что после выполнения команды SLEEP микроконтроллер будет переведен в расширенный дежурный режим. Данный режим идентичен экономичному за исключением продолжения работы тактового генератора.
Выход из расширенного дежурного режима происходит за шесть машинных циклов.
Таблица 18 – Активные тактируемые модули и источники пробуждения в различных режимах сна
Наименование режима сна | Тактируемые модули микроконтроллера | Активные генераторы | Источник пробуждения | ||||||||||
clkCPU (ЦПУ) | clkFLASH (флэш-амять) | clkIO (ввод-вывод) | clkADC (АЦП) | clkASY (Асинхр.модули) | Основной тактовый | Генератор таймера | INT7:0 | Набл. адреса TWI | Таймер 0 | Готовность SPM/EEPROM | АЦП | Др. ввод-вывод | |
Холостой ход | * | * | * | * | * | * | * | * | * | * | * | ||
Уменьшение шумов АЦП | * | * | * | * | * | * | * | * | * | ||||
Выключение | * | * | |||||||||||
Экономичный | * | * | * | * | * | ||||||||
Дежурный (1) | * | * | * | ||||||||||
Расширенный дежурный (1) | * | * | * | * | * | * |
Прим.
- В качестве внешнего тактового источника выбран кварцевый или керамический резонатор.
- Если установлен бит AS0 в ASSR.
- Только INT3:0 или прерывание по уровню на INT7:4
Минимизация потребляемой мощности
В процессе оптимизации энергопотребления могут возникнуть некоторые проблемы. В общем случае необходимо по возможности максимально использовать режимы сна, а собственно режим сна необходимо выбрать исходя из поддержки только необходимых функций. Все неиспользуемые функции должны быть отключены. В частности, для следующих модулей в целях достижения наименьше возможного энергопотребления должны быть учтены некоторые рекомендации
Аналогово-цифровой преобразователь
Если АЦП был активизирован, то он останется активным и во всех режимах сна. Для снижения мощности рекомендуется отключать АЦП перед переводом в режим сна. Если АЦП был отключен, а затем снова включен, то следующее преобразование будет расширенным (см. “Аналогово-цифровой преобразователь").
Аналоговый компаратор
Перед входом в режим холостого хода аналоговый компаратор необходимо выключить, если он не используется. Перед входом в режим уменьшения шумов АЦП аналоговый компаратор должен быть отключен. При входе в другие режимы сна аналоговый компаратор отключается автоматически. Однако, если к неинвертирующему входу аналогового компаратора выбрано подключение встроенного источника опорного напряжения, то перед входом в любой режим сна аналоговый компаратор необходимо отключать. В противном случае встроенный источник опорного напряжения останется включенным независимо от режима сна (см. также “Аналоговый компаратор”).
Супервизор питания
Если нет необходимости использовать супервизор питания, то данный модуль может быть выключен. Если супервизор питания активизирован конфигурационным битом BODEN, то он также останется активным и во всех режимах сна и, следовательно, будет постоянно потреблять мощность. При организации режимов глубокого сна отключение данного модуля позволит существенно уменьшит потребляемый ток (см. также "Супервизор питания”).
Встроенный источник опорного напряжения
Работа встроенного источника опорного напряжения разрешается, если необходимо использовать супервизор питания, аналоговый компаратор или АЦП. Если данные модули будут отключены, то встроенный ИОН также будет отключен и не будет потреблять мощность. При возобновлении его работы программист должен учесть задержку на установление выходного напряжения ИОН перед его использованием. Если ИОН остается включенным в режиме сна, то его можно использовать сразу после пробуждения (см. также “Встроенный источник опорного напряжения ” для уточнения времени его запуска).
Сторожевой таймер
Если нет необходимости в использовании сторожевого таймера, то данный модуль должен быть отключен. Если разрешить работу сторожевого таймера, то он останется активным во всех режимах сна и, следовательно, будет потреблять мощность. Если требуются режимы глубокого сна, то данная опция позволит существенно снизить общий ток (см. также “Сторожевой таймер”).
Линии портов ввода-вывода
Перед переводом в режим сна все линии портов ввода-вывода должны быть настроены с учетом потребления минимальной мощности. Основное внимание следует уделить отсутствию резистивных нагрузок на выводах. В режимах сна, где отключена синхронизация ввода-вывода (clkI/O) и АЦП (clkADC), входные буферы микроконтроллера отключены. Этим гарантируется отсутствие энергопотребления неиспользуемой в режиме сна входной логикой. В некоторых случаях входная логика необходима для определения условия пробуждения и в этом случае должна быть активной (см. также “Разрешение цифрового ввода и режимы сна”). Если работа входного буфера разрешена, а входной сигнал оказался отключенным или имеет уровень близкий к VCC/2, то этот входной буфер будет потреблять повышенную мощность.
Интерфейс JTAG и встроенный блок отладки
Если работа встроенного блока отладки разрешена конфигурационным битом OCDEN, то даже при переводе микроконтроллера в экономичный режим (Power save) или режим выключения (Power down) командой sleep основной тактовый источник продолжит работу. В этом случае микроконтроллер будет потреблять существенный ток даже в этих режимах сна. Избежать этого можно с помощью одного из трех способов:
- Сбросить конфигурационный бит OCDEN.
- Сбросить конфигурационный бит JTAGEN.
- Установить бит JTD в регистре MCUCSR.
После разрешения работы интерфейса JTAG вывод TDO остается плавающим до тех пор пока JTAG TAP-контроллер не начнет сдвигать данные. Если связанная с выводом TDO аппаратная часть не выполняет подтягивание потенциала к плюсу питания, то потребляемая мощность увеличится. Обратите внимание, что вывод TDI следующего микроконтроллера в сканируемой цепи содержит подтягивающий резистор для избежания данной проблемы. Запись в бит JTD регистра MCUCSR лог. 1 приводит к отключению интерфейса JTAG, так же как и незапрограммированное состояние конфигурационного бита JTAGEN.
<< Предыдущая глава |
Оглавление | Следующая глава >> |