Outils pour utilisateurs

Outils du site


start:esp32:pwm

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
start:esp32:pwm [2022/12/20 17:28] – [Code] gerardadminstart:esp32:pwm [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 145: Ligne 145:
  
 Un autre point important à retenir est que la résolution de l'ADC de l'ESP32 est de 12 bits. Nous devons donc mapper cela avec soin sur la résolution PWM, pour obtenir la gamme complète de contrôle. Un autre point important à retenir est que la résolution de l'ADC de l'ESP32 est de 12 bits. Nous devons donc mapper cela avec soin sur la résolution PWM, pour obtenir la gamme complète de contrôle.
 +
 +===Schéma===
 +
 +L'image suivante montre les connexions pour régler le rapport cyclique des canaux PWM à l'aide de l'ADC (potentiomètres).
 +
 +{{ :start:esp32:esp32-pwm-adc-circuit.jpg?direct&600 |}}
 +
 +<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, redPWMResolution) - 1);
 +
 +const int greenPWMFreq = 8000; /* 8 KHz */
 +const int greenPWMChannel = 2;
 +const int greenPWMResolution = 13;
 +const int GREEN_MAX_DUTY_CYCLE = (int)(pow(2, greenPWMResolution) - 1);
 +
 +const int bluePWMFreq = 10000; /* 10 KHz */
 +const int bluePWMChannel = 4;
 +const int bluePWMResolution = 14;
 +const int BLUE_MAX_DUTY_CYCLE = (int)(pow(2, bluePWMResolution) - 1);
 +
 +const int ADC_RESOLUTION = 4095; /* 12-bit */
 +
 +
 +void setup()
 +{  
 +  /* Initialize Serial Port */
 +  Serial.begin(115200);
 +  /* Initialize PWM Channels with Frequency and Resolution */
 +  ledcSetup(redPWMChannel, redPWMFreq, redPWMResolution);
 +  ledcSetup(greenPWMChannel, greenPWMFreq, greenPWMResolution);
 +  ledcSetup(bluePWMChannel, bluePWMFreq, bluePWMResolution);
 +  /* Attach the LED PWM Channel to the GPIO Pin */
 +  ledcAttachPin(redLEDPin, redPWMChannel);
 +  ledcAttachPin(greenLEDPin, greenPWMChannel);
 +  ledcAttachPin(blueLEDPin, bluePWMChannel);
 +  
 +}
 +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 */
 +  //redDutyCycle = map(redDutyCycle, 0, ADC_RESOLUTION, 0, RED_MAX_DUTY_CYCLE);
 +  greenDutyCycle = map(greenDutyCycle, 0, ADC_RESOLUTION, 0, GREEN_MAX_DUTY_CYCLE);
 +  blueDutyCycle = map(blueDutyCycle, 0, ADC_RESOLUTION, 0, BLUE_MAX_DUTY_CYCLE);
 +  /* Set PWM Output of Channel with desired dutycycle */ 
 +  ledcWrite(redPWMChannel, redDutyCycle);
 +  ledcWrite(greenPWMChannel, greenDutyCycle);
 +  ledcWrite(bluePWMChannel, blueDutyCycle);
 +
 +  Serial.println("RED -- GREEN -- BLUE");
 +  Serial.print(redDutyCycle);
 +  Serial.print(" -- ");
 +  Serial.print(greenDutyCycle);
 +  Serial.print(" -- ");
 +  Serial.print(blueDutyCycle);
 +  Serial.print("\n");
 +
 +  delay(1000);
 +}
 +</code>
 +
 +{{ :start:esp32:esp32-pwm-adc.jpg?direct&600 |}}
 +
/home/chanteri/www/fablab37110/data/attic/start/esp32/pwm.1671553723.txt.gz · Dernière modification : 2023/01/27 16:08 (modification externe)