Слайд 1Модуль ePWM (ШИМ)
Назначение, внутренняя архитектура и возможности
Слайд 2Назначение модуля ШИМ
Модуль ePWM (Enhanced Pulse-Width Modulator) позволяет генерировать ШИМ-сигнал
сложной формы с минимальным задействованием процессора.
ePWM модуль может изменять уровень
GPIO процессора в автоматическом режиме, без необходимости вручную задавать уровень сигнала. Каждый модуль может управлять двумя выводами. Всего в микроконтроллере F28035 есть 6 таких модулей.
Этот модуль имеет множество гибких настроек, позволяющих задать частоту и форму несущего сигнала, его синхронизацию с внешними сигналами, реакцию на возникновение аварийной ситуации, автоматическое управление двумя выводами в комплиментарном режиме с обеспечением мёртвого времени и множество других опций.
Выходами являются сигналы A и B, которые меняют свой уровень с высокого на низкий и наоборот в зависимости от настроек модуля ePWM. При помощи регистров мультиплицирования GPIO (GPxMUX) эти каналы могут быть выведены на разные выводы микроконтроллера.
Слайд 3Структура модуля ШИМ
Модуль ШИМ имеет сложную структуру и состоит из
множества подмодулей, каждый из которых имеет свою функцию: счетчик для
создания несущего сигнала, модуль сравнения уставки с несущим сигналом, модуль действия при сравнении, модуль мёртвого времени и другие.
Слайд 4Настройка модуля ШИМ
Под настройкой модуля ШИМ подразумевается настройка всех или
нескольких его подмодулей. Каждый подмодуль имеет по несколько регистров для
конфигурации. Все регистры подмодулей объединяются в группу регистров с названием «EPwmXRegs», где X означает номер модуля ePWM.
void initPWM (void) {
// Задать способ счёта "сверху вниз"
EPwm1Regs.TBCTL.bit.CTRMODE = TB_DOWN;
// Задать период счётчика равным 1000 тактов
EPwm1Regs.TBPRD = 1000;
// Отключать канал А при достижении счётчиком нуля
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
// Включать канал А при сравнении счётчика с уставкой А
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;
// Запускать АЦП при каждом достижении нуля
EPwm1Regs.ETSEL.bit.SOCAEN = 1;
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO;
EPwm1Regs.ETPS.bit.SOCAPRD = 1;
}
Слайд 5Подмодуль счётчика
Подмодуль Time-Base Submodule выполняет функцию создания несущего сигнала для
ШИМ и фактически представляет собой счетчик. Основные регистры для настройки
этого подмодуля (в скобках указано значение по умолчанию):
Здесь приведены не все доступные регистры. С полным списком можно ознакомиться в соответствующей документации – SPRUGE9E
Слайд 6Подмодуль счётчика
Поведение счётчика при разных настройках регистра TBCTL.bit.CTRMODE
Во всех примерах
период равен 4 тактам: TBPRD = 4
CTRMODE = 0
(счёт вверх)
CTRMODE
= 1
(счёт вниз)
CTRMODE = 2
(счёт вверх-вниз)
Бит TBSTS.bit.CTRDIR отображает текущее направление счёта:
1 – счёт вверх, 0 – счёт вниз
Слайд 7Подмодуль сравнения
Подмодуль Counter Compare непрерывно проверяет текущее значение счётчика и
сравнивает его с двумя заданными уставками. Когда счётчик сравнивает с
этими уставками, подмодуль сравнения генерирует событие сравнения, то есть выдаёт импульс, означающий, что счётчик сравнялся с уставкой. По этим событиям другие подмодули могут предпринимать какие-либо действия (переключение вывода, запуск АЦП и пр.). Основные регистры настройки:
Слайд 8Теневые регистры
Регистры, хранящие уставки сравнения CMPA и CMPB являются теневыми.
Это значит, что при записи в них какого-то значения уставки
сравнения не обязательно сразу примут записанные значения. Момент фактического применения определяется регистром LOADAMODE/ LOADBMODE.
Однако можно настроить подмодуль сравнения так, чтобы уставки сравнения принимали записанное значение сразу же. Об этом можно прочитать в документации.
Слайд 9Подмодуль сравнения
Данный рисунок демонстрирует работу подмодуля сравнения. Каждый раз, когда
значение счётчика совпадает с одной из уставок, генерируется соответствующий импульс.
В
этот момент произошла перезагрузка текущего значения счётчика
Слайд 10Подмодуль действия
Подмодуль Action Qualifier играет важнейшую роль в формировании выходного
сигнала. Он определяет, какие события в какие действия должны быть
преобразованы. Например «Событие «Счётчик равен уставке CMPA» должно установить высокий уровень канала А» и т.п.
События, для которых можно определить действия:
TBCTR == CMPA
TBCTR == CMPB
TBCTR == TBPRD
TBCTR == 0
Кроме того можно учитывать направление счёта, при котором произошло событие
Слайд 11Подмодуль действия
Действия, совершаемые с каналами по событиям, настраиваются в регистрах
подмодуля. В регистры, перечисленные в таблице, можно записать следующие значения:
0
– не предпринимать никаких действий, 1 – выдать высокий уровень на канал
2 – выдать низкий уровень на канал x, 3 – изменить уровень канала x (т.е. если был высокий, то станет низкий, и наоборот)
Для каналов A и B есть два одинаковых регистра AQCTLA и AQCTLB, которые определяют действия каналов A и B соответственно.
Слайд 13Подмодуль мёртвого времени
Подмодуль Dead Band позволяет вносить задержку на включение
или выключение каналов A и/или B. Таким образом можно создать
паузу между, например, отключением ключа в верхней стойке инвертора и включением верхнего, чтобы избежать протекания сквозных токов в стойке. Подразумевается, что оба ключа управляются каналами A и B одного модуля ePWM.
Кроме того этот модуль позволяет автоматически создавать на одном из каналов сигнал, комплиментарный другому.
Слайд 14Подмодуль мёртвого времени
До подмодуля МВ
После подмодуля МВ
A
B
A
Рисунок демонстрирует результат настройки
подмодуля мёртвого на генерацию комплиментарного сигнала канала B с добавлением
мёртвого времени.
Как видно, модуль добавляет задержку на включение канала А и генерирует сигнал канала B, внося задержку между его включением и отключением канала А.
Модуль имеет очень гибкие и сложные настройки, поэтому они не здесь рассматриваются. Ознакомиться с ними можно в документации.
Слайд 15Подмодуль запуска событий
Подмодуль Event Trigger позволяет генерировать прерывания и запускать
АЦП по событиям, приходящим от модуля сравнения (достижение счётчиком нуля
или периода, сравнение счётчика с уставками). Это похоже на поведение подмодуля действия с той разницей, что вместо изменения состояния каналов A и B запускается АЦП или прерывание.
Кроме перечисленных событий, триггером для запуска может служить ещё и сигнал от компаратора (это одно из периферийных устройств микроконтроллера).
Слайд 16Подмодуль запуска событий
В таблице ниже перечислены основные и наиболее часто
используемые регистры для настройки этого модуля.
Возможные события для регистров SOCASEL
и INTSEL: 0 – событие от компаратора,
1 –TBCTR == 0, 2 – TBCTR == TBPRD, 3 – TBCTR == 0 или TBCTR == TBPRD,
4 – TBCTR == CMPA при счёте вверх, 5 – TBCTR == CMPA при счёте вниз,
6 – TBCTR == CMPB при счёте вверх, 7 – TBCTR == CMPB при счёте вверх.
Возможные варианты для регистров SOCAPRD и INTPRD: 0 – никогда не запускать АЦП / вызывать прерывание, 1 – делать это при каждом событии, 2 – делать это при каждом втором событии, 3 – делать это при каждом третьем событии
Слайд 17Другие подмодули
Кроме рассмотренных подмодулей, есть ещё и другие.
Подмодуль Trip Zone
позволяет мгновенно отключать силовые ключи при появлении определённого сигнала (низкого
или высокого) на каком либо выводе микроконтроллера. На этот вывод, например, можно завести сигнал аппаратной аварии ключа.
Подмодуль PWM Chopper позволяет преобразовать высокий сигнал канала A или B в последовательность коротких импульсов.
Подмодуль Digital Compare обеспечивает интерфейс между модулем ePWM и компаратором и позволяет настраивать реакцию ePWM на сигналы компаратора.
Слайд 18Прерывания модуля ШИМ
Прерывания от подмодуля Trip Zone имеют более высокий
приоритет, чем другие прерывания ePWM.