- Conceptes bàsics del senyal PWM
- Configuració i requisits de maquinari
- Diagrama de circuits per a atenuament LED del microcontrolador Nuvoton N76E003
- Pins PWM al microcontrolador Nuvoton N76E003
- Registres i funcions PWM al microcontrolador N76E003 Nuvoton
- Modes operatius PWM al microcontrolador Nuvoton N6E003
- Programació de Nuvoton N76E003 per a PWM
- Intermitent del codi i prova de la sortida
La modulació d’amplada de pols (PWM) és una tècnica que s’utilitza habitualment en microcontroladors per produir un senyal de pols continu amb una freqüència i un cicle de treball definits. En resum, PWM consisteix a canviar l’amplada d’un pols mentre la freqüència és constant.
Un senyal PWM s'utilitza principalment per controlar un servomotor o la brillantor d'un LED. A més, atès que els microcontroladors només poden proporcionar Logic 1 (High) o Logic 0 (Low) als seus pins de sortida, no pot proporcionar una tensió analògica variable tret que s’utilitzi un convertidor DAC o Digital a Analògic. En aquest cas, el microcontrolador es pot programar perquè emeti un PWM amb un cicle de treball variat que es pugui convertir a la tensió analògica variable. Anteriorment, hem utilitzat perifèrics PWM en molts altres microcontroladors.
- Tutorial ARM7-LPC2148 PWM: Control de la brillantor del LED
- Modulació d'amplada de pols (PWM) mitjançant MSP430G2: control de la brillantor del LED
- Generació de PWM mitjançant microcontrolador PIC amb MPLAB i XC8
- Modulació d'amplada de pols (PWM) a STM32F103C8: velocitat de control del ventilador de CC
- Generació de senyals PWM en pins GPIO del microcontrolador PIC
- Tutorial de Raspberry Pi PWM
- Tutorial PWM amb ESP32
En aquest tutorial, connectarem un LED que es controlarà mitjançant aquest senyal PWM de la unitat de microcontrolador N76E003. Avaluarem quin tipus de configuració de maquinari necessitem i com hem de programar el nostre microcontrolador. Abans d’això, entenem alguns conceptes bàsics d’un senyal PWM.
Conceptes bàsics del senyal PWM
A la imatge següent es mostra un senyal PWM constant.

La imatge anterior no és res més que una ona quadrada constant amb el mateix temps d’ACTIVACIÓ i el mateix temps d’APAGAT. Suposem que el període total del senyal és d’1 segon. Per tant, el temps d’activació i aturada és de 500 ms. Si hi ha un LED connectat a través d’aquest senyal, el LED s’encendrà durant 500 ms i s’apagarà durant 500 ms. Per tant, en perspectiva, el LED s’encendrà amb la meitat de la brillantor real si s’encén a un senyal directe de 5V sense temps d’aturada.

Ara, tal com es mostra a la imatge anterior, si es canvia el cicle de treball, el LED s’encendrà amb un 25% de brillantor real seguint el mateix principi que s’ha comentat anteriorment. Si voleu obtenir més informació i obtenir més informació sobre la modulació de l'amplada de pols (PWM), podeu consultar l'article enllaçat.
Configuració i requisits de maquinari
Com que el requisit d’aquest projecte és controlar els LED mitjançant PWM. Es necessita un LED per a la interfície amb N76E003. Com que hi ha disponible un LED a la placa de desenvolupament N76E003, s'utilitzarà en aquest projecte. No es requereixen altres components.
Per no parlar, necessitem la placa de desenvolupament basada en microcontroladors N76E003, així com el programador Nu-Link. Pot ser necessària una font d'alimentació addicional de 5 V si el programador no s'utilitza com a font d'alimentació.
Diagrama de circuits per a atenuament LED del microcontrolador Nuvoton N76E003
Com podem veure a l'esquema següent, el LED de prova està disponible a la placa de desenvolupament i està connectat al port 1.4. A l'extrem esquerre, es mostra la connexió de la interfície de programació.

Pins PWM al microcontrolador Nuvoton N76E003
El N76E003 té 20 pins dels quals 10 pins es poden utilitzar com a PWM. Les imatges següents mostren els pins PWM ressaltats al quadre quadrat vermell.

Com podem veure, els pins PWM ressaltats també es poden utilitzar per a altres propòsits. Tanmateix, aquest altre propòsit dels pins no estarà disponible quan els pins estiguin configurats per a la sortida PWM. Pin 1.4 que s’utilitza com a pin de sortida PWM, perdrà l’altra funcionalitat. Però, això no és un problema, ja que no cal una altra funcionalitat per a aquest projecte.
La raó per la qual s’ha escollit el pin 1.4 com a pin de sortida és que el LED de prova incorporat està connectat a aquest pin de la placa de desenvolupament, de manera que no necessitem LED externs. No obstant això, en aquest microcontrolador de 20 pins, es poden utilitzar 10 pins com a pin de sortida PWM i qualsevol altre pin PWM es pot utilitzar amb finalitats relacionades amb la sortida.
Registres i funcions PWM al microcontrolador N76E003 Nuvoton
N76E003 utilitza un rellotge del sistema o un desbordament del temporitzador 1 dividit per un rellotge PWM amb un Prescaler seleccionable entre 1/1 ~ 1/128. El període PWM es pot configurar mitjançant el registre de períodes de 16 bits PWMPH i registre PWMPL.
El microcontrolador té sis registres PWM individuals que generen sis senyals PWM anomenats PG0, PG1, PG2, PG3, PG4 i PG5. Tot i això, el període és el mateix per a cada canal PWM perquè comparteixen el mateix comptador de períodes de 16 bits, però el cicle de treball de cada PWM pot ser diferent dels altres, ja que cada PWM utilitza un registre de cicle de treball de 16 bits diferent anomenat {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} i {PWM5H, PWM5L}. Així, a N76E003, es poden generar sis sortides PWM independentment amb diferents cicles de treball.
A diferència d’altres microcontroladors, habilitar el PWM no estableix els pins d’E / S a la seva sortida PWM automàticament. Per tant, l'usuari ha de configurar el mode de sortida d'E / S.
Per tant, sigui el que sigui necessari per a l’aplicació, el primer pas és determinar o seleccionar quin o dos o fins i tot més de dos pins d'E / S com a sortida PWM. Després de seleccionar-ne un, cal establir els pins d'E / S com a mode Push-Pull o Quasi bidireccional per generar el senyal PWM. Es pot seleccionar mitjançant el registre PxM1 i PxM2. Aquests dos registres configuren els modes d'E / S on la x representa el número de port (per exemple, el port P1.0, el registre serà P1M1 i P1M2, per a P3.0 serà P3M1 i P3M2, etc.)
La configuració es pot veure a la imatge següent:

A continuació, el següent pas és habilitar el PWM en aquests pins d'E / S particulars. Per fer-ho, l’usuari ha d’establir els registres PIOCON0 o PIOCON1. El registre depèn del mapatge de pins, ja que PIOCON0 i PIOCON1 controlen diferents pins segons els senyals PWM. La configuració d’aquests dos registres es pot veure a la imatge següent:


Com podem veure, el registre anterior controla 6 configuracions. Per a la resta, utilitzeu el registre PIOCON1.


Per tant, el registre anterior controla les 4 configuracions restants.
Modes operatius PWM al microcontrolador Nuvoton N6E003
El següent pas és seleccionar els modes d’operació PWM. Cada PWM admet tres modes d’operació: mode d’activació independent, síncron i de temps mort.
El mode independent proporciona la solució on es poden generar els sis senyals PWM de forma independent. Això es requereix el màxim de vegades en què cal activar i controlar les activadores o els brunzidors relacionats amb el LED.
El mode síncron estableix PG1 / 3/5 a la mateixa sortida PWM en fase, igual que PG0 / 2/4, on PG0 / 2/4 proporciona senyals de sortida PWM independents. Això es requereix principalment per controlar motors trifàsics.
El mode d’inserció Dead-Time és una mica complex i s’aplica en aplicacions de motors reals, especialment en aplicacions industrials. En aquestes aplicacions, una sortida PWM complementària ha de ser la inserció “a temps mort” que impedeixi danyar els dispositius de commutació d’alimentació com els GPIB. Les configuracions s’estableixen en aquest mode de manera que el PG0 / 2/4 proporciona senyals de sortida PWM de la mateixa manera que el mode independent, però PG1 / 3/5 proporciona la sortida “senyals PWM fora de fase” de PG0 / 2/4 corresponentment. i ignoreu el registre de tasques PG1 / 3/5.
Es poden seleccionar més de tres modes mitjançant la configuració de registre següent:

La següent configuració és la selecció dels tipus de PWM mitjançant el registre PWMCON1.

Per tant, com podem veure, hi ha disponibles dos tipus de PWM que es poden seleccionar mitjançant el registre anterior. A l'alineació de vores, el comptador de 16 bits utilitza l'operació d'una sola inclinació comptant des de 0000H fins al valor establert de {PWMPH, PWMPL} i, a continuació, a partir de 0000H. La forma d'ona de sortida està alineada a la vora esquerra.
Però, en mode d’alineació central, el comptador de 16 bits utilitza una operació de doble pendent comptant de 0000H a {PWMPH, PWMPL} i, de nou, passa de {PWMPH, PWMPL} a 0000H comptant enrere. La sortida està alineada al centre i és útil per generar formes d'ona que no se superposen. Ara, finalment, les operacions de control PWM que es poden comprovar als registres següents:
Per configurar la font del rellotge, utilitzeu el registre de control del rellotge CKCON.

El senyal de sortida PWM també es pot emmascarar mitjançant el registre PMEN. Mitjançant aquest registre, l'usuari pot emmascarar el senyal de sortida en 0 o 1.

El següent és el registre de control de PWM-

El registre anterior és útil per executar el PWM, carregar un nou període i carregar el servei, controlar el senyalador PWM i esborrar el comptador PWM.
Les configuracions de bits associades es mostren a continuació-

Per configurar el divisor de rellotge, utilitzeu el registre PWMCON1 per al divisor de rellotge PWM. El cinquè bit s'utilitza per al PWM agrupat habilitat per al mode de grup i proporciona el mateix cicle de treball per als tres primers parells de PWM.

Programació de Nuvoton N76E003 per a PWM
La codificació és senzilla i el codi complet utilitzat en aquest tutorial es troba a la part inferior d’aquesta pàgina. El LED està connectat al pin P1.4. Per tant, cal utilitzar el pin P1.4 per a la sortida PWM.
Al programa principal, la configuració es realitza en l'ordre respectiu. A sota de les línies de codis es defineix el PWM i es configura el pin P1.4 com a sortida PWM.
P14_PushPull_Mode;
S’utilitza per configurar el pin P1.4 en mode push-pull. Això es defineix a la biblioteca Function_define.h
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Les següents línies que s’utilitzen per habilitar el PWM al pin P1.4. Això també es defineix a la biblioteca Function_define.h
#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 La sortida PWM1 habilita PWM_IMDEPENDENT_MODE;
El codi següent s'utilitza per configurar el PWM en mode independent. A la biblioteca Function_define.h , es defineix com-
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
A continuació, hem d’establir la sortida PWM de tipus EDGE. A la biblioteca Function_define.h , es defineix com-
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
A continuació, hem d'esborrar el valor del comptador PWM que està disponible a la biblioteca SFR_Macro.h-
#define set_CLRPWM CLRPWM = 1
Després, es selecciona el rellotge PWM com a rellotge Fsys i el factor de divisió utilitzat és la divisió 64.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Tots dos es defineixen com
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Sota la línia de codi s’utilitza per emmascarar el senyal PWM de sortida per 0 definit com-
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Després hem d’establir el període de temps del senyal PWM. Aquesta funció estableix el període al registre PWMPL i PWMPH. Com que es tracta d'un registre de 16 bits, la funció utilitza un mètode de desplaçament de bits per establir el període PWM.
void set_PWM_period (valor int sense signar) { PWMPL = (valor & 0x00FF); PWMPH = ((valor & 0xFF00) >> 8); }
No obstant això, a part del període de 1023 i 8 bits, els usuaris també poden utilitzar altres valors. Augmentar el període es tradueix en un atenuament suau o una decoloració.
set_PWMRUN;
Això iniciarà el PWM que es defineix a la biblioteca SFR_Macro.h com-
#define set_PWMRUN PWMRUN = 1
A continuació, al bucle while , el LED s’encén i s’esvaeix contínuament.
while (1) { for (valor = 0; valor <1024; valor + = 10) { set_PWM1 (valor); Temporitzador1_Delay10ms (3); } per a (valor = 1023; valor> 0; valor - = 10) { set_PWM1 (valor); Temporitzador1_Delay10ms (2); } } }
El cicle de treball el defineix set_PWM1 ();, una funció que estableix el cicle de treball al registre PWM1L i PWM1H.
void set_PWM1 (valor int sense signe) { PWM1L = (valor & 0x00FF); PWM1H = ((valor & 0xFF00) >> 8); set_LOAD; }
Intermitent del codi i prova de la sortida
Quan el codi estigui a punt, només cal que el compileu i el pengeu al controlador. Si no coneixeu el medi ambient, consulteu les instruccions per començar amb el tutorial Nuvoton N76E003 per conèixer els conceptes bàsics. Com podeu veure al resultat següent, el codi va retornar 0 advertència i 0 errors i va parpellejar mitjançant el mètode de parpelleig predeterminat per Keil. L'aplicació comença a funcionar.
Reconstrucció iniciada: Projecte: PWM Reconstrueix l'objectiu "Objectiu 1" muntant STARTUP.A51… compilant main.c… compilant Delay.c… enllaçant… Mida del programa: dades = 35,1 xdata = 0 codi = 709 creant fitxer hexadecimal de ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 error (s), 0 advertència (s). Temps de construcció transcorregut: 00:00:05
El maquinari està connectat a la font d'alimentació i funcionava com s'esperava. Aquesta és la brillantor del LED incorporat reduïda i després augmentada per indicar el canvi de cicle de treball PWM.

El funcionament complet d’aquest tutorial també es pot trobar al vídeo enllaçat a continuació. Espero que hagueu gaudit del tutorial i hàgiu après alguna cosa útil si teniu cap pregunta, deixeu-los a la secció de comentaris o podeu utilitzar els nostres fòrums per a altres qüestions tècniques.
