Применение модуля захвата, сравнения, ШИМ в контроллерах Microchip

№ 3’2004
PDF версия
На конкретных примерах рассматривается применение модулей захвата, сравнения и ШИМ, имеющихся в контроллерах производства компании Microchip.

Фирма Microchip продолжает разработку и производство передовых продуктов, предоставляющих пользователю большую функциональность, гибкость и надежность. Микроконтроллеры PICmicro используются во многих приборах повседневного спроса — от стиральных машин и автомобильной техники до медицинских приборов. Модуль сравнения, захвата и ШИМ (ССР), который присутствует во многих микроконтроллерах Microchip, используется в основном для измерения и формирования импульсных сигналов. Расширенный модуль ССР (enhanced CCP — ECCP), имеющийся во многих новых микроконтроллерах, предоставляет дополнительные возможности для формирования широтно-импульсной модуляции (ШИМ). Модуль ЕССР обеспечивает поддержку управления мостовыми и полумостовыми схемами управления, программируемое время задержки переключения (для предотвращения протекания сквозных токов через внешние силовые ключи, связанного с их разным временем переключения) и возможность автоматического выключения ШИМ при аварийных ситуациях. Модули ССР и ЕССР имеют широкие области применения. Эта статья описывает основные принципы использования данных модулей в каждом режиме, а также «нестандартные» варианты использования в практических решениях.

 

Модуль захвата (capture)

В режиме захвата 16-битное значение таймера (Timer 1) захватывается в регистр CCPRxH:CCPRxL при каждом событии на входе CCPx. Событие для захвата задается в регистре CCPxCON<3:0>:

  • каждый спад входного сигнала;
  • каждый фронт входного сигнала;
  • каждый 4-й фронт входного сигнала;
  • каждый 16-й фронт входного сигнала.

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

Пример 1. Измерение периода дискретного сигнала (рис. 1).

  1. Конфигурируем управляющие биты CCPxM3:CCPxM0 (CCPxCON<3:0>) на захват по каждому фронту входного сигнала.
  2. Конфигурируем предделитель Timer1 так, чтобы не происходило переполнение таймера за измеряемое время.
  3. Разрешаем прерывание от CCP (бит CCPxIE).
  4. При возникновении прерывания:
  • вычитаем сохраненное время (t1) из захваченного значения времени (t2) и сохраняем результат периода Т;
  • сохраняем захваченное время t2.
Рис. 1. Измерение периода
Рис. 1. Измерение периода

Пример 2. Измерение периода с усреднением результата (рис. 2).

Усреднение результата измерений часто требуется при зашумленном входном сигнале. Модуль ССР в PIC-контроллерах Microchip позволяет выполнить усреднение с минимальными программными издержками.

  1. Конфигурируем управляющие биты CCPxM3:CCPxM0 (CCPxCON<3:0>) на захват по каждому 16-му фронту входного сигнала.
  2. Конфигурируем предделитель Timer1 так, чтобы не происходило переполнение таймера за измеряемое время.
Рис. 2. Измерение периода с усреднением результата
Рис. 2. Измерение периода с усреднением результата
  1. Разрешаем прерывание от CCP (бит CCPxIE).
  2. При возникновении прерывания:
  • вычитаем сохраненное время (t1) из захваченного значения времени (t2) и сохраняем результат 16 периодов (168Т);
  • сохраняем захваченное время t2;
  • сдвигаем полученный результат на 4 шага вправо (деление на 16) — получаем усредненный результат за 16 периодов.

Пример 3. Измерение длительности импульса (рис. 3).

  1. Конфигурируем управляющие биты CCPxM3:CCPxM0 (CCPxCON<3:0>) на захват по каждому фронту входного сигнала.
  2. Конфигурируем предделитель Timer1 так, чтобы не происходило переполнение таймера за время измеряемого импульса.
  3. Разрешаем прерывание от CCP (бит CCPxIE).
  4. При возникновении прерывания сохраняем захваченное значение таймера (t1) и переконфигурируем захват по спаду импульса.
  5. При следующем прерывании вычитаем из t1 новое захваченное значение. Результат будет соответствовать длительности импульса.
Рис. 3. Измерение длительности импульса
Рис. 3. Измерение длительности импульса

Пример 4. Измерение скважности импульсов (рис. 4).

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

  1. Конфигурируем управляющие биты CCPxM3:CCPxM0 (CCPxCON<3:0>) на захват по каждому фронту входного сигнала.
  2. Конфигурируем предделитель таймера 1 так, чтобы не происходило переполнение таймера за время TMAX (максимально возможная длительность периода).
  3. Разрешаем прерывание от CCP (бит CCPxIE).
  4. При возникновении прерывания сохраняем захваченное значение таймера (t1) и переконфигурируем захват по спаду импульса.
  5. При следующем прерывании вычитаем из t1 новое захваченное значение t2. Этот результат будет соответствовать длительности импульса (W).
Рис. 4. Измерение скважности импульсов
Рис. 4. Измерение скважности импульсов
  1. Переконфигурируем модуль ССР на захват по следующему фронту импульса.
  2. При возникновении прерывания вычитаем из t1 новое захваченное значение t3. Этот результат будет соответствовать периоду (Т).
  3. Разделить значение T на W — получим значение скважности.
  4. Повторять пп. 4–8 для получения следующих значений скважности.

Пример 5. Измерение скорости вращения энкодера.

Скорость вращения энкодера может быть измерена разными способами. Два наиболее часто встречающихся типа датчиков в энкодерах — это оптический сенсор и датчики Холла. Оптические энкодеры используют инфракрасный светодиод и датчик, а также колесо с прорезями, модулирующими световой поток (рис. 5). Другой тип использует чувствительные к магнитному полю датчики Холла, с помощью которых можно определять положение магнитов в электромоторе или постоянных магнитов, закрепленных на вращающемся объекте (рис. 6). Такой датчик выдает один или несколько импульсов на один оборот объекта. На рис. 7 показаны временные диаграммы при разных скоростях вращения. При увеличении скорости вращения период импульсов и их длительность становятся меньше. Период и длительность импульса пропорциональны скорости вращения. Для получения большей разрешающей способности лучше использовать датчики с несколькими импульсами на 1 оборот. Описание измерения периода для определения скорости вращения энкодера см. в примере 1, а метод усреднения измерений периода — в примере 2.

Рис. 5. Оптический энкодер
Рис. 5. Оптический энкодер
Рис. 6. Энкодер с датчиками Холла
Рис. 6. Энкодер с датчиками Холла
Рис. 7. Выход энкодера при разных скоростях вращения
Рис. 7. Выход энкодера при разных скоростях вращения

Пример 6. Измерение периода аналогового сигнала.

Микроконтроллер со встроенным аналоговым компаратором и модулем CCP или ECCP может быть легко использован для измерения периода аналогового сигнала. На рис. 8 приведен пример схемы с использованием периферийных модулей контроллера PIC16F684. Резисторы R3 и R4 задают порог срабатывания компаратора. При пересечении входным сигналом уровня порога, выходной уровень напряжения компаратора переключается между 0 и 1. Резисторы R1 и R2 задают гистерезис для предотвращения «дребезга#» при равенстве порогового и входного напряжений. Рис. 9 демонстрирует эффект гистерезиса.

Модуль ССР конфигурируется в режим захвата для измерения периода на выходе компаратора.

Рис. 8. Схема измерения периода аналогового сигнала
Рис. 8. Схема измерения периода аналогового сигнала
Рис. 9. Диаграммы в контрольных точках
Рис. 9. Диаграммы в контрольных точках

Модуль сравнения (compare)

В режиме сравнения 16-разрядные значения регистра CCPRx сравниваются с состоянием таймера. При совпадении происходит прерывание и вывод контроллера CCPx:

  • устанавливается в 1;
  • устанавливается в 0;
  • состояние не меняется;
  • переключается конфигурация модуля.

Реакция вывода определяется битами управляющего регистра CCPxCON<3:0>.

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

Таймер 1 обычно не сбрасывается в 0 при возникновении прерывания от модуля CCP в режиме сравнения, кроме случая конфигурации модуля в режим Триггера специального события. В этом режиме, когда значения таймера и регистра CCPRx равны, формируется прерывание, таймер 1 очищается и автоматически запускается преобразование АЦП (если это разрешено).

Работа модуля в режиме сравнения подобна функции таймера в обычном секундомере. В случае секундомера определенное время загружается в часы и производится отсчет в обратном порядке с установленного времени до достижения нуля. Отличие работы таймера в режиме сравнения заключается в том, что время отсчитывается от нуля до установленного значения. Этот способ полезен для того, чтобы произвести определенные действия в точные интервалы времени. Обычный режим работы таймера может использоваться для исполнения тех же самых функций, однако в этом случае таймер нужно будет перезагружать каждый раз. Режим сравнения также может автоматически изменять состояние вывода CCPx.

Пример 7. Формирование модулирующих импульсов для различных форматов передачи данных.

Модуль ССР в режиме сравнения может использоваться для формирования различных форматов модуляции. На рис. 10–12 приведены различные варианты представления 0 и 1 в различных форматах передачи данных. Передача данных похожа на асинхронную передачу данных, содержащую СТАРТ-бит, восемь информационных бит и СТОП-бит. Время ТЕ является базовым временным элементом в каждом формате модуляции и задает скорость передачи данных. Триггер специального события может использоваться для формирования времени ТЕ. При возникновении прерывания от CCP подпрограмма обработки прерывания формирует требуемый формат передачи данных.

Рис. 10. Широтно-импульсная (ШИМ) модуляция
Рис. 10. Широтно-импульсная (ШИМ) модуляция
Рис. 11. Манчестерская модуляция
Рис. 11. Манчестерская модуляция
Рис. 12. Модуляция положением импульса
Рис. 12. Модуляция положением импульса

Пример 8. Формирование 16-разрядной ШИМ.

Обычно стандартные модули ШИМ имеют разрядность в 10 бит. Модуль ССР в режиме сравнения может использоваться для формирования ШИМ с 16-разрядной точностью. Для этого:

  1. Настраиваем модуль ССР на установку вывода ССРх в «0» в режиме сравнения.
  2. Разрешаем прерывание от Timer1.
  3. Записываем значение периода в Timer1 и его предделитель.
  4. Устанавливаем длительность импульса в регистр сравнения CCPRxL и CCPRxH.
  5. Устанавливаем выход ССРх в «1» при возникновении прерывания от переполнения Timer1. Следует заметить, что маленькие значения длительности импульса не могут быть сформированы из-за конечного времени обработки прерывания от Timer1. Это не сказывается на периоде формируемого сигнала, так как время выполнения прерывания от периода к периоду будет одинаковым.

Таймер Timer1 имеет четыре значения предделителя: 1:1, 1:2, 1:4 и 1:8. Возможная формируемая частота рассчитывается по формуле:

Для микроконтроллера, работающего на частоте FOSC = 20 МГц, значения частот FPWM будут составлять 76,3 Гц, 38,1 Гц, 19,1 Гц и 9,5 Гц.

Пример 9. Последовательное измерение с помощью АЦП.

Триггер специального события в режиме сравнения (при совпадении значения Timer1 и регистра сравнения CCPRxL и CCPRxH) может формировать периодические прерывания и дополнительно автоматически запускать измерения АЦП. Покажем на примере, как организовать последовательный опрос АЦП в четко определенные моменты времени.

Пример. Микроконтроллер PIC16F684 работает от внутреннего генератора, сконфигурированного на работу с частотой 8 МГц. Нужно последовательно опрашивать каналы АЦП и измерять входное напряжение на выводах RA0, RA1 и RA2 через каждые 30 мс.

Таймер 1 переполняется через время TOSC × 65536 × 4 × предделитель. Для предделителя 1:1 таймер переполнится через 32,8 мс. Значение регистра CCPR1 рассчитывается по формуле:

Модуль ЕССР должен быть сконфигурирован в режим триггера специального события. Этот режим формирует прерывание при совпадении значения Timer1 и регистра сравнения CCPRxL и CCPRxH. Для этого режима CCP1CONТ = ‘b00001011’. При возникновении прерывания таймер автоматически очистится и установит бит GO в регистре ADCON0 для запуска преобразования АЦП. Когда произойдет прерывание от модуля ECCP, нужно выбрать следующий вход АЦП с помощью регистра ADCON0.

Рис. 13. Формирование 16-разрядной ШИМ
Рис. 13. Модуляция положением импульса
Рис. 14. Последовательное измерение напряжений
Рис. 14. Модуляция положением импульса

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

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