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:29] – [ESP32 PWM avec ADC] gerardadminstart:esp32:pwm [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 149: Ligne 149:
  
 L'image suivante montre les connexions pour régler le rapport cyclique des canaux PWM à l'aide de l'ADC (potentiomètres). 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.1671553770.txt.gz · Dernière modification : 2023/01/27 16:08 (modification externe)