Рассмотримподробнеенастройкутаймера 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!