- Co to jest sygnał PWM?
- Jak przekonwertować sygnał PWM na napięcie analogowe?
- Schemat obwodu:
- Programowanie MSP na sygnał PWM:
- Sterowanie jasnością diody LED za pomocą PWM:
Ten samouczek jest częścią serii samouczków MSP430G2 LaunchPad, w których uczymy się obsługi MSP430G2 LaunchPad firmy Texas Instruments. Do tej pory poznaliśmy podstawy działania płytki i omówiliśmy, jak odczytywać napięcie analogowe, interfejs LCD z MSP430G2 itp. Teraz przechodzimy do kolejnego etapu nauki o PWM w MSP430G2. Zrobimy to, kontrolując jasność diody LED, zmieniając potencjometr. Tak więc potencjometr zostanie podłączony do analogowego pinu MSP430, aby odczytać jego napięcie analogowe, dlatego zaleca się, aby przed kontynuowaniem zapoznać się z samouczkiem ADC.
Co to jest sygnał PWM?
Modulacja szerokości impulsu (PWM) to sygnał cyfrowy, który jest najczęściej używany w obwodach sterujących. Ten sygnał jest ustawiony jako wysoki (3,3 V) i niski (0 V) w określonym czasie i z określoną prędkością. Czas, w którym sygnał pozostaje wysoki, nazywany jest „czasem włączenia”, a czas, w którym sygnał pozostaje niski, nazywany jest „czasem wyłączenia”. Istnieją dwa ważne parametry PWM, jak omówiono poniżej:
Cykl pracy PWM:
Procent czasu, w którym sygnał PWM pozostaje WYSOKI (w czasie) jest nazywany cyklem pracy. Jeśli sygnał jest zawsze włączony, to jest w 100% cyklu pracy, a jeśli jest zawsze wyłączony, to cykl pracy 0%.
Cykl pracy = czas włączenia / (czas włączenia + czas wyłączenia)
Częstotliwość PWM:
Częstotliwość sygnału PWM określa, jak szybko PWM kończy jeden okres. Jeden okres to całkowite WŁĄCZENIE i WYŁĄCZENIE sygnału PWM, jak pokazano na powyższym rysunku. W naszym samouczku częstotliwość to 500 Hz, ponieważ jest to domyślna wartość ustawiona przez Energia IDE.
Istnieje mnóstwo zastosowań dla sygnałów PWM w czasie rzeczywistym, ale aby dać ci wyobrażenie, sygnał PWM może być używany do sterowania silnikami serwo, a także może być konwertowany na napięcie analogowe, które może kontrolować jasność diody LED. Dowiedzmy się trochę, jak można to zrobić.
Oto kilka przykładów PWM z innym mikrokontrolerem:
- Generowanie PWM za pomocą mikrokontrolera PIC z MPLAB i XC8
- Sterowanie serwomotorem z Raspberry Pi
- Ściemniacz LED oparty na Arduino wykorzystujący PWM
Sprawdź wszystkie projekty związane z PWM tutaj.
Jak przekonwertować sygnał PWM na napięcie analogowe?
Do sygnałów PWM na napięcie analogowe możemy użyć obwodu zwanego filtrem RC. Jest to prosty i najczęściej używany obwód do tego celu. Obwód zawiera tylko rezystor i kondensator połączone szeregowo, jak pokazano na poniższym obwodzie.
Tak więc zasadniczo dzieje się tutaj, gdy gdy sygnał PWM jest wysoki, kondensator ładuje się przez rezystor, a gdy sygnał PWM spada, kondensator rozładowuje się przez zgromadzony ładunek. W ten sposób zawsze będziemy mieć stałe napięcie na wyjściu, które będzie proporcjonalne do cyklu pracy PWM.
Na powyższym wykresie żółty to sygnał PWM, a niebieski to wyjściowe napięcie analogowe. Jak widać, fala wyjściowa nie będzie czystą falą DC, ale powinna bardzo dobrze działać w naszej aplikacji. Jeśli potrzebujesz czystej fali DC do innych zastosowań, powinieneś zaprojektować obwód przełączający.
Schemat obwodu:
Schemat obwodu jest dość prosty; ma tylko potencjometr i rezystor i kondensator, aby utworzyć obwód RC i samą diodę LED. Potencjometr służy do zapewnienia napięcia analogowego, na podstawie którego można kontrolować cykl pracy sygnału PWM. Wyjście potencjometru jest podłączone do Pin P1.0, który może odczytywać napięcia analogowe. Następnie musimy wytworzyć sygnał PWM, co można zrobić za pomocą pinu P1.2, ten sygnał PWM jest następnie wysyłany do obwodu filtra RC w celu konwersji sygnału PWM na napięcie analogowe, które jest następnie podawane do diody LED.
Bardzo ważne jest, aby zrozumieć, że nie wszystkie piny na płycie MSP mogą odczytywać napięcie analogowe lub mogą generować piny PWM. Piny, które mogą wykonywać określone zadania, pokazano na poniższym rysunku. Zawsze używaj tego jako wskazówki przy wyborze pinów do programowania.
Zmontuj cały obwód, jak pokazano powyżej, możesz użyć płytki stykowej i kilku przewodów połączeniowych i łatwo wykonać połączenia. Po wykonaniu połączeń moja płyta wyglądała tak, jak pokazano poniżej.
Programowanie MSP na sygnał PWM:
Gdy sprzęt będzie gotowy, możemy rozpocząć programowanie. Pierwszą rzeczą w programie jest zadeklarowanie pinów, których będziemy używać. Tutaj użyjemy pin nr 4 (P1.2) jako naszego pinu wyjściowego, ponieważ ma on zdolność generowania PWM. Dlatego tworzymy zmienną i przypisujemy nazwę pinu, aby można było łatwo odwołać się do niej później w programie. Kompletny program podany jest na końcu.
int PWMpin = 4; // Używamy czwartego pinu w module MSP jako pinu PWM
Następnie przechodzimy do funkcji konfiguracji . Jakikolwiek kod zostanie tutaj zapisany, zostanie wykonany tylko raz, tutaj deklarujemy, że używamy tego 4- tego styku jako styku wyjściowego, ponieważ PWM jest funkcją wyjściową. Zauważ, że użyliśmy tutaj zmiennej PWMpin zamiast liczby 4, aby kod wyglądał bardziej sensownie
void setup () { pinMode (PWMpin, OUTPUT); // PEMpin jest ustawiony jako Outptut }
Wreszcie przechodzimy do funkcji pętli . Cokolwiek tu piszemy, jest wielokrotnie wykonywane. W tym programie musimy odczytać napięcie analogowe i odpowiednio wygenerować sygnał PWM, co musi się powtarzać. Zacznijmy więc od odczytania napięcia analogowego z pinu A0, ponieważ podłączyliśmy do niego potencjometr.
Tutaj odczytujemy wartość za pomocą funkcji AanalogRead , ta funkcja zwróci wartość z zakresu 0-1024 na podstawie wartości napięcia przyłożonego do pinu. Następnie przechowujemy tę wartość w zmiennej o nazwie „val”, jak pokazano poniżej
int val = analogRead (A0); // odczytaj wartość ADC z pinu A0
Musimy przekonwertować wartości od 0 do 1024 z ADC na wartości od 0 do 255, aby nadać je funkcji PWM. Dlaczego powinniśmy to zmienić? Powiem to wkrótce, ale na razie pamiętaj, że musimy się przekonwertować. Aby zamienić jeden zestaw wartości, które mają inny zestaw wartości Energia ma mapę funkcję podobną do Arduino. Więc konwertujemy wartości 0-1204 na 0-255 i zapisujemy je z powrotem w zmiennej „val”.
val = map (val , 0, 1023, 0, 255); // ADC zwróci wartość 0-1023 i zamieni ją na 0-255
Teraz mamy zmienną wartość 0-255 w zależności od położenia potencjometru. Wszystko, co musimy zrobić, to użyć tej wartości na pinie PWM, można to zrobić za pomocą następującego wiersza.
analogWrite (PWMpin, val); // Zapisz tę wartość na pinie PWM.
Wróćmy do pytania, dlaczego na pin PWM jest zapisywane 0-255. Ta wartość 0-255 decyduje o cyklu pracy sygnału PWM. Na przykład, jeśli wartość sygnału wynosi 0, oznacza to, że cykl pracy wynosi 0% dla 127 to 50%, a dla 255 jest to 100%, tak jak pokazano i wyjaśniono na początku tego artykułu.
Sterowanie jasnością diody LED za pomocą PWM:
Po zrozumieniu sprzętu i kodu czas na zabawę z działaniem obwodu. Wgraj kod na płytkę MSP430G2 i obróć pokrętło potencjometru. Po przekręceniu pokrętła napięcie na pinie 2 będzie się zmieniać, co będzie odczytywane przez mikrokontroler i zgodnie z napięciem sygnały PWM będą generowane na pinie 4. Im większe napięcie, tym większy będzie cykl pracy i odwrotnie.
Ten sygnał PWM jest następnie konwertowany na napięcie analogowe, aby zaświecić diodę LED. Jasność diody LED jest wprost proporcjonalna do cyklu pracy sygnału PWM. Oprócz diody LED na płytce stykowej można również zauważyć diodę smd (kolor czerwony) zmieniającą swoją jasność podobnie do diody płytki prototypowej. Ta dioda LED jest również podłączona do tego samego pinu, ale nie ma sieci RC, więc tak naprawdę migocze bardzo szybko. Możesz potrząsnąć deską w ciemnym pomieszczeniu, aby sprawdzić jej migotanie. Całość pracy można również zobaczyć na poniższym filmie.
To wszystko na razie ludzie, nauczyliśmy się używać sygnałów PWM na płycie MSP430G2, w naszym następnym samouczku dowiemy się, jak łatwo jest sterować serwomotorem za pomocą tych samych sygnałów PWM. Jeśli masz jakiekolwiek wątpliwości, opublikuj je w sekcji komentarzy poniżej lub na forach w celu uzyskania pomocy technicznej.