Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное_пособие.doc
Скачиваний:
70
Добавлен:
10.11.2019
Размер:
8.13 Mб
Скачать

3.3.3 Таймер/счетчик т1.

Физически 16-разрядный таймер/счетчик Т1 состоит из двух 8-разрядных счетчиков TCNT1H и TCNT1L. Таймер/счетчик Т1, кроме режимов счетчика и таймера, имеет режим захвата и 15 режимов совпадения (сравнения). Часть режимов сравнения называют режимами генератора импульсов с широтно-импульсной модуляцией (ШИМ).

В режиме счетчика таймером/счетчиком Т1 производится счет внешних импульсов со входа Т1 (альтернативное имя контакта порта PIND.1). Изменение состояния Т1 может производиться по фронту или по срезу входного импульса.

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

Структурная схема таймера/счетчика Т1 приведена на рис.24.

РЕЖИМ ЗАХВАТА используется для измерения временных параметров сигналов: периода, длительности и временного сдвига импульсов.

В режиме захвата по входу обеспечивается аппаратная загрузка текущего содержимого Т1 в 16-разрядный регистр захвата ICR1 по фронту или по срезу входного (внешнего) импульса на входе захвата микроконтроллера ICP(PIND6). По схеме: фронтом или срезом импульса от входа ICP производится запись содержимого TCNT1 в регистр захвата. Этот же сигнал захвата может вызвать подпрограмму прерывания по захвату (устанавливается флаг ICF1). Условия захвата определяются битами ICES1 и ICNC1 регистра управления TCCR1B. Если ICES1=0, то захват производится срезом, иначе - фронтом импульса на входе захвата. Если ICNC1=0, то включен подавитель помех – захват производится на четвертый фронт или срез импульса на входе захвата ICP .

Рисунок 24

РЕЖИМЫ СРАВНЕНИЯ таймера Т1 используются в управляющих системах на микроконтроллерах для генерации импульсных сигналов с заданными значениями временных параметров: частоты следования, периода, длительности. В режиме сравнения текущее содержимое работающего таймера в цифровых компараторах COMPARATOR А и COMPARATOR B сравнивается с содержимым специальных 16-разрядных регистров сравнения OCR1A и OCR1В. При равенстве значений таймера и соответствующего регистра сравнения может изменяться состояние (0←1 или 1←0) соответствующего выхода сравнения микроконтроллера OC1A или OC1B (альтернативные имена разрядов PIND,5 и PIND,4).

Кроме этого в момент совпадения устанавливается соответствующий флаг прерывания по совпадению таймера/счетчика Т1 (OCF1A или OCF1B) и может быть вызвана соответствующая подпрограмма прерываний.

Управление таймером/счетчиком Т1 производится с помощью регистров TCCR1A и TCCR1B. Их форматы приведены на рисунках 25 и 26.

Выбор источника входных импульсов для таймера/счетчика Т1, а также остановка/пуск его, определяется разрядами CS02 – CS00, в соответствии с таблицей 22 (по аналогии с управлением с таймером Т0).

7

6

5

4

3

2

1

0

СOM1A1

COM1A0

COM1B1

COM1B0

FOC1A

FOC1B

WGM11

WGM10

Рис.25 Формат регистра TCCR1A

7

6

5

4

3

2

1

0

ICNC1

ICES1

-

WGM13

WGM12

CS12

CS11

CS10

Рис. 26 Формат регистра TCCR1В

Разряды WGM13 - WGM10 регистров TCCR1А и TCCR1В определяют все режимы совпадения Т1 в соответствии с таблицей 21.

Таблица 21 Режимы совпадения Т1

Номер режима

WGM13

WGM12

WGM11

WGM10

Режим работы

Модуль счета Т1

0

0

0

0

0

Normal

FFFF

1

0

0

0

1

Точная фаза PWM, 8-разрядный, реверсивный

00FF

2

0

0

1

0

Точная фаза PWM, 9-разрядный, реверсивный

01FF

3

0

0

1

1

Точная фаза PWM, 10-разрядный, реверсивный

03FF

4

0

1

0

0

СТС (сброс при совпадении)

OCR1A

5

0

1

0

1

Быстрый PWM, 8-разрядн.

00FF

6

0

1

1

0

Быстрый PWM, 9-разрядн.

01FF

7

0

1

1

1

Быстрый PWM, 10-разрядн.

03FF

8

1

0

0

0

Точные фаза и частота PWM, реверсивный

ICR1

9

1

0

0

1

Точные фаза и частота PWM, реверсивный

OCR1A

10

1

0

1

0

Точная фаза PWM, реверсивный

ICR1

11

1

0

1

1

Точная фаза PWM, реверсивный

OCR1A

12

1

1

0

0

СТС (сброс при совпадении)

ICR1

13

1

1

0

1

Не используется

-

14

1

1

1

0

Быстрый PWM

ICR1

15

1

1

1

1

Быстрый PWM

OCR1A

Таблица 22 Выбор источника тактовых импульсов для таймера Т1

CS02

CS01

CS00

Описание

0

0

0

Таймер/счетчик 1 остановлен

0

0

1

Коэффициент деления 1

0

1

0

Коэффициент деления 8

0

1

1

Коэффициент деления 64

1

0

0

Коэффициент деления 256

1

0

1

Коэффициент деления 1024

1

1

0

Режим счетчика, переключение по срезу

1

1

1

Режим счетчика, переключение по фронту

Таблица 23 Выбор управления выводами OC1A и OC1B в режимах сброса по совпадению (режимы 4 и 12)

СОМ1А(В)1

СОМ1А(В)0

Описание

0

0

Таймер/счетчик 1 отключен от выхода ОС1А(В)

0

1

Переключение выходной линии ОС1А(В)

1

0

Вывод ОС1А(В) сбрасывается в “0”

1

1

Вывод ОС1 А(В) устанавливается в “1”

Таблица 24 Управление выводами OC1A и OC1B в режимах генераторов

ШИМ

СОМ1А1

(СОМ1B1)

СОМ1А0

(СОМ1B1)

Описание

0

0

Таймер/счетчик 1 отключен от вывода ОС1A(B)

0

1

Переключение выходной линии ОС1A(B) при WGM13=1 и Т1 отключен от вывода ОС1А(В) при WGM13=0

1

0

Установка нуля на выводе ОС1A(B) при совпадении в суммирующем режиме TCNT1 – неинвертируемый ШИМ

1

1

Установка единицы на выводе ОС1A(B) при совпадении в суммирующем режиме TCNT1 – инвертируемый ШИМ

Биты СОМ1А1, СОМ1А0 и СОМ1В1, СОМ1В0 определяют характер сигнала на выходах совпадения ОС1А и OC1B соответственно при равенстве Т1 и OCR1A(OCR1B). Коды управления представлены в таблицах 23 и 24.

Режим Normal. В этом режиме Т1 работает как 16-разрядный суммирующий счетчик. При равенстве содержимого Т1 и какого-либо регистра сравнения OCR1A или OCR1B устанавливается соответствующий флаг прерывания по совпадению OCF1A или OCF1B, может вызываться соответствующая подпрограмма обработки прерывания, а также может измениться значение выхода совпадения микроконтроллера: разряды PIND.5/ OC1A или PIND.4/OC1B. При переполнении Т1 (когда значение в Т1 изменяется от 65535=216-1 до нуля) устанавливается флаг прерывания по переполнению TOV1 и может быть вызвана соответствующая подпрограмма прерывания. После переполнения таймера Т1 начинается следующий цикл счета его.

Режимы СТС (сброс по совпадению). В режиме №4 работа Т1 аналогична работе в режиме Normal, но при совпадении содержимого Т1 и регистра совпадения OCR1A таймер Т1 обнуляется, т.е. модуль счета таймера Т1 определяется значением в регистре совпадения OCR1A. Далее в таймере Т1 начинается новый цикл счета. При обнулении Т1 устанавливаются флаги прерываний по совпадению OCF1A и по переполнению TOV1. Кроме того, при совпадении может изменяться состояние выхода совпадения ОС1А (разряд PIND.5).

В режиме №12 сравнение значения Т1 производится со значением в регистре захвата ICR1. При равенстве Т1=ICR1 устанавливается флаг ICF1 и может измениться PIND.4. В остальном, этот режим аналогичен режиму №4.

Все остальные режимы являются режимами генератора широтно-импульсно модулированного сигнала.

РЕЖИМЫ ГЕНЕРАТОРА ШИМ (PWM) используются для управления двигателями, в качестве узла специальных АЦП, для формирования аналогового сигнала и др. Режимы генератора широтно-импульсно-модулированного сигнала (ШИМ) отличаются тем, что модуль счета Т1 может быть постоянным (режимы 1 и 5 – константа FF, режимы 2 и 6 – константа 1FF, режимы 3 и 7 – константа 3FF) и программно устанавливаемым, т.е. равным содержимому регистров OCR1A или ICR1 (режимы 8,9,10,11,14,15). Иначе, максимальное значение таймер Т1 может быть либо константой, либо задаваться значением в регистре ICR1 или OCR1A.

Во всех этих режимах при достижении таймером/счетчиком значения, равного содержимому регистра OCR1A(ICR1) или константе счета, производится либо сброс Т1 (режимы 5,6,7,14,15), либо переключение в сторону обратного счета (режимы 1,2,3,8,9,10,11 ). Иначе, таймер/счетчик Т1 может быть суммирующим или реверсивным. В режимах 1,2,3,8,9,10,11 таймер/счетчик Т1 работает как реверсивный счетчик. Сначала он работает как суммирующий счетчик. При достижении таймером/счетчиком максимального значения, он переключается в вычитающий режим и его состояния при счете уменьшаются до нуля. Затем он снова переключается в суммирующий режим и т.д. .

Во всех режимах ШИМ выполняется сравнение текущего значения Т1 со значениями в регистрах сравнения OCR1A и OCR1B. В режимах 1,2,3,8,9,10,11 при равенстве значений в таймере Т1 и регистре сравнения на соответствующем выводе ОС1А или ОС1В (альтернативные имена 5-го и 4-го разрядов порта D) может устанавливаться единичный уровень (фронт импульса) или нулевой уровень (срез импульса). В режимах 5,6,7,14,15 Т1 функционирует как суммирующий счетчик. Выход ОС1А (ОС1В) может изменять состояние при совпадении TCNT1=OCR1A(OCR1B) и при переполнении таймера/счетчика, т.е. при переходе значения от максимального значения к нулевому.

Напоминаем, что ШИМ-сигнал выводится на контакт порта PIND.5(PIND.4), а не в соответствующий разряд регистра PORTD.

Возможны два вида сигнала ШИМ: инвертирующий и неинвертирующий. При инвертирующем сигнале ШИМ вывод ОС1А (ОС1В) устанавливается в единичное состояние, при равенстве значений, при увеличении значений счетчика и в нулевое состояние по уменьшению счетчика для режимов, в которых Т1 работает как реверсивный счетчик. При неинвертирующем сигнале ШИМ вывод ОС1А (ОС1В) сбрасывается в нулевое состояние, при равенстве значений, по нарастанию значений в Т1 и устанавливается в единичное состояние при равенстве значений по убыванию значений в Т1.

Режимы Точной фазы и частоты (№8 и №9). В режиме №8 таймер-счетчик Т1 работает как реверсивный счетчик (рисунок 28). После запуска Т1 работает в суммирующем режиме. При достижении таймером Т1 значения, равного значению в регистре ICR1, таймер Т1 переключается в вычитающий режим и продолжает счет импульсов от тактового генератора. При достижении значения равного нулю, Т1 снова переключается в суммирующий режим. Формируется так называемая “цифровая пила”. Во время счета импульсов таймером в компараторе Comparator А производится сравнение значений таймера-счетчика и регистра сравнения OCR1A. При равенстве значений Т1 и OCR1A разряд порта OC1A (PIND.5) может переключаться в инверсное состояние.

Если при совпадении значений в суммирующем режиме работы Т1 разряд порта OC1A установился в единичное состояние, а при совпадении значений в вычитающем режиме работы он устанавливается в нулевое состояние, то такой сигнал называют инвертированным ШИМ.

Если при совпадении значений в суммирующем режиме работы Т1 разряд порта OC1A устанавливается в нулевое состояние, при совпадении значений в вычитающем режиме работы он устанавливается в единичное состояние, то такой сигнал называют неинвертированным ШИМ.

На графике а) рисунка 28 приведены импульсы на входе Т1, которые поступают от тактового генератора через делитель частоты; на графике b) представлены значения Т1; импульсы ШИМ представлены графиками c) и d).

Вид сигнала ШИМ инвертированный или неинвертированный устанав-

ливается разрядами СОМ1А1 и СОМ1А0 регистра TCCR1A (таблица 23).

Очевидно, что длительность импульсов может быть изменена изменением значения в регистре совпадения, а частота следования – изменением значения в регистре ICR1. Также очевидно, что длительности импульса, паузы и

Рисунок 28

периода в периодах импульсов на входе Т1:

Nи = 2*(ICR1 – OCR1A); Nп = 2*OCR1A ; NT = 2*ICR1.

Из этих формул можно получить значения регистров OCR1A и ICR1 по заданным значениям параметров сигнала ШИМ в периодах импульсов на входе Т1(Nи и Nп).

OCR1A = Nп /2; ICR1 = (Nи +N п)/2.

При использовании делителя частоты импульсов на входе таймера Т1, следует учесть коэффициент деления делителя К. С учетом этого расчет значений в регистрах по заданным значениям параметров импульсов в единицах времени следует выполнять по формулам:

OCR1A = tп / 2*(T такт *К); ICR1 = (tи +t п) / 2*( T такт *К), где:

T такт - период тактовой частоты микроконтроллера.

Частота сигнала ШИМ определяется выражением:

F=fclk / 2*К* ICR1; где:

  • fclk – частота тактового генератора микроконтроллера;

  • К – коэффициент деления частоты входного предделителя;

В режиме № 9 работа Т1 аналогична работе в режиме №8, но сравнение значения Т1 производится со значением в регистре OCR1B, модуль счета Т1 определяется регистром OCR1A и импульсы ШИМ формируются на выводе OC1B(PIND.4).

В режимах 8 и 9 по команде загрузки любого из регистров OCR1A, OCR1B или ICR1 новым значением, оно помещается в специальный буферный регистр. В соответствующий регистр сравнения значение помещается из буфера когда Т1=0, а не в момент выполнения команды вывода в регистр. Тем самым отсутствуют искажения как частоты, так и скважности ШИМ-сигнала при изменении его параметров.

Режимы быстрой ШИМ №№5,6,7,14,15.

В этих режимах Т1 работает как суммирующий счетчик.

На рис.29 представлены временные диаграммы работы таймера Т1 в режиме 14.

Рисунок 29

Формирование сигнала ШИМ происходит следующим образом.

Предварительно в регистры OCR1A и ICR1 загружены значения, определяющие параметры импульсов и включается Т1. С приходом каждого

импульса его содержимое увеличивается на 1. Содержимое таймера сравнивается со значением в регистрах OCR1A и ICR1. Когда Т1 = OCR1A на выводе PIND.5 устанавливается единица для инвертируемого сигнала ШИМ или ноль для неинвертируемого ШИМ и устанавливается флаг прерывания по совпадению OCF1A. Таймер продолжает счет далее. При наступлении равенства Т1 = ICR1 таймер сбрасывается, на выходе PIND.5 устанавливается уровень нуля (срез импульса) и устанавливается флаг прерывания по переполнению TOV1. Таймер продолжает счет от нулевого значения и т.д. .

Загрузка регистров OCR1A и ICR1 из буфера производится в момент, когда значение в Т1 максимальное.

В режиме 15 сравнение производится с регистром OCR1В, ШИМ-сигнал формируется на выходе ОС1В, а модуль счета в регистре OCR1А.

Очевидно, что в этих режимах частота сигнала ШИМ в 2 раза больше, чем в режимах с реверсивным таймером. Поэтому эти режимы называют режимами “быстрый ШИМ”.

Для расчета значений регистров используются очевидные формулы:

OCR1A = [tп / (T такт *К)] - 1; ICR1 = [(tи +t п)/( T такт *К)] - 1, где:

T такт - период тактовой частоты микроконтроллера.

Частота сигнала ШИМ определяется выражением:

F=fclk / К* ICR1; где:

  • fclk – частота тактового генератора микроконтроллера;

  • К – коэффициент деления частоты входного предделителя;

В режимах 5,6 и 7 коэффициент счета таймера Т1 равен соответствующей константе (см. таблицу 24).

Режимы Точной фазы №№ 1,2,3,10,11.

В этих режимах Т1 работает как реверсивный счетчик. Формирование сигнала ШИМ в режиме 10 происходит следующим образом. С приходом каждого импульса его содержимое увеличивается на 1. Содержимое таймера сравнивается со значением в регистрах OCR1A и ICR1. Когда Т1 = OCR1A на выводе PIND.5 устанавливается единица (формируется фронт импульса для неинвертируемого ШИМ). Таймер продолжает счет далее. При наступлении равенства Т1 = ICR1 таймер переключается в вычитающий режим и далее его содержимое уменьшается на 1 по приходу каждого импульса. Когда снова достигается равенство Т1 = OCR1A на выходе PIND.5 устанавливается уровень нуля (срез импульса). Таймер продолжает счет. При достижении нулевого значения таймер переключается в суммирующий режим и т.д. . Иначе, формирование импульсов ШИМ производится аналогично режиму № 8.

В режимах 1,2,3 максимальное значение таймера Т1 является фиксированным (режим 1 – константа FF, режим 2 – константа 1FF, режим 3 – константа 3FF.

В режиме № 11 работа Т1 аналогична работе в режиме №10, но сравнение значения Т1 производится со значением в регистре OCR1B, модуль счета Т1 определяется регистром OCR1A и импульсы ШИМ формируются на выводе OC1B(PIND.4).

При загрузке регистров сравнения новым значением, оно предварительно помещается в буферный регистр. В режимах 1,2,3,10 и 11 пересылка нового значения из буферного регистра в регистр сравнения производится в момент, когда содержимое таймера/счетчика становится равным максимальному.

Особенности записи в таймер/счетчик Т1, регистр сравнения OCR1 и регистр захвата ICR1. Разрядность каждого из этих регистров равна 16. Физически каждый из них состоит из двух регистров. В адресном пространстве ввода-вывода адресуются 8-битные регистры старших (TCNT1H, OCR1H, ICR1H) и младших (TCNT1L, OCR1L, ICR1L) разрядов. Запись 16-разрядного значения в Т1, OCR1 или ICR1 производится двумя командами, а для того чтобы запись в таймер/счетчик, регистр совпадения и регистр захвата происходила одновременно, используется программно недоступный регистр TEMP. Схема построена так, что при записи младшего байта он загружается непосредственно в регистр младших разрядов (например, в TCNT1L), а в регистр старших разрядов (например, TCNT1H) помещается значение из программно недоступного регистра TEMP. Таким образом, при записи 16-разрядного значения первым должен записываться старший байт в регистр старших разрядов TCCR1H, OCR1H или ICR1H (байт помещается в регистр ТЕМР), а следующей командой записывается младший байт в TCNT1L, OCR1L или ICR1L и одновременно содержимое ТЕМР (старший байт) помещается в соответствующий регистр старших разрядов.

Так как регистр ТЕМР один, то во избежание неправильной записи, перед записью в любой из 16-разрядных регистров должны быть запрещены прерывания, содержащие обращения к этим регистрам.

Особенности чтения таймера/счетчика Т1, регистра сравнения OCR1 и регистра захвата ICR1. При чтении младшего байта из 16-разрядного регистра данные считываются из всего регистра одновременно, однако младший байт помещается в место определенное командой, а старший байт помещается в регистр ТЕМР. Следующей командой чтения из регистра старших разрядов считывается старший байт 16-разрядного регистра из регистра ТЕМР.