- Co je signál PWM?
- Jak převést signál PWM na analogové napětí?
- Kruhový diagram:
- Programování signálu MSP pro PWM:
- Ovládání jasu LED pomocí PWM:
Tento výukový program je součástí série výukových programů MSP430G2 LaunchPad, ve kterých se učíme používat MSP430G2 LaunchPad od společnosti Texas Instruments. Dosud jsme se naučili základy desky a pokryli jsme, jak číst analogové napětí, rozhraní LCD s MSP430G2 atd. Nyní pokračujeme dalším krokem, abychom se dozvěděli o PWM v MSP430G2. Uděláme to ovládáním jasu LED změnou potenciometru. Potenciometr bude tedy připojen k analogovému kolíku MSP430, aby bylo možné číst jeho analogové napětí, proto se doporučuje vědět, než projdete návodem ADC.
Co je signál PWM?
Pulse Width Modulation (PWM) je digitální signál, který se nejčastěji používá v řídicích obvodech. Tento signál je nastaven na vysokou (3,3 V) a nízkou (0 V) v předdefinovaném čase a rychlosti. Čas, během kterého signál zůstane vysoký, se nazývá „čas zapnutí“ a čas, během kterého signál zůstane nízký, se nazývá „čas vypnutí“. Níže jsou popsány dva důležité parametry PWM:
Pracovní cyklus PWM:
Procento času, ve kterém signál PWM zůstává VYSOKÝ (v čase), se nazývá pracovní cyklus. Pokud je signál vždy zapnutý, je ve 100% pracovním cyklu a pokud je vždy vypnutý, je to 0% pracovní cyklus.
Pracovní cyklus = čas zapnutí / (čas zapnutí + čas vypnutí)
Frekvence PWM:
Frekvence signálu PWM určuje, jak rychle PWM dokončí jednu periodu. Jedna perioda je kompletní ZAPNUTÍ a VYPNUTÍ signálu PWM, jak je znázorněno na obrázku výše. V našem tutoriálu je frekvence 500 Hz, protože se jedná o výchozí hodnotu nastavenou IDE Energia.
Existuje mnoho aplikací pro signály PWM v reálném čase, ale pro představu lze signál PWM použít k ovládání servomotorů a lze jej také převést na analogové napětí, které dokáže ovládat jas jasu LED. Naučme se něco o tom, jak toho lze dosáhnout.
Zde je několik příkladů PWM s jiným mikrokontrolérem:
- Generování PWM pomocí mikrokontroléru PIC s MPLAB a XC8
- Ovládání servomotoru s Raspberry Pi
- Arduino LED stmívač pomocí PWM
Zkontrolujte všechny projekty související s PWM zde.
Jak převést signál PWM na analogové napětí?
K PWM signálům na analogové napětí můžeme použít obvod zvaný RC filtr. Jedná se o jednoduchý a nejčastěji používaný obvod pro tento účel. Obvod obsahuje pouze rezistor a kondenzátor v sérii, jak je znázorněno v níže uvedeném obvodu.
Zde se tedy v zásadě děje to, že když je signál PWM vysoký, kondenzátor se nabije rezistorem a když signál PWM poklesne, kondenzátor se vybije uloženým nábojem. Tímto způsobem budeme mít na výstupu vždy konstantní napětí, které bude úměrné pracovnímu cyklu PWM.
Ve výše uvedeném grafu je žlutě zbarvený signál PWM a modře zbývá výstupní analogové napětí. Jak vidíte, výstupní vlna nebude čistá stejnosměrná vlna, ale pro naši aplikaci by měla velmi dobře fungovat. Pokud potřebujete čistou stejnosměrnou vlnu pro jiný typ aplikace, měli byste navrhnout spínací obvod.
Kruhový diagram:
Schéma zapojení je velmi jednoduché; má jen potenciometr a rezistor a kondenzátor pro vytvoření RC obvodu a samotné LED. Potenciometr se používá k zajištění analogového napětí, na jehož základě lze řídit pracovní cyklus signálu PWM. Výstup z hrnce je připojen na Pin P1.0, který může číst analogová napětí. Pak musíme vytvořit signál PWM, který lze provést pomocí kolíku P1.2, tento signál PWM se poté odešle do obvodu RC filtru a převede signál PWM na analogové napětí, které se poté přenese na LED.
Je velmi důležité si uvědomit, že ne všechny piny na desce MSP mohou číst analogové napětí nebo mohou generovat piny PWM. Konkrétní piny, které mohou provádět konkrétní úkoly, jsou zobrazeny na obrázku níže. Toto vždy používejte jako vodítko pro výběr pinů pro programování.
Sestavte kompletní obvod, jak je znázorněno výše, můžete použít prkénko a několik propojovacích vodičů a snadno provést připojení. Po dokončení připojení moje deska vypadala, jak je znázorněno níže.
Programování signálu MSP pro PWM:
Jakmile je hardware připraven, můžeme začít s naším programováním. První věcí v programu je deklarovat piny, které budeme používat. Zde použijeme jako náš výstupní pin číslo 4 (P1.2), protože má schopnost generovat PWM. Vytvoříme tedy proměnnou a přiřadíme název špendlíku, aby bylo snadné na ni později v programu odkázat. Celý program je uveden na konci.
int PWMpin = 4; // Používáme 4. pin na modulu MSP jako pin PWM
Dále jsme vstoupit do nastavení funkcí. Bez ohledu na kód je zde napsáno bude proveden pouze jednou, zde prohlašujeme, že jsme pomocí tohoto 4. ročník pin jako výstupní pin od PWM je výstup funkce. Všimněte si, že jsme zde místo čísla 4 použili proměnnou PWMpin , aby kód vypadal smysluplněji
void setup () { pinMode (PWMpin, OUTPUT); // PEMpin je nastaven jako Outptut }
Nakonec jsme se dostali do smyčky funkce. Cokoli sem napíšeme, bude provedeno znovu a znovu. V tomto programu musíme číst analogové napětí a podle toho generovat signál PWM, a to se musí opakovat znovu a znovu. Nejprve tedy začneme čtením analogového napětí z pinu A0, protože jsme se k němu připojili potenciometrem.
Zde čteme hodnotu pomocí funkce AanalogRead , tato funkce vrátí hodnotu 0-1024 na základě hodnoty napětí přivedeného na pin. Tuto hodnotu poté uložíme do proměnné zvané „val“, jak je znázorněno níže
int val = analogRead (A0); // načte hodnotu ADC z pinu A0
Musíme převést hodnoty 0 až 1024 z ADC na hodnoty 0 až 255, abychom to dali funkci PWM. Proč bychom to měli převést? To povím brzy, ale zatím si pamatujte, že musíme konvertovat. Chcete-li převést jednu sadu hodnot do jiné sady hodnot Energia má mapa funkci podobnou Arduino. Takže převádíme hodnoty 0–1204 na 0–255 a ukládáme je zpět do proměnné „val“.
val = mapa (val , 0, 1023, 0, 255); // ADC dá hodnotu 0-1023, převede ji na 0-255
Nyní máme proměnnou hodnotu 0-255 na základě polohy potenciometru. Jediné, co musíme udělat, je použít tuto hodnotu na pin PWM, což lze provést pomocí následujícího řádku.
analogWrite (PWMpin, val); // Tuto hodnotu zapište na pin PWM.
Vraťme se k otázce, proč je na pin PWM zapsáno 0-255. Tato hodnota 0-255 rozhoduje o pracovním cyklu signálu PWM. Například pokud je hodnota signálu 0, znamená to, že pracovní cyklus je 0% pro 127, to je 50% a pro 255 je to 100%, stejně jako to, co je zobrazeno a vysvětleno v horní části tohoto článku.
Ovládání jasu LED pomocí PWM:
Jakmile pochopíte hardware a kód, je čas se pobavit s fungováním obvodu. Nahrajte kód na desku MSP430G2 a otočte potenciometrem. Když otočíte knoflíkem, napětí na kolíku 2 se bude lišit, což bude číst mikrokontrolér a podle napětí se budou generovat signály PWM na kolíku 4. Čím vyšší napětí, tím větší bude pracovní cyklus a naopak.
Tento signál PWM se poté převede na analogové napětí, aby svítil LED. Jasu LED je přímo úměrná pracovní cyklus PWM signálu. Kromě LED diody na prkénku na desce si také můžete všimnout smd LED (červená barva), která mění svůj jas podobně jako LED na prkénku. To je LED je také připojen ke stejnému kolíku, ale nemá RC síť, takže ve skutečnosti bliká velmi rychle. Deskou můžete potřást v temné místnosti a zkontrolovat její blikající povahu. Kompletní práci můžete vidět také na videu níže.
To je pro všechny nyní vše, naučili jsme se, jak používat signály PWM na desce MSP430G2, v našem dalším výukovém programu se naučíme, jak snadné je řídit servomotor pomocí stejných signálů PWM. Máte-li jakékoli pochybnosti, pošlete je do sekce komentářů níže nebo na fóra pro technickou pomoc.