- Osnove signala PWM
- Namestitev in zahteva strojne opreme
- Shema vezja za zatemnitev LED mikrokrmilnika Nuvoton N76E003
- PWM zatiči na mikrokrmilniku N76E003 Nuvoton
- Registri in funkcije PWM v mikrokrmilniku N76E003 Nuvoton
- Načini delovanja PWM v mikrokrmilniku Nuvoton N6E003
- Programiranje Nuvoton N76E003 za PWM
- Utripanje kode in preizkušanje izhoda
Modulacija širine impulza (PWM) je pogosto uporabljena tehnika v mikrokrmilnikih za izdelavo neprekinjenega impulznega signala z določeno frekvenco in delovnim ciklom. Skratka, pri PWM gre za spreminjanje širine impulza, medtem ko je frekvenca konstantna.
PWM signal se večinoma uporablja za nadzor servo motorja ali svetlosti LED. Ker lahko mikrokrmilniki na svojih izhodnih nožicah zagotavljajo samo logiko 1 (visoka) ali logika 0 (nizka), ne more zagotavljati spremenljive analogne napetosti, razen če je uporabljen pretvornik DAC ali digitalni v analogni pretvornik. V takem primeru lahko mikrokontroler programiramo za oddajanje PWM s spremenjenim delovnim ciklom, ki ga lahko nato pretvorimo v spremenljivo analogno napetost. Predhodno PWM smo že uporabljali tudi v številnih drugih mikrokrmilnikih.
- Vadnica za ARM7-LPC2148 PWM: Nadzor svetlosti LED
- Modulacija širine impulza (PWM) z uporabo MSP430G2: Nadzor svetlosti LED
- Ustvarjanje PWM z uporabo mikrokrmilnika PIC z MPLAB in XC8
- Modulacija širine impulza (PWM) v STM32F103C8: nadzor hitrosti enosmernega ventilatorja
- Ustvarjanje PWM signalov na GPIO nožicah mikrokrmilnika PIC
- Vadnica za PWM Raspberry Pi
- Vadnica PWM z ESP32
V tej vadnici bomo povezali LED, ki bo krmiljena s tem PWM signalom iz mikrokrmilne enote N76E003. Ocenili bomo, kakšno nastavitev strojne opreme potrebujemo in kako naj programiramo svoj mikrokrmilnik. Pred tem pa si oglejmo nekaj osnov PWM signala.
Osnove signala PWM
Na spodnji sliki je prikazan stalen signal PWM.
Zgornja slika ni nič drugega kot konstanten kvadratni val z enakim časom vklopa in enakim časom izklopa. Recimo, da je skupno obdobje signala 1 sekunda. Tako je čas vklopa in izklopa 500ms. Če je prek tega signala priključena LED, se LED vklopi za 500 ms in ugasne za 500 ms. Zato bo v perspektivnem pogledu LED zasvetila s polovico dejanske svetlosti, če je vklopljena na neposreden 5V signal brez izklopa.
Kot je prikazano na zgornji sliki, se bo, če se obratovalni ciklus spremeni, LED zasvetila s 25% dejanske svetlosti po enakem principu, kot smo že omenili. Če želite izvedeti več in izvedeti več o modulaciji širine impulza (PWM), si oglejte povezani članek.
Namestitev in zahteva strojne opreme
Ker je zahteva tega projekta nadzor LED s pomočjo PWM. Za povezavo z N76E003 je potrebna LED. Ker je na razvojni plošči N76E003 na voljo LED, bo uporabljena v tem projektu. Druge komponente niso potrebne.
Da ne omenjam, potrebujemo razvojno ploščo na osnovi mikrokrmilnika N76E003 in programer Nu-Link. Če se programer ne uporablja kot vir napajanja, bo morda potrebna dodatna napajalna enota 5 V.
Shema vezja za zatemnitev LED mikrokrmilnika Nuvoton N76E003
Kot lahko vidimo v spodnji shemi, je testna LED na voljo znotraj razvojne plošče in je priključena na vrata 1.4. Skrajno levo je prikazana povezava s programskim vmesnikom.
PWM zatiči na mikrokrmilniku N76E003 Nuvoton
N76E003 ima 20 zatičev, od tega 10 zatičev kot PWM. Spodnje slike prikazujejo zatiče PWM, označene v rdečem kvadratnem polju.
Kot lahko vidimo, poudarjene zatiče PWM lahko uporabimo tudi za druge namene. Vendar ta drugi namen zatičev ne bo na voljo, ko bodo zatiči konfigurirani za izhod PWM. Pin 1.4, ki se uporablja kot izhodni zatič PWM, bo izgubil drugo funkcionalnost. Toda to ni problem, saj za ta projekt ni potrebna druga funkcionalnost.
Razlog za izbiro zatiča 1.4 kot izhodnega zatiča je v tem, da je vgrajena testna LED dioda priključena na ta zatič v razvojni plošči, zato ne potrebujemo zunanjih LED. Vendar pa je v tem mikrokrmilniku od 20 zatičev 10 izhodov mogoče uporabiti kot izhodni zatič PWM, druge zatiče PWM pa lahko uporabimo za namene, povezane z izhodom.
Registri in funkcije PWM v mikrokrmilniku N76E003 Nuvoton
N76E003 uporablja sistemsko uro ali preliv časovnika 1, deljeno s PWM uro, pri čemer je mogoče Prescaler izbrati med 1/1 ~ 1/128. Obdobje PWM lahko nastavite s pomočjo 16-bitnega registra PWMPH in PWMPL registra.
Mikrokrmilnik ima šest posameznih registrov PWM, ki generirajo šest signalov PWM, imenovanih PG0, PG1, PG2, PG3, PG4 in PG5. Vendar je obdobje enako za vse kanale PWM, ker imajo isti 16-bitni števec obdobja, vendar se delovni cikel vsakega PWM lahko razlikuje od drugih, saj vsak PWM uporablja drugačen 16-bitni register delovnega cikla, imenovan {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} in {PWM5H, PWM5L}. Tako je v N76E003 mogoče šest izhodov PWM ustvariti neodvisno z različnimi delovnimi cikli.
V nasprotju z drugimi mikrokrmilniki omogočanje PWM I / O zatičev v njihov izhod PWM ne nastavi samodejno. Tako mora uporabnik konfigurirati način I / O izhoda.
Karkoli je torej potrebno za aplikacijo, je prvi korak določiti ali izbrati enega ali dva ali celo več kot dva V / I zatiča kot izhod PWM. Po izbiri enega morate vhodno / izhodne nožice nastaviti kot način Push-Pull ali kvazi dvosmerno za generiranje PWM signala. To lahko izberete s pomočjo registra PxM1 in PxM2. Ta dva registra nastavita načina V / I, kjer x pomeni številko vrat (na primer, vrata P1.0 bodo registra P1M1 in P1M2, za P3.0 pa P3M1 in P3M2 itd.)
Konfiguracijo lahko vidite na spodnji sliki -
Nato je naslednji korak omogočiti PWM v določenih vhodno / izhodnih (ih) zatičih (ih). Za to mora uporabnik nastaviti registra PIOCON0 ali PIOCON1. Register je odvisen od preslikave nožic, saj PIOCON0 in PIOCON1 nadzorujeta različne nožice, odvisne od signalov PWM. Konfiguracijo teh dveh registrov lahko vidite na spodnji sliki -
Kot lahko vidimo, zgornji register nadzoruje 6 konfiguracij. Za ostalo uporabite register PIOCON1.
Tako zgornji register nadzoruje ostale 4 konfiguracije.
Načini delovanja PWM v mikrokrmilniku Nuvoton N6E003
Naslednji korak je izbira načinov delovanja PWM. Vsak PWM podpira tri načine delovanja - neodvisni, sinhroni in način mrtvega časa.
Neodvisni način ponuja rešitev, pri kateri je mogoče šest signalov PWM ustvariti neodvisno. To je potrebno največkrat, ko je treba vklopiti in nadzorovati delovanje ali zvočne signale, povezane z LED.
V Sinhroni način nastavi PG1 / 3/5 na enak pri medfaznih PWM izhod, enako kot PG0 / 2/4, kjer PG0 / 2/4 zagotavlja neodvisne PWM izhodnih signalov. To je potrebno predvsem za krmiljenje trifaznih motorjev.
Način vstavljanja mrtvih časov je nekoliko zapleten in se uporablja v resničnih motornih aplikacijah, zlasti v industrijskih aplikacijah. V takih aplikacijah mora biti dopolnilni izhod PWM vstavljen v "mrtvi čas", ki preprečuje poškodbe stikalnih naprav, kot so GPIB. Konfiguracije so v tem načinu nastavljene tako, da PG0 / 2/4 zagotavlja izhodne signale PWM na enak način kot neodvisni način, PG1 / 3/5 pa zagotavlja "izhodne PWM signale" izhod PG0 / 2/4 in prezrite PG1 / 3/5 dežurni register.
Z uporabo spodnje konfiguracije registra lahko izberete nad tri načine -
Naslednja konfiguracija je izbira vrst PWM z uporabo registra PWMCON1.
Kot lahko vidimo, sta na voljo dve vrsti PWM, ki ju lahko izberemo z zgornjim registrom. Pri poravnavi robov 16-bitni števec uporablja postopek z enim naklonom, tako da odšteje od 0000H do nastavljene vrednosti {PWMPH, PWMPL} in nato začne od 0000H. Izhodna valovna oblika je poravnana z levim robom.
Toda v načinu poravnave po sredini 16-bitni števec uporablja delovanje z dvojnim naklonom, tako da odšteje od 0000H do {PWMPH, PWMPL} in nato z odštevanjem spet preide iz {PWMPH, PWMPL} na 0000H. Izhod je poravnan po sredini in je koristen za ustvarjanje valovnih oblik, ki se ne prekrivajo. Zdaj končno nadzorne operacije PWM, ki jih je mogoče preveriti v spodnjih registrih -
Če želite nastaviti vir ure, uporabite kontrolni register ure CKCON.
Izhodni signal PWM je mogoče prikriti tudi s pomočjo registra PMEN. S pomočjo tega registra lahko uporabnik prikrije izhodni signal z 0 ali 1.
Naslednji je PWM Control Register-
Zgornji register je uporaben za zagon PWM, nalaganje novega obdobja in delovne obremenitve, nadzor zastavice PWM in brisanje števca PWM.
S tem povezane konfiguracije bitov so prikazane spodaj -
Za nastavitev delilnika ure uporabite register PWMCON1 za delilnik ure PWM. 5. bit se uporablja za združeni PWM, ki omogoča skupinski način, in zagotavlja enak delovni cikel za prve tri pare PWM.
Programiranje Nuvoton N76E003 za PWM
Kodiranje je preprosto in celotno kodo, uporabljeno v tej vadnici, najdete na dnu te strani. LED je priključen na zatič P1.4. Zato je treba za izhod PWM uporabiti pin P1.4.
V glavnem programu se nastavitve izvedejo v ustreznem vrstnem redu. Pod vrsticami kod določa PWM in konfigurira pin P1.4 kot izhod PWM.
P14_PushPull_Mode;
To se uporablja za nastavitev zatiča P1.4 v načinu push-pull. To je določeno v knjižnici Function_define.h kot-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Naslednje vrstice, ki se uporabljajo za omogočanje PWM v zatiču P1.4. To je opredeljeno tudi v knjižnici Function_define.h kot
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EAP = BIT Izhod PWM1 omogoči PWM_IMDEPENDENT_MODE;
Spodnja koda se uporablja za nastavitev PWM v neodvisnem načinu. V knjižnici Function_define.h je definirana kot-
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Nato moramo nastaviti izhod PWM tipa EDGE. V knjižnici Function_define.h je definirana kot-
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Nato moramo počistiti vrednost števca PWM, ki je na voljo v knjižnici SFR_Macro.h-
#define set_CLRPWM CLRPWM = 1
Po tem se kot ura Fsys izbere ura PWM, uporabljeni faktor delitve pa je 64 delitev.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Oba sta opredeljena kot
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Spodnja vrstica kode se uporablja za prikrivanje izhodnega signala PWM z 0, definiranim kot-
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Nato moramo nastaviti čas signala PWM. Ta funkcija nastavi obdobje v registru PWMPL in PWMPH. Ker je to 16-bitni register, funkcija za nastavitev obdobja PWM uporablja način prestavljanja bitov.
void set_PWM_period (nepodpisana vrednost int) { PWMPL = (vrednost & 0x00FF); PWMPH = ((vrednost & 0xFF00) >> 8); }
Uporabniki pa lahko poleg 1023 in 8-bitnega obdobja uporabljajo tudi druge vrednosti. Povečanje obdobja povzroči gladko zatemnitev ali bledenje.
set_PWMRUN;
S tem se zažene PWM, ki je definiran v knjižnici SFR_Macro.h kot-
#define set_PWMRUN PWMRUN = 1
Nato se v časovni zanki LED vklopi in neprestano bledi.
while (1) { for (value = 0; value <1024; value + = 10) { set_PWM1 (value); Timer1_Delay10ms (3); } za (vrednost = 1023; vrednost> 0; vrednost - = 10) { set_PWM1 (vrednost); Timer1_Delay10ms (2); } } }
Delovni cikel nastavi set_PWM1 ();, funkcija, ki nastavi delovni cikel v registru PWM1L in PWM1H.
void set_PWM1 (nepodpisana vrednost int) { PWM1L = (vrednost & 0x00FF); PWM1H = ((vrednost & 0xFF00) >> 8); set_LOAD; }
Utripanje kode in preizkušanje izhoda
Ko je koda pripravljena, jo samo prevedite in naložite v krmilnik. Če ne poznate okolja, si oglejte uvod v vadnico Nuvoton N76E003 in se naučite osnov. Kot lahko vidite iz spodnjega rezultata, je koda vrnila 0 opozoril in 0 napak ter utripala s privzeto utripajočo metodo Keil. Aplikacija začne delovati.
Obnova se je začela: Projekt: PWM Rebuild target 'Target 1' montaža STARTUP.A51… sestavljanje main.c… sestavljanje Delay.c… povezovanje… Velikost programa: data = 35,1 xdata = 0 code = 709 ustvarjanje šestnajstiška datoteka iz ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Napake, 0 Opozorila. Čas gradnje potekel: 00:00:05
Strojna oprema je priključena na vir napajanja in je delovala po pričakovanjih. To je svetlost vgrajene LED diode zmanjšana in nato povečana, kar kaže na spremembo delovnega cikla PWM.
Popolno delovanje te vadnice najdete tudi v spodnjem videoposnetku. Upam, da vam je bila vadnica všeč in ste se naučili kaj koristnega, če imate kakršna koli vprašanja, jih pustite v oddelku za komentarje ali pa uporabite naša forum za druga tehnična vprašanja.