W tym projekcie wykorzystamy jedną z cech ATmega32A do regulacji jasności 1-watowej diody LED. Metodą używaną do regulacji szybkości diody LED jest PWM (modulacja szerokości impulsu). Ten samouczek dotyczący PWM mikrokontrolera AVR wyjaśnia szczegółowo koncepcję PWM i generowanie PWM (można również sprawdzić ten prosty obwód generatora PWM). Rozważ prosty obwód, jak pokazano na rysunku.
Teraz, jeśli przełącznik na powyższym rysunku jest zamknięty w sposób ciągły przez pewien czas, żarówka będzie się świecić w tym czasie w sposób ciągły. Jeśli przełącznik jest zamknięty na 8 ms i otwarty na 2 ms w cyklu 10 ms, to żarówka zapali się tylko w czasie 8 ms. Teraz średni terminal w okresie 10 ms = czas włączenia / (czas włączenia + czas wyłączenia), nazywa się to cyklem pracy i wynosi 80% (8 / (8 + 2)), więc średnia napięcie wyjściowe będzie wynosić 80% napięcia akumulatora.
W drugim przypadku przełącznik jest zamknięty na 5 ms i otwarty na 5 ms przez okres 10 ms, więc średnie napięcie na zaciskach na wyjściu będzie wynosić 50% napięcia akumulatora. Powiedz, czy napięcie akumulatora wynosi 5 V, a cykl pracy wynosi 50%, a więc średnie napięcie na zaciskach wyniesie 2,5 V.
W trzecim przypadku cykl pracy wynosi 20%, a średnie napięcie na zaciskach wynosi 20% napięcia akumulatora.
W ATMEGA32A mamy cztery kanały PWM, a mianowicie OC0, OC1A, OC1B i OC2. Tutaj użyjemy kanału OC0 PWM do zmiany jasności diody LED.
Wymagane składniki
Sprzęt komputerowy:
Mikrokontroler ATmega32
Zasilanie (5 V)
Programator AVR-ISP
Kondensator 100uF, 1 watowa dioda LED
Tranzystor TIP127
Guziki (2 sztuki)
Kondensator 100nF (104) (2 sztuki), Rezystory 100Ω i 1kΩ (2 sztuki).
Oprogramowanie:
Atmel Studio 6.1
Magia Progisp lub Flash
Schemat obwodu i objaśnienie robocze
Powyższy rysunek przedstawia schemat obwodu ściemniacza LED z mikrokontrolerem AVR (można również sprawdzić ten prosty obwód ściemniacza LED).
W ATmega dla czterech kanałów PWM wyznaczyliśmy cztery piny. Możemy wziąć wyjście PWM tylko na tych pinach. Ponieważ korzystania PWM0 należy wziąć sygnału PWM na OC0 trzpienia (PORTB 3 rd PIN). Jak pokazano na rysunku, podłączamy podstawę tranzystora do pinu OC0, aby sterować diodą LED mocy. Tutaj kolejną rzeczą jest ponad cztery kanały PWM, dwa to 8-bitowe kanały PWM. Użyjemy tutaj 8-bitowego kanału PWM.
Kondensator jest podłączony do każdego z przycisków, aby uniknąć podskakiwania. Za każdym razem, gdy zostanie naciśnięty przycisk, będzie słyszalny dźwięk na bolcu. Chociaż ten hałas stabilizuje się w milisekundach. Dla kontrolera ostre piki przed stabilizacją działają jak wyzwalacze. Efekt ten można wyeliminować za pomocą oprogramowania lub sprzętu, aby program był prosty. Używamy metody sprzętowej, dodając kondensator odbijający.
Kondensatory niwelują efekt odbijania się przycisków.
W ATMEGA istnieje kilka sposobów generowania PWM, są to:
1. Faza PWM poprawna
2. Szybki PWM
Tutaj wszystko będzie proste, więc użyjemy metody FAST PWM do wygenerowania sygnału PWM.
Najpierw należy wybrać częstotliwość PWM, zwykle zależy to od zastosowania, dla diody LED wystarczyłaby częstotliwość większa niż 50 Hz. Z tego powodu wybieramy zegar licznikowy 1MHz. Więc nie wybieramy prescalara. Prescalar to liczba wybrana tak, aby uzyskać mniejszy licznik czasu. Na przykład, jeśli zegar oscylatora wynosi 8 MHz, możemy wybrać preskalar równy '8', aby uzyskać zegar 1 MHz dla licznika. Prescalar jest wybierany na podstawie częstotliwości. Jeśli chcemy więcej impulsów okresu czasu, musimy wybrać wyższy prescalar.
Teraz, aby uzyskać FAST PWM o taktowaniu 50 Hz z ATMEGA, musimy włączyć odpowiednie bity w rejestrze „ TCCR0 ”. To jedyny rejestr, którym musimy się przejmować, aby uzyskać 8-bitowy FAST PWM.
Tutaj, 1. CS00, CS01, CS02 (ŻÓŁTY) - wybierz preskalar do wyboru licznika zegara. Tabela dla odpowiedniego preskalara jest pokazana w poniższej tabeli. A więc do przeskalowania jednego (zegar oscylatora = zegar licznika).
więc CS00 = 1, pozostałe dwa bity to zero.
2. WGM01 i WGM00 zostały zmienione, aby wybrać tryby generowania przebiegu, w oparciu o poniższą tabelę, dla szybkiego PWM. Mamy WGM00 = 1 i WGM01 = 1;
3. Teraz wiemy, że PWM to sygnał o innym współczynniku wypełnienia lub różnych czasach włączenia. Do tej pory wybieraliśmy częstotliwość i rodzaj PWM. W tej sekcji znajduje się główny temat tego projektu. Aby uzyskać inny współczynnik wypełnienia, wybierzemy wartość od 0 do 255 (2 ^ 8 z powodu 8 bitów). Powiedzmy, że wybieramy wartość 180, ponieważ licznik zaczyna odliczać od 0 i osiąga wartość 180, odpowiedź wyjścia może zostać wyzwolona. Ten wyzwalacz może być odwracający lub nieodwracający. Oznacza to, że wyjście można nakazać podciągnąć w górę po osiągnięciu liczby lub można powiedzieć, że ma zostać zmniejszone po osiągnięciu liczby.
Ten wybór podciągania w górę lub w dół jest wybierany przez bity CM00 i CM01.
Jak pokazano w tabeli, aby wyjście osiągnęło wysoki poziom przy porównaniu, a wyjście pozostanie wysokie aż do wartości maksymalnej (jak pokazano na rysunku u dołu). Aby to zrobić, musimy wybrać tryb odwracania, więc COM00 = 1; COM01 = 1.
Jak pokazano na poniższym rysunku, OCR0 (rejestr porównania wyjść 0) jest bajtem, który przechowuje wartość wybraną przez użytkownika. Jeśli więc zmienimy OCR0 = 180, sterownik wyzwoli zmianę (wysoką), gdy licznik osiągnie 180 od 0.
Teraz, aby zmienić jasność diody LED, musimy zmienić DUTY RATIO sygnału PWM. Aby zmienić współczynnik wypełnienia, musimy zmienić wartość OCR0. Kiedy zmieniamy tę wartość OCR0, licznik potrzebuje innego czasu, aby osiągnąć OCR0. Tak więc kontroler w różnych momentach ustawia wysoką wartość wyjściową.
Więc dla PWM różnych cykli pracy, musimy zmienić wartość OCR0.
W obwodzie mamy dwa przyciski. Jeden przycisk służy do zwiększania wartości OCR0, a więc DUTY RATIO sygnału PWM, drugi służy do zmniejszania wartości OCR0, a więc DUTY RATIO sygnału PWM.