Только в этом месяце - скидки на паяльники и электронику с нашими кодами (123avr.com) :
![]() |
|
Совет - умейте правильно находить информацию!
|
Задача - упражнение 8 PWM или ШИМ Цифровое регулирование
мощности, Для выполнения этой задачи нужно :
в конце
задачи есть файлы и для - ATmega8 Что такое PWM <> ШИМ и чем он так хорош?
ШИМ ( англ. PWM ) сигнал имеет следующие основные параметры: - период ШИМ - это время между фронтами (или спадами) соседних импульсов - обозначается T - обычно он постоянен по времени. С периодом связана обратная величина - частота ШИМ равная 1 / T в Гц. - величина ШИМ - это отношение А / Т умноженное на 100 - получаем проценты (англ. X % duty cycle). - размах ШИМ - это разность между значениями вкл. и выкл. Значение выкл. может быть и не нулевым ! Зачем ШИМ ? Применение PWM
= = ШИМ позволяет :
Регулирование
мощности осуществляется изменением среднего времени подачи питания в
нагрузку. Вот пример регулирования мощности в электродвигателе :
Мотор будет подключаться к питанию +V когда напряжение "PWM In" будет достаточным для открывания транзистора IRL540. Мощные полевые и
IGBT транзисторы правильно переключать с
помощью специальных драйверов - например
IRS2110. Если частота переключений
не высокая то можно управлять полевиками серии
IRL ножкой МК через резистор 100 Ом причем
можно использовать несколько ножек МК параллельно. Подробно по
управлению электромоторами написано и нарисовано в соответствующих
апноутах и исходниках к ним. Управляя полевым транзистором одной ножкой МK вы можете легко переключать ток 50 -100 ампер !
Электропривод
более подробно описан в он-лайн курсе
2) ШИМ позволяет выполнить ЦАП - нужно лишь добавить ФНЧ - фильтр нижних частот. ФНЧ может быть простейшим - к выводу МК на который выводится ШИМ подключается резистор, а к другой вывод резистора заземляется конденсатором - на этом конденсаторе будет результат ЦА преобразования PWM сигнала. Но лучше сделать ФНЧ на ОУ как в задаче 9 курса. AVR ATmega16 имеет аппаратную возможность формировать 4 ШИМ сигнала на ножках OC0 OC1A OC1B OC2 Аппаратную - значит не загружая процессор вычислениями. AVR ATmega48 -88 -168 имеют 6 аппаратных PWM с частотой до 78 КГц AVR ATmega128 имеет 6 аппаратных PWM с разрешением до 16 бит ! Если
вам этого мало то :
Вот
простой пример на Си как вывести 10
битный ШИМ
После выполнения этого участка программы на ножку PD1 выводится ШИМ сигнал величиной 100 % - т.е. на ней постоянно присутствует высокий уровень - лог. "1"
Изменить
величину генерируемого ШИМ можно так:
После
выполнения этого участка программы
на ножку PD1 начнет
выводится ШИМ сигнал
величиной (pwm_val/10.23)
в процентах.
Вот
скриншот симуляции - получился
прекрасный ШИМ на
Нижний график DAC - это выход ШИМ с ножки PD5 после ФНЧ состоящего из резистора 500 КОм и конденсатора 10 нФ - по сути это результат 10 битного ЦАП числа в переменной pwm_val Пожалуйста : скачайте архив с файлами для CVAVR и VMLAB Обязательно запустите программы и посимулируйте не ленясь нажимать на светофор при остановках симулятора. Я очень подробно и с картинками рассмотрел симуляцию программы в VMLAB в задаче 3. Откройте ДШ МК и разберитесь с регистрами использованными в примере, что делает каждый бит ! Давайте
выведем 2 ШИМ сигнала 1) Запустите компилятор CodeVisionAVR и кликните по серой шестеренке в панели инструментов - запустится мастер начального кода. 2) Выберите МК и частоту кварца вот так:
Должно получится вот так: Вот и все установки для 2-х каналов 10 битных (top = 3FFh) ШИМ на ножках PD4PD5. Несколько щелчков мышкой ! 4) Давайте посмотрим код инициализации. Нажмите File -> Program Preview И... О! боже ... Ну конечно! Мы ж не
заглянули в ярлык порты и не
сконфигурировали
Нас
интересуют вот эти строки :
Проанализируем этот код. Как PD4 PD5 стали выходами я думаю вам очевидно! Далее идут комментарии настройки таймера_1 и строка кода: TCCR1A=0xA3; // 1010 0011 описание этого регистра на стр. 109 ДШ. Биты_7_6
влияют на ШИМ на ножке PD5 Как
влияют написано в таблице 45 ДШ У нас так : TCCR1B=0x09; // 0000 1001 значит
комбинация 4-х битов определяющая режим
ШИМ такова:
0111 Биты_2_0 регистра TCCR1B определяют коэф. деления источника тактового сигнала прежде чем он будет тикать таймер_1 У нас это
001
по таблице 48 коэф. деления
1 - т.е. таймер_1 Скорость счета совместно с разрядностью ШИМ определяют частоту ШИМ сигнала. Значит частота ШИМ задается коэффициентом деления тактирующего МК сигнала и разрядностью ШИМ. Следующие 4 регистра нас не интересуют сейчас. Вы почитайте сами в ДШ зачем они ! Следующие 4 регистра нас ОЧЕНЬ даже интересуют ! OCR1AH=0x00;
из
первого примера с одним ШИМ вы
наверняка поняли, что в эти
регистры нужно записывать желаемую
Теперь разобранным выше кодом нужно аккуратно и внимательно заменить аналогичный код в исходнике первого примера.ШИМ на ножке PD5 будет работать так же как и работал в первом примере - значит ни какого кода добавлять не нужно. А вот ШИМ на ножке PD4 я сделаю постоянным, добавив в программу перед строкой while(1){ такие
строчки: Чтобы
увидеть второй ШИМ сигнал на
виртуальном осциллографе SCOPE .plot V(PD1) V(PD4) V(PD5) V(DAC) добавку я обозначил красным цветом ! Все, теперь можно скомпилировать программу и запустить симуляцию. Скачайте второй архив для CVAVR и VMLAB Обязательно запустите программы и по-симулируйте не ленясь нажимать на светофор при остановках симулятора. Вот скриншот симуляции - это интересно ! Там 2 PWM сигнала ! Самостоятельно
определите параметры ШИМ Как это делать смотрите в задаче - упражнении 2 Дополнительные материалы : |
|
Copyright 2009-2019 123avr.com