- Základy signálu PWM
- Hardvérové nastavenie a požiadavky
- Schéma zapojenia pre stmievanie LED mikrokontroléra Nuvoton N76E003
- Kolíky PWM na mikrokontroléri N76E003 Nuvoton
- Registre a funkcie PWM v mikrokontroléri N76E003 Nuvoton
- Prevádzkové režimy PWM v mikrokontroléri Nuvoton N6E003
- Programovanie Nuvoton N76E003 pre PWM
- Blikanie kódu a testovanie výstupu
Pulzná šírková modulácia (PWM) je bežne používanou technikou v mikrokontroléroch na výrobu spojitého impulzného signálu s definovanou frekvenciou a pracovným cyklom. Stručne povedané, PWM je o zmene šírky impulzu, zatiaľ čo frekvencia je konštantná.
Signál PWM sa väčšinou používa na riadenie servomotora alebo jasu LED. Pretože mikrokontroléry môžu na svojich výstupných pinoch poskytovať iba logiku 1 (vysokú) alebo logiku 0 (nízku), nemôže poskytnúť meniace sa analógové napätie, pokiaľ sa nepoužije prevodník DAC alebo digitálny analógový prevodník. V takom prípade môže byť mikrokontrolér naprogramovaný na výstup PWM s rôznym pracovným cyklom, ktorý je potom možné previesť na meniace sa analógové napätie. Predtým sme perifériu PWM používali aj v mnohých ďalších mikrokontroléroch.
- Výukový program ARM7-LPC2148 PWM: Ovládanie jasu LED
- Pulzná šírková modulácia (PWM) pomocou MSP430G2: Riadenie jasu LED
- Generovanie PWM pomocou PIC mikrokontroléra s MPLAB a XC8
- Pulzná šírková modulácia (PWM) v STM32F103C8: Riadenie rýchlosti jednosmerného ventilátora
- Generovanie signálov PWM na pinoch GPIO mikrokontroléra PIC
- Výukový program pre Raspberry Pi PWM
- Výukový program PWM s ESP32
V tomto návode budeme prepojiť LED, ktorá bude riadená pomocou tohto PWM signálu z jednotky mikrokontroléra N76E003. Zhodnotíme, aké hardvérové nastavenie požadujeme a ako máme programovať náš mikrokontrolér. Predtým si uvedomme niektoré základy signálu PWM.
Základy signálu PWM
Na nasledujúcom obrázku je zobrazený konštantný signál PWM.
Vyššie uvedený obrázok nie je nič iné ako konštantná obdĺžniková vlna s rovnakým časom ON a rovnakým časom OFF. Predpokladajme, že celková perióda signálu je 1 sekunda. Čas zapnutia a vypnutia je teda 500 ms. Ak je k tomuto signálu pripojená LED, rozsvieti sa na 500 ms a na 500ms zhasne. Preto v perspektívnom pohľade LED svieti na polovicu skutočného jasu, ak je zapnutá na priamy signál 5 V bez akejkoľvek doby vypnutia.
Teraz, ako je znázornené na vyššie uvedenom obrázku, ak sa zmení pracovný cyklus, LED dióda sa rozsvieti na 25% skutočného jasu podľa rovnakého princípu, ako je uvedené vyššie. Ak sa chcete dozvedieť viac a dozvedieť sa viac o Pulse Width Modulation (PWM), môžete si pozrieť prepojený článok.
Hardvérové nastavenie a požiadavky
Pretože požiadavkou tohto projektu je ovládanie LED pomocou PWM. Pre prepojenie s N76E003 sa vyžaduje LED. Pretože vo vývojovej doske N76E003 je k dispozícii LED, použije sa v tomto projekte. Nie sú potrebné žiadne ďalšie komponenty.
Nehovoriac o tom, potrebujeme vývojovú dosku založenú na mikrokontroléroch N76E003, ako aj programátor Nu-Link. Ak sa programátor nepoužíva ako zdroj energie, môže byť potrebný ďalší zdroj napájania 5 V.
Schéma zapojenia pre stmievanie LED mikrokontroléra Nuvoton N76E003
Ako vidíme na nasledujúcej schéme, testovacia LED je k dispozícii vo vnútri vývojovej dosky a je pripojená na port 1.4. Úplne vľavo je zobrazené pripojenie programovacieho rozhrania.
Kolíky PWM na mikrokontroléri N76E003 Nuvoton
N76E003 má 20 pinov, z ktorých 10 je možné použiť ako PWM. Na nasledujúcich obrázkoch sú zobrazené kolíky PWM zvýraznené v políčku červeného štvorca.
Ako vidíme, zvýraznené piny PWM sa dajú použiť aj na iné účely. Avšak tento iný účel pinov nebude k dispozícii, keď sú piny nakonfigurované pre výstup PWM. Pin 1.4, ktorý sa používa ako výstupný pin PWM, stratí ďalšiu funkčnosť. To však nie je problém, pretože pre tento projekt sa nevyžaduje ďalšia funkčnosť.
Dôvod, prečo sme vybrali pin 1.4 ako výstupný pin, je ten, že na tento pin vo vývojovej doske je pripojená vstavaná testovacia LED, takže nepotrebujeme externé LED. Avšak v tomto mikrokontroléri z 20 pinov možno 10 pinov použiť ako výstupný pin PWM a akékoľvek ďalšie PWM piny sa dajú použiť na účely súvisiace s výstupom.
Registre a funkcie PWM v mikrokontroléri N76E003 Nuvoton
N76E003 využíva systémové hodiny alebo pretečenie časovača 1 vydelené hodinami PWM s možnosťou voliteľného rozsahu od 1/1 do 1/128. Periódu PWM je možné nastaviť pomocou 16-bitového registra periód PWMPH a PWMPL.
Mikrokontrolér má šesť samostatných registrov PWM, ktoré generujú šesť signálov PWM nazývaných PG0, PG1, PG2, PG3, PG4 a PG5. Perióda je však rovnaká pre každý kanál PWM, pretože zdieľajú rovnaké 16-bitové počítadlo periódy, ale pracovný cyklus každého PWM sa môže líšiť od ostatných, pretože každý PWM používa iný 16-bitový register pracovného cyklu pomenovaný ako {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} a {PWM5H, PWM5L}. V N76E003 teda môže byť nezávisle generovaných šesť PWM výstupov s rôznymi pracovnými cyklami.
Na rozdiel od iných mikrokontrolérov povolenie PWM nenastaví I / O piny na ich PWM výstup automaticky. Užívateľ teda musí nakonfigurovať režim výstupu I / O.
Či už je to pre aplikáciu čokoľvek potrebné, prvým krokom je určiť alebo zvoliť, ktorý jeden alebo dva alebo dokonca viac ako dva I / O piny ako PWM výstup. Po výbere jedného je potrebné nastaviť I / O piny ako režim Push-Pull alebo kvázi obojsmerný na generovanie signálu PWM. To je možné zvoliť pomocou registrov PxM1 a PxM2. Tieto dva registre nastavujú I / O režimy, kde x znamená číslo portu (napríklad Port P1.0 bude register P1M1 a P1M2, pre P3.0 to budú P3M1 a P3M2 atď.)
Konfiguráciu je možné vidieť na nasledujúcom obrázku -
Ďalším krokom je potom povolenie PWM v konkrétnych I / O pinoch. Na to je potrebné, aby užívateľ nastavil registre PIOCON0 alebo PIOCON1. Register je závislý na mapovaní pinov, pretože PIOCON0 a PIOCON1 riadia rôzne piny v závislosti od signálov PWM. Konfiguráciu týchto dvoch registrov môžete vidieť na obrázku nižšie -
Ako vidíme, vyššie uvedený register ovláda 6 konfigurácií. Na zvyšok použite register PIOCON1.
Vyššie uvedený register teda riadi zvyšné 4 konfigurácie.
Prevádzkové režimy PWM v mikrokontroléri Nuvoton N6E003
Ďalším krokom je výber prevádzkových režimov PWM. Každý PWM podporuje tri prevádzkové režimy - nezávislý, synchrónny a režim aktivácie mŕtveho času.
Nezávislý režim poskytuje riešenie, pri ktorom je možné šesť PWM signálov generovať nezávisle. Toto je potrebné maximálne raz, keď je potrebné zapnúť a ovládať činnosti súvisiace s LED alebo bzučiaky.
V synchrónnom režime nastaví PG1 / 3/5 v rovnakej vo fáze PWM výstup, rovnako ako PG0 / 2/4, kde je PG0 / 2/4 poskytuje nezávislé výstupné signály PWM. Toto je potrebné hlavne pre riadenie trojfázových motorov.
Režim vkladania mŕtveho času je trochu zložitý a uplatňuje sa v skutočných motorových aplikáciách, najmä v priemyselných aplikáciách. V takýchto aplikáciách musí byť doplnkový PWM výstup zasunutý v „mŕtvom čase“, ktorý zabráni poškodeniu výkonových spínacích zariadení, ako sú GPIB. Konfigurácie sú v tomto režime nastavené tak, že PG0 / 2/4 poskytuje výstupné signály PWM rovnakým spôsobom ako nezávislý režim, ale PG1 / 3/5 poskytuje výstup „výstupných PWM signálov“ PG0 / 2/4 zodpovedajúcim spôsobom a ignorovať zoznam povinností PG1 / 3/5.
Vyššie tri režimy je možné zvoliť pomocou konfigurácie registra nižšie -
Ďalšou konfiguráciou je výber typov PWM pomocou registra PWMCON1.
Ako teda vidíme, sú k dispozícii dva typy PWM, ktoré je možné zvoliť pomocou vyššie uvedeného registra. Pri zarovnaní na okraj 16-bitové počítadlo používa operáciu s jedným svahom počítaním od 0000H do nastavenej hodnoty {PWMPH, PWMPL} a potom začína od 0000H. Výstupný priebeh je zarovnaný od ľavého okraja.
Ale v režime zarovnania na stred používa 16-bitové počítadlo operáciu s dvojitým sklonom odpočítavaním od 0000H do {PWMPH, PWMPL} a potom znova odchádza od {PWMPH, PWMPL} do 0000H odpočítavaním. Výstup je zarovnaný na stred a je užitočný na generovanie neprekrývajúcich sa kriviek. Teraz konečne kontrolné operácie PWM, ktoré je možné skontrolovať v registroch nižšie -
Na nastavenie zdroja hodín použite riadiaci register hodín CKCON.
Výstupný signál PWM možno maskovať aj pomocou registra PMEN. Pomocou tohto registra môže užívateľ maskovať výstupný signál o 0 alebo 1.
Ďalej je to PWM Control Register-
Vyššie uvedený register je užitočný na spustenie PWM, načítanie novej periódy a prevádzkového zaťaženia, riadenie príznaku PWM a vymazanie počítadla PWM.
Príslušné bitové konfigurácie sú zobrazené nižšie -
Ak chcete nastaviť rozdeľovač hodín, použite register PWMCON1 pre rozdeľovač hodín PWM. Piaty bit sa používa pre skupinový PWM s povoleným skupinovým režimom a poskytuje rovnaký pracovný cyklus pre prvé tri páry PWM.
Programovanie Nuvoton N76E003 pre PWM
Programovanie je jednoduché a kompletný kód použitý v tomto návode nájdete v dolnej časti tejto stránky. LED dióda je pripojená k pinu P1.4. Preto je potrebné, aby sa na výstup PWM použil pin P1,4.
V hlavnom programe sa nastavenia vykonávajú v príslušnom poradí. Pod riadkami kódov sa nastavuje PWM a konfiguruje pin P1.4 ako výstup PWM.
P14_PushPull_Mode;
Používa sa na nastavenie kolíka P1.4 v režime push-pull. Toto je definované v knižnici Function_define.h ako
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Ďalšie riadky slúžili na povolenie PWM v kolíku P1.4. Toto je definované aj v knižnici Function_define.h ako
#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 Povolenie výstupu PWM1 PWM_IMDEPENDENT_MODE;
Nasledujúci kód sa používa na nastavenie PWM v nezávislom režime. V knižnici Function_define.h je definovaná ako-
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Potom musíme nastaviť výstup PWM typu EDGE. V knižnici Function_define.h je definovaná ako-
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Ďalej musíme vyčistiť hodnota počítadla PWM, ktorá je k dispozícii v SFR_Macro.h Library-
#define set_CLRPWM CLRPWM = 1
Potom sú hodiny PWM vybrané ako hodiny Fsys a použitý faktor delenia je 64 dielikov.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Oba sú definované ako-
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Dolný riadok kódu sa používa na maskovanie výstupného PWM signálu 0 definovanou ako-
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Potom musíme nastaviť časový úsek signálu PWM. Táto funkcia nastavuje periódu v registri PWMPL a PWMPH. Pretože sa jedná o 16-bitový register, funkcia používa na nastavenie PWM periódy metódu bitového posúvania.
void set_PWM_period (hodnota bez znamienka int) { PWMPL = (hodnota & 0x00FF); PWMPH = ((hodnota & 0xFF00) >> 8); }
Okrem obdobia 1023 a 8 bitov však môžu používatelia používať aj iné hodnoty. Predĺženie obdobia vedie k plynulému stmievaniu alebo vyblednutiu.
set_PWMRUN;
Spustí sa PWM, ktorý je definovaný v knižnici SFR_Macro.h ako
#define set_PWMRUN PWMRUN = 1
Ďalej sa v slučke while LED zapne a nepretržite zhasína.
while (1) { for (value = 0; value <1024; value + = 10) { set_PWM1 (value); Timer1_Delay10ms (3); } pre (hodnota = 1023; hodnota> 0; hodnota - = 10) { set_PWM1 (hodnota); Timer1_Delay10ms (2); } } }
Pracovný cyklus je nastavený funkciou set_PWM1 ();, ktorá nastavuje pracovný cyklus v registroch PWM1L a PWM1H.
void set_PWM1 (hodnota bez znamienka int) { PWM1L = (hodnota & 0x00FF); PWM1H = ((hodnota & 0xFF00) >> 8); set_LOAD; }
Blikanie kódu a testovanie výstupu
Keď je kód pripravený, jednoducho ho skompilujte a nahrajte do ovládača. Ak ste v oblasti nováčikom, prečítajte si základné informácie o tutoriále Nuvoton N76E003. Ako vidíte z nižšie uvedeného výsledku, kód vrátil 0 varovaní a 0 chýb a blikal pomocou predvolenej metódy blikania pomocou Keila. Aplikácia začne pracovať.
Obnova bola zahájená: Projekt: PWM Obnovte cieľ „Cieľ 1“ zhromažďujúci program STARTUP.A51… kompilujte main.c… kompilujte Delay.c… prepájajte… Veľkosť programu: dáta = 35,1 xdata = 0 kód = 709 vytváranie hexadecimálny súbor z ". \ Objekty \ pwm"… ". \ Objekty \ pwm" - 0 chýb, 0 varovaní. Uplynutý čas výstavby: 00:00:05
Hardvér je pripojený k zdroju napájania a fungoval podľa očakávaní. To je jas palubnej LED znížený a potom zvýšený, čo indikuje zmenu pracovného cyklu PWM.
Kompletné fungovanie tohto tutoriálu nájdete tiež vo videu, na ktoré odkazujete nižšie. Dúfam, že sa vám návod páčil a dozvedeli ste sa niečo užitočné, ak máte nejaké otázky, nechajte ich v sekcii komentárov alebo môžete použiť naše fóra na ďalšie technické otázky.