У цьому проекті ми будемо використовувати одну з особливостей 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 для зміни яскравості світлодіода.
Потрібні компоненти
Обладнання:
Мікроконтролер ATmega32
Блок живлення (5 В)
Програміст AVR-ISP
Конденсатор 100 мкФ, 1 Вт світлодіод
Транзистор TIP127
Кнопки (2 шт.)
Конденсатор 100 нФ (104) (2 штуки), 100Ω та 1kΩ резистори (2 штуки).
Програмне забезпечення:
Студія Atmel 6.1
Прогісп або флеш-магія
Принципова схема та робоче пояснення
На наведеному малюнку представлена принципова схема світлодіодного диммера з мікроконтролером AVR (Ви також можете перевірити цю просту схему світлодіодного диммера).
В ATmega для чотирьох ШІМ-каналів ми призначили чотири висновки. Ми можемо взяти вихід ШІМ лише на цих штифтах. Оскільки ми використовуємо ШІМ0, ми повинні приймати ШІМ-сигнал на вивід OC0 (3- й PIN - код PORTB). Як показано на малюнку, ми підключаємо основу транзистора до виводу OC0 для керування світлодіодом живлення. Тут ще одна річ - це чотири ШІМ-канали, два - 8-бітові ШІМ-канали. Тут ми будемо використовувати 8-розрядний ШІМ-канал.
Щоб уникнути підстрибування, до кожної з кнопок підключений конденсатор. При кожному натисканні кнопки на штифті буде шум. Хоча цей шум стабілізується за мілісекунди. Для контролера різкими піками перед стабілізацією виступають тригерами. Цей ефект можна усунути за допомогою програмного чи апаратного забезпечення, щоб програма була простою. Ми використовуємо апаратний метод, додаючи розрядний конденсатор.
Конденсатори зводять нанівець ефект відскакування кнопок.
В ATMEGA існує кілька способів генерування ШІМ, це:
1. Фаза коректна ШІМ
2. Швидка ШІМ
Тут ми будемо робити все простим, тому ми будемо використовувати метод ШВИДКО ШІМ для генерації ШІМ-сигналу.
Спочатку виберіть частоту ШІМ. Це залежить від програми, як правило, для світлодіода підійде будь-яка частота більше 50 Гц. З цієї причини ми обираємо лічильник годин 1 МГц. Отже, ми не обираємо жодного прескаляра. Прескаляр - це число, яке вибрано таким чином, щоб отримати менший лічильник годин. Наприклад, якщо тактовий генератор становить 8 МГц, ми можемо вибрати прескаляр 8, щоб отримати тактову частоту 1 МГц для лічильника. Прескаляр вибирається на основі частоти. Якщо ми хочемо більше імпульсів періоду часу, ми повинні вибрати вищий прескаляр.
Тепер, щоб вивести ШВИРКУ ШІМ з тактовою частотою 50 Гц з ATMEGA, нам потрібно включити відповідні біти в реєстрі “ TCCR0 ”. Це єдиний реєстр, який нам потрібно турбувати, для отримання 8-бітного ШВИДКОГО ШІМ.
Ось, 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 (Output Compare Register 0) - це байт, в якому зберігається вибране користувачем значення. Отже, якщо ми змінимо OCR0 = 180, контролер ініціює зміну (високу), коли лічильник досягає 180 з 0.
Тепер для зміни яскравості світлодіода ми повинні змінити КОРОТКІСТЬ ШИМ-сигналу. Для того, щоб змінити коефіцієнт мита, нам потрібно змінити значення OCR0. Коли ми змінюємо це значення OCR0, лічильнику потрібен інший час, щоб досягти OCR0. Таким чином, контролер тягне вихід високо в різний час.
Отже, для ШІМ різних робочих циклів нам потрібно змінити значення OCR0.
У ланцюзі ми маємо дві кнопки. Одна кнопка призначена для збільшення значення OCR0 і, отже, МОЖЛИВОСТІ ШІМ-сигналу, інша - для зменшення значення OCR0 і, отже, МОЖЛИВОГО СОЮЗУ сигналу ШІМ.