Портирование приложений с семейства PIC18 на PIC24F. 2.3. Модули сравнения, захвата, ШИМ

2.3. Модули сравнения/захвата/ШИМ (CCPи ECCP)
Модули захвата/сравнения/ШИМ семейства PIC24F предоставляют возможности, аналогичные подобным модулям в семействе PIC18, однако реализация функций значительно отличается. Модуль захвата может сохранять мгновенное значение выбранного таймера по тем же событиям на соответствующем выводе. Модуль сравнения может генерировать определенные временные последовательности на выводе микроконтроллера, а так же запускать аналого-цифровое преобразование (Special Event Trigger). Функция генерирования ШИМ на нескольких выводах микроконтроллера является одним из режимов работы модуля сравнения.

Сравнение модулей сравнения/захвата/ШИМ семейств PIC18 и PIC24F приведено в табл. 21.
Таблица 21. Сравнение модулей сравнения/захвата/ШИМ семейств PIC18 и PIC24F


Параметры

PIC18

PIC24F

Выбор источника (таймера)

да

да

Предделитель модуля захвата

1, 4, 16

каждый фронт, 1, 4, 16

FIFO буфер модуля захвата

нет

да, четыре уровня

Разрядность регистра захвата

16-бит

16-бит

Выбор количества событий захвата для генерации прерывания

нет

да

Останов в режиме IDLE

нет

да

Устанавливаемый на выводе контроллера уровень в момент события сравнения

высокий, низкий, инвертирование

высокий, низкий, инвертирование

Триггер специального события

да

да

Количество выводов ШИМ на один модуль

4

1

Автоматическое отключение ШИМ

да

да

Поддержка полумостовой и мостовой схемы генерации ШИМ

да

да

Защита от сквозного тока мощных ключей (dead-time pause)

да

да

Для работы модулей захвата в семействе PIC24F используются таймеры TIMER2 и TIMER3, в то время как в семействе PIC18 – TIMER1 и TIMER3. Событие захвата может генерироваться каждый передний, задний фронт, каждый 4-й передний и каждый 16-передний фронт на соответствующем входе контроллера ICx.
Модуль сравнения обоих архитектур может работать в режиме одиночного сравнения (Single Compare), при котором выбирается начальное состояние на выходе модуля OCx. При возникновении события равенства выбранного таймера и регистра сравнения состояние выхода может устанавливаться в логический ноль или единицу или инвертироваться. В любом случае при возникновении события устанавливается флаг прерывания.
Все режимы генерации ШИМ семейства PIC18 поддерживаются микроконтроллерами PIC24F. Основное различие в том, что каждый модуль сравнения семейства PIC24F имеет только один выход. Таким образом, для управления полумостовой схемой требуется наличие двух свободных модулей сравнения, а для управления мостовой схемой – четырех. Активный выходной уровень каждого модуля сравнения устанавливается битами OCM2:OCM0 (OCxCON<2:0>).
Режим генерации ШИМ семейства PIC24F является расширением режима одиночного сравнения. Дополнением являются выводы аппаратной защиты (Fault) OCFA и OCFB. Подобно модулю ШИМ в PIC18 длительность активного уровня определяет регистр OCxR, который перезагружается значением в регистре OCxRS после каждого события совпадения значения таймера и OCxR. Это событие так же устанавливает флаг соответствующего прерывания. Период ШИМ как в PIC18, так и в PIC24F устанавливается регистром соответствующего таймера PRx.
Функция автоматического отключения ШИМ PIC18 (auto-shutdown) так же реализована в PIC24F. Однако в отличие от вывода INTx используются выводы OCFA и OCFB. Низкий уровень на любом из этих выводов останавливает генерацию ШИМ и устанавливает флаг аварийного прерывания OCxIF. После того как уровень на входах OCFA и OCFB установиться в нормальное высокое состояние, необходимо переинициализировать регистр OCxCON для нормального продолжения работы.
Важной особенностью модуля ШИМ в микроконтроллерах PIC18 является возможность вставки паузы между активными уровнями на комплементарных выходах модуля в режиме полумоста. Эта задержка (dead-time) предназначена для исключения протекания сквозного тока в ключах полумостовой схеме и устанавливается битами PDC6:PDC0. Эта аппаратная возможность отсутствует в микроконтроллерах семейства PIC24F, так как каждый модуль сравнения имеет только один выход. Однако использование двух различных таймеров для двух модулей сравнения позволяет реализовать задержку переключения путем смещения начальных значений таймеров. Такое решение имеет свои преимущества – более точная настройка времени задержки переключения и широкий диапазон ее изменения.
В режиме управления полным мостом семейство PIC18 так же позволяет использовать режим с задержкой переключения. В этом случае задержка вставляется между моментами смены плеч моста. В семействе PIC18 эта задержка выбирается установкой постделителя TIMER2. Решение для PIC24F аналогично методу формирования задержки в полумостовой схеме, используется так же два таймера. В этом случае время задержки на переключение не ограничено разрядностью постделителя TIMER2 в семействе PIC18.

Таблица 21. Сравнение основных управляющих битов для модулей сравнения/захвата/ШИМ семейств PIC18 и PIC24F


Функция

PIC18

PIC24F

Выбор таймера модуля захвата

T3CCPx

ICTMR

Выбор таймера модуля сравнения

T3CCPx

OCTSEL

Состояния детектора аварии

ECCPxASE

OCFLT

Выбор режима работы модуля

CCPxM<3:0> (CCPxCON<3:0>)

ICM<2:0> - модуль захвата
OCM<2:0> - модуль сравнения

Конфигурация событий детектора аварии

ECCPxAS<2:0>

OCM<2:0>

2.3.1. Новые функции модулей захвата/сравнения/ШИМ в семействе PIC24F
Независимость модулей. Модули захвата и сравнения являются физически различными аппаратными устройствами и могут быть сконфигурированы независимо друг от друга.
Опциональный FIFO буфер событий модуля захвата. Позволяет захватывать до четырех значений таймера. Доступны флаги переполнения и опустошения буфера. Прерывание может генерироваться по заполнению буфера на произвольное количество уровней от 1 до 4.
Захват каждого фронта. Модуль захвата может быть сконфигурирован таким образом, чтобы событием являлся каждый фронт на входе модуля. В семействе PIC18 аппаратно возможен захват только фронтов одного типа (передний, задний).
Режим двойного сравнения. Наличие двух регистров сравнения OCxR и OCxRS позволяет генерировать два изменения уровня на выходе модуля за один период таймера. В том числе возможна генерация центральносмещенного сигнала ШИМ.

2.3.2. Функции модулей захвата/сравнения/ШИМ PIC18, отсутствующие в семействе PIC24F
Модуль сравнения в семействе PIC24F всегда устанавливает соответствующий уровень на выходе контроллера, в отличие от PIC18, модуль которого позволяет генерировать прерывание без изменения уровня на выходе. Кроме того, если в семействе PIC24F используется модуль сравнения, уровень на его выходе не может быть программно изменен (см. п. 2.1.2. «Функции портов семейства PIC18, не поддерживаемые в PIC24F»).
Аппаратный сброс прерывания генерации ШИМ в случае аварии в семействе PIC24F не поддерживается. Состояние флага аварии сбрасывается аппаратно, однако требуется программная инициализация регистра OCxCON для продолжения нормального функционирования.
В семействе PIC18 реверс тока для полного моста производится установкой одного бита Px1M. Так как для управления мостом микроконтроллерами семейства PIC24F необходимо использовать четыре физически независимых PWM-модуля, реверс производится иначе. Для этого необходимо осуществить переназначение таймеров, используя биты OCTSEL каждого модуля.
В семействе PIC18 значение постделителя таймеров TIMER2 и TIMER4 определяет количество периодов, после которых устанавливается флаг прерывания. Эта опция может быть использована в режиме генерации ШИМ. Так как таймеры PIC24F не имеют постделителей, то для осуществеления подобной функции необходимо применять программные методы подсчета периодов.
В семействе PIC24F аппаратная защита от аварии производится только с использованием выводов OCFA и OCFB – встроенный компаратор не может служить источником события аварии. В режиме аварийного останова генерации ШИМ выходы модулей PWM переводятся в высокоимпедансное состояние, в отличие от PIC18, модуль PWM которых позволяет задать определенные логические уровни на выходе.

2.3.3. Портирование типового приложения
Рассмотрим пример аналогичной конфигурации модулей для работы в режиме генерации ШИМ для двух архитектур.
Семейство PIC18:

  1. переключить выводы модуля PxA и PxB (если необходимо, то PxC и PxD) на вход, установив соответствующие биты в регистре TRIS;
  2. установить период ШИМ, загрузив регистр PRx требуемым значением;
  3. если необходимо использовать аппаратное аварийное отключение модуля:
    1. сбросить флаг индикации аварии ECCPxASE;
    2. установить источник события (FLTx, компаратор 1 или компаратор 2);
    3. дождаться установления переходных процессов и устойчивого состояния «нет аварии».
  1. сконфигурировать модуль для работы в требуемом режиме генерации ШИМ, записью необходимых значений в биты регистра CCPxCON:
    1. установить требуемую конфигурацию выходов (одиночный, полумост, мост) – биты PxM1:PxM0;
    2. установить требуемую полярность на выходах модуля – биты CCPxM3:CCPxM0.
  1. установить длительность активного уровня ШИМ (duty cycle), загрузив регистр CCPRxL и биты CCPxCON<5:4> требуемыми значениями;
  2. если модуль используется для управления полумостовой ключевой схемой установить требуемую величину задержки на переключение – биты ECCPxDEL<6:0>;
  3. если необходимо использовать аппаратное аварийное отключение модуля – сконфигурировать регистр ECCPxAS:
    1. выбрать источник автоматического отключения – биты EECPxAS2:ECCPxAS0;
    2. выбрать уровень на выходах модуля в режиме аварии – биты PSSxAC1:PSSxAC0 и биты PSSxBD1:PSSxBD0;
    3. установить бит ECCPxASE (ECCPxAS<7>);
    4. если источником события аварии является встроенный компаратор – сконфигурировать компаратор, загрузив необходимое значение в регистр CMCON. Сконфигурировать соответствующие выводы как аналоговые.
  1. если необходимо аппаратное восстановление работы модуля после аварии – установить бит PxRSEN (ECCPxDEL<7>);
  2. сконфигурировать и запустить таймер TMRx:
    1. сбросить флаг прерывания таймера TMRxIF;
    2. сконфигурировать предделитель таймера – биты TxCKPS (TxCON<1:0>)
    3. разрешить работу таймера, установив бит TMRxON (TxCON<2>)
  1. переключить выводы модуля генерации ШИМ на выход до начала следующего периода ШИМ:
    1. дождаться переполнения управляющего таймера (установки флага прерывания TMRxIF);
    2. переключить выводы модуля PxA, PxB (если необходимо, то PxC и PxD), сбросив соответствующие биты в регистре TRIS;
    3. сбросить бит ECCPxASE (ECCPxAS<7>).

Эквивалентная процедура конфигурации модуля ШИМ для семейства PIC24F будет выглядеть следующим образом:

  1. установить требуемый период сигнала, загрузив соответствующий регистр периода PRx;
  2. установить требуемую длительность активного уровня ШИМ, загрузив соответствующий регистр OCxRC;
  3. установить начальную длительность активного уровня ШИМ, загрузив соответствующий регистр OCxR;
  4. если необходимо разрешить прерывание по совпадению таймера с регистром периода и прерывание от модуля сравнения (это прерывание генерируется по событию аварии);
  5. сконфигурировать режим работы модуля PWM – биты OCM<2:0> (OCxCON<2:0>);
  6. установить пределитель базового таймера и разрешить его работу установкой бита TON (TxCON<15>).

2.3.4. Рекомендации по портированию приложения
Особое внимание следует обратить на то, что модули сравнения тактируются с частотой FOSC/2 в семействе PIC24F и с частотой FOSC/4 PIC18. Портирование приложения потребует пересчета значений регистров периода и длительности активного уровня ШИМ.
Максимальное разрешение ШИМ в семействе PIC18 составляет TOSC – один такт генератора, в семействе PIC24F – TCY – один командный такт.

Если режиме захвата базовый таймер инкрементируется каждый командный такт (работает без предделителя), то в случае возникновения события захвата в регистр модуля будет записано значение таймера большее на 1 или 2 чем в момент захвата фронта на входе модуля. Этот факт связан с аппаратной реализацией модуля и его следует учитывать для точного измерения длительностей входных импульсов. Если таймер работает с предделителем, то в регистр модуля захвата будет записано значение таймера в момент возникновения фронта на входе модуля.