Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 3 / Лаба_3

.pdf
Скачиваний:
3
Добавлен:
08.04.2022
Размер:
744.56 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра БТС

ИНДИВИДУАЛЬНОЕ ДОМАШНЕЕ ЗАДАНИЕ №3

по дисциплине «Микропроцессорные системы» Тема: Широтно-импульсная модуляция

Студент гр. 7501

 

Исаков А.О.

Преподаватель

 

Анисимов А.А.

 

 

 

 

 

Санкт-Петербург

2020

Цель работы: написать на языках С и Assembler программу, с помощью которой изменяется яркость свечения светодиода благодаря Fast PWM.

Используемые инструменты: отладочная плата ATtiny2313,

интегрированная среда разработки AVR Atmel Studio 7.

Основные теоретические положения

1. Устройство отладочной платы ATtiny2313

ATtiny2313 низкопотребляющий 8 битный КМОП микроконтроллер с

AVR RISC архитектурой.

AVR ядро объединяет богатую систему команд и 32 рабочих регистра общего назначения. Все 32 регистра непосредственно связаны с арифметико-

логическим устройством (АЛУ), что позволяет получить доступ к двум независимым регистрам при выполнении одной команды.

Рисунок 1 – Устройство отладочной платы ATtiny2313

2. Широтно-импульсная модуляция

Широтно-импульсная модуляция (ШИМ, Pulse-width modulation, PWM) – приближение желаемого сигнала (многоуровневого или непрерывного) к действительным бинарным сигналам с двумя фиксированными уровнями – ноль или единица, так чтобы их значения за некоторый промежуток времени в среднем были равны. Формально этот процесс можно записать в следующем виде:

1

∫ ( ) = ∑ ∆ ,

2

2

где x(t) – желаемый входной сигнал в пределе от t1 до t2, ∆Ti

продолжительность i -го ШИМ-импульса с амплитудой A.

∆Ti подбирается таким образом, чтобы суммарные площади (энергии)

обеих величин были приблизительно равны за достаточно продолжительный промежуток времени.

В аналоговом варианте преобразование синусоидального сигнала в ШИМ-последовательность и обратно схематически выглядит следующим образом: на один из входов компаратора подается исследуемый аналоговый сигнал Uвх, на другой – сигнал опорной частоты Fоп, имеющий треугольную форму (рис. 2). При совпадении уровней двух сигналов на входах компаратора его выход переключается, формируя в результате последовательность,

состоящую из прямоугольных импульсов с несущей частотой Fоп, в

длительности которых закодирован уровень исходного аналогового сигнала

(т. е. его амплитуда). Если далее требуется получить исходный аналоговый сигнал, эту последовательность необходимо пропустить через фильтр нижних частот, чтобы отфильтровать опорную частоту и получить исходную синусоиду. В приведённом примере в качестве фильтра нижних частот используется обычная интегрирующая RC-цепочка (для получения более точных результатов преобразования необходимо использовать фильтр более высокого порядка, желательно на операционных усилителях).

Рисунок 2 – Принцип работы ШИМ-преобразователя При использовании ШИМ мы передаём на выход сигнал, состоящий из

высоких и низких логических уровней, то есть нулей и единиц. Затем эта

последовательность пропускается через интегрирующую цепочку. В

3

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

Меняя скважность сигнала (т. е. отношение длительности периода к длительности импульса) ШИМ-последовательности, можно плавно менять эту площадь, а значит и напряжение на выходе (рис. 3).

Рисунок 3 – Принцип ШИМ-преобразования

3.Режим Fast PWM

Вэтом режиме таймер микроконтроллера считает от нуля до 255, после достижения переполнения счетный регистр сбрасывается в ноль, и счет начинается снова (рис. 4). Когда значение в счетчике достигает значения,

записанного заранее в регистр сравнения, то соответствующий ему вывод

ОСхn сбрасывается в ноль. При обнулении счетчика этот вывод устанавливается в единицу.

В общем случае частота fшим на выходе ОСхn микроконтроллера в режиме быстрой модуляции составляет:

 

1

 

 

 

 

 

шим =

 

=

 

 

=

 

 

,

шим

( + 1)

( + 1)

 

 

 

 

4

где Ftcx – тактовая частота таймера, полученная путем деления тактовой частоты нашего МК на коэффициент деления N, задаваемый с помощью соответствующих разрядов регистра управления TCCRnB.

Рисунок 4 – Формирование ШИМ-сигнала в режиме быстрой модуляции

5

ОБРАБОТКА РЕЗУЛЬТАТОВ МОДЕЛИРОВАНИЯ

Код программы на языке Assembler:

.CSEG

// начало

сегмента кода

.ORG 0x0000

// начало

таблицы

прерываний

// инициализация стека

 

 

 

LDI R16, LOW(RAMEND) // запись

в

регистр R16 адрес конца оперативной памяти

OUT SPL, R16

// запись

в

SPL значения из R16

//инициализация PMW на таймере 0

//установим 3ый пин порта В на выход

LDI R16, 0b00001000 // т.к. это выход первого канала PMW таймера 0 OUT DDRB, R16

//Настройка режима FAST PWM бит 0 и 1 LDI R16, 0b010100011

OUT TCCR1A, R16

//запуск таймера, тактирование от цп без предделителя

LDI R16, 0b00000001 // Запись 1 в 0 бит регистра TTCR1B OUT TCCR1B, R16

//устанавливаем значение PWM

LDI R16, 240

OUT OCR1B, R16

// основной цикл программы loop:

RCALL delay // вызов подпрограммы задержки

//устанавливаем значение PWM LDI R16, 90

OUT OCR1B, R16

RCALL delay // вызов подпрограммы задержки

//устанавливаем значение PWM

LDI R16, 180

OUT OCR1B, R16

RCALL delay // вызов подпрограммы задержки

//устанавливаем значение PWM LDI R16, 220

OUT OCR1B, R16

RCALL delay // вызов подпрограммы задержки

//устанавливаем значение PWM

LDI R16, 250

OUT OCR1B, R16 RJMP loop

// подпрограмма задержки delay:

LDI R18, 250

LDI R19, 250

L1: DEC R19 // DEC - вычитание единицы из указанного опеанда BRNE L1 // BRNE - перейти, если не равно

DEC R18

BRNE L1 RETI

6

Код программы на языке C:

#define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h>

int main(void)

{

TCCR1A |= (1<<COM1A1); TCCR1A &= ~(1<<COM1A0);

TCCR1A |= (1<<WGM10);

TCCR1A &= ~(1<<WGM11);

TCCR1B |= (1<<WGM12);

TCCR1B &= ~(1<<WGM13);

TCCR1B |= (1<<CS11);

TCCR1B &= ~(1<<CS10);

TCCR1B &= ~(1<<CS12);

DDRB = 0b00011000;

PORTB = 0b11100111; while (1)

{

if (OCR1A < 255)

{

OCR1A++;

_delay_ms (30);

}

else

{

OCR1A = 1;

}

}

}

7

Рисунок 5 – Основная схема без включения симуляции

Рисунок 6 – Показания осциллографа при малой скважности

8

Рисунок 7 –Показания осциллографа при большой скважности

Рисунок 8 – Показания осциллографа при средней скважности

9

ВЫВОД

В ходе лабораторной работы удалось написать работающий код в Atmel Studio для микроконтроллера AtTiny2313 на языках C и Assembler, а также схему, из микроконтроллера, осциллографа, RC-цепочки и медленно зажигающегося светодиода, построенную в Proteus.

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

10

Соседние файлы в папке Лаба 3