Рассмотримподробнеенастройкутаймера 2



Лабораторная работа №4

Программная Широтно Импульсная Модуляция на примере AVRATmega 8

Цель работы : ознакомление с принципами работы таймеров и счетчиков в режиме ШИМ

Методические указания по подготовке к работе

Содержание работы:

Уяснить поставленную задачу, ознакомиться с методами работы с регистрами микроконтроллера, разработать алгоритм работы, разработать программу, позволяющую осуществлять ШИМ управление ключем.

Широ́тно-и́мпульснаямодуля́ция(ШИМ, англ. pulse - widthmodulation ( PWM )) — процесс управления мощностью методом пульсирующего включения и выключения потребителя энергии. Различают ана́логовую ШИМ и цифрову́ю ШИМ, дво́ичную (двуху́ровневую) ШИМ и трои́чную (трёхуровневую) ШИМ[1].

 

 

 

 

Таймеры и счётчики являются одними из самых частоиспользуемых функций микроконтроллеров. Они служат для замера интервалов времени, частоты, определений широт импульсов и так далее. В Atmega8 используются 8 и 16-ти битные счётчики. Переполнение 8 битного счётчика наступает при достижении 255 итераций, 16 битного - при достижении 65535 итераций.

Если таймер работает в режиме счётчика, то он считает количество импульсов, поступивших на выбранный вход микроконтроллера. В этом случае регистр направления DDR порта должен быть настроен на вход.

Если таймер работает в качестве таймера, то частота его тактирования зависит от частоты генератора такта микроконтроллера.

За работу таймеров T/С0, T/C1, T/C2 отвечают регистры TCCR0, TCCR1, TCCR2. Первые 3 бита регистров TCCR0 и TCCR1 отвечают за конфигурацию таймера. Конгфигурация таймера в зависимости от состояния этих трёх регистров представлена в таблице.

Бит2 Бит1 Бит0 Значение комбинации
0 0 0 Таймер/счётчик неактивен
0 0 1 Активен режим "Таймер". Такт таймера равен такту микроконтроллера
0 1 0 Активен режим "Таймер". Такт таймера равен такту микроконтроллера/8
0 1 1 Активен режим "Таймер". Такт таймера равен такту микроконтроллера/64
1 0 0 Активен режим "Таймер". Такт таймера равен такту микроконтроллера/256
1 0 1 Активен режим "Таймер". Такт таймера равен такту микроконтроллера/1024
1 1 0 Режим "Счётчик". Активный фронт сигнала - ниспадающий
1 1 1 Режим "Счётчик". Активный фронт сигнала - нарастающий

Если включен режим счётчика, то при каждом импульсе на вход счётчика происходит увеличение на единицу содержимого регистра TCNTx. При изменении состояния счётчика регистра TCNTx c 0xFF на 0x00, в регистре TIFR устанавливается флаг переполнения TOVx

Регистр TIFR

7 6 5 4 3 2 1 0
TOV1 OCF1A OCF1B - ICF1 - TOV0 -

При работе в режиме таймера счётчик считает число тактовых импульсов, сгенерированных таймером. Время генерации тактового импульса зависит от такта микроконтроллера и делителя такта (см. таблицу выше). Например, если тактовая частота микроконтроллера 4 mHz, а делитель такта для таймера равен 8, то время генерации будет равно : 1/500.000Гц=2мкс. Таким образом для переполнения 8-битного счётчика после 256-го импульса нужно 512 мкс. Умножив количество переполнений на время 1 переполнения счётчика можно получить время с начала работы таймера

 

 

В микроконтроллере ATmega8 - программный  ШИМ мы будем организовывать с помощью таймера2, для этого переведем таймер в режим Normaltop=0xFF

 

Принцип шим-регулятора

Работа ШИМ регулятора сложностью не отличается. ШИМ-регулятор — устройство, выполняющее такую же функцию, что и традиционный линейный регулятор мощности (то есть, меняет напряжение или ток за счёт силового транзистора, рассеивающего значительную мощность на себе). Но ШИМ-регулятор отличается намного большим КПД. Достигается это благодаря тому, что управляющий силовой транзистор функционирует в ключевом режиме (либо включен, тогда пропускает большой ток, но мало падение напряжения, либо выключен — ток не проходит). В результате на таких силовых транзисторах мощность практически не рассеивается и энергия впустую не тратится.

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

Для подключения коллекторного мотора рассмотрим мостовую схему включения электродвигателя

 

 

 

 

H-мост — это электронная схема, которая даёт возможность приложить напряжение к нагрузке в разных направлениях. Эта схема очень часто используется в чтобы изменять направление вращения мотора. H-мосты представлены в виде интегральных схем, а также могут быть построены из отдельных радиодеталей.

 

Термин H-мост появился благодаря графическому изображению этой схемы, напоминающему букву Н. H-мост собирается из 4 переключателей, электронных или механических (реле). Когда ключи A и B2 замкнуты, а A2 и B разомкнуты, мотор крутится в одну сторону, когда же A и B2 замкнуты, а A2 и B разомкнуты, мотор крутится в другую сторону. Также H-мост предоставляет возможность электрически тормозить вращение двигателя, коротко замыкая его выводы.

Также из схемы следует, что ключи A и B2 как A2 и B никогда не должны замыкаться вместе, так как это приведёт к короткому замыканиюисточника питания.

 

Очень часто H-мосты строятся из приборов обратной полярности, таких как биполярные транзисторы типа р-n-р или полевых транзисторов с р-каналом, подключенных к биполярным транзисторам типа n-р-n или полевым с n-каналом.

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

H-мост также можно построить и с помощью механических переключателей, таких как реле, но с развитием электроники такой подход используется все реже.

 

Рассмотрим варианты подключений

 

Для работы программного ШИМ мы используем таймер2 , в режиме режим Normaltop=0xFF

Также необходимо включить прерывания с помощью регистра TIMSK установив значения ему 0xC0 , это позволит включить два прерывания:

// Timer2 overflowinterruptserviceroutine - отвечающее за прерывания по переполнению 8 битного таймера 2

interrupt [TIM2_OVF] void timer2_ovf_isr(void)

{ }

// Timer2 outputcompareinterruptserviceroutine - отвечающее за включение прерывания по совпадению в компараторе

interrupt [TIM2_COMP] void timer2_comp_isr(void)

{}

 

 

 

 

В тот момент, когда значение в регистре компаратора OCR2 будет равно текущему значению значению таймера записанному в регистре TCNT2 сработает прерывание interrupt [TIM2_COMP] voidtimer2_comp_isr(void)

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

Для удобства опишем выводы с помощью констант.

 

#define M1_A PORTC.3 // вперед

#define M1_A2 PORTC.2 // вперед

#define M1_B PORTC.0 // назад

#define M1_B2 PORTC.1 // назад

 

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

Синтаксис

#defineidentifierтокена идентификатора — строкаOPT
идентификатор #defineidentifier(идентификаторOPT, ... ,идентификаторOPT)— строка снеявной строкой

 

После чего реализуем прерывания следующим образом :

 

interrupt [TIM2_OVF] void timer2_ovf_isr(void) // Timer2 overflow interrupt service routine

{

 if (PWM_A1>0) {M1_A=1;M1_A2=0;} 

 else {M1_A=0;M1_A2=1;}

 if (PWM_B1>0) {M1_B=1;M1_B2=0;}

 else {M1_B=0;M1_B2=1;}

 

TCNT2=0x00;

}

 

При работе по ветке M1_A и M1_B2;- мы подаем на оба этих вывода логическую единицу  и M1_A2 и M1_B логический ноль , что заставит вращаться мотор по часовой стрелке , для вращения в обратную сторону подаем обратные значения : M1_A и M1_B2 логический ноль , M1_A2 и M1_B логическая единица.

 

Поскольку таймер 2 8 битный то он считает циклы от 0 до 255 , после того как мы дошли до переполнения таймера т.е. 255 такта , мыегообнуляемкомандой TCNT2 = 0 ;

 

interrupt [TIM2_COMP] void timer2_comp_isr(void) // Timer2 output compare interrupt service routine

{

if (PWM_A1>0) {M1_A=0;}

 if (PWM_B1>0) {M1_B=0;}

}

При работе компаратора мы меняем фронт M1_A и M1_B при достижении регистром TCNT2 значения OCR2 .

Т.о. пока счетчик считает такты от 0 до 255 в какой то момент времени указанный в OCR2 сработает «будильник» и изменит состояние на выходе контроллера изменив его на противоположное, таким образом мы сгенерируем скважность.

 

Пример настроек и прерываний таймера2 , с помощью мастера CVAVR

Рассмотримподробнеенастройкутаймера 2

Характеристики таймера/счетчика T2 (8 бит):

  • Два независимых выхода по совпадению
  • Таймер сброса при совпадении
  • Изменяемый период ШИМ сигнала
  • Фазовый корректор ШИМ сигнала
  • Тактовый генератор
  • Возможность работы от независимого внешнего часового тактового генератора 32 кГц
  • Три независимых источника прерывания
  • Делитель частоты 10-бит
  • Асинхронный режим

Регистры таймера/счетчика T2:

  • TCNT2 - счетный регистр таймера/счетчика T2
  • OCR2A - регистр сравнения A
  • OCR2B - регистр сравнения B
  • TIMSK2 - регистр маски прерываний для таймера/счетчика T2
  • TIFR2 - регистр флагов прерываний для таймера/счетчика T2
  • TCCR2A - регистр управления A
  • TCCR2B - регистр управления B
  • ASSR - регистр асинхронного режима
  • GTCCR - главный регистр всех таймеров/счетчиков

Источником тактового сигнала для таймера/счетчика T2 может быть тактовый сигнал используемый для всего микроконтроллера с использованием предделителя. Если не выбран коэффициент деления, то таймер/счетчик останавливается.

Режим работы таймера/счетчика T2 устанавливается регистрами TCCR2A и TCCR2B аналогично таймеру/счетчику T0.

Регистр TCCR2B:

7 6 5 4 3 2 1 0
FOC2A FOC2B - - WGM22 CS22 CS21 CS20


Разница лишь в битах CS22 (2), CS21 (1), CS20 (0) регистра TCCR2B которые устанавливают режим тактирования.

  • 000 - таймер остановлен
  • 001 - CLK
  • 010 - CLK/8
  • 011 - CLK/32
  • 100 - CLK/64
  • 101 - CLK/128
  • 110 - CLK/256
  • 111 - CLK/1024

Также у таймера/счетчика есть асинхронный режим работы.

Регистр ASSR:

7 6 5 4 3 2 1 0
- EXCLK AS2 TCN2UB OCR2AUB OCR2BUB TCR2AUB TCR2BUB


Бит EXCLK (6) регистра ASSR разрешает использование внешнего тактового сигнала от кварцевого резонатора 32 кГц при записи в него 1.

Бит AS2 (5) регистра ASSR управляет способом тактирования (1 - от внешнего резонатора 32 кГц, подключенного к TOSC1 (9 ножка) / 0 - от внутреннего генератора CLK)/

Бит TCN2UB (4) регистра ASSR показывает доступен ли для записи регистр TCNT2 (1-недоступен / 0 - доступен).

Бит OCR2AUB (3) регистра ASSR показывает доступен ли для записи регистр OCR2A (1-недоступен / 0 - доступен).

Бит OCR2BUB (2) регистра ASSR показывает доступен ли для записи регистр OCR2B (1-недоступен / 0 - доступен).

Бит TCR2AUB (1) регистра ASSR показывает доступен ли для записи регистр TCCR2A (1-недоступен / 0 - доступен).

Бит TCR2BUB (0) регистра ASSR показывает доступен ли для записи регистр TCCR2B (1-недоступен / 0 - доступен).

Регистр GTCCR:

7 6 5 4 3 2 1 0
TSM - - - - - PSRASY PSRSYNC

 

Бит PSRASY (1) регистра GTCCR сбрасывает предделитель таймера/счетчика T2 если установить в 1, после этого бит сбрасывается в 0 автоматически.

Бит PSRASYNC (0) регистра GTCCR сбрасывает предделитель таймера/счетчика T0 и T1 если установить в 1, после этого бит сбрасывается в 0 автоматически.

Бит TSM (0) регистра GTCCR запрещает автоматический сброс битов PSRASY и PSRASYNC регистра GTCCR.

 

Для примера установим следующиенастроки:

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: 15,625 kHz

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x06;

TCNT2=0x00;

OCR2=0x00;

 


Дата добавления: 2021-01-20; просмотров: 99; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!