Лекция 3. PWM. UART
.pdfШиротно-импульсная модуляция (ШИМ/PWM)
Примерение ШИМ
●Кодирование информации в некоторых протоколах передачи данных (напр. 1Wire)
●Изменяя скважность можно управлять током (применяется напр. в драйверах светодиодов)
●Пропуская через интегратор можно создавать аналоговые сигналы имея в распоряжении только цифровой выход и два уровня сигналов (высокий и низкий)
Таймеры в режиме PWM
●Таймеры в старших моделях AVR (Мегах) могут самостоятельно (без прерываний) генерировать ШИМ на специальных линиях OC0A, OC0B, и т.д. т.е. OCNx где N – номер используемого таймера
●В Mega328p есть 6 независимых PWM каналов, по 2 на каждый таймер
Fast PWM
●Таймер считает от 0 до MAX, по совпаденю с OCRnX + по переполнению происходит обновление линии OCnX
Phase Correct PWM
●Таймер считает от 0 до MAX, а затем обратно, по достижении значения OCRnX происходит обновление состояния линии OCnX
Генерирование ШИМ в режиме Fast PWM
#include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <util/delay.h>
int main(void) { SP = RAMEND;
DDRD = (1<<DDD6); // OC0A = PD6, 6-я нога на seeduino DDRB = (1<<DDB5);
/* Таймер тикает от 0 до 255 и переключает ногу 0C0A по совпадении * с регистром сравнения */
//Fast PWM, clear OC0A on compare, set OC0A at bottom TCCR0A = (1<<COM0A1)|(0<<COM0A0)|(1<<WGM01)|(1<<WGM00); TCCR0B = (0<<WGM02)|(0<<CS02)|(0<<CS01)|(1<<CS00); TCNT0 = 0;
OCR0A = 127; /* скважность = 0.5 (50%) */ while (1) {
__asm__ volatile ("nop");
}
return 0;
}
Генерация синусоиды ШИМ-ом
Расчёт таблицы скважностей
●Потребуем, чтобы среднее значение точного синуса совпадало со средним значением нашего
приближения ШИМ-ом
ti+1
∫sin (t )dt =(ti+1−ti)×Dutyi
ti
● Чтобы не возникало отрицательных значений скважности Duty, можно "сдвинуть" синусоиду вверх, обеспечив область значений в интервале [0:1]
0.5(1+sin(t ))dt=(ti+1−ti)×Dutyi
Интерфейс UART
●Universal Asyncronius Reciever-Transmitter – универсальный асинхронный приёмникпередатчик
●Асинхронный означает, что UARTу не нужен тактовый импульс, в отличие от, скажем, SPI
●Тем не менее, требуется, чтобы передаваемые и принимаемые биты следовали на предопределённой скорости
●Логически (но не физически) совместим с RS232 ("COM-порт")