В этом проекте мы собираемся использовать одну из функций ATmega32A для регулировки яркости светодиода мощностью 1 Вт. Для регулировки скорости светодиода используется метод ШИМ (широтно-импульсная модуляция). В этом руководстве по ШИМ микроконтроллеру AVR подробно объясняется концепция ШИМ и генерация ШИМ (вы также можете проверить эту простую схему генератора ШИМ). Рассмотрим простую схему, показанную на рисунке.
Теперь, если переключатель на рисунке выше постоянно замкнут в течение определенного периода времени, лампочка будет постоянно гореть в течение этого времени. Если переключатель замкнут на 8 мс и разомкнут на 2 мс в течение цикла 10 мс, то лампочка будет включена только в течение 8 мс. Теперь среднее значение терминала за период в 10 мс = время включения / (время включения + время выключения), это называется рабочим циклом и составляет 80% (8 / (8 + 2)), поэтому среднее выходное напряжение составит 80% от напряжения аккумулятора.
Во втором случае переключатель замыкается на 5 мс и размыкается на 5 мс в течение 10 мс, поэтому среднее напряжение на выходе на выходе будет 50% от напряжения батареи. Скажем, если напряжение аккумулятора составляет 5 В, а рабочий цикл составляет 50%, то среднее напряжение на клеммах будет 2,5 В.
В третьем случае рабочий цикл составляет 20%, а среднее напряжение на клеммах составляет 20% от напряжения батареи.
В ATMEGA32A имеется четыре канала ШИМ, а именно OC0, OC1A, OC1B и OC2. Здесь мы собираемся использовать канал OC0 PWM для изменения яркости светодиода.
Необходимые компоненты
Оборудование:
Микроконтроллер ATmega32
Источник питания (5В)
Программист AVR-ISP
Конденсатор 100 мкФ, 1Вт светодиод
TIP127 транзистор
Пуговицы (2 шт.)
Конденсатор 100нФ (104) (2 штуки), Резисторы 100 Ом и 1 кОм (2 штуки).
Программного обеспечения:
Атмель Студия 6.1
Прогисп или флеш-магия
Принципиальная схема и объяснение работы
На приведенном выше рисунке показана принципиальная схема светодиодного диммера с микроконтроллером AVR (вы также можете проверить эту простую схему светодиодного диммера).
В ATmega для четырех каналов ШИМ мы обозначили четыре контакта. Мы можем только выводить ШИМ на эти контакты. Поскольку мы используем PWM0, мы должны принимать сигнал PWM на выводе OC0 (3- й контакт PORTB). Как показано на рисунке, мы подключаем базу транзистора к выводу OC0 для питания светодиода. Другое дело - четыре канала ШИМ, два из которых - 8-битные каналы ШИМ. Мы собираемся использовать здесь 8-битный канал ШИМ.
Конденсатор подключен к каждой из кнопок, чтобы избежать дребезга. Каждый раз, когда нажимается кнопка, на контакте будет слышен шум. Хотя этот шум стабилизируется за миллисекунды. Для контроллера резкие пики перед стабилизацией действуют как триггеры. Этот эффект можно устранить программно или аппаратно, чтобы программа была простой. Мы используем аппаратный метод, добавляя противодействующий конденсатор.
Конденсаторы сводят на нет эффект отскока кнопок.
В ATMEGA есть несколько способов генерации ШИМ, а именно:
1. Правильная фаза ШИМ
2. Быстрая ШИМ
Здесь мы собираемся сделать все просто, поэтому мы собираемся использовать метод FAST PWM для генерации сигнала PWM.
Сначала нужно выбрать частоту ШИМ. Обычно это зависит от приложения, для светодиода подойдет любая частота выше 50 Гц. По этой причине мы выбираем счетчик часов 1MHZ. Итак, мы не выбираем прескаляр. Прескаляр - это число, выбранное таким образом, чтобы получить меньшие часы счетчика. Например, если частота генератора составляет 8 МГц, мы можем выбрать прескаляр «8», чтобы получить частоту 1 МГц для счетчика. Прескаляр выбирается в зависимости от частоты. Если нам нужно больше импульсов периода времени, мы должны выбрать более высокий прескаляр.
Теперь, чтобы получить FAST PWM с частотой 50 Гц от ATMEGA, нам нужно включить соответствующие биты в регистре « TCCR0 ». Это единственный регистр, о котором нам нужно позаботиться, чтобы получить 8-битный FAST PWM.
Вот, 1. CS00, CS01, CS02 (ЖЕЛТЫЙ) - выберите прескаляр для выбора часов счетчика. Таблица для соответствующего прескаляра приведена в таблице ниже. Итак, для предварительного масштабирования (часы генератора = часы счетчика).
поэтому CS00 = 1, два других бита равны нулю.
2. WGM01 и WGM00 изменяются, чтобы выбрать режимы генерации сигналов, основанные на таблице ниже, для быстрой ШИМ. У нас WGM00 = 1 и WGM01 = 1;
3. Теперь мы знаем, что ШИМ - это сигнал с другим коэффициентом заполнения или разным временем включения и выключения. До сих пор мы выбрали частоту и тип ШИМ. Основная тема этого проекта лежит в этом разделе. Чтобы получить другой коэффициент заполнения, мы собираемся выбрать значение от 0 до 255 (2 ^ 8 из-за 8 бит). Допустим, мы выбираем значение 180, поскольку счетчик начинает отсчет с 0 и достигает значения 180, может сработать выходной ответ. Этот триггер может быть инвертирующим или неинвертирующим. То есть можно сказать, что выход должен подтягиваться при достижении счетчика, или ему можно сказать, чтобы он сбрасывался при достижении счетчика.
Этот выбор подтягивания вверх или вниз выбирается битами CM00 и CM01.
Как показано в таблице, для выхода будет высокий уровень при сравнении, а выход будет оставаться высоким до максимального значения (как показано на рисунке внизу). Для этого нам нужно выбрать режим инвертирования, поэтому COM00 = 1; COM01 = 1.
Как показано на рисунке ниже, OCR0 (выходной регистр сравнения 0) - это байт, в котором хранится выбранное пользователем значение. Таким образом, если мы изменим OCR0 = 180, контроллер активирует изменение (высокий), когда счетчик достигнет 180 от 0.
Теперь, чтобы изменить яркость светодиода, нам нужно изменить ДОЛЖНОСТЬ ШИМ сигнала. Чтобы изменить коэффициент заполнения, нам нужно изменить значение OCR0. Когда мы меняем это значение OCR0, счетчику требуется другое время для достижения OCR0. Таким образом, контроллер повышает выходной уровень в разное время.
Итак, для ШИМ с разной скважностью нам нужно изменить значение OCR0.
В схеме есть две кнопки. Одна кнопка предназначена для увеличения значения OCR0 и, следовательно, коэффициента загрузки ШИМ-сигнала, другая - для уменьшения значения OCR0 и, следовательно, коэффициента заполнения сигнала ШИМ.