- Základy signálu PWM
- Nastavení hardwaru a požadavky
- Obvodové schéma pro stmívání LED mikrokontroléru Nuvoton N76E003
- PWM piny na N76E003 Nuvoton mikrokontroléru
- Registry a funkce PWM v mikrokontroléru Nuvoton N76E003
- Provozní režimy PWM v mikrokontroléru Nuvoton N6E003
- Programování Nuvoton N76E003 pro PWM
- Blikání kódu a testování výstupu
Pulzní šířková modulace (PWM) je běžně používanou technikou v mikrokontrolérech k výrobě spojitého pulzního signálu s definovanou frekvencí a pracovním cyklem. Stručně řečeno, PWM je o změně šířky pulzu, zatímco frekvence je konstantní.
Signál PWM se většinou používá při řízení servomotoru nebo jasu LED. Protože mikrokontroléry mohou na svých výstupních pinech poskytovat pouze logiku 1 (vysokou) nebo logiku 0 (nízkou), nemůže poskytnout proměnlivé analogové napětí, pokud není použit převodník DAC nebo digitální na analogový. V takovém případě může být mikrokontrolér naprogramován na výstup PWM s různým pracovním cyklem, který lze poté převést na měnící se analogové napětí. Dříve jsme periferie PWM používali i v mnoha dalších mikrokontrolérech.
- Výukový program ARM7-LPC2148 PWM: Řízení jasu LED
- Pulzní šířková modulace (PWM) pomocí MSP430G2: Ovládání jasu LED
- Generování PWM pomocí mikrokontroléru PIC s MPLAB a XC8
- Pulzní šířková modulace (PWM) v STM32F103C8: Řízení rychlosti stejnosměrného ventilátoru
- Generování signálů PWM na pinech GPIO mikrokontroléru PIC
- Výukový program PWM pro Raspberry Pi
- Výukový program PWM s ESP32
V tomto tutoriálu budeme propojovat LED, která bude ovládána pomocí tohoto PWM signálu z mikrokontrolérové jednotky N76E003. Vyhodnotíme, jaké nastavení hardwaru požadujeme a jak bychom měli programovat náš mikrokontrolér. Předtím pochopíme některé základy signálu PWM.
Základy signálu PWM
Na následujícím obrázku je zobrazen konstantní signál PWM.
Obrázek nahoře není nic jiného než konstantní obdélníková vlna se stejnou dobou zapnutí a stejnou dobou vypnutí. Předpokládejme, že celková doba signálu je 1 sekunda. Čas zapnutí a vypnutí je tedy 500 ms. Pokud je k tomuto signálu připojena LED, rozsvítí se na 500ms a zhasne na 500ms. V perspektivním pohledu se tedy LED rozsvítí na polovinu skutečného jasu, pokud je zapnuta na přímý signál 5 V bez jakéhokoli času vypnutí.
Nyní, jak je znázorněno na obrázku výše, pokud se změní pracovní cyklus, LED se rozsvítí na 25% skutečného jasu pomocí stejného principu, jaký byl popsán výše. Pokud se chcete dozvědět více a dozvědět se více o Pulse Width Modulation (PWM), můžete se podívat na propojený článek.
Nastavení hardwaru a požadavky
Požadavkem tohoto projektu je ovládání LED pomocí PWM. Pro propojení s N76E003 je vyžadována LED. Jelikož je na vývojové desce N76E003 k dispozici LED, bude použita v tomto projektu. Žádné další komponenty nejsou nutné.
Nemluvě o tom, že potřebujeme vývojovou desku založenou na mikrokontrolérech N76E003 a programátor Nu-Link. Pokud programátor nepoužíváte jako zdroj energie, může být zapotřebí další napájecí zdroj 5 V.
Obvodové schéma pro stmívání LED mikrokontroléru Nuvoton N76E003
Jak vidíme na níže uvedeném schématu, testovací LED je k dispozici uvnitř vývojové desky a je připojena na portu 1.4. Zcela vlevo je zobrazeno připojení programovacího rozhraní.
PWM piny na N76E003 Nuvoton mikrokontroléru
N76E003 má 20 pinů, z nichž 10 pinů lze použít jako PWM. Níže uvedené obrázky zobrazují kolíky PWM zvýrazněné v poli červeného čtverce.
Jak vidíme, zvýrazněné PWM piny lze použít i pro jiné účely. Tento další účel pinů však nebude k dispozici, pokud jsou piny nakonfigurovány pro výstup PWM. Pin 1.4, který se používá jako výstupní pin PWM, ztratí další funkce. To však není problém, protože pro tento projekt není vyžadována další funkce.
Důvodem, proč jsme vybrali pin 1.4 jako výstupní pin, je to, že na tento pin ve vývojové desce je připojena vestavěná testovací LED, takže nepotřebujeme externí LED. V tomto mikrokontroléru z 20 pinů však lze použít 10 pinů jako výstupní pin PWM a jakékoli jiné PWM piny lze použít pro účely související s výstupem.
Registry a funkce PWM v mikrokontroléru Nuvoton N76E003
N76E003 používá systémové hodiny nebo přetečení časovače 1 dělené hodinami PWM s možností předvolby od 1/1 ~ 1/128. Periodu PWM lze nastavit pomocí 16bitového registru periody PWMPH a PWMPL.
Mikrokontrolér má šest samostatných registrů PWM, které generují šest signálů PWM nazývaných PG0, PG1, PG2, PG3, PG4 a PG5. Perioda je však stejná pro každý kanál PWM, protože sdílejí stejný 16bitový čítač období, ale pracovní cyklus každého PWM se může lišit od ostatních, protože každý PWM používá jiný 16bitový registr pracovního cyklu pojmenovaný jako {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} a {PWM5H, PWM5L}. V N76E003 lze tedy nezávisle generovat šest PWM výstupů s různými pracovními cykly.
Na rozdíl od jiných mikrokontrolérů povolení PWM nenastaví I / O piny do jejich PWM výstupu automaticky. Uživatel tedy musí nakonfigurovat výstupní režim I / O.
Ať je tedy aplikace vyžadována cokoli, prvním krokem je určit nebo vybrat, který jeden nebo dva nebo dokonce více než dva I / O piny jako PWM výstup. Po výběru jednoho je třeba nastavit I / O piny jako režim Push-Pull nebo kvazi-obousměrný pro generování signálu PWM. To lze vybrat pomocí registrů PxM1 a PxM2. Tyto dva registry nastavují I / O režimy, kde x znamená číslo portu (například Port P1.0 bude registr P1M1 a P1M2, pro P3.0 to budou P3M1 a P3M2 atd.)
Konfiguraci lze vidět na následujícím obrázku -
Dalším krokem je pak povolení PWM v konkrétních I / O pinech. K tomu je třeba, aby uživatel nastavil registry PIOCON0 nebo PIOCON1. Registr je závislý na mapování pinů, protože PIOCON0 a PIOCON1 řídí různé piny v závislosti na signálech PWM. Konfiguraci těchto dvou registrů lze vidět na obrázku níže -
Jak vidíme, výše uvedený registr ovládá 6 konfigurací. Zbytek použijte registr PIOCON1.
Výše uvedený registr tedy řídí zbývající 4 konfigurace.
Provozní režimy PWM v mikrokontroléru Nuvoton N6E003
Dalším krokem je výběr provozních režimů PWM. Každý PWM podporuje tři provozní režimy - režim nezávislého, synchronního a mrtvého času.
Nezávislý režim poskytuje řešení, kde lze nezávisle generovat šest signálů PWM. Toto je požadováno maximálně, když je třeba zapnout a ovládat operace nebo bzučáky související s LED.
V synchronním režimu nastaví PG1 / 3/5 ve stejné ve fázi PWM výstup, stejně jako PG0 / 2/4, kde je PG0 / 2/4 poskytuje nezávislé výstupní signály PWM. To je vyžadováno hlavně pro řízení třífázových motorů.
Režim vkládání mrtvého času je trochu složitý a používá se v reálných motorových aplikacích, zejména v průmyslových aplikacích. V takových aplikacích musí být doplňkovým PWM výstupem vložení „mrtvého času“, které zabrání poškození výkonových spínacích zařízení, jako jsou GPIB. Konfigurace jsou v tomto režimu nastaveny tak, že PG0 / 2/4 poskytuje PWM výstupní signály stejným způsobem jako nezávislý režim, ale PG1 / 3/5 poskytuje „out-phase PWM signály“ výstup PG0 / 2/4 odpovídajícím způsobem a ignorovat PG1 / 3/5 Duty register.
Pomocí níže uvedené konfigurace registru lze vybrat výše tři režimy
Další konfigurací je výběr typů PWM pomocí registru PWMCON1.
Jak tedy vidíme, jsou k dispozici dva typy PWM, které lze vybrat pomocí výše uvedeného registru. V zarovnání na okraj používá 16bitové počítadlo operaci s jedním sklonem počítáním od 0000H do nastavené hodnoty {PWMPH, PWMPL} a poté od 0000H. Výstupní průběh je zarovnán k levé hraně.
V režimu zarovnání na střed však 16bitový čítač používá operaci dvojitého sklonu počítáním od 0000H do {PWMPH, PWMPL} a poté opět odchází od {PWMPH, PWMPL} do 0000H odpočítáváním. Výstup je zarovnán na střed a je užitečný pro generování nepřekrývajících se křivek. Nyní konečně kontrolní operace PWM, které lze zkontrolovat v níže uvedených registrech -
Chcete-li nastavit zdroj hodin, použijte řídicí modul hodin CKCON.
Výstupní signál PWM lze také maskovat pomocí registru PMEN. Pomocí tohoto registru může uživatel maskovat výstupní signál o 0 nebo 1.
Další je PWM Control Register-
Výše uvedený registr je užitečný pro spuštění PWM, načtení nové periody a provozního zatížení, ovládání PWM vlajky a vymazání PWM čítače.
Přidružené bitové konfigurace jsou uvedeny níže -
Chcete-li nastavit dělič hodin, použijte registr PWMCON1 pro dělič hodin PWM. Pátý bit se používá pro skupinový PWM s povoleným skupinovým režimem a poskytuje stejný pracovní cyklus pro první tři páry PWM.
Programování Nuvoton N76E003 pro PWM
Kódování je jednoduché a kompletní kód použitý v tomto výukovém programu najdete ve spodní části této stránky. LED je připojena ke kolíku P1.4. Pro výstup PWM je tedy potřeba použít pin P1,4.
V hlavním programu se nastavení provádí v příslušném pořadí. Níže uvedené řádky kódů nastavují PWM a konfigurují pin P1.4 jako výstup PWM.
P14_PushPull_Mode;
Slouží k nastavení kolíku P1.4 v režimu push-pull. To je definováno v knihovně Function_define.h as-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Další řádky slouží k povolení PWM v kolíku P1.4. To je také definováno v knihovně Function_define.h as-
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EA = BIT_TMP //P1,4 as Povolení výstupu PWM1 PWM_IMDEPENDENT_MODE;
Níže uvedený kód se používá k nastavení PWM v nezávislém režimu. V knihovně Function_define.h je definována jako-
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Pak musíme nastavit výstup PWM typu EDGE. V knihovně Function_define.h je definována jako-
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Dále musíme vyčistit hodnota čítače PWM, která je k dispozici v SFR_Macro.h Library-
#define set_CLRPWM CLRPWM = 1
Poté jsou hodiny PWM vybrány jako hodiny Fsys a použitý faktor dělení je 64 dělení.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Oba jsou definovány jako-
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Níže uvedený řádek kódu slouží k maskování výstupního signálu PWM hodnotou 0 definovanou jako -
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Poté musíme nastavit dobu periody signálu PWM. Tato funkce nastavuje periodu v registru PWMPL a PWMPH. Jelikož se jedná o 16bitový registr, funkce používá metodu posunu bitů k nastavení období PWM.
void set_PWM_period (unsigned int value) { PWMPL = (value & 0x00FF); PWMPH = ((hodnota & 0xFF00) >> 8); }
Kromě období 1023 a 8 bitů však uživatelé mohou používat i jiné hodnoty. Prodloužení období vede k plynulému stmívání nebo blednutí.
set_PWMRUN;
Tím se spustí PWM, který je definován v knihovně SFR_Macro.h as-
#define set_PWMRUN PWMRUN = 1
Dále se ve smyčce while LED rozsvítí a trvale zmizí.
while (1) { for (value = 0; value <1024; value + = 10) { set_PWM1 (value); Timer1_Delay10ms (3); } pro (hodnota = 1023; hodnota> 0; hodnota - = 10) { set_PWM1 (hodnota); Timer1_Delay10ms (2); } } }
Pracovní cyklus je nastaven funkcí set_PWM1 ();, která nastavuje pracovní cyklus v registru PWM1L a PWM1H.
void set_PWM1 (unsigned int value) { PWM1L = (value & 0x00FF); PWM1H = ((hodnota & 0xFF00) >> 8); set_LOAD; }
Blikání kódu a testování výstupu
Jakmile je kód připraven, jednoduše jej zkompilujte a nahrajte do ovladače. Pokud jste v prostředí nováčkem, podívejte se na úvodní cvičení s Nuvoton N76E003, kde se naučíte základy. Jak můžete vidět z níže uvedeného výsledku, kód vrátil 0 varování a 0 chyb a blikal pomocí výchozí metody blikání Keilem. Aplikace začne fungovat.
Znovu začal: Project: PWM přestavět cíl 'Target 1' montážní STARTUP.A51… kompilace main.c… kompilace Delay.c… spojující… Program Velikost: data = 35,1 xdata = 0 code = 709 Tvorba hexadecimální soubor z ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Chyba (y), 0 Varování (y). Uplynulý čas sestavení: 00:00:05
Hardware je připojen ke zdroji energie a fungoval podle očekávání. To je jas palubní LED snížený a poté zvýšený, což indikuje změnu pracovního cyklu PWM.
Kompletní fungování tohoto tutoriálu najdete také ve videu, na které odkazujete níže. Doufám, že se vám výukový program líbil a naučili se něco užitečného, pokud máte nějaké dotazy, nechte je v sekci komentářů nebo můžete použít naše fóra pro další technické otázky.