Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы_по_Семисалову[1].DOC
Скачиваний:
32
Добавлен:
25.09.2019
Размер:
7.69 Mб
Скачать
  1. Модуль сср.

Функциональный модуль ССР может работать в одном из трех режимов: захват, сравнение и широтно-импульсный модулятор (ШИМ). В микроконтроллере PIC16F873 имеется два модуля: ССР1 и ССР2. Рассмотрим работу модуля ССР1.

Режим «захват»: Структурная схема модуля в этом режиме показана на рис. 11

Принцип работы модуля заключается в следующем: Предварительно запускается в работу таймер TMR1 в режиме синхронного счетчика. При поступлении на вход RC2 сигнала от какого либо внешнего источника содержимое счетчика таймера (регистры TMR1H – старший байт, TMR1L – младший байт) переписывается в регистр модуля ССР1 (регистры CCPR1H– старший байт, CCPR1L– младший байт). Одновременно формируется флаг прерывания –CCP1IF от модуля CCP1 (см. раздел «регистры состояния …» - разряд 2 регистра PIR1). По этой команде содержимое регистра модуля должно быть прочитано, а флаг прерывания программно сброшен. Если содержимое регистра не будет прочитано, то оно будет потеряно при приходе следующего входного импульса. Содержимое счетчика таймера TMR1 не изменяется (таймер продолжает счет)

Перед началом работы модуля ССР1 его необходимо настроить, для чего выполняются следующие операции:

- настройка и пуск таймера TMR1 (см. раздел «Таймеры» ),

- настроить вывод RC2 микроконтроллера на вход (записать 1 в разряд 2 регистра TRISC – адрес 87h),

- запрограммировать регистр CCP1CON в соответствии с выбранным режимом (см. таблицу 18

:

Таблица 18.

Номера разрядов

3

2

1

0

Обозначение сигналов

CCO1M3

CCP1M2

CCP1M1

CCP1M0

С помощью разрядов 3 – 0 регистра CCP1CON (адрес 17h, 1Dh) задаются следующие режимы работы модуля:

0000 – модуль выключен (сброшен),

0100 – модуль включен, захват по каждому заднему фронту входного сигнала,

0101 – модуль включен, захват по каждому переднему фронту входного сигнала,

0110 – модуль включен, захват по переднему фронту каждого 4-го входного сигнала,

0111 – модуль включен, захват по переднему фронту каждого 16-го входного сигнала

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

Режим сравнения.

В этом режиме производится сравнение содержимого регистра модуля с содержимым счетчика таймера TMR1. При совпадении этих данных формируется сигнал прерывания –CCP1IF ( устанавливается «1» во втором разряде регистра PIR1) и в зависимости от выбранного подрежима устанавливается соответствующий сигнал на выводе RC2. Структурная схема модуля ССР1 в этом режиме показана на рис. 12.

Подрежимы работы модуля устанавливаются разрядами <3:0> регистра CCP1CON:

1000 – сравнение, вывод RC2 = 1, устанавливается флаг прерывания CCP1IF,

1001 – сравнение, вывод RC2 = 0, устанавливается флаг прерывания CCP1IF,

1010 – сравнение, вывод RC2 не меняется, устанавливается флаг CCP1IF,

1011 – сравнение, устанавливается триггер специальных функций, устанавливается флаг прерывания CCP1IF, сбрасывается счетчик таймера TMR1.

Настройка модуля в этом режиме производится в следующей последовательности:

- настройка вывода RC2 на выход («0» во 2-ой разряд регистра TRISC),

-настройка таймера TMR1,

- выбор подрежима установкой разрядов 3-0 регистра CCP1CON.

Момент совпадения содержимого счетчиков модуля и таймера TMR1 фиксируется установкой флага прерываний, который после отработки подпрограммы прерывания должен быть сброшен программным способом.

Режим широтно-импульсного преобразователя (ШИМ).

В режиме ШИМ вывод RC2 микроконтроллера используется в качестве выхода 10-разрядного широтно-импульсного модулятора. Структурная схема модуля в этом режиме показана на рис. 13.

Работает модуль в этом режиме следующим образом. Главной задачей модуля является выдача на вывод RC2 сигнала, форма которого показана на рис. Сигнал представляет собой импульсную последовательность с заданной частотой и заданной длительностью импульса. Заданная частота формируется таймером TMR2, в который записывается число, соответствующее периоду ШИМ. Это число предварительно записывается в регистр PR2 и в процессе работы модуля непрерывно сравнивается с состоянием счетчика таймера.

При совпадении этих значений происходит сброс счетчика таймера и установка в «1» выходного RS- триггера, формируя таким образом начало импульса ШИМ.

Длительность импульса задается 10-разрядным двоичным кодом, который записывается в регистр CCPR1L – младшая часть кода и разряды <5:4> регистра CCP1CON - старшая часть кода. В процессе работы модуля содержимое регистров CCPR1L : CCP1CON <5:4> переписывается в буфер, образованный регистром CCPR1H и двухразрядной внутренней защелкой. Содержимое буфера непрерывно сравнивается с содержимым счетчика таймера TMR2. При их совпадении сбрасывается RS-триггер, формируя таким образом на выводе RC2 уровень сигнала «0». Ввод очередного значения длительности и, соответственно, пуск схемы сравнения осуществляется только после срабатывания схемы сравнения триггера TMR2 с регистром PR2. Для правильной работы модуля в режиме ШИМ двоичный код в регистре PR2 должен всегда быть больше кода в регистрах CCPR1L:<5:4> CCP1CON, в противном случае на выходе всегда будет уровень «0».

Численные значения частоты и длительности определяются из следующих зависимостей:

f = 1/T; T= [(PR2 + 1)] x Tosc x (коэффициент предделителя TMR2).

a = (CCPR1L:CCP1CON <5:4>) x Tosc x (коэффициент предделителя TMR2).

Tosc – период тактовых импульсов микроконтроллера.

Таким образом, процесс настройки модуля ССР в режиме ШИМ заключается в следующем:

- рассчитать и записать в регистр PR2 величину периода ШИМ,

- рассчитать и записать в регистры CCPR1L:CCP1CON <5:4> величину длительности импульса ШИМ,

- настроить вывод RC2 на выход (TRISC<2> = 0),

- настроить предделитель и таймер TMR2 (см. раздел «Таймеры….» ),

- включить модуль ССР1 (регистр CCP1CON<3:0> = 11xx).

В микроконтроллере PIC16F873 имеется два модуля ССР: ССР1 и ССР2. Настройка и работа модуля ССР2 аналогична настройке и работе модуля ССР1. Отличие заключается только в именах регистров: например, вместо регистра CCP1CON должен быть регистр CCP2CON, вместо регистра CCPR1H должен быть регистр CCPR2H и т.д.

При использовании двух модулей ССР одновременно необходимо помнить, что основные тактирующие элементы в обоих модулях одни и те же: в режимах захвата и сравнения – таймер TMR1, а в режиме ШИМ – таймер TMR2 и регистр PR2.

В качестве примера программирования модуля ССР в режиме ШИМ рассмотрим следующие условия:

Частота следования импульсов 1кгц, скважность импульсов равна 2, тактовая частота микроконтроллера – 4 мггц.

Из приведенных условий требуемый период ШИМ Тшим = 1/1000= 0,001 сек или 1 000 мксек. Максимальный период импульсов самого таймера TMR2 = 256 * 1 = 256 мксек, и с учетом входного делителя можно получить TMR2 = 256 * 4 =1024 мксек (коэффициент деления входного делителя 1:4) , поэтому для получения требуемой частоты следования импульсов в регистр PR2 необходимо записать число 1000 / 4 = 250 или в шестнадцатиричной системе EA. Длительность импульсов равна половине периода (скважность равна 2), поэтому в регистр CCP1RL запишем число 125 ил в шестнадцатиричной системе 7C.

В регистр CCP1CON запишем число 0x0C – модуль CCP1 включен, режим работы модуля – ШИМ.

Для работы модуля ССР необходимо настроить таймер TMR2 (см.выше):

T2CON = 0x05 – коэффициент деления входного предделителя 1:4, модуль TMR2 включен, выходной делитель выключен

Тогда программа формирования ШИМ – сигналов будет выглядеть следующим образом:

#define XTAL_FREQ 4MHZ

#define byte unsigned char

#define word unsigned int

#include <pic.h>

#include <stdio.h>

__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);

void main() {

TRISC = Ox00; // вывод RC2 на выход

T2CON = 0x05; // настройка модуля TMR2

PR2 = 0xEA; // запись периода ШИМ

CCP1RL = 7C; // запись длительности импульсов ШИМ

CCP1CON = 0x0C; //настройка модуля CCP1 и включение модуля

for (;;) { }

}