МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра БТС
ИНДИВИДУАЛЬНОЕ ДОМАШНЕЕ ЗАДАНИЕ №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