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

Лаба 3 / Лаба_3

.docx
Скачиваний:
9
Добавлен:
08.04.2022
Размер:
745.82 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра БТС

ИНДИВИДУАЛЬНОЕ

ДОМАШНЕЕ ЗАДАНИЕ №3

по дисциплине «Микропроцессорные системы»

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

Студент гр. 7501

Исаков А.О.

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

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

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

2020

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

Используемые инструменты: отладочная плата ATtiny2313, интегрированная среда разработки AVR Atmel Studio 7.

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

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

ATtiny2313  низкопотребляющий 8 битный КМОП микроконтроллер с AVR RISC архитектурой.

AVR ядро объединяет богатую систему команд и 32 рабочих регистра общего назначения. Все 32 регистра непосредственно связаны с арифметико-логическим устройством (АЛУ), что позволяет получить доступ к двум независимым регистрам при выполнении одной команды.

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

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

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

где x(t) – желаемый входной сигнал в пределе от t1 до t2, ∆Ti – продолжительность i -го ШИМ-импульса с амплитудой A.

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

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

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

При использовании ШИМ мы передаём на выход сигнал, состоящий из высоких и низких логических уровней, то есть нулей и единиц. Затем эта последовательность пропускается через интегрирующую цепочку. В результате интегрирования на выходе будет величина напряжения, равная площади под импульсами.

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

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

  1. Режим Fast PWM

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

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

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

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

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

Код программы на языке 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

Код программы на языке 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;

}

}

}

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

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

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

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

ВЫВОД

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

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

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