ESP32 e PWM

Buongiorno,

tempo fa avevo chiesto consiglio su un oscilloscopio, beh ora che è in mio possesso e ho un po' di tempo ho iniziato a smanettarci; quindi mi sono messo ad analizzare una scheda di un progettino che sto realizzando che lavora con esp32 che programma un driver via i2c e poi lo comanda via PWM ed ecco che mi sono imbattuto in qualcosa di strano...

Qui per semplicità riporto un semplice codice che mi genera segnali PWM

// the number of the LED pin
const int ledPin = 16;  // 16 corresponds to GPIO16

// setting PWM properties
const int freq = 5000;
const int ledChannel = 0 ;
const int resolution = 8;
 
void setup(){
  // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);
  
  // attach the channel to the GPIO to be controlled
  ledcAttachPin(ledPin, ledChannel);
}
 
void loop(){
  ledcWrite(ledChannel, 125);
}

In tutti gli esempi che si trovano in rete vengono indicati come valori accettabili da 0 a 255, ovvero 2^resolution (in questo caso 2^8 = 256), bene non è così dalle prove che ho fatto.

Vi spiego:

  • se metto ledcWrite(ledChannel, 0);
    il pin risulta LOW come si vede dall'immagine PWM_0

  • se metto ledcWrite(ledChannel, 1);
    il pin genera un duty cycle di poco superiore allo 0 come si vede dall'immagine PWM_1

  • se metto ledcWrite(ledChannel, 255);
    il pin non genera un segnale HIGH come ci si aspetterebbe ma genera una PWM co duty cycle di poco inferiore al 100% come si vede dall'immagine PWM_255

  • se metto ledcWrite(ledChannel, 256);
    il pin risulta HIGH come si vede dall'immagine PWM_256

Quindi i valori del PWM impostabili vanno da 0 a 256 per un totale di 257 valori (2^8 + 1).

Ovviamente ho provato anche con altre risoluzioni esempio risoluzione 12,
2^12 = 4096
Pin LOW = 0
Pin HIGH = 4096
In questo caso i valori impostabili sono 4097 ovvero (2^12 + 1)

Si potrebbe uniformare con valori PWM importabili = (2^risoluzione + 1).

Cosa ne pensate è un errore o sono io che ho capito male ?

Spero di essermi espresso correttamente ed in modo chiaro.

Strano.
sembra un PWM a 8 Bit +1

Potrebbe essere qualche effetto colatterale nell'adegumento della funzione digitalWrite() alla ESP32.
Ciao Uwe

uwefed:
Strano.
sembra un PWM a 8 Bit +1

Potrebbe essere qualche effetto colatterale nell'adegumento della funzione digitalWrite() alla ESP32.
Ciao Uwe

Quindi confermi che c'è un errore ?