- PWM signalo pagrindai
- Aparatinės įrangos sąranka ir reikalavimas
- „Nuvoton N76E003“ mikrovaldiklio šviesos diodų pritemdymo schema
- PWM kaiščiai ant N76E003 „Nuvoton“ mikrovaldiklio
- PWM registrai ir funkcijos N76E003 „Nuvoton“ mikrovaldiklyje
- PWM darbo režimai „Nuvoton N6E003“ mikrovaldiklyje
- „Nuvoton N76E003“ programavimas PWM
- Kodo mirksėjimas ir išvesties testavimas
Pulso pločio moduliacija (PWM) yra dažniausiai naudojama technika mikrovaldikliuose, kad būtų sukurtas nuolatinis impulsinis signalas, turintis apibrėžtą dažnį ir darbo ciklą. Trumpai tariant, PWM yra apie impulso pločio keitimą, kai dažnis yra pastovus.
PWM signalas dažniausiai naudojamas valdant servo variklį arba šviesos diodo ryškumą. Be to, kadangi mikrovaldikliai savo išvesties kaiščiuose gali pateikti tik „Logic 1“ („High“) arba „Logic 0“ („Low“), jie negali suteikti kintančios analoginės įtampos, nebent naudojamas DAC arba „Digital to Analog“ keitiklis. Tokiu atveju mikrovaldiklį galima užprogramuoti taip, kad išvestų PWM su įvairiu darbo ciklu, kurį vėliau galima konvertuoti į kintančią analoginę įtampą. Anksčiau PWM periferinius įrenginius taip pat naudojome daugelyje kitų mikrovaldiklių.
- „ARM7-LPC2148 PWM“ pamoka: LED ryškumo valdymas
- Impulso pločio moduliacija (PWM) naudojant MSP430G2: LED ryškumo valdymas
- PWM generavimas naudojant PIC mikrovaldiklį su MPLAB ir XC8
- Impulso pločio moduliacija (PWM) sistemoje STM32F103C8: nuolatinės srovės ventiliatoriaus greičio valdymas
- PWM signalų generavimas ant PIC mikrovaldiklio GPIO kaiščių
- „Raspberry Pi PWM“ pamoka
- PWM mokymo programa su ESP32
Šioje pamokoje mes sujungsime šviesos diodą, kuris bus valdomas naudojant šį PWM signalą iš N76E003 mikrovaldiklio bloko. Mes įvertinsime, kokios aparatūros sąrankos mums reikia ir kaip turėtume užprogramuoti savo mikrovaldiklį. Prieš tai supraskime kai kuriuos PWM signalo pagrindus.
PWM signalo pagrindai
Žemiau esančiame paveikslėlyje rodomas pastovus PWM signalas.
Aukščiau pateiktas vaizdas yra tik nuolatinė kvadratinė banga su tuo pačiu įjungimo ir išjungimo laiku. Tarkime, bendras signalo periodas yra 1 sekundė. Taigi įjungimo ir išjungimo laikas yra 500 ms. Jei per šį signalą prijungtas šviesos diodas, šviesos diodas įsijungs 500 ms ir išsijungs 500 ms. Todėl perspektyviniame vaizde šviesos diodas užsidegs puse faktinio ryškumo, jei jis bus įjungtas į tiesioginį 5 V signalą be išjungimo laiko.
Dabar, kaip parodyta aukščiau esančiame paveikslėlyje, pakeitus darbo ciklą, šviesos diodas užsidegs 25% faktinio ryškumo pagal tą patį principą, kuris buvo aptartas anksčiau. Jei norite sužinoti daugiau ir sužinoti apie pulso pločio moduliaciją (PWM), galite peržiūrėti susietą straipsnį.
Aparatinės įrangos sąranka ir reikalavimas
Kaip šio projekto reikalavimas yra valdyti LED naudojant PWM. LED turi būti sąsaja su N76E003. Kadangi N76E003 kūrimo plokštėje yra šviesos diodas, jis bus naudojamas šiame projekte. Jokių kitų komponentų nereikia.
Maža to, mums reikia N76E003 mikrovaldikliais paremtos kūrimo plokštės, taip pat „ Nu-Link“ programuotojo. Gali prireikti papildomo 5 V maitinimo bloko, jei programuotojas nenaudojamas kaip maitinimo šaltinis.
„Nuvoton N76E003“ mikrovaldiklio šviesos diodų pritemdymo schema
Kaip matome žemiau pateiktoje schemoje, bandymo šviesos diodas yra prieinamas kūrimo plokštės viduje ir yra prijungtas prie 1.4 prievado. Kairiajame kairiajame kampe rodomas programavimo sąsajos ryšys.
PWM kaiščiai ant N76E003 „Nuvoton“ mikrovaldiklio
N76E003 turi 20 kaiščių, iš kurių 10 kaiščių gali būti naudojamos kaip PWM. Žemiau esančiuose paveikslėliuose yra PWM kaiščiai, paryškinti raudono kvadrato laukelyje.
Kaip matome, paryškinti PWM kaiščiai taip pat gali būti naudojami kitiems tikslams. Tačiau šis kitas kaiščių tikslas nebus prieinamas, kai kaiščiai bus sukonfigūruoti PWM išėjimui. 1.4 kaištis, naudojamas kaip PWM išvesties kaištis, jis praras kitą funkciją. Bet tai nėra problema, nes šiam projektui nereikia kitos funkcijos.
Priežastis, kodėl 1.4 kaištį pasirinkote kaip išvesties kaištį, yra ta, kad įmontuotas bandymo šviesos diodas yra prijungtas prie šio kaiščio kūrimo plokštėje, todėl mums nereikia išorinių šviesos diodų. Tačiau šiame mikrovaldiklyje iš 20 kontaktų 10 kontaktų gali būti naudojami kaip PWM išvesties kaiščiai, o bet kurie kiti PWM kaiščiai gali būti naudojami su išvestimi susijusiems tikslams.
PWM registrai ir funkcijos N76E003 „Nuvoton“ mikrovaldiklyje
N76E003 naudoja sistemos laikrodžio arba 1 laikmačio perpildymą, padalytą iš PWM laikrodžio su „Prescaler“, kurį galima pasirinkti nuo 1/1 ~ 1/128. PWM periodą galima nustatyti naudojant 16 bitų laikotarpio registrą PWMPH ir PWMPL.
Mikrovaldiklis turi šešis atskirus PWM registrus, kurie generuoja šešis PWM signalus, vadinamus PG0, PG1, PG2, PG3, PG4 ir PG5. Tačiau kiekvienam PWM kanalui laikotarpis yra vienodas, nes jie turi tą patį 16 bitų periodo skaitiklį, tačiau kiekvieno PWM darbo ciklas gali skirtis nuo kitų, nes kiekvienas PWM naudoja skirtingą 16 bitų darbo ciklo registrą, pavadintą {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} ir {PWM5H, PWM5L}. Taigi, N76E003, šešis PWM išėjimus galima generuoti atskirai, naudojant skirtingus darbo ciklus.
Skirtingai nei kituose mikrovaldikliuose, įjungus PWM, įvesties / išvesties kaiščiai į jų PWM išvestį nebus nustatyti automatiškai. Taigi vartotojas turi sukonfigūruoti įvesties / išvesties išvesties režimą.
Taigi, nesvarbu, ko reikia programai, pirmiausia reikia nustatyti arba pasirinkti, kuris vienas ar du ar net daugiau nei du įvesties / išvesties kaiščiai yra PWM išvestis. Pasirinkus vieną, PWM signalui generuoti įvesties / išvesties kaiščiai turi būti nustatyti kaip „Push-Pull“ režimas arba beveik dvikryptis. Tai galima pasirinkti naudojant PxM1 ir PxM2 registrą. Šie du registrai nustato įvesties / išjungimo režimus, kur x reiškia prievado numerį (pavyzdžiui, prievadas P1.0 registras bus P1M1 ir P1M2, o P3.0 - P3M1 ir P3M2 ir kt.)
Konfigūraciją galima pamatyti žemiau esančiame paveikslėlyje
Tada kitas žingsnis yra įjungti PWM tame (-uose) įvesties / išvesties (-ių) kaište (-iuose). Norėdami tai padaryti, vartotojas turi nustatyti PIOCON0 arba PIOCON1 registrus. Registras priklauso nuo kaiščių susiejimo, nes PIOCON0 ir PIOCON1 valdo skirtingus kaiščius, priklausomai nuo PWM signalų. Šių dviejų registrų konfigūraciją galima pamatyti žemiau esančiame paveikslėlyje.
Kaip matome, aukščiau pateiktas registras valdo 6 konfigūracijas. Likusioje dalyje naudokite PIOCON1 registrą.
Taigi aukščiau pateiktas registras valdo likusias 4 konfigūracijas.
PWM darbo režimai „Nuvoton N6E003“ mikrovaldiklyje
Kitas žingsnis - pasirinkti PWM darbo režimus. Kiekvienas PWM palaiko tris operacijų režimus - nepriklausomo, sinchroninio ir mirusio laiko režimą.
Nepriklausomas režimas suteikia sprendimą, kur šešis PWM signalus galima generuoti savarankiškai. Tai reikalinga daugiausiai kartų, kai reikia įjungti ir valdyti su LED susijusias operacijas ar signalus.
Kad sinchroniniai režimas Nustatomas PG1 / 05/03 toje pačioje in-fazės PWM išėjimo, tas pats, kaip PG0 / 2/4, kur PG0 / 04/02 teikia nepriklausomas PWM išėjimo signalus. Tai daugiausia reikalinga valdant trifazius variklius.
„ Dead-Time“ įterpimo režimas yra šiek tiek sudėtingas ir taikomas tikroms variklinėms programoms, ypač pramoninėms. Tokiose programose papildomą PWM išvestį reikia įterpti į „neveikimo laiką“, kad būtų išvengta žalos maitinimo perjungimo įtaisams, pvz., GPIB. Šiame režime konfigūracijos nustatomos taip, kad PG0 / 2/4 teikia PWM išvesties signalus taip pat, kaip ir nepriklausomas režimas, bet PG1 / 3/5 teikia atitinkamai PG0 / 2/4 išėjimo „out-phase PWM signalus“ ir nepaisykite PG1 / 3/5 Duty register.
Virš trijų režimų galima pasirinkti naudojant žemiau pateiktą registro konfigūraciją-
Kita konfigūracija yra PWM tipų pasirinkimas naudojant PWMCON1 registrą.
Taigi, kaip matome, yra du PWM tipai, kuriuos galima pasirinkti naudojant aukščiau esantį registrą. Lygiuojant kraštais, 16 bitų skaitiklis naudoja vieno nuolydžio operaciją, skaičiuodamas nuo 0000H iki nustatytos vertės {PWMPH, PWMPL} ir tada pradedant nuo 0000H. Išvesties bangos forma išlyginta kairiuoju kraštu.
Bet centriniu režimu 16 bitų skaitiklis naudoja dvigubo nuolydžio operaciją skaičiuodamas nuo 0000H iki {PWMPH, PWMPL} ir vėl eidamas nuo {PWMPH, PWMPL} iki 0000H, skaičiuodamas atgal. Išvestis lygiuota į centrą ir ji yra naudinga generuojant nesutampančias bangos formas. Dabar pagaliau PWM valdymo operacijos, kurias galima patikrinti žemiau esančiuose registruose -
Norėdami nustatyti laikrodžio šaltinį, naudokite CKCON laikrodžio valdymo registrą.
PWM išvesties signalą taip pat galima užmaskuoti naudojant PMEN registrą. Naudodamasis šiuo registru, vartotojas gali užmaskuoti išėjimo signalą 0 arba 1.
Kitas yra PWM valdymo registras-
Aukščiau pateiktas registras yra naudingas norint paleisti PWM, įkelti naują laikotarpį ir darbo apkrovą, valdyti PWM vėliavą ir išvalyti PWM skaitiklį.
Susijusios bitų konfigūracijos parodytos žemiau-
Norėdami nustatyti laikrodžio daliklį, naudokite PWMCON1 registrą, skirtą PWM laikrodžio dalikliui. 5-asis bitas naudojamas grupiniam režimui įgalintam grupuotam PWM ir suteikia tą patį darbo ciklą pirmosioms trims PWM poroms.
„Nuvoton N76E003“ programavimas PWM
Kodavimas yra paprastas, o visą šios mokymo programos kodą galite rasti šio puslapio apačioje. Šviesos diodas yra prijungtas prie P1.4 kaiščio. Taigi P1.4 kaištis reikalingas PWM išėjimui.
Pagrindinėje programoje nustatymai atliekami atitinkama tvarka. Žemiau kodų eilučių nustatomas PWM ir konfigūruojamas P1.4 kaištis kaip PWM išvestis.
P14_PushPull_Mode;
Tai naudojama kaiščiui P1.4 nustatyti stūmimo-traukimo režimu. Tai apibrėžta bibliotekoje „ Function_define.h“
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Kitos eilutės, naudojamos PWM įgalinimui kaištyje P1.4. Tai taip pat apibrėžta Function_define.h bibliotekoje
#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 PWM1 išvestis įgalina PWM_IMDEPENDENT_MODE;
Žemiau pateiktas kodas naudojamas PWM nustatyti nepriklausomam režimui. Į Function_define.h bibliotekoje, ji yra apibrėžta ir darant
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Tada mes turime nustatyti EDGE tipo PWM išvestį. Į Function_define.h bibliotekoje, ji yra apibrėžta ir darant
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Be to, mes turime išvalyti PWM skaitiklio vertė, kuri yra prieinama SFR_Macro.h Bibliotekos
#define set_CLRPWM CLRPWM = 1
Po to PWM laikrodis pasirenkamas kaip „Fsys“ laikrodis, o naudojamas padalijimo koeficientas yra 64 padalijimas.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Abi yra apibrėžtos kaip
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Žemiau kodo eilutės naudojamas išvesties PWM signalui užmaskuoti 0 apibrėžtu as-
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Tada mes turime nustatyti PWM signalo periodo laiką. Ši funkcija nustato laikotarpį PWMPL ir PWMPH registre. Kadangi tai yra 16 bitų registras, funkcija naudoja bitų perkėlimo metodą PWM laikotarpiui nustatyti.
void set_PWM_period (nepasirašyta int reikšmė) { PWMPL = (reikšmė & 0x00FF); PWMPH = ((reikšmė & 0xFF00) >> 8); }
Tačiau, išskyrus 1023 ir 8 bitų periodą, vartotojai taip pat gali naudoti kitas reikšmes. Padidėjus laikotarpiui, sklandžiai pritemsta arba išnyksta.
nustatyti_PWMRUN;
Tai paleidžia PWM, apibrėžtą SFR_Macro.h bibliotekoje, #define set_PWMRUN PWMRUN = 1
Toliau, kol vyksta ciklas , šviesos diodas įjungiamas ir nuolat blunka.
while (1) { for (reikšmė = 0; reikšmė <1024; reikšmė + = 10) { set_PWM1 (reikšmė); Laikmatis1_Delay10ms (3); } for (vertė = 1023; reikšmė> 0; reikšmė - = 10) { set_PWM1 (reikšmė); Laikmatis1_Delay10ms (2); } } }
Darbo ciklą nustato set_PWM1 (); funkcija, nustatanti darbo ciklą PWM1L ir PWM1H registre.
void set_PWM1 (nepasirašyta int reikšmė) { PWM1L = (reikšmė & 0x00FF); PWM1H = ((reikšmė & 0xFF00) >> 8); set_LOAD; }
Kodo mirksėjimas ir išvesties testavimas
Kai kodas bus paruoštas, tiesiog jį sukompiliuokite ir įkelkite į valdiklį. Jei esate naujokas aplinkoje, sužinokite, kaip pradėti naudotis „Nuvoton N76E003“ mokymo programa, kad sužinotumėte pagrindus. Kaip matote iš žemiau pateikto rezultato, kodas grąžino 0 įspėjimų ir 0 klaidų ir mirksėjo naudojant numatytąjį „Keil“ mirksėjimo metodą. Programa pradeda veikti.
Atstatyti pradžia: Projektas: PWM atstatyti tikslą "Target 1" surinkimo STARTUP.A51… skompilowaniem main.c… skompilowaniem Delay.c… susiejimas… programa Dydis: duomenų = 35.1 XDATA = 0 kodas = 709 , sukūrimas hex failas iš ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 klaidų, 0 įspėjimas (-ai). Sukurtas laikas: 00:00:05
Aparatūra yra prijungta prie maitinimo šaltinio ir veikė taip, kaip tikėtasi. Tai yra sumontuoto borto šviesos diodo ryškumas ir padidintas, kad būtų rodomas PWM darbo ciklo pokytis.
Visą šios mokymo programos veikimą taip pat galite rasti žemiau esančiame vaizdo įraše. Tikiuosi, kad jums patiko pamoka ir sužinojote ką nors naudingo, jei turite klausimų, palikite juos komentarų skyriuje arba galite naudoti mūsų forumus kitiems techniniams klausimams.