В конце задачи
PWM примеры для ATmega8
и для ATmega128
Что
такое PWM <> ШИМ
и чем он так хорош?
ШИМ - это широтно-импульсная
модуляция. т.е.
модуляция, управление напряжением или
током путем изменением ширины
импульсов при неизменной их величине. Величина импульсов это разность
между включено и выключено.
На экране осциллографа (например
в PROTEUSили в SCOPE
в симуляторе VMLAB)
кусочек ШИМ сигнала выглядит примерно так:
ШИМ это практически цифровой
сигнал - т.е. это либо включено (на ножке МК это логическая "1")
либо выключено (на ножке МК это лог. "0").
Для создания ШИМ сигнала используются различные ключи - например
встроенные в МК или внешние транзисторы или тиристоры, симисторы.
ШИМ
( англ. PWM ) сигнал имеет следующие
основные параметры:
- период
ШИМ - это время между фронтами
(или спадами) соседних импульсов - обозначается T
- обычно он постоянен по времени. С
периодом связана обратная величина :
- частота
ШИМ равная 1 / T
выражается в Герцах - Гц.
- величина
ШИМ - коэффициент заполнения - duty cycle -
это отношение А
/ Т
Если умножить на 100 то получим в процентах.
- размах
ШИМ - это разность между значениями вкл. и выкл.
Значение
выкл. может быть и не нулевым !
Существует еще и
ЧИМ
- это изменение частоты следования импульсов ( включений нагрузки ) при
постоянной их длительности.
Зачем
ШИМ ?
Применение PWM
= = ШИМ позволяет :
1) регулировать мощность в нагрузке.
Регулирование
мощности осуществляется периодической подачей питания в нагрузку.
При этом коммутирующий (включающий - выключающий)
нагрузку транзисторный
ключ работает в
ключевом режиме и поэтому на нем выделяется
минимум тепла !
Вот
пример регулирования мощности в
электродвигателе :
Цепь питания мотора
будет замыкаться когда
напряжение "PWM In"
будет выше 4.5 вольт - т.е. достаточным для
открывания транзисторов серии
IRL - в данном
случае IRL540 IRLZ44 недорого по почте.
Если частота переключений
не высокая - до 2КГц - то можно управлять "полевиками"
MOSFET серии
IRLножкой МК через резистор 100 Ом
- очень советую транзистор
IRLZ44
Для увеличения тока управления можно использовать несколько ножек МК
соединенных параллельно. Подробно по
управлению электромоторами написано и нарисовано в соответствующих
апноутах и исходниках к ним.
Управляя полевым
транзистором одной ножкой МK
вы можете легко переключать ток 50 -100 и более ампер !
Мощные полевые и
IGBT транзисторы правильно переключать с
помощью специальных драйверов - например IRS2110 подавая на затвор
MOSFET напряжение более 10 вольт,
а на
IGBT более 15 вольт.
Вместо
электродвигателя может быть
лампа, нагревательный элемент или
смешанная нагрузка - т.е. комбинация R, C
и L.
Пример: Упрощенно - Если вы возьмете
электромотор стеклоподъемника ВАЗ или стеклоочистителя на 12 вольт и
подключите по схеме
выше к питанию 24 вольт то при подаче
на "PWM In"
вот таких сигналов:
мотор будет развивать такую мощность:
- для верхней
диаграммы ШИМ 10% - мощность будет 20%
(от номинальной при 12 вольтах).
- для средней диаграммы ШИМ 50% -
мощность будет 100%
- для нижнего графика ШИМ 90% -
значит мощность мотора
превысит в 1.8
раз номинальную. Осторожно
! Не спалите ! и мотор и транзистор.
Основы электроники
по-русски ТУТ
!
Это курс для начинающих - самые
нужные сведения по электронике ! Всего 1.08 Мб
Там рассказано с картинками - что такое полупроводники, транзисторы, резисторы, конденсаторы, индуктивности,
операционные
усилители, типовые схемы, диоды, тиристоры и многое другое !
2) ШИМ
позволяет выполнить ЦАП -
т.е. с помощью ШИМ
вы можете выводить аналоговый сигнал. Нужно лишь добавить
ФНЧ - фильтр нижних частот.
ФНЧ может
быть простейшим - к выводу МК на
который выводится ШИМ подключается
резистор, а к другой вывод резистора
заземляется конденсатором - на этом конденсаторе будет результат ЦА
преобразования PWM сигнала.
Но лучше
сделать ФНЧ правильно - на ОУ как в
задаче 9 курса.
AVR ATmega16
имеет аппаратную возможность
формировать 4 ШИМ сигнала на
ножках OC0 OC1A OC1B OC2
Аппаратную
- значит не загружая процессор
вычислениями.
AVR ATmega48
-88 -168 имеют 6 аппаратных
PWMс частотой до 78 КГц
AVR ATmega128
имеет 6 аппаратных PWM
AVR ATmega64
наверно 7 аппаратных ШИМ
Если
вам этого мало то :
С
помощью таймеров AVR PIC и извилистости
мозгов вы
можете программно
сформировать еще кучу ШИМ сигналов.Пример в задаче 13.
Еще
PWM'чиков
бы ... да Аппаратных !
Ну
подключите к МК по
последовательному интерфейсу SPI
(или иному) внешний
многоканальный PWM контроллер !
/* значение в 16 битном
регистре OCR1A определяет величину
генерируемого ШИМ сигнала на
ножке PD5 - если поделить ее на
10.24 то получим величину ШИМ PWM в процентах*/
OCR1AH = 0x03; // PWM(PD5) = OCR1A / 10.24
OCR1AL = 0xFF; // 0x03FF это число 1023
/* регистр OCR1A состоит
из двух 8-ми битных регистров OCR1AH
и OCR1AL запись в них
нужно проводить в указанной
последовательности! */
OCR1BH = 0x03;
OCR1BL = 0xFF;
ICR1H = 0x03;
ICR1L = 0xFF;
TCCR1A = 0x83; // 10000011
TCCR1B = 0x09; // 00001001
- start Timer
После
выполнения этого участка программы
на ножку PD5 будетвыводитьсяШИМ с коэффициентом заполнения (duty cycle, величина ШИМ) почти 100 % - т.е. на PD5 почти постоянно будет лог. "1" с
очень короткими "0".
Установить величину генерируемого
ШИМ можно так :
Вычислите новое значение из диапазона 0
- 1023 для записи в
OCR1A
и запишите вот такими строками
программы:
//
pwm_val - это число от 0 до 1023
// PWM на PD5 будет примерно OCR1A / 10.24 (в %)
OCR1AH = (char)(pwm_val>>8);
OCR1AL = (char)pwm_val;
После
выполнения этого участка программы
на ножку PD5 начнет
выводится ШИМ сигнал
величиной (pwm_val/10.24)
в процентах.
Совсем
не обязательно возится с процентами Это
только одна и величин которой
можно охарактеризовать величину
ШИМ.
Вы
можете использовать любые
удобные вам единицы.
Напомню
! (char)pwm_val
означает на Си :
преобразовать значение
переменной
pwm_val к типуchar
т.е.
от числа хранящегося в переменной
pwm_val
будет взяты
только младшие 8 бит - младший байт.
Вот
скриншот симуляции - получился
прекрасный ШИМ на
ножке PD5 и видна передача данных
по USART на ножке PD1.
Нижний
график DAC - это выход ШИМ с
ножки PD5 после ФНЧ состоящего
из
резистора 500 КОм и конденсатора 10 нФ
- по сути это результат
10 битного
ЦАП
числа в переменной pwm_val
из
первого примера с одним ШИМ вы
наверняка поняли, что
в эти регистры
нужно записывать старшие и младшие байты чисел от 0 до 1023 - и
это будет определять величину ШИМ
PWM.
Помните
в мастере опцию - не инвертирующий
?
Выбрав
inverted вы замените
величину
ШИМ на скважность !
"1"
и "0" на выходах OC1x просто
поменяются местами - ШИМ сигнал как бы перевернется - и задав (записью
соответствующего числа в
регистры OCR1xx)
величину ШИМ например 25 % на
выходе вы получите сигнал со
скважностью 25% -
соответственно величина такого
ШИМ сигнала будет 75%
Теперь разобранным
выше кодом нужно аккуратно и
внимательно
заменить аналогичный
код в исходнике первого примера.
ШИМ на
ножке PD5 будет работать так же как и
работал в первом примере -
значит ни
какого кода добавлять не нужно.
А вот ШИМ
на ножке PD4 я сделаю постоянным,
добавив в программу
перед строкой
while(1){
такие
строчки:
// вывести ШИМ
около 25% на PD4
OCR1BH = 0x00;
OCR1BL = 0xFF; // PWM(PD4) 255/10.24 = 24.9(%)
Чтобы
увидеть второй ШИМ сигнал на
виртуальном осциллографе SCOPE
симулятора VMLAB нужно в файле
проекта vmlab.prj внести добавку:
.plot V(PD1) V(PD4) V(PD5) V(DAC)
Добавку я
обозначил красным
цветом.
Очень удобно
наблюдать ШИМ в 4 канальном осциллографе PROTEUS !
Попробуйте...
Скриншот есть ниже.
Все, теперь можно
скомпилировать программу и запустить симуляцию.
Лаборатория CnCLab занимается разработкой и производством
радиоэлектронных устройств на базе микроконтроллеров и
программируемой логики, а также программного обеспечения для
персональных компьютеров.
Виртуальная
мини-лаборатория Omega.
Интегрированный комплекс различных измерительных и сервисных
устройств. В состав комплекса входят: логический анализатор,
программатор EPROM/MCU, генератор, осциллограф, частотомер,
Разработка продолжается...
Программаторы Orange.
Предназначены для программирования микросхем памяти (Serial EEPROM)
и микроконтроллеров. Наличие встроенного языка программирования
предоставляет практически неограниченные возможности добавления
новых протоколов. Orange2 -
Orange3 -
Orange4
Универсальный Логический анализатор
UniLogic.
Позволяет использовать любой ПК, оснащенный LPT портом, в качестве
логического анализатора с буфером 64K отсчетов, генератора цифровых
последовательностей, частотомера...
Программатор BiDiPro.
Поддерживает EPROM, FLASH память и микроконтроллеры. Использует LPT
порт в режиме Bidirectional/EPP. FREEWARE.