start:esp32:pwm
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| start:esp32:pwm [2022/12/20 14:57] – créée gerardadmin | start:esp32:pwm [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ======== PWM ESP32 ======== | ======== PWM ESP32 ======== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | |||
| + | ===== Une brève note sur ESP32 PWM===== | ||
| + | |||
| + | Le SoC ESP32 est entièrement chargé de périphériques très utiles et PWM en fait partie. Oui. Il existe un bloc matériel dédié pour PWM dans le silicium de l' | ||
| + | |||
| + | Vous pouvez utiliser le PWM d' | ||
| + | |||
| + | Même si nous limiterons notre démonstration de PWM dans ESP32 à la décoloration d'une LED, il est bon de connaître le bloc Motor Control PWM (MCPWM) dans ESP32, avec des modules de capture d' | ||
| + | |||
| + | Si vous avez déjà travaillé avec des moteurs CC sans balais (BLDC), vous vous rendrez compte de l' | ||
| + | Contrôleur PWM LED ESP32 (LEDC) | ||
| + | |||
| + | Le périphérique LEDC de l' | ||
| + | |||
| + | Il y a quelques points intéressants sur le contrôleur LED PWM dans ESP32 dont vous devez être conscient. | ||
| + | |||
| + | *16 canaux PWM indépendants, | ||
| + | *Résolution programmable entre 1 bit et 16 bits. | ||
| + | *La fréquence de l'onde PWM dépend de la résolution du PWM. | ||
| + | *Augmente/ | ||
| + | |||
| + | ====Configurer les canaux PWM d' | ||
| + | |||
| + | Vous souvenez-vous de la fonction ' | ||
| + | |||
| + | Étant donné que presque tout dans LED PWM d' | ||
| + | |||
| + | Voici une liste de toutes les API LEDC exposées par le pilote. Ces fonctions sont écrites pour le port Arduino IDE d' | ||
| + | |||
| + | *ledcSetup(canal, | ||
| + | *ledcAttachPin(broche, | ||
| + | *ledcWrite(canal, | ||
| + | *ledcRead(canal); | ||
| + | *ledcWriteTone(canal, | ||
| + | *ledcWriteNote(canal, | ||
| + | *ledcReadFreq(canal); | ||
| + | *ledcDetachPin(broche); | ||
| + | |||
| + | Parmi les 8 fonctions, nous nous concentrerons sur les trois premières, car elles sont plus utiles (et le minimum requis) pour générer du PWM. | ||
| + | |||
| + | Quelques points importants à retenir lors de la configuration du canal PWM dans ESP32 : | ||
| + | |||
| + | *Comme il y a 16 canaux PWM, l' | ||
| + | *Vient ensuite la fréquence du signal PWM. Vous pouvez définir la fréquence selon vos besoins, comme 1 KHz, 5 KHz, 8 KHz et 10 KHz. | ||
| + | *La résolution du PWM est également configurable et ESP32 PWM peut être programmé n' | ||
| + | *La fréquence et la résolution PWM sont inversement proportionnelles et dépendent de la source d' | ||
| + | *Enfin, attribuez une broche GPIO pour la sortie PWM. Vous pouvez attribuer n' | ||
| + | |||
| + | Le tableau suivant montre quelques fréquences et résolutions PWM couramment utilisées. | ||
| + | |||
| + | ^Source d' | ||
| + | | 80 MHz APB_CLK | ||
| + | | 80 MHz APB_CLK | ||
| + | | 80 MHz APB_CLK | ||
| + | | 8MHz RTC8M_CLK | ||
| + | | 8MHz RTC8M_CLK | ||
| + | | 1MHz REF_TICK | ||
| + | |||
| + | |||
| + | ====Fading LED utilisant PWM dans ESP32==== | ||
| + | |||
| + | Avec toutes les informations nécessaires sur PWM dans ESP32, nous pouvons maintenant procéder à la mise en œuvre de notre premier projet de décoloration d'une LED à l'aide de ESP32 PWM. C'est un projet très simple où la luminosité d'une LED connectée à une broche GPIO d' | ||
| + | |||
| + | Ce projet consiste davantage à comprendre les fonctions LEDC : ledcSetup, ledcAttachPin et ledcWrite et comment générer du PWM dans ESP32 que la LED qui s' | ||
| + | Composants requis | ||
| + | |||
| + | *Carte de développement ESP32 DevKit | ||
| + | *3 LED de 5 mm | ||
| + | *Résistance 220Ω | ||
| + | *3 potentiomètres 5KΩ | ||
| + | *Planche à pain | ||
| + | *Fils de connexion | ||
| + | *Câble micro-USB | ||
| + | |||
| + | ===Schéma=== | ||
| + | |||
| + | L' | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | ===Code=== | ||
| + | |||
| + | Vous pouvez utiliser n' | ||
| + | |||
| + | L' | ||
| + | |||
| + | Pour le reste des paramètres, | ||
| + | |||
| + | <code c pwmesp32led.ino> | ||
| + | const int LEDPin = 16; /* GPIO16 */ | ||
| + | |||
| + | int dutyCycle; | ||
| + | /* Setting PWM Properties */ | ||
| + | const int PWMFreq = 5000; /* 5 KHz */ | ||
| + | const int PWMChannel = 0; | ||
| + | const int PWMResolution = 10; | ||
| + | const int MAX_DUTY_CYCLE = (int)(pow(2, | ||
| + | void setup() | ||
| + | { | ||
| + | ledcSetup(PWMChannel, | ||
| + | /* Attach the LED PWM Channel to the GPIO Pin */ | ||
| + | ledcAttachPin(LEDPin, | ||
| + | } | ||
| + | void loop() | ||
| + | { | ||
| + | /* Increasing the LED brightness with PWM */ | ||
| + | for(dutyCycle = 0; dutyCycle <= MAX_DUTY_CYCLE; | ||
| + | { | ||
| + | ledcWrite(PWMChannel, | ||
| + | delay(3); | ||
| + | // | ||
| + | } | ||
| + | /* Decreasing the LED brightness with PWM */ | ||
| + | for(dutyCycle = MAX_DUTY_CYCLE; | ||
| + | { | ||
| + | ledcWrite(PWMChannel, | ||
| + | delay(3); | ||
| + | // | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | < | ||
| + | Vous pouvez connecter plusieurs broches GPIO au même canal LEDC PWM. Si vous le faites, toutes les broches GPIO partageront les propriétés du canal (résolution et fréquence). | ||
| + | </ | ||
| + | |||
| + | =====ESP32 PWM avec ADC===== | ||
| + | |||
| + | L'une des caractéristiques importantes de PWM dans ESP32 est que les 16 canaux peuvent être configurés indépendamment, | ||
| + | |||
| + | Trois potentiomètres 5KΩ sont connectés à trois broches d' | ||
| + | |||
| + | Pour faciliter la compréhension, | ||
| + | |||
| + | ^LED^GPIO Pin^ PWM Channel^ PWM Frequency^ PWM Resolution^ | ||
| + | | RED | GPIO 16 | 0 | 5000 (5 KHz) | 12 | | ||
| + | | GREEN | GPIO 17 | 2 | 8000 (8 KHz) | 13 | | ||
| + | | BLUE | GPIO 4 | 4 | 10000 (10 KHz) | 14 | | ||
| + | |||
| + | Un autre point important à retenir est que la résolution de l'ADC de l' | ||
| + | |||
| + | ===Schéma=== | ||
| + | |||
| + | L' | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | <code c pwmledPotentiometre.ino> | ||
| + | const int redLEDPin = 16; /* GPIO16 */ | ||
| + | const int greenLEDPin = 17; /* GPIO17 */ | ||
| + | const int blueLEDPin = 4; /* GPIO4 */ | ||
| + | uint16_t redDutyCycle; | ||
| + | uint16_t greenDutyCycle; | ||
| + | uint16_t blueDutyCycle; | ||
| + | |||
| + | const int redPWMFreq = 5000; /* 5 KHz */ | ||
| + | const int redPWMChannel = 0; | ||
| + | const int redPWMResolution = 12; | ||
| + | const int RED_MAX_DUTY_CYCLE = (int)(pow(2, | ||
| + | |||
| + | const int greenPWMFreq = 8000; /* 8 KHz */ | ||
| + | const int greenPWMChannel = 2; | ||
| + | const int greenPWMResolution = 13; | ||
| + | const int GREEN_MAX_DUTY_CYCLE = (int)(pow(2, | ||
| + | |||
| + | const int bluePWMFreq = 10000; /* 10 KHz */ | ||
| + | const int bluePWMChannel = 4; | ||
| + | const int bluePWMResolution = 14; | ||
| + | const int BLUE_MAX_DUTY_CYCLE = (int)(pow(2, | ||
| + | |||
| + | const int ADC_RESOLUTION = 4095; /* 12-bit */ | ||
| + | |||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | /* Initialize Serial Port */ | ||
| + | Serial.begin(115200); | ||
| + | /* Initialize PWM Channels with Frequency and Resolution */ | ||
| + | ledcSetup(redPWMChannel, | ||
| + | ledcSetup(greenPWMChannel, | ||
| + | ledcSetup(bluePWMChannel, | ||
| + | /* Attach the LED PWM Channel to the GPIO Pin */ | ||
| + | ledcAttachPin(redLEDPin, | ||
| + | ledcAttachPin(greenLEDPin, | ||
| + | ledcAttachPin(blueLEDPin, | ||
| + | | ||
| + | } | ||
| + | void loop() | ||
| + | { | ||
| + | /* Read Analog Input from three ADC Inputs */ | ||
| + | redDutyCycle = analogRead(A0); | ||
| + | greenDutyCycle = analogRead(A3); | ||
| + | blueDutyCycle = analogRead(A4); | ||
| + | /* Map ADC Output to maximum possible dutycycle */ | ||
| + | // | ||
| + | greenDutyCycle = map(greenDutyCycle, | ||
| + | blueDutyCycle = map(blueDutyCycle, | ||
| + | /* Set PWM Output of Channel with desired dutycycle */ | ||
| + | ledcWrite(redPWMChannel, | ||
| + | ledcWrite(greenPWMChannel, | ||
| + | ledcWrite(bluePWMChannel, | ||
| + | |||
| + | Serial.println(" | ||
| + | Serial.print(redDutyCycle); | ||
| + | Serial.print(" | ||
| + | Serial.print(greenDutyCycle); | ||
| + | Serial.print(" | ||
| + | Serial.print(blueDutyCycle); | ||
| + | Serial.print(" | ||
| + | |||
| + | delay(1000); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
/home/chanteri/www/fablab37110/data/attic/start/esp32/pwm.1671544679.txt.gz · Dernière modification : (modification externe)
