В този проект ще използваме една от характеристиките на ATmega32A за регулиране на яркостта на 1 вата LED. Методът, който се използва за регулиране на скоростта на светодиода е PWM (Pulse Width Modulation). Този урок за AVM микроконтролер PWM обяснява в детайли концепцията за PWM и генерирането на PWM (Можете също да проверите тази проста схема на PWM генератор). Помислете за проста схема, както е показано на фигурата.
Сега, ако превключвателят на горната фигура е затворен непрекъснато за определен период от време, тогава крушката непрекъснато ще се включва през това време. Ако превключвателят е затворен за 8 ms и отворен за 2 ms за цикъл от 10 ms, тогава крушката ще бъде включена само за 8ms време. Сега средният терминал през целия период от 10ms = Включване на времето / (Включване на времето + Изключване на времето), това се нарича работен цикъл и е от 80% (8 / (8 + 2)), така че средната стойност изходното напрежение ще бъде 80% от напрежението на батерията.
Във втория случай превключвателят е затворен за 5ms и отворен за 5ms за период от 10ms, така че средното напрежение на изхода на изхода ще бъде 50% от напрежението на батерията. Кажете, ако напрежението на батерията е 5V, а работният цикъл е 50% и така средното напрежение на терминала ще бъде 2.5V.
В третия случай работният цикъл е 20%, а средното напрежение на клемата е 20% от напрежението на акумулатора.
В ATMEGA32A имаме четири ШИМ канала, а именно OC0, OC1A, OC1B и OC2. Тук ще използваме OC0 PWM канал за промяна на яркостта на светодиода.
Необходими компоненти
Хардуер:
Микроконтролер ATmega32
Захранване (5v)
Програмист AVR-ISP
Кондензатор 100uF, 1Watt LED
TIP127 транзистор
Бутони (2 броя)
Кондензатор 100nF (104) (2 броя), 100Ω и 1kΩ резистори (2 броя).
Софтуер:
Atmel studio 6.1
Прогисп или флаш магия
Електрическа схема и работно обяснение
Горната фигура показва електрическата схема на LED димер с AVR микроконтролер (Можете също да проверите тази проста схема на LED димери).
В ATmega за четири ШИМ канала сме определили четири пина. Можем да вземем PWM изход само на тези изводи. Тъй като използваме PWM0, трябва да приемаме PWM сигнал на OC0 пин (PORTB 3 -ти PIN). Както е показано на фигурата, ние свързваме основата на транзистора с OC0 щифт, за да задвижваме светодиода за захранване. Тук друго нещо е над четири ШИМ канала, два са 8-битови ШИМ канали. Тук ще използваме 8-битов ШИМ канал.
Към всеки от бутоните е свързан кондензатор, за да се избегне подскачането. При всяко натискане на бутон ще има някакъв шум на щифта. Въпреки че този шум се стабилизира за милисекунди. За контролера острите пикове преди стабилизиране действат като тригери. Този ефект може да бъде елиминиран чрез софтуер или хардуер, за да бъде програмата проста. Използваме хардуерен метод, като добавяме кондензатор за изключване.
Кондензаторите отменят ефекта от подскачането на бутоните.
В ATMEGA има няколко начина за генериране на ШИМ, те са:
1. Фаза правилна ШИМ
2. Бърза ШИМ
Тук ще поддържаме всичко просто, така че ще използваме FAST PWM метод за генериране на PWM сигнал.
Първо да изберете честотата на ШИМ, Това обикновено зависи от приложението, за светодиод всяка честота по-голяма от 50 Hz би направила. Поради тази причина ние избираме брояч 1MHZ. Така че ние не избираме прескалар. Прескаларът е число, което е така избрано, за да получи по-малък брояч. Например, ако часовникът на осцилатора е 8Mhz, можем да изберем прескалар от '8', за да получим 1MHz часовник за брояч. Прескаларът се избира въз основа на честотата. Ако искаме повече импулси от времеви период, трябва да изберем по-висок предскаларен.
Сега, за да извадим от ATMEGA БЪРЗАТА ШИМ от 50Hz часовник, трябва да активираме подходящите битове в регистъра “ 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 (Output Compare Register 0) е байтът, който съхранява избраната от потребителя стойност. Така че, ако променим OCR0 = 180, контролерът задейства промяната (висока), когато броячът достигне 180 от 0.
Сега за промяна на яркостта на светодиода трябва да променим DUTY RATIO на PWM сигнала. За да променим коефициента на мито, трябва да променим стойността на OCR0. Когато променим тази стойност на OCR0, броячът отнема различно време, за да достигне OCR0. Така че контролерът дърпа изхода високо в различно време.
Така че за ШИМ от различни работни цикли трябва да променим стойността на OCR0.
Във веригата имаме два бутона. Единият бутон е за увеличаване на стойността на OCR0 и така DUTY RATIO на ШИМ сигнала, другият е за намаляване на стойността на OCR0 и така DUTY RATIO на PWM сигнала.