Модуль ePWM (ШИМ). Назначение, внутренняя архитектура и возможности

Содержание

Слайд 2

Назначение модуля ШИМ

Модуль ePWM (Enhanced Pulse-Width Modulator) позволяет генерировать ШИМ-сигнал сложной формы

Назначение модуля ШИМ Модуль 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 выполняет функцию создания несущего сигнала для ШИМ и

Подмодуль счётчика Подмодуль Time-Base Submodule выполняет функцию создания несущего сигнала для ШИМ
фактически представляет собой счетчик. Основные регистры для настройки этого подмодуля (в скобках указано значение по умолчанию):

 

Здесь приведены не все доступные регистры. С полным списком можно ознакомиться в соответствующей документации – SPRUGE9E

Слайд 6

Подмодуль счётчика

Поведение счётчика при разных настройках регистра TBCTL.bit.CTRMODE
Во всех примерах период равен

Подмодуль счётчика Поведение счётчика при разных настройках регистра TBCTL.bit.CTRMODE Во всех примерах
4 тактам: TBPRD = 4

CTRMODE = 0
(счёт вверх)

CTRMODE = 1
(счёт вниз)

CTRMODE = 2
(счёт вверх-вниз)

Бит TBSTS.bit.CTRDIR отображает текущее направление счёта:
1 – счёт вверх, 0 – счёт вниз

Слайд 7

Подмодуль сравнения

Подмодуль Counter Compare непрерывно проверяет текущее значение счётчика и сравнивает его

Подмодуль сравнения Подмодуль Counter Compare непрерывно проверяет текущее значение счётчика и сравнивает
с двумя заданными уставками. Когда счётчик сравнивает с этими уставками, подмодуль сравнения генерирует событие сравнения, то есть выдаёт импульс, означающий, что счётчик сравнялся с уставкой. По этим событиям другие подмодули могут предпринимать какие-либо действия (переключение вывода, запуск АЦП и пр.). Основные регистры настройки:

Слайд 8

Теневые регистры

Регистры, хранящие уставки сравнения CMPA и CMPB являются теневыми. Это значит,

Теневые регистры Регистры, хранящие уставки сравнения CMPA и CMPB являются теневыми. Это
что при записи в них какого-то значения уставки сравнения не обязательно сразу примут записанные значения. Момент фактического применения определяется регистром LOADAMODE/ LOADBMODE.
Однако можно настроить подмодуль сравнения так, чтобы уставки сравнения принимали записанное значение сразу же. Об этом можно прочитать в документации.

Слайд 9

Подмодуль сравнения

Данный рисунок демонстрирует работу подмодуля сравнения. Каждый раз, когда значение счётчика

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

В этот момент произошла перезагрузка текущего значения счётчика

Слайд 10

Подмодуль действия

Подмодуль Action Qualifier играет важнейшую роль в формировании выходного сигнала. Он

Подмодуль действия Подмодуль Action Qualifier играет важнейшую роль в формировании выходного сигнала.
определяет, какие события в какие действия должны быть преобразованы. Например «Событие «Счётчик равен уставке CMPA» должно установить высокий уровень канала А» и т.п.
События, для которых можно определить действия:
TBCTR == CMPA
TBCTR == CMPB
TBCTR == TBPRD
TBCTR == 0
Кроме того можно учитывать направление счёта, при котором произошло событие

Слайд 11

Подмодуль действия

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

Подмодуль действия Действия, совершаемые с каналами по событиям, настраиваются в регистрах подмодуля.
регистры, перечисленные в таблице, можно записать следующие значения:
0 – не предпринимать никаких действий, 1 – выдать высокий уровень на канал
2 – выдать низкий уровень на канал x, 3 – изменить уровень канала x (т.е. если был высокий, то станет низкий, и наоборот)
Для каналов A и B есть два одинаковых регистра AQCTLA и AQCTLB, которые определяют действия каналов A и B соответственно.

Слайд 12

Подмодуль действия

Подмодуль действия

Слайд 13

Подмодуль мёртвого времени

Подмодуль Dead Band позволяет вносить задержку на включение или выключение

Подмодуль мёртвого времени Подмодуль Dead Band позволяет вносить задержку на включение или
каналов A и/или B. Таким образом можно создать паузу между, например, отключением ключа в верхней стойке инвертора и включением верхнего, чтобы избежать протекания сквозных токов в стойке. Подразумевается, что оба ключа управляются каналами A и B одного модуля ePWM.
Кроме того этот модуль позволяет автоматически создавать на одном из каналов сигнал, комплиментарный другому.

Слайд 14

Подмодуль мёртвого времени

До подмодуля МВ

После подмодуля МВ

A

B

A

Рисунок демонстрирует результат настройки подмодуля мёртвого

Подмодуль мёртвого времени До подмодуля МВ После подмодуля МВ A B A
на генерацию комплиментарного сигнала канала B с добавлением мёртвого времени.
Как видно, модуль добавляет задержку на включение канала А и генерирует сигнал канала B, внося задержку между его включением и отключением канала А.
Модуль имеет очень гибкие и сложные настройки, поэтому они не здесь рассматриваются. Ознакомиться с ними можно в документации.

Слайд 15

Подмодуль запуска событий

Подмодуль Event Trigger позволяет генерировать прерывания и запускать АЦП по

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

Другие подмодули Кроме рассмотренных подмодулей, есть ещё и другие. Подмодуль Trip Zone
отключать силовые ключи при появлении определённого сигнала (низкого или высокого) на каком либо выводе микроконтроллера. На этот вывод, например, можно завести сигнал аппаратной аварии ключа.
Подмодуль PWM Chopper позволяет преобразовать высокий сигнал канала A или B в последовательность коротких импульсов.
Подмодуль Digital Compare обеспечивает интерфейс между модулем ePWM и компаратором и позволяет настраивать реакцию ePWM на сигналы компаратора.