Шим, корректный по фазе (phasecorrectpwm) 


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



ЗНАЕТЕ ЛИ ВЫ?

Шим, корректный по фазе (phasecorrectpwm)



 

Режим phase correct PWM (WGM02:0 = 1или 5). Формирование сигнала ШИМ происходит с большим коэффициентом пересчёта и корректного по фазе. Корректность по фазе обеспечивается благодаря работе счётчика в режиме пилообразного сигнала с двухсторонним наклоном.

Счётчик периодически изменяет направление своего счёта. Сначала он считает от BOTTOM до TOP, затем направление счёта меняется, и счётчик считает TOP до BOTTOM. Затем направление пересчёта снова меняется, и всё повторяется сначала.

Значение TOP равно 0xFF при WGM2:0 = 1 и определяется регистром OCR0Aпри WGM2:0 = 5.

В режиме неинвертирующего вывода сигнал на выходе OCR0x сбрасывается в ноль в момент совпадения содержимого регистров TCNT0 и OCR0x, если счётчик работает в прямом направлении (на увеличение). Значение устанавливается в единицу в момент совпадения, если счётчик работает на уменьшение.

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

В режиме phasecorrect PWM значение счётчика увеличивается, пока не достигнет значения TOP. Когда значение счётчика достигает TOP, направление счёта изменяется. Содержимое TCNT0 будет равно TOP в течение одного периода тактового сигнала таймера. Флаг переполнения таймера/счётчика (TOV0) устанавливается каждый раз, когда счётчик достигает значения BOTTOM. Флаг прерывания может использоваться для генерации запроса на прерывание. Такое прерывание будет вызвано каждый раз, когда содержимое счётчика достигнет значения BOTTOM.

В режиме phasecorrect PWM модуль совпадения используется для генерации сигнала ШИМ на выходе OC0x. При установке битов COM0x1:0 = 3. Установка битов COM0A0 = 1заставляет сигнал на выходе OC0A инвертироваться каждый раз в момент совпадения, если бит WGM02 установлен. Эта опция не доступна для вывода OC0B. Фактическое значение OC0x поступает на внешний вывод порта только в том случае, если он сконфигурирован как выход.

Сигнал ШИМ сгенерируется путём сброса (установки) OC0xв момент совпадения содержимого регистров OCR0xи TCNT0, когда счётчик работает на увеличение, и устанавливается (сбрасывается) в момент совпадения, если счётчик работает на уменьшение. Частота выходного сигнала ШИМ в режиме phasecorrect PWM может быть вычислена по следующей формуле:


,

 

Где переменная N представляет собой коэффициент предварительного деления (1, 8, 64, 256, 1024).

Крайние значения содержимого регистра OCR0A при генерации сигналов ШИМ в режиме phasecorrect PWM представляют собой специальные случаи. Для неинвертирующего режима при записи в регистр OCR0Aзначения BOTTOM на выходе установиться низкий логический уровень. При записи в OCR0Aзначения MAX на выходе установится логическая единица. Для инвертирующего режима сигнал на выходе будет иметь противоположные значения.


МК должен быть сконфигурирован с помощью визадра под AMega8

 

 

Начинаем с того что создаем новый проект.

File- New

На вопрос, что бы будем создавать выбираем - Project

Использовать ли визард – отвечаем -Yes

Откроется окно нового проекта. На закладке Chip выберем нужный МК – в нашем случае это – ATMega8. Установим рабочую частоту тут же.

 

Переходим на закладку Ports и подзакладкуPortB. Здесь мы выбираем, порт B его мы сконфигурируем на выход. Напротив каждого бита выберите In\Out так чтобы все выходы были Out

Аналогично PortDдолжен быть настроен на вход

 

 

 

Переходим на закладку Таймеры и настраиваем первый таймер. В ячейке ClockValue выбираем коэффициент деления частоты микроконтроллера, которое отражается итоговым значением. Частота МК задается на закладке Chip. Далее выбираем режим работы нашего таймера. В данном случае мы выбираем режим работы по совпадению значений.

 

На этой же закладке мы включаем компаратор Ав стоке Interrupton, после этого в ячейке CopmA мы указываем значение для срабатывания компаратора. Таким образом при достижении счетчиком значения, указанного в компараторе А, будет происходить вызов прерывания и в это событие мы сможем получить необходимый нам интервал времени.

Пример:

Частота МК = 4 МГц, коэффициент деления выбираем 64. Получаем событие, происходящее с частотой 62500 КГц.

Для того чтобы получить 1 сек. Нам необходиморазделить это событие на 62500, для этого в ячейку CompAмы запишем шестнадцатеричное число F424  равное в десятичной форме 62500.

Мастер сделает нам следующее прервывание.

// Timer1 output compare A interrupt service routine

interrupt [TIM1_COMPA] void timer1_compa_isr(void)

{

// Placeyourcodehere

 

}

Все что попадает внутрь фигурных скобок выполняется каждую секунду.

 

 

Далее открываем Меню – Program - Выбираем пункт Generate, SaveendExit.

Далее программа спросит имя файла (*.с) напишите любое название

имя файла (*.prj) напишите любое название – Это и Есть ваш проект

имя файла (*.сwp) напишите любое название

После этого у вас откроется созданный мастером код.

 

#asm

.equ __lcd_port=0x18

#endasm

// инифиализируем порт к которому подключен LCDдисплей

#include<lcd.h>

#include<stdio.h>

#include <mega8.h>

#include<delay.h>

// подключаем библиотеки работы с LCD и мультимедиа функциями микроконтроллеров и задержек

// объявляем глобальные переменные 

// часы, минуты, секунды  

char lcd_buffer[33];  

unsigned char h=0,m=0,s=0;

unsigned char an=0;

 

 

// прототипы функций

// инициализации МК

void init(void);

// показатьвремя

void show_time(void);

// простенькая анимация '|,/,|,\'

void anim(void);   

// функция проверки прошла ли минута, час.

void h_m_s(void);

 

//прерываниепосовпадению

interrupt[TIM1_COMPA] comp(void) {

anim();

}

 

 

//------------------------------------------------

void init(void)

{

lcd_init(16);

DDRD=0;

// timer

TCNT1H=TCNT1L=0;

TCCR1A=0;

TCCR1B=12; // cl/256 4000000/256=15625

// 15625/5=3125

// опроскаждые 200ms

OCR1A=3125;

TIMSK=1;

//TIMSK=16;

#asm("sei")

}   

 

//------------------------------------------------

void show_time(void)

{

h_m_s();             

lcd_gotoxy(0,0);

sprintf(lcd_buffer,"%i%i:",h/10,h%10);

lcd_puts(lcd_buffer);  

sprintf(lcd_buffer,"%i%i:",m/10,m%10);

lcd_puts(lcd_buffer);  

sprintf(lcd_buffer,"%i%i",s/10,s%10);

lcd_puts(lcd_buffer);  

}

//------------------------------------------------

void anim(void)

{   

lcd_gotoxy(9,0); 

switch(an)

{

case 0:lcd_putsf("!");break;

case 1:lcd_putsf("@");break;

case 2:lcd_putsf("#");break;

case 3:lcd_putsf("$");break;

case 4:lcd_putsf("%");break;

}        

an++;

if(an==5) {an=0;s++;}

show_time();  

}  

 

//------------------------------------------------

void h_m_s(void)

{

if(s==60) {s=0;m++;}

if(m==60) {m=0;h++;}

if(h==23) {h=0;}

}

 

void main(void)

{

init(); 

while(1)

h_m_s();

// выставляемвремя

    if(PIND.0==0) {h++;delay_ms(300);}

    if(PIND.1==0) {m++;delay_ms(300);}                

}

}           

 

 

Чтобы до конца создать проект и сделать прошивку для МК (файл *.hex)

Идем в меню Project- Build

 

И переходим к PROTEUS.

 

Порядок выполнения работы

1. Получить задание у преподавателя

2. Разработать алгоритм

3. Разработать программу в CodeVisionAVR

4. Скомпилировать файл прошивки

5. Спроектировать макетную плату в PROTEUS

6. Загрузить файл (*.hex) в PROTEUS и запустить симуляцию в проекте.

Оформление отчета

Отчет должен содержать:

а) формулировку цели работы,

б)схему устройства

в) код программы в CodeVisionAVR

г)схема проекта в PROTEUS

д) Выводы по работе

 

 

 

Список использованной литературы

1) М.Б. Лебедев. CodeVision AVR. Пособие для начинающих. Додэка XXI, 2008. 592 с.

 

Содержание:

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

1.1. Основные сведения из теории:

Состав микроконтроллеров

Устройство микроконтроллера на примере ATtiny 2313

Гавардская архитектура микроконтроллеров AVR

Понятие стека

АЛУ – арифметико-логическое устройство

X-регистр, Y-регистр и Z-регистр

Системная перепрограммируемая Flash-память программ

Память данных SRAM

Порты ввода-вывода

Использование портов для цифрового ввода-вывода



Поделиться:


Последнее изменение этой страницы: 2021-01-08; просмотров: 104; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.63.114 (0.022 с.)