- A PWM jel alapjai
- Hardver beállítása és követelményei
- Áramköri ábra a Nuvoton N76E003 mikrokontroller LED fényerő-szabályozásához
- PWM csapok az N76E003 Nuvoton mikrokontrolleren
- PWM regiszterek és funkciók az N76E003 Nuvoton mikrokontrollerben
- PWM üzemmódok a Nuvoton N6E003 mikrokontrollerben
- A Nuvoton N76E003 programozása a PWM számára
- A kód villogása és a kimenet tesztelése
Az impulzusszélesség-moduláció (PWM) a mikrovezérlőkben általánosan alkalmazott technika folyamatos impulzusjel előállítására, meghatározott frekvenciával és munkaciklussal. Röviden: a PWM egy impulzus szélességének megváltoztatásáról szól, miközben a frekvencia állandó.
A PWM jelet leginkább a szervomotor vagy a LED fényerejének szabályozására használják. Továbbá, mivel a mikrovezérlők csak a Logic 1 (Magas) vagy a Logic 0 (Alacsony) értéket tudják biztosítani a kimeneti érintkezőkön, akkor nem képes változó analóg feszültséget biztosítani, hacsak nem használnak DAC vagy Digital to Analog konvertert. Ilyen esetben a mikrovezérlő beprogramozható egy váltakozó működési ciklusú PWM kimenetére, amely aztán átalakítható változó analóg feszültséggé. Korábban sok más mikrovezérlőben is alkalmaztuk a PWM perifériát.
- ARM7-LPC2148 PWM oktatóanyag: A LED fényerejének szabályozása
- Pulzusszélesség-moduláció (PWM) az MSP430G2 segítségével: A LED fényerejének szabályozása
- PWM előállítása PIC mikrokontrollerrel MPLAB és XC8 segítségével
- Impulzusszélesség-moduláció (PWM) az STM32F103C8-ban: Az egyenáramú ventilátor sebességének szabályozása
- PWM jelek generálása a PIC mikrokontroller GPIO csapjain
- Raspberry Pi PWM bemutató
- PWM bemutató ESP32-vel
Ebben az oktatóanyagban egy olyan LED-et fogunk összekapcsolni, amelyet az N76E003 mikrovezérlő egység ezen PWM jelével lehet vezérelni. Értékelni fogjuk, hogy milyen hardverbeállításra van szükségünk, és hogyan kell programozni a mikrovezérlőnket. Előtte ismerjük meg a PWM jel néhány alapját.
A PWM jel alapjai
Az alábbi képen állandó PWM jel látható.
A fenti kép nem más, mint egy állandó négyzethullám ugyanazzal az ON idővel és ugyanazon OFF idővel. Tegyük fel, hogy a jel teljes időtartama 1 másodperc. Így a be- és kikapcsolási idő 500 ms. Ha egy LED van csatlakoztatva ezen a jelen, a LED 500 ms-ra bekapcsol és 500 ms-ra kikapcsol. Ezért perspektivikus nézetben a LED a tényleges fényerő felével világít, ha közvetlen 5 V-os jelre kapcsolják, kikapcsolási idő nélkül.
A fenti képen látható módon, ha megváltoztatja az üzemi ciklust, akkor a LED a tényleges fényerő 25% -ával világít ugyanazon az elven, mint korábban tárgyaltuk. Ha szeretne többet megtudni és megismerni az impulzusszélesség-modulációt (PWM), akkor tekintse meg a kapcsolódó cikket.
Hardver beállítása és követelményei
Mivel ennek a projektnek a követelménye a LED vezérlése PWM segítségével. Az N76E003-hoz LED-et kell csatlakoztatni. Mivel az N76E003 fejlesztőtáblán elérhető egy LED, ezért ebben a projektben felhasználásra kerül. Nincs szükség más alkatrészekre.
Nem beszélve arról, hogy szükségünk van az N76E003 mikrokontroller alapú fejlesztőtáblára, valamint a Nu-Link programozóra. További 5 V-os tápegységre lehet szükség, ha a programozót nem áramforrásként használják.
Áramköri ábra a Nuvoton N76E003 mikrokontroller LED fényerő-szabályozásához
Amint az alábbi vázlaton láthatjuk, a teszt LED elérhető a fejlesztői panelen belül, és az 1.4-es portra van csatlakoztatva. A bal szélső részen látható a programozási felület kapcsolata.
PWM csapok az N76E003 Nuvoton mikrokontrolleren
Az N76E003 20 érintkezõvel rendelkezik, amelyekbõl 10 csap használható PWM-ként. Az alábbi képeken a piros négyzet mezőben kiemelt PWM csapok láthatók.
Mint láthatjuk, a kiemelt PWM csapok más célokra is felhasználhatók. A csapok ezen egyéb célja azonban nem lesz elérhető, ha a csapok PWM kimenetre vannak konfigurálva. Az 1.4-es tű, amelyet PWM kimeneti tűként használnak, elveszíti a többi funkciót. De ez nem jelent problémát, mivel ehhez a projekthez nincs szükség más funkciókra.
Az 1.4-es tű kimeneti tűként való kiválasztásának oka az, hogy a beépített Teszt-LED csatlakozik ehhez a tűhöz a fejlesztői kártyán, így nincs szükségünk külső LED-ekre. Ebben a 20 érintkezőből álló mikrovezérlőben azonban 10 érintkező használható PWM kimeneti tűként, és bármely más PWM tű felhasználható kimenettel kapcsolatos célokra.
PWM regiszterek és funkciók az N76E003 Nuvoton mikrokontrollerben
Az N76E003 a rendszeróra vagy az 1. időzítő túlcsordulását osztja egy PWM órával, az 1/1 ~ 1/128 értékre választható Prescalerrel. A PWM periódus a 16 bites PWMPH és PWMPL regiszter segítségével állítható be.
A mikrovezérlőnek hat különálló PWM regisztere van, amelyek hat PWM jelet generálnak, PG0, PG1, PG2, PG3, PG4 és PG5 nevet. A periódus azonban minden PWM csatornán megegyezik, mivel ugyanazon a 16 bites periódusszámlálóval rendelkeznek, de az egyes PWM munkaciklusai eltérhetnek másokétól, mivel minden PWM különböző 16 bites munkaciklus regisztert használ, amelyek neve {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} és {PWM5H, PWM5L}. Így az N76E003-ban hat PWM kimenet generálható függetlenül, különböző munkaciklusokkal.
Más mikrovezérlőktől eltérően a PWM engedélyezése nem állítja be automatikusan az I / O tűket a PWM kimenetükbe. Így a felhasználónak konfigurálnia kell az I / O kimeneti módot.
Tehát bármi is szükséges az alkalmazáshoz, az első lépés annak meghatározása vagy kiválasztása, hogy melyik egy vagy kettő, vagy akár több, mint két I / O tű PWM kimenetként. Az egyik kiválasztása után az I / O csapokat Push-Pull módnak vagy Kvázi kétirányúnak kell beállítani a PWM jel előállításához. Ez a PxM1 és PxM2 regiszter segítségével választható ki. Ez a két regiszter állítja be az I / O módokat, ahol az x a portszámot jelenti (például a P1.0 portnál a regiszter P1M1 és P1M2 lesz, a P3.0 esetében pedig P3M1 és P3M2 stb.)
A konfiguráció az alábbi kép-
Ezután a következő lépés a PWM engedélyezése az adott I / O tűkben. Ehhez a felhasználónak be kell állítania a PIOCON0 vagy PIOCON1 regisztereket. A regiszter a csapok leképezésétől függ, mivel a PIOCON0 és a PIOCON1 a PWM jelektől függően különböző csapokat vezérel. E két regiszter konfigurációja látható az alábbi kép-
Mint láthatjuk, a fenti regiszter 6 konfigurációt vezérel. A többiben használja a PIOCON1 regisztert.
Így a fenti regiszter vezérli a többi 4 konfigurációt.
PWM üzemmódok a Nuvoton N6E003 mikrokontrollerben
A következő lépés a PWM működési módok kiválasztása. Minden PWM három működési módot támogat - Független, Szinkron és Holtidő engedélyezési mód.
A Független mód biztosítja a megoldást, ahol a hat PWM jel függetlenül generálható. Erre legfeljebb akkor van szükség, amikor a LED-del kapcsolatos műveleteket vagy hangjelzőket be kell kapcsolni és vezérelni kell.
A szinkron mód a PG1 / 3/5 azonos fázisú PWM kimenetet állítja be, ugyanaz, mint a PG0 / 2/4, ahol a PG0 / 2/4 független PWM kimeneti jeleket szolgáltat. Ez elsősorban a háromfázisú motorok vezérléséhez szükséges.
A Dead-Time behelyezési mód kissé összetett és valós motoros alkalmazásokban alkalmazható, különösen ipari alkalmazásokban. Ilyen alkalmazásokban a kiegészítő PWM kimenetet „holtidőben” kell elhelyezni, amely megakadályozza az áramkapcsoló eszközök, például a GPIB károsodását. A konfigurációk ebben az üzemmódban vannak beállítva oly módon, hogy a PG0 / 2/4 ugyanúgy szolgáltatja a PWM kimeneti jeleket, mint a független mód, de a PG1 / 3/5 a PG0 / 2/4 kimeneti „out-phase PWM jeleket” ad és figyelmen kívül hagyja a PG1 / 3/5 Duty register-t.
Az alábbi regiszterkonfigurációval háromféle mód közül választhat
A következő konfiguráció a PWM típusok kiválasztása a PWMCON1 regiszter segítségével.
Tehát, amint láthatjuk, két PWM típus áll rendelkezésre, amelyek a fenti regiszter segítségével választhatók ki. Élre igazítva a 16 bites számláló egy meredekségű műveletet használ, ha a 0000H-tól a {PWMPH, PWMPL} beállított értékig számol, majd 0000H-tól indul. A kimeneti hullámforma bal szélre igazított.
De középre igazított üzemmódban a 16 bites számláló kettős meredekségű műveletet használ a 0000H és a {PWMPH, PWMPL} közötti felszámolással, majd a visszaszámlálással ismét a {PWMPH, PWMPL} és a 0000H között. A kimenet középre igazított, és hasznos nem átfedő hullámformák létrehozásához. Végül a PWM vezérlési műveletek, amelyeket ellenőrizni lehet az alábbi regiszterekben -
Az óra forrásának beállításához használja a CKCON óra vezérlő regisztert.
A PWM kimeneti jel a PMEN regiszter segítségével is elfedhető. Ennek a regiszternek a segítségével a felhasználó 0 vagy 1 értékkel elfedheti a kimeneti jelet.
A következő a PWM Control Register-
A fenti regisztráció hasznos a PWM futtatásához, új időszak és terhelés betöltéséhez, a PWM zászló vezérléséhez és a PWM számláló törléséhez.
A kapcsolódó bitkonfigurációk az alábbiakban láthatók:
Az óraosztó beállításához használja a PWMCON1 regisztrációt a PWM óraosztóhoz. Az 5. bitet a Csoportos üzemmódban engedélyezett csoportosított PWM-hez használják, és az első három PWM-pár esetében ugyanazt a munkaciklust biztosítja.
A Nuvoton N76E003 programozása a PWM számára
A kódolás egyszerű, és az oktatóanyaghoz használt teljes kód az oldal alján található. A LED a P1.4 tűhöz csatlakozik. Így a P1.4 tűre van szükség a PWM kimenethez.
A főprogramban a beállítások a megfelelő sorrendben történnek. A kódsorok alatt beállítja a PWM-et, és a P1.4 tűt konfigurálja PWM kimenetként.
P14_PushPull_Mode;
Ezzel lehet a P1.4 csapot push-pull üzemmódba állítani. Ezt a Function_define.h könyvtár as-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
A következő sorok a PWM engedélyezéséhez használtak a P1.4 tűben. Ezt a Function_define.h könyvtár 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 PWM1 kimenet engedélyezése PWM_IMDEPENDENT_MODE;
Az alábbi kódot használjuk a PWM független módba állításához. A Function_define.h könyvtárban ez
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Ezután be kell állítanunk az EDGE típusú PWM kimenetet. A Function_define.h könyvtárban ez
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Ezután törölnünk kell a PWM számláló értékét, amely elérhető az SFR_Macro.h könyvtárban-
#define set_CLRPWM CLRPWM = 1
Ezt követően a PWM órát választják Fsys órának, és az alkalmazott osztási tényező a 64 osztás.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Mindkettő
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
A kódsor alatt a kimeneti PWM jelet 0 definiált maszkkal maszkolják.
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Ezután be kell állítanunk a PWM jel időtartamát. Ez a funkció beállítja a PWMPL és a PWMPH regiszter időszakát. Mivel ez egy 16 bites regiszter, a függvény biteltolásos módszerrel állítja be a PWM periódust.
void set_PWM_period (aláíratlan int érték) { PWMPL = (érték & 0x00FF); PWMPH = ((érték & 0xFF00) >> 8); }
Azonban az 1023 és 8 bites perióduson kívül a felhasználók más értékeket is használhatnak. Az időtartam növelése egyenletes tompulást vagy halványulást eredményez.
set_PWMRUN;
Ez elindítja az SFR_Macro.h könyvtárban definiált PWM- et
#define set_PWMRUN PWMRUN = 1
Ezután a while ciklusban a LED folyamatosan bekapcsol és elhalványul.
míg (1) { for (érték = 0; érték <1024; érték + = 10) { set_PWM1 (érték); Timer1_Delay10ms (3); } for (érték = 1023; érték> 0; érték - = 10) { set_PWM1 (érték); Timer1_Delay10ms (2); } } }
A munkaciklust a set_PWM1 (); függvény állítja be, amely a PWM1L és PWM1H regiszterben állítja be a munkaciklust.
void set_PWM1 (aláíratlan int érték) { PWM1L = (érték & 0x00FF); PWM1H = ((érték & 0xFF00) >> 8); set_LOAD; }
A kód villogása és a kimenet tesztelése
Miután elkészült a kód, csak fordítsa le és töltse fel a vezérlőbe. Ha még nem ismeri a környezetet, tanulmányozza az első lépéseket a Nuvoton N76E003 oktatóanyag használatával. Amint az alábbi eredményből látható, a kód 0 figyelmeztetést és 0 hibát adott vissza, és a Keil alapértelmezett villogó módszerével villant. Az alkalmazás elkezd működni.
Újjáépítés megkezdődött: Projekt: PWM Újjáépíti a „Cél 1” célt a STARTUP.A51 összeállításakor … a main.c fordítása … a Delay.c fordítása… összekapcsolása… Programméret: adatok = 35,1 xdata = 0 kód = 709 létrehozása hex fájl a ". \ Objects \ pwm"… " fájlból . \ Objects \ pwm" - 0 hiba (ok), 0 figyelmeztetés (ek). Építési idő letelt: 00:00:05
A hardver csatlakoztatva van az áramforráshoz, és a várakozásoknak megfelelően működött. Ez azt jelenti, hogy a fedélzeti LED fényereje csökkent, majd megnövekszik, jelezve a PWM változását.
A bemutató teljes működése megtalálható az alább linkelt videóban is. Remélem, tetszett az oktatóanyag, és valami hasznosat tanult, ha bármilyen kérdése van, hagyja őket a megjegyzés részben, vagy használhatja fórumunkat egyéb technikai kérdésekhez.