Урок 13. Аппаратная ШИМ на микроконтроллере

Урок 13. Аппаратная ШИМ на микроконтроллере

В этом уроке мы научимся реализовывать ШИМ сигнал на микроконтроллере AVR с помощью BASCOM-AVR. В микроконтроллерах AVR, ШИМ можно реализовать посредством таймеров, для этой цели в микроконтроллере есть ШИМ выходы на порты вводавывода. Например, в микроконтроллере Attiny13 есть один таймер (Timer0) и два канала вывода ШИМ Pwm0a и Pwm0b, которые находиться на портах PB.0 и PB.1. В документации на микроконтроллер ШИМ каналы подписываются так: OC0A – ШИМ канал A на таймере 0, OC0B – ШИМ канал B на таймере 0, OC1A – ШИМ канал A на таймере 1, OC1B – ШИМ канал B на таймере 1 и т.д.

Работа с ШИМ в микроконтроллере

Для начала работы нужно сконфигурировать таймер на работу ШИМ для этого есть команда:

Config Timer1 = Pwm, Pwm = Разрядность, Compare A Pwm = Состояние канала A, Compare B Pwm = Состояние канала B, Prescale = Частота ШИМ

Разрядность можно задать 8, тогда будет скважность ШИМ от 0 до 255. Для Timer1 разрядность можно задать 9 или 10. Состояние канала A или B можно задать Clear Up – скважность при 0 = логической 1 и Clear Down – скважность при 0 = логической 0. Частоту ШИМ можно задать: 1, 8, 64, 256 и 1024.

Пример команды конфигурирования: Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8

После конфигурирования таймера нужно сконфигурировать порты ШИМ на вывод командой Config порт = Output, например: Config Portb.0 = Output

Потом нужно запустить таймер командой Start таймер, например: Start Timer0.

Теперь можно записать скважность в ШИМ канал для канала A таймера 0 это можно сделать так: Pwm0a = скважность, например: Pwm0a = 150

Практический пример

Теперь давайте попробуем поработать с ШИМ на практике, сделаем простую моргалку которая будет плавно зажигать и тушить светодиоды. За основу возьмём микроконтроллер Attiny13 и два светодиода, соберём простую схему:

Теперь напишем простую программку на BASCOM-AVR, применяя полученные знания:

$regfile = “attiny13.dat” $crystal = 9600000 Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8 Config Portb.0 = Output Config Portb.1 = Output Start Timer0 Do Incr Pwm0a Decr Pwm0b Waitms 5 Loop End

Откомпилируем её, прошьём микроконтроллер и установим фьюз биты микроконтроллера на тактирование от внутреннего тактового генератора на 9.6 МГц без делителя на 8. Пример установки фьюз битов в программе SinaProg:

Я использовал свою отладочную плату и вот что получилось:

Видео работы:

Скачать файлы для урока (проект в Proteus, исходник, прошивка)

Автор: Яковлев Александр Вячеславович (г.Витебск, Беларусь)


Категория: Микроконтроллеры
Метки:

Написать коментарий

*
= 3 + 1

Добавить изображение

Последние статьи