Проектирование на программируемых системах на кристалле PSoC Cypress. Часть 5. Управление энергопотреблением

№ 3’2007
PDF версия
Современные разработчики электронных устройств большое внимание уделяют проблеме снижения энергопотребления. Особенно это важно в случае создания мобильных устройств.

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

Все статьи цикла:

В техническом описании [1] и предыдущих статьях цикла [3] система на кристалле PSoC рассматривается как совокупность основных подсистем — процессорного ядра, системных ресурсов, цифровой и аналоговой периферии. Придерживаясь этого разделения, будем рассматривать управление энергопотреблением для каждой подсистемы по отдельности.

Процессорное ядро и системные ресурсы

Самым явным и самым действенным методом снижения энергопотребления процессорного ядра является перевод его в спящий режим. Переход в спящий режим осуществляется при установке бита SLEEP в регистре CPU_SCR0. При этом отключается блок флэш-памяти, останавливается процессор, и отключаются все основные внутренние источники тактовых частот, за исключением генератора частоты 32К. Поскольку для работы как цифровых, так и аналоговых блоков требуются тактирующие частоты, то в спящем режиме продолжат работу только те блоки, которые используют либо внутреннюю частоту 32К, либо внешние источники тактирования. Минимальный потребляемый ток в спящем режиме составляет от 3 до 10 мкА в зависимости от чипа PSoC и температуры окружающей среды.

При использовании спящего режима следует иметь в виду несколько следующих ключевых моментов:

  1. Выход из спящего режима осуществляется по прерыванию или при возникновении сброса. Это занимает от двух до трех тактов частоты 32К, то есть 61–92 мкс. Для выхода из спящего режима, как правило, используется специальный таймер SleepTimer, частота срабатывания которого может быть выбрана из ряда 1, 8, 64 и 512 Гц.
  2. Если в момент выполнения инструкции, устанавливающей бит SLEEP, происходит прерывание, то инструкция выполнится, но перехода в спящий режим не будет, бит SLEEP останется в прежнем состоянии, а вместо этого будет осуществлен переход к обработчику прерывания.
  3. При выходе из спящего режима по прерыванию первой будет выполнена инструкция, следующая за инструкцией, которая устанавливала бит SLEEP. И лишь после этого будет осуществлен переход к обработчику прерывания, если установлен глобальный бит разрешения прерываний (бит GIE в регистре флагов процессора F или в регистре CPU_F).
  4. Состояние бита глобального разрешения прерываний не важно для выхода из спящего режима. Выход осуществляется по факту возникновения прерывания, ожидающего обслуживания (pending interrupt), то есть незамаскированного прерывания (установлен соответствующий бит в регистре INT_MSKx). Если бит GIE при выходе из спящего режима не установлен, то ожидающее прерывание должно быть либо сброшено вручную (через регистры INT_CLRx), либо с помощью установки бита GIE (чтобы произошел переход на соответствующий обработчик прерывания). Так или иначе, флаг прерывания, ожидающего обслуживания, должен быть сброшен, иначе он будет препятствовать переходу в спящий режим в дальнейшем.
  5. Если для синхронизации с внешним кварцевым резонатором включен блок PLL, то перед переходом в спящий режим тактовая частота процессора должна быть понижена до 3 МГц (биты CPU Speed в регистре OSC_CR0). Частота работы процессора должна быть относительно небольшой, так как блок PLL должен успеть восстановить синхронизацию при выходе из спящего режима. После выхода из спящего режима рекомендуется выдержать паузу в 10 мс перед восстановлением прежней рабочей частоты процессора.
  6. Поскольку не исключена вероятность возникновения прерывания перед инструкцией, устанавливающей бит SLEEP, то возможна либо некорректная работа алгоритма обработчика прерывания (например, если была понижена частота работы процессора), либо некорректная подготовка перехода к спящему режиму.

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

M8C_EnableGInt ; макроопределение в файле m8c.inc — сброс би-
та GIE (инструкция AND F,~01h)

; инструкции подготовки к переходу в спящий режим

M8C_EnableGInt ; макроопределение — установка бита GIE (ин-
струкция OR F,01h)
M8C_Sleep ; макроопределение — установка бита SLEEP

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

  1. Перед переходом в спящий режим для обеспечения минимального энергопотребления следует отключить опорные напряжения для всего массива аналоговых блоков, либо выключить неиспользуемые модули пользователя. Это необходимо сделать в программе, поскольку спящий режим процессора не затрагивает работу аналоговой подсистемы (за исключением внутренних глобальных тактирующих частот VC1 и VC2).

Если требуется еще больший период нахождения процессора в спящем состоянии, то реализовать это можно, перенаправив сигнал прерывания от Sleep-таймера на линию GOE [7]. Далее этот сигнал может быть подан на цифровой блок, работающий в режиме счетчика или таймера. Отсчитав необходимое число сигналов, цифровой блок может сгенерировать собственный сигнал прерывания, который и выведет процессор из спящего режима. За перенаправление сигнала от Sleep-таймера отвечает бит SLPINT в регистре OSC_GO_EN.

При разработке устройства с батарейным питанием следует использовать повышающий регулятор напряжения SMP (Switch Mode Pump). Его использование существенно продлит время автономной работы, причем этот регулятор может быть использован и для питания других схем устройства ([5]). Однако следует иметь в виду, что существует небольшой «подводный камень» при одновременном использовании SMP и спящего режима процессора. Дело в том, что по умолчанию в спящем режиме отключается схема формирования опорного напряжения (Bandgap reference). Эта схема необходима для работы детектора падения напряжения питания LVD, от которого, в свою очередь, зависит работа схемы SMP. В результате повышающий регулятор напряжения перестает работать, и чип PSoC выключается. Чтобы этого не происходило, необходимо установить бит No Buzz в регистре OSC_CR0. Это предотвратит выключение схемы опорного напряжения в спящем режиме.

Для уменьшения потребляемой мощности можно выключить функцию удвоения тактовой частоты либо в режиме редактора структуры системы в PSoC Designer (строка «SysClk*2 Disable» в настройках глобальных ресурсов), либо установкой бита SYSCLKX2DIS в регистре OSC_CR2. Это позволяет уменьшить потребляемый ток примерно на 1 мА.

Если нет необходимости в частоте 24 МГц, и это позволяет версия микросхемы PSoC, то можно использовать режим генерации пониженной частоты (6 или 12 МГц в зависимости от чипа) путем установки бита SLIMO в регистре CPU_SCR1. Помимо этого, необходимо загрузить в регистр IMO_TR новое калибровочное значение для генератора. Сделать выбор пониженной частоты можно и в PSoC Designer.

Если используется внешний источник системной тактовой частоты (контакт P1[4]), то для снижения энергопотребления можно отключить внутренний генератор установкой бита IMODIS в регистре OSC_CR2. Для уменьшения уровня электромагнитных помех следует установить максимальный коэффициент деления для системных тактовых частот VC1, VC2, VC3, если они не используются.

Аналоговая периферия

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

За энергопотребление всего массива аналоговых блоков отвечают биты PWR регистра ARF_CR (табл. 1), позволяющие либо отключить массив целиком, либо отключить только блоки на переключаемых конденсаторах.

Таблица 1. Управление энергопотреблением массива аналоговых блоков (регистр ARF_CR)
Биты PWR регистра ARF_CR Мощность источника опорного напряжения Блоки CT Блоки SC
000 Все выключено
001 Низкая (Low) Включены Выключены
010 Средняя (Medium) Включены Выключены
011 Высокая (High) Включены Выключены
100 Все выключено
101 Низкая (Low) Включены Выключены
110 Средняя (Medium) Включены Выключены
111 Высокая (High) Включены Выключены

Кроме того, этот регистр позволяет регулировать мощность источника опорных напряжений в пределах трех градаций — низкая, средняя и высокая мощность (low, medium и high соответственно).

Регистр ARF_CR содержит также бит HBE (High Bias Enable), который увеличивает потребляемую мощность всего аналогового массива вдвое, но и увеличивает скорость работы операционных усилителей.

Начальное состояние регистра ARF_CR можно задать в среде PSoC Designer в режиме редактора структуры системы (Device Editor, Interconnection View) в поле настроек глобальных ресурсов (Global Resources).

В этом поле строка «Analog Power» отвечает за состояние битов PWR, а строка «Op-Amp Bias» — за состояние бита HBE. В дальнейшем в процессе работы программы это состояние может быть изменено разработчиком при необходимости.

За настройки энергопотребления каждого блока в отдельности отвечают биты PWR регистров ASCxxCR3, ASDxxCR3 (для блоков SC) и ACBxxCR2 (для блоков CT) — табл. 2.

Таблица 2. Управление энергопотреблением каждого аналогового блока
Биты PWR регистров ACBxxCR2, ASCxxCR3, ASDxxCR3 Уровень мощности блока Бит HBE регистра ARF_CR Потребляемый ток, мкА
00 Выключен (Off)    
01 Низкая (Low) 0 150
1 300
10 Средняя (Medium) 0 600
1 1200
11 Высокая (High) 0 2400
1 4800

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

В отличие от регистра ARF_CR, для настроек энергопотребления пользовательских модулей удобно использовать соответствующие API-функции, которые и управляют регистрами ACBxxCR2, ASCxxCR3 и ASDxxCR3.

Для снижения среднего уровня энергопотребления следует отключать те модули, которые не используются в данный момент. Понизить энергопотребление может также использование специальных низкопотребляющих компараторов, которые присутствуют в блоках CT. Бит LPCMPEN регистра ACBxxCR3 отвечает за включение компаратора с низким потреблением питания. Этот компаратор подключен параллельно основному операционному усилителю блока. Использование этого компаратора оправдано в проектах, где низкое потребление питания является более важным, чем низкий уровень шумов и напряжения смещения. Так как выход компаратора подключен к выходу основного операционного усилителя, то только один из них может быть включен.

Отключить главный операционный усилитель можно установкой битов PWR[1:0] регистра ACBxxCR2 в 00b или установкой битов PWR[2:0] регистра ARF_CR в x00b.

Аналоговая подсистема PSoC включает в себя выходные аналоговые буферы, транслирующие сигнал от столбца аналоговых блоков к контактам микросхемы. Управляются данные буферы регистром ABF_CR0. Биты ABUFxEN этого регистра включают или выключают выходные аналоговые буферы, а бит PWR управляет мощностью выходных аналоговых буферов (0 — низкая мощность, 1— высокая). Для минимизации энергопотребления рекомендуется использовать режим высокой мощности выходных буферов только для сигналов с частотой свыше 50 кГц.

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

Цифровая периферия

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

Поскольку внутренние тактовые частоты в спящем режиме отключены, то функционировать будут только те цифровые блоки, работа которых зависит от внутренней частоты 32К, либо от внешних тактовых частот. Сэкономить энергию позволит также и отключение неиспользуемых контактов ввода-вывода. Такие контакты, если это позволяют настройки, следует перевести в режим High Impedance Analog, что отключит триггеры Шмитта в цифровых входных путях. Кроме того, следует проанализировать проект целом на предмет работы в различных ситуациях контактов ввода/вывода, сконфигурированных в режим с открытым стоком (Open Drain) или в режим с резистивной подтяжкой (Pull-Up, Pull-Down). Вполне вероятно, что такие контакты не обязательно должны находиться в этих режимах все время, поэтому их отключение также может сказаться на среднем уровне энергопотребления.

Оптимизация программы

Прежде чем приступать к оптимизации проекта, необходимо оценить максимальный уровень энергопотребления в зависимости от тактовых частот, настроек глобальных ресурсов и числа включенных аналоговых и цифровых блоков. В этом может помочь электронная таблица формата Excel, входящая в состав документа [4], которую можно скачать с сайта Cypress.

Исходя из вышеперечисленных особенностей PSoC следует, что алгоритм программы должен быть построен таким образом, чтобы система находилась в спящем состоянии как можно дольше при отсутствии внешних воздействий. При этом максимально возможное количество периферии должно быть отключено. Процессор должен выходить из спящего состояния либо по возникновению прерывания от портов ввода/вывода, либо от оставшейся включенной периферии, либо просыпаться через фиксированные промежутки времени по прерыванию от Sleep-таймера для выполнения каких-либо периодических действий.

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

Применение языка Си оправдано, если требуется выполнение сложных математических вычислений, поскольку функции математической библиотеки, входящей в состав Си-компилятора, оптимизированы по скорости выполнения. Хотя, с другой стороны, если позволяет объем флэш-памяти, не следует забывать и о табличном способе задания функций — при этом выполнение функции сведется всего лишь к выполнению ассемблерных инструкций index или romx.

Продолжение следует

Литература

  1. PSoC™ Mixed Signal Array Technical Reference Manual (TRM). Version 2.20.
  2. Assembly Language User Guide.
  3. Килочек Д. Проектирование на программируемых системах на кристалле PSoC Cypress // Компоненты и технологии.
    2006. № 4, 6, 8, 12.
  4. Ozbek O. AN2216. Estimating PSoC™ Power Consumption.
  5. Grygorenko V. AN2349. Increasing Output Power of a Switch Mode Pump.
  6. Lee M. AN2360. Power Consumption and Sleep Considerations in Capacitive Sensing Applications.
  7. Vallis D. AN2354. Practical Application of the PSoC® Sleep Timer.
  8. Seguine D. AN2405. PSoC® IO Power Structure—Determining VOH and VOL at Partial Load.

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

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