La modulation de largeur d'impulsion (PWM) est une technique qui fait varier la largeur d'une impulsion tout en maintenant la fréquence d'onde constante. La technique PWM est principalement utilisée pour contrôler la luminosité de la LED, la vitesse du moteur à courant continu, le contrôle d'un servomoteur, ou dans d'autres cas, où doivent générer un signal analogique à l'aide d'une source numérique. Nous avons expliqué le PWM en détail dans l'article précédent.
Dans ce tutoriel, nous allons parler des broches PWM (modulation de largeur d'impulsion) de la carte de développement ESP32. Toutes les broches GPIO de la carte de développement ESP32 (sauf Power, GND, Tx, Rx et EN) peuvent être utilisées pour obtenir le signal PWM. À titre d' exemple ESP32 PWM, nous allons créer un circuit simple qui change la luminosité de la LED en fonction des signaux PWM.
Composants requis
- ESP32
- LED
- Résistance 330 Ω
- Pot 10k
- Planche à pain
Génération PWM
Avant d'expliquer la génération PWM sur ESP32, discutons de quelques termes associés à PWM.
TON (On Time): la durée pendant laquelle le signal est élevé.
TOFF (Off Time): durée pendant laquelle le signal est faible.
Période: C'est la somme du temps de marche et du temps d'arrêt du signal PWM.
TotalPeriod = T ON + T OFF
Cycle de service: pourcentage de temps pendant lequel le signal était haut pendant la période du signal PWM.
Cycle de service = T ON / T Total * 100
Par exemple, si une impulsion d'une durée totale de 10 ms reste allumée (élevée) pendant 5 ms. Ensuite, le cycle de service sera:
Cycle de service = 5/10 * 100 = 50% du cycle de service
Le circuit contient une seule LED, une résistance et un potentiomètre 10K. La broche négative de la LED est connectée au GND de l'ESP32 via une résistance de 330 Ω. Vous pouvez utiliser n'importe quelle valeur de résistance entre 230 Ω et 500 Ω. Connectez la broche positive de la LED au GPIO 16 et la broche de signal du Pot à la broche ADC1 (VP) de l'ESP32.
Explication du code pour ESP32 PWM
Le code complet est donné en fin de page.
Ce code ne nécessite aucune bibliothèque, alors démarrez votre code en définissant la broche à laquelle la LED est attachée. Dans mon cas, j'ai utilisé GPIO 16 pour connecter la LED.
const int ledPin = 16; // 16 correspond à GPIO16
Après cela, définissez les propriétés du signal PWM dans les lignes suivantes. J'ai réglé la fréquence PWM sur 9000 et la résolution sur 10, vous pouvez la modifier pour générer différents signaux PWM. Les cartes ESP32 prennent en charge la résolution PWM de 1 bit à 16 bits. Vous devez également choisir un canal PWM. ESP32 a un total de 16 (0 à 15) canaux PWM.
const int freq = 9000; const int ledChannel = 0; résolution int constante = 10;
Maintenant, dans la fonction void setup () , configurez la LED PWM avec les propriétés que vous avez définies précédemment en utilisant la fonction ledcSetup () . Dans la ligne suivante, définissez la broche GPIO à laquelle la LED est connectée. La fonction ledcAttachPin () est utilisée pour définir la broche GPIO et le canal qui génère le signal. Dans mon cas, j'ai utilisé le ledPin qui est GPIO 16 et ledChannel qui correspond au canal 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, fréq, résolution); ledcAttachPin (ledPin, ledChannel); }
Dans la boucle vide, lisez la broche analogique où le Pot est connecté et enregistrez la lecture dans une variable appelée «dutyCycle» . La luminosité de la LED augmentera ou diminuera en fonction de la rotation du potentiomètre. Le ledcWrite () est très similaire à analogWrite ().
boucle vide () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); retard (15); }
Test des signaux ESP32 PWM
Pour tester les signaux ESP32 PWM, connectez la LED et le potentiomètre selon le schéma de circuit, et téléchargez le code sur votre ESP32. Assurez-vous que vous avez sélectionné la bonne carte et le bon port COM. Tournez maintenant le potentiomètre pour augmenter ou diminuer la luminosité de la LED.
Le travail complet est montré dans la vidéo ci-dessous. Vérifiez également les autres projets basés sur ESP32 en suivant le lien.