microchip

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

Применение модуля захвата, сравнения, ШИМ в контроллерах 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.

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

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

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

вычитаем сохраненное время (t1) из захваченного значения времени (t2) и сохраняем результат 16-ти периодов (16?Т);
сохраняем захваченное время t2;
сдвигаем полученный результат на 4 шага вправо (деление на 16) – получаем усредненный результат за 16 периодов.

 

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

 

Пример #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. Возможная формируемая частота рассчитывается по формуле:

FPWM = FOSC/ (65536 ? 4 ? предделитель)

Для микроконтроллера работающего на частоте 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 рассчитывается по формуле:

CCPR1 = время / (TOSC ? 4 ? предделитель) = 30мсек / (125нсек ? 4 ? 1) = 6000 = 0хЕА60

Тогда CCPR1L = 0x60, CCPR1H = 0xEA

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

 

 

 

©2007 Гамма-Санкт-Петербург