La modulation de largeur d'impulsion ou PWM est une technique utilisée pour hacher le signal numérique pour obtenir une sortie variable. La plupart des microcontrôleurs ont une horloge interne qui est utilisée pour générer un signal PWM. Dans ce tutoriel, nous couvrirons les broches PWM et comment elles peuvent être configurées dans ESP32 en utilisant l'Arduino IDE.
Broches PWM dans ESP32
La carte ESP32 a 16 canaux indépendants qui peuvent générer des signaux PWM. Presque toutes les broches GPIO qui peuvent agir comme sortie peuvent être utilisées pour générer un signal PWM. Les broches GPIO 34,35,36,39 ne peuvent pas être utilisées comme broches PWM car elles sont des broches d'entrée uniquement.
Dans la variante des 36 broches de la carte ESP32, les six broches intégrées SPI qui ne peuvent pas être utilisées comme générateurs de signaux PWM.
Comment utiliser ESP32 PWM PINS
PWM est une technique pour contrôler l'appareil à l'aide d'un signal d'impulsion numérique variable. PWM aide à contrôler la vitesse du moteur. Le composant principal de la génération de signaux PWM est le module de minuterie interne. La minuterie est contrôlée par la source d'horloge de microcontrôleur interne.
Au début du temps, sa valeur est comparée à deux comparateurs et une fois qu'il atteint la valeur du cycle de service défini, un signal à la broche PWM est déclenché, ce qui modifie les états PIN à faible. Ensuite, le signal de la minuterie continue de compter jusqu'à ce qu'il atteigne la valeur du registre de période. Maintenant, encore une fois, le comparateur générera un nouveau déclencheur et les épingles PWM passent de bas à haut à haut.
Pour générer un signal PWM aux broches GPIO suivant quatre propriétés doit être définie:
Configurer les canaux PWM de ESP32
La configuration du canal PWM dans ESP32 est similaire à analogwrite () fonction dans la programmation Arduino. Mais ici, nous utiliserons un ensemble dédié de ledcsetup () Fonctions pour configurer PWM dans ESP32. À peu près tout ce dont vous avez besoin pour un signal PWM comme canaliser, résolution et fréquence peut être facilement configurable par l'utilisateur.
Voici le ledcsetup () Fonction utilisée pour configurer le signal PWM ESP32:
LedCsetup (canal, fréquence, résolution_bits);
Cette fonction contient trois arguments.
Canaliser: Comme ESP32 a 16 canaux PWM, donc le canaliser argument à l'intérieur du ledcsetup () La fonction peut prendre n'importe quelle valeur entre 0 et 15.
Fréquence: Suivant dans le ledcsetup () fonction Nous avons des arguments de fréquence qui peuvent être définis en fonction des exigences comme 1 kHz, 5 kHz, 8 kHz et 10 kHz. Par exemple, la fréquence PWM maximale avec une résolution de 10 bits dans le module PWM peut être définie est 78.125 kHz.
Résolution: La résolution du signal PWM peut être configurée entre une résolution de 1 bit à 16 bits.
Dans ESP32, la fréquence et la résolution PWM sont indépendantes de la source d'horloge et inversement proportionnelle.
La dernière étape consiste à définir une broche pour PWM. N'attribuez pas les épingles déjà utilisées pour la communication telles que les broches GPIO comme UART, SPI, etc.
Le LEDC (contrôleur PWM LED) est principalement conçu pour les signaux de contrôle LED PWM ESP32. Cependant, les signaux PWM générés ici peuvent également être utilisés pour d'autres applications.
Voici quelques points que l'on doit garder à l'esprit lors de la configuration du signal PWM ESP32:
Contrôler la luminosité LED à l'aide du signal PWM dans ESP32
Nous allons maintenant contrôler la luminosité des LED à l'aide d'un signal PWM. Connectez LED avec ESP32 GPIO PIN 18.
Le tableau montre la connexion PIN pour les LED avec ESP32.
ESP32 GPIO PIN | DIRIGÉ |
GPIO 18 | +ive |
GND | -ive |
Code pour le contrôle de la luminosité LED
Le code ci-dessous fera la décoloration de la LED:
const int LED = 18; / * Équivaut à la broche GPIO 18 * /
const int freq = 5000; / * Fréquence du signal PWM * /
const int int led_channel = 0;
const int résolution = 8; / * Résolution PWM * /
void setup()
LEDCSEUP (LED_CHANNEL, FREQ, Résolution); / * Signal pwm défini * /
LEDCATTACHPIN (LED, LED_CHANNEL);
VOID LOOP ()
pour (int Dutycycle = 0; DutyCycle = 0; DutyCycle -) / * La luminosité LED diminue * /
LEDCWRITE (LED_CHANNEL, DUTYCYLY);
retard (15);
Code commencé par définir le numéro de broche pour LED qui est GPIO 18. Ensuite, nous définissons les propriétés du signal PWM qui sont la fréquence, la résolution du signal PWM et le canal LED.
Ensuite en utilisant le ledcsetup () fonction Nous configurons le signal PWM. Cette fonction accepte les trois arguments fréquence, résolution et Canal LED Nous avons défini plus tôt.
Dans la partie de boucle, nous varions le cycle de service entre 0 et 255 pour augmenter la luminosité de la LED. Après cela, l'utilisation de la boucle pour diminue la luminosité LED de 255 à 0.
La modulation de la largeur d'impulsion transforme un signal numérique en un signal analogique en modifiant la synchronisation de la durée. Le terme Cycle de service est utilisé pour décrire le pourcentage ou le ratio de la durée de son séjour par rapport au moment où il s'éteint.
Ici, nous avons pris un canal 8 bits ainsi selon les calculs:
2 ^ 8 = 256 contenant des valeurs de 0 à 255. Dans l'exemple donné ci-dessus, le cycle de service est égal à 100%. Pour un cycle de service de 20% ou toute autre valeur, nous pouvons le calculer en utilisant les calculs ci-dessous:
Résolution de canal = 8 bits
Pour un cycle de service à 100% = 0 à 255 (2 ^ 8 = 256 valeurs)
Pour un cycle de service à 20% = 20% de 256 est 51
Ainsi, un cycle de service de 20% de la résolution 8 bits sera égal à des valeurs de plage 0 à 51.
Où 0 = 0% et 51 = 100% du cycle de service de résolution 8 bits.
Sortir
Sur le matériel, nous pouvons voir la luminosité de la LED à son plein, cela signifie que le signal du cycle de service est à 255.
Maintenant, nous pouvons voir que la LED est complètement faible, ce qui signifie que la valeur du cycle de service est à 0.
Nous avons réussi à contrôler la luminosité des LED en utilisant le signal PWM.
Conclusion
Ici, dans cet article, nous avons discuté des épingles PWM ESP32 et comment elles peuvent être utilisées pour contrôler plusieurs périphériques comme LED ou Motor. Nous avons également discuté du code pour contrôler les LED uniques et multiples en utilisant le même canal PWM. En utilisant ce guide, tout type de matériel peut être contrôlé à l'aide du signal PWM.