Cambiare frequenza e risoluzione del PWM su un ESP32 con Arduino

Ciao!

in questo post vedremo come variare frequenza e risoluzione del segnale pwm generato da una scheda dotata di chip ESP32.
Se non sai cos'è il PWM ti consiglio di leggere prima questo post.




Il modulo ESP32 ha una periferica chiamata "ledc" (LED Control) pensata per pilotare led tramite il PWM.
"ledc" permette di modificare sia la frequenza che la risoluzione del segnale PWM generato,
ad esempio è possibile impostare una frequenza di 5KHZ con una risoluzione massima di 13bit (quindi 8192 possibili livelli di intensità del led differenti).

Ecco un foglio di calcolo utile per calcolare la frequenza massima in base alla risoluzione di cui abbiamo bisogno.

Qui sotto invece trovate uno sketch di esempio nel quale vengono impostate frequenza e risoluzione del segnale PWM, viene poi pilotato un led collegato al pin 16 con un effetto dissolvenza.


  1. // pin da cui uscirà il segnale PWM
  2. // 16 corrisponde al pin GPIO16
  3. #define ledPin 16  
  4. // settaggi proprietà pwm
  5. #define freq 312500
  6. #define ledChannel 0
  7. #define resolution 8
  8. void setup() {
  9.    
  10.   // funzione per configurare le proprietà del PWM
  11.   ledcSetup(ledChannel, freq, resolution);
  12.   // collega il canale al pin fisico da pilotare
  13.   ledcAttachPin(ledPin, ledChannel);
  14. }
  15. void loop(){
  16.    
  17.   // incrementa il duty cicle dallo 0 al 100%
  18.   for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){  
  19.     ledcWrite(ledChannel, dutyCycle);
  20.     delay(15);
  21.   }
  22.   // decrementa il duty cicle dal 100% a 0
  23.   for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
  24.     ledcWrite(ledChannel, dutyCycle);  
  25.     delay(15);
  26.   }
  27. }


Per maggiori informazioni vi rimando alla reference riguardanti la periferica ledc

Questo è tutto, per qualsiasi domanda lascia pure un commento!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

Nessun commento:

Posta un commento

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post