- Bases du signal PWM
- Configuration matérielle et configuration requise
- Schéma de circuit pour la gradation des LED du microcontrôleur Nuvoton N76E003
- Broches PWM sur le microcontrôleur N76E003 Nuvoton
- Registres et fonctions PWM dans le microcontrôleur N76E003 Nuvoton
- Modes de fonctionnement PWM dans le microcontrôleur Nuvoton N6E003
- Programmation Nuvoton N76E003 pour PWM
- Flasher le code et tester la sortie
La modulation de largeur d'impulsion (PWM) est une technique couramment utilisée dans les microcontrôleurs pour produire un signal d'impulsion continu avec une fréquence et un cycle de service définis. En bref, PWM consiste à changer la largeur d'une impulsion alors que la fréquence est constante.
Un signal PWM est principalement utilisé pour contrôler un servomoteur ou la luminosité d'une LED. De plus, étant donné que les microcontrôleurs ne peuvent fournir que Logic 1 (High) ou Logic 0 (Low) sur ses broches de sortie, ils ne peuvent pas fournir une tension analogique variable à moins qu'un convertisseur DAC ou numérique-analogique ne soit utilisé. Dans un tel cas, le microcontrôleur peut être programmé pour sortir un PWM avec un cycle de service varié qui peut ensuite être converti en la tension analogique variable. Nous avons déjà utilisé des périphériques PWM dans de nombreux autres microcontrôleurs.
- Tutoriel PWM ARM7-LPC2148: Contrôle de la luminosité de la LED
- Modulation de largeur d'impulsion (PWM) avec MSP430G2: contrôle de la luminosité de la LED
- Génération de PWM à l'aide du microcontrôleur PIC avec MPLAB et XC8
- Modulation de largeur d'impulsion (PWM) dans STM32F103C8: Contrôle de la vitesse du ventilateur CC
- Génération de signaux PWM sur les broches GPIO du microcontrôleur PIC
- Tutoriel PWM Raspberry Pi
- Tutoriel PWM avec ESP32
Dans ce tutoriel, nous allons interfacer une LED qui sera contrôlée à l'aide de ce signal PWM de l'unité de microcontrôleur N76E003. Nous évaluerons le type de configuration matérielle dont nous avons besoin et la façon dont nous devons programmer notre microcontrôleur. Avant cela, comprenons quelques bases d'un signal PWM.
Bases du signal PWM
Dans l'image ci-dessous, un signal PWM constant est affiché.
L'image ci-dessus n'est rien d'autre qu'une onde carrée constante avec le même temps ON et le même temps OFF. Supposons que la période totale du signal soit de 1 seconde. Ainsi, le temps de marche et le temps d'arrêt sont de 500 ms. Si une LED est connectée à travers ce signal, la LED s'allumera pendant 500 ms et s'éteindra pendant 500 ms. Par conséquent, en vue en perspective, la LED s'allumera avec la moitié de la luminosité réelle si elle est allumée à un signal direct 5V sans aucun temps d'arrêt.
Maintenant, comme le montre l'image ci-dessus, si le cycle de service est modifié, la LED s'allumera avec 25% de la luminosité réelle en utilisant le même principe que celui décrit précédemment. Si vous voulez en savoir plus et en savoir plus sur la modulation de largeur d'impulsion (PWM), vous pouvez consulter l'article lié.
Configuration matérielle et configuration requise
Comme l'exigence de ce projet est de contrôler la LED à l'aide de PWM. Une LED doit être interfacée avec N76E003. Puisqu'une LED est disponible dans la carte de développement N76E003, elle sera utilisée dans ce projet. Aucun autre composant n'est requis.
Sans oublier, nous avons besoin de la carte de développement basée sur le microcontrôleur N76E003 ainsi que du programmeur Nu-Link. Un bloc d'alimentation supplémentaire de 5 V peut être nécessaire si le programmateur n'est pas utilisé comme source d'alimentation.
Schéma de circuit pour la gradation des LED du microcontrôleur Nuvoton N76E003
Comme nous pouvons le voir dans le schéma ci-dessous, la LED Test est disponible à l'intérieur de la carte de développement et elle est connectée sur le port 1.4. À l'extrême gauche, la connexion de l'interface de programmation est affichée.
Broches PWM sur le microcontrôleur N76E003 Nuvoton
Le N76E003 possède 20 broches dont 10 peuvent être utilisées comme PWM. Les images ci-dessous montrent les broches PWM mises en évidence dans la case carrée rouge.
Comme nous pouvons le voir, les broches PWM en surbrillance peuvent également être utilisées à d'autres fins. Cependant, cet autre objectif des broches ne sera pas disponible lorsque les broches sont configurées pour la sortie PWM. La broche 1.4 qui est utilisée comme broche de sortie PWM, elle perdra l'autre fonctionnalité. Mais ce n'est pas un problème car une autre fonctionnalité n'est pas requise pour ce projet.
La raison du choix de la broche 1.4 comme broche de sortie est que la LED de test intégrée est connectée sur cette broche de la carte de développement, nous n'avons donc pas besoin de LED externes. Cependant, dans ce microcontrôleur sur 20 broches, 10 broches peuvent être utilisées comme broche de sortie PWM et toutes les autres broches PWM peuvent être utilisées à des fins liées à la sortie.
Registres et fonctions PWM dans le microcontrôleur N76E003 Nuvoton
Le N76E003 utilise l'horloge système ou le débordement de la minuterie 1 divisé par une horloge PWM avec Prescaler sélectionnable de 1/1 à 1/128. La période PWM peut être réglée à l'aide du registre de période 16 bits PWMPH et PWMPL.
Le microcontrôleur possède six registres PWM individuels qui génèrent six signaux PWM appelés PG0, PG1, PG2, PG3, PG4 et PG5. Cependant, la période est la même pour chaque canal PWM car ils partagent le même compteur de période 16 bits, mais le cycle de service de chaque PWM peut être différent des autres car chaque PWM utilise un registre de cycle de service 16 bits différent nommé {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} et {PWM5H, PWM5L}. Ainsi, dans N76E003, six sorties PWM peuvent être générées indépendamment avec différents rapports cycliques.
Contrairement à d'autres microcontrôleurs, l'activation du PWM ne définit pas automatiquement les broches d'E / S dans leur sortie PWM. Ainsi, l'utilisateur doit configurer le mode de sortie d'E / S.
Ainsi, quels que soient les besoins de l'application, la première étape consiste à déterminer ou à sélectionner une ou deux ou même plus de deux broches d'E / S comme sortie PWM. Après en avoir sélectionné une, les broches d'E / S doivent être définies en mode Push-Pull ou Quasi-bidirectionnel pour générer le signal PWM. Cela peut être sélectionné à l'aide des registres PxM1 et PxM2. Ces deux registres définissent les modes d'E / S où le x représente le numéro de port (par exemple, Port P1.0, le registre sera P1M1 et P1M2, pour P3.0 ce sera P3M1 et P3M2, etc.)
La configuration peut être vue dans l'image ci-dessous-
Ensuite, l'étape suivante consiste à activer le PWM dans cette ou ces broches d'E / S particulières. Pour ce faire, l'utilisateur doit définir les registres PIOCON0 ou PIOCON1. Le registre dépend du mappage des broches car PIOCON0 et PIOCON1 contrôlent différentes broches en fonction des signaux PWM. La configuration de ces deux registres peut être vue dans l'image ci-dessous-
Comme on peut le voir, le registre ci-dessus contrôle 6 configurations. Pour le reste, utilisez le registre PIOCON1.
Ainsi, le registre ci-dessus contrôle les 4 autres configurations.
Modes de fonctionnement PWM dans le microcontrôleur Nuvoton N6E003
L'étape suivante consiste à sélectionner les modes de fonctionnement PWM. Chaque PWM prend en charge trois modes de fonctionnement: mode d'activation indépendant, synchrone et temps mort.
Le mode indépendant fournit la solution où les six signaux PWM peuvent être générés indépendamment. Ceci est requis au maximum de fois lorsque les opérations liées aux LED ou les buzzers doivent être activés et contrôlés.
Le mode synchrone définit le PG1 / 3/5 sur la même sortie PWM en phase, la même que PG0 / 2/4, où le PG0 / 2/4 fournit des signaux de sortie PWM indépendants. Ceci est principalement nécessaire pour contrôler les moteurs triphasés.
Le mode d'insertion temps mort est un peu complexe et appliqué dans les applications de moteurs réels, en particulier dans les applications industrielles. Dans de telles applications, une sortie PWM complémentaire doit être une insertion «temps mort» qui empêche d'endommager les dispositifs de commutation de puissance tels que les GPIB. Les configurations sont définies dans ce mode de manière à ce que le PG0 / 2/4 fournisse des signaux de sortie PWM de la même manière que le mode indépendant, mais PG1 / 3/5 fournit une sortie «signaux PWM déphasés» de PG0 / 2/4 en conséquence et ignorez le registre de service PG1 / 3/5.
Au-dessus de trois modes peuvent être sélectionnés en utilisant la configuration de registre ci-dessous-
La configuration suivante est la sélection des types PWM à l'aide du registre PWMCON1.
Ainsi, comme nous pouvons le voir, deux types de PWM sont disponibles et peuvent être sélectionnés à l'aide du registre ci-dessus. En alignement sur les bords, le compteur 16 bits utilise un fonctionnement à pente unique en comptant de 0000H à la valeur définie de {PWMPH, PWMPL}, puis en commençant à 0000H. La forme d'onde de sortie est alignée sur le bord gauche.
Mais, en mode centré, le compteur 16 bits utilise un fonctionnement à double pente en comptant de 0000H à {PWMPH, PWMPL} puis passe à nouveau de {PWMPH, PWMPL} à 0000H en comptant à rebours. La sortie est alignée au centre et elle est utile pour générer des formes d'onde sans chevauchement. Maintenant, enfin, les opérations de contrôle PWM qui peuvent être vérifiées dans les registres ci-dessous -
Pour régler la source d'horloge, utilisez le registre de commande d'horloge CKCON.
Le signal de sortie PWM peut également être masqué à l'aide du registre PMEN. En utilisant ce registre, l'utilisateur peut masquer le signal de sortie par 0 ou 1.
Vient ensuite le registre de contrôle PWM-
Le registre ci-dessus est utile pour exécuter le PWM, charger une nouvelle période et une nouvelle charge de service, contrôler l'indicateur PWM et effacer le compteur PWM.
Les configurations de bits associées sont indiquées ci-dessous:
Pour régler le diviseur d'horloge, utilisez le registre PWMCON1 pour le diviseur d'horloge PWM. Le 5ème bit est utilisé pour le PWM groupé activé en mode Groupe et fournit le même rapport cyclique pour les trois premières paires PWM.
Programmation Nuvoton N76E003 pour PWM
Le codage est simple et le code complet utilisé pour ce tutoriel se trouve au bas de cette page. La LED est connectée à la broche P1.4. Ainsi, la broche P1.4 doit être utilisée pour la sortie PWM.
Dans le programme principal, les réglages sont effectués dans l'ordre respectif. Les lignes de codes ci-dessous définissent le PWM et configure la broche P1.4 comme sortie PWM.
P14_PushPull_Mode;
Ceci est utilisé pour mettre la broche P1.4 en mode push-pull. Ceci est défini dans la bibliothèque Function_define.h comme-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Les lignes suivantes utilisées pour activer le PWM dans la broche P1.4. Ceci est également défini dans la bibliothèque Function_define.h comme-
#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 comme Activation de la sortie PWM1 PWM_IMDEPENDENT_MODE;
Le code ci-dessous est utilisé pour régler le PWM en mode indépendant. Dans la bibliothèque Function_define.h , il est défini comme-
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Ensuite, nous devons régler la sortie PWM de type EDGE. Dans la bibliothèque Function_define.h , il est défini comme-
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Ensuite, nous devons effacer la valeur du compteur PWM qui est disponible dans la bibliothèque SFR_Macro.h-
#define set_CLRPWM CLRPWM = 1
Après cela, l'horloge PWM est sélectionnée comme horloge Fsys et le facteur de division utilisé est la division 64.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Les deux sont définis comme-
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
La ligne de code ci-dessous est utilisée pour masquer le signal PWM de sortie par 0 défini comme-
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Ensuite, nous devons régler la période de temps du signal PWM. Cette fonction définit la période dans le registre PWMPL et PWMPH. Comme il s'agit d'un registre 16 bits, la fonction utilise une méthode de décalage de bits pour définir la période PWM.
void set_PWM_period (valeur int non signée) { PWMPL = (valeur & 0x00FF); PWMPH = ((valeur & 0xFF00) >> 8); }
Cependant, à part la période 1023 et 8 bits, les utilisateurs peuvent également utiliser d'autres valeurs. L'augmentation de la période entraîne une gradation ou une atténuation régulière.
set_PWMRUN;
Cela démarrera le PWM qui est défini dans la bibliothèque SFR_Macro.h comme-
#define set_PWMRUN PWMRUN = 1
Ensuite, dans la boucle while , la LED est allumée et s'estompe en continu.
while (1) { pour (valeur = 0; valeur <1024; valeur + = 10) { set_PWM1 (valeur); Timer1_Delay10ms (3); } pour (valeur = 1023; valeur> 0; valeur - = 10) { set_PWM1 (valeur); Timer1_Delay10ms (2); } } }
Le cycle de service est défini par set_PWM1 ();, une fonction qui définit le cycle de service dans le registre PWM1L et PWM1H.
void set_PWM1 (valeur int non signée) { PWM1L = (valeur & 0x00FF); PWM1H = ((valeur & 0xFF00) >> 8); set_LOAD; }
Flasher le code et tester la sortie
Une fois le code prêt, compilez-le et téléchargez-le sur le contrôleur. Si vous êtes nouveau dans l'environnement, consultez le didacticiel de mise en route du Nuvoton N76E003 pour en savoir plus sur les bases. Comme vous pouvez le voir dans le résultat ci-dessous, le code a renvoyé 0 avertissement et 0 erreur et a clignoté en utilisant la méthode de clignotement par défaut par le Keil. L'application commence à fonctionner.
Reconstruction démarrée: Projet: PWM Reconstruire la cible 'Target 1' assemblage STARTUP.A51… compilation main.c… compilation Delay.c… liaison… Taille du programme: data = 35.1 xdata = 0 code = 709 création fichier hexadécimal de ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Erreur (s), 0 Avertissement (s). Temps de construction écoulé: 00:00:05
Le matériel est connecté à la source d'alimentation et il fonctionnait comme prévu. C'est la luminosité de la LED embarquée réduite puis augmentée pour indiquer le changement de cycle de service PWM.
Le fonctionnement complet de ce tutoriel peut également être trouvé dans la vidéo ci-dessous. J'espère que vous avez apprécié le tutoriel et appris quelque chose d'utile si vous avez des questions, laissez-les dans la section des commentaires ou vous pouvez utiliser nos forums pour d'autres questions techniques.