Controllo PWM su Arduino UNO

 

Il controllo PWM (Pulse-Width-Modulation) è largamente utilizzato per la gestione di dispositivi elettronici e si basa sul legame tra valore medio e duty-cycle. Iniziamo quindi con il definire cosa rappresentano queste due grandezze:

  • Valore medio: media matematica tra semioda positiva e negativa.
  • Duty-cycle: ipotizzando una forma d'onda quadra è il rapporto tra la durata del livello HIGH rispetto l'intero periodo T. Per semplicità di gestione del dato viene espresso in percentuale.

Andiamo ora a caricare sulla board attraverso l'IDE il seguente sketch (da notare il fatto che vengono sfruttati i pin 9 10 11 che sono contrassegnati con la sigla PWM).

 

int OUT1 = 9;      // uscita PWM 
int OUT2 = 10;      // uscita PWM 
int OUT3 = 11;      // uscita PWM 

void setup()
{
  pinMode(OUT1, OUTPUT);     
  pinMode(OUT2, OUTPUT);   
  pinMode(OUT3, OUTPUT);   
}



void loop()

{

  analogWrite(OUT1,20);  
  analogWrite(OUT2,100);  
  analogWrite(OUT3,200);  

}
 

Abbiamo quindi un ciclo con tre forme d'onda quadre diverse.
Sul terminale 9 viene impostato il valore di 20, che rappresenta un duty.cycle del 7.84% (proporzione 20:255=x:100).
Sul terminale 10 viene impostato il valore di 100, che rappresenta un duty.cycle del 39.2% (proporzione 100:255=x:100).
Sul terminale 11 viene impostato il valore di 200, che rappresenta un duty.cycle del 78.4% (proporzione 200:255=x:100).

Andiamo a verificare ora con l'oscilloscopio la correttezza di queste informazioni.

ANALISI PIN 9 (duty-cycle 7.84%)

 

Notiamo come il livello HIGH abbia una durata di circa 0.3 divisioni con una costante TIME/DIV di 500 microsecondi.
Ne consegue che la durata efffettiva è di 150microsecondi.
Il periodo torale invece è di 2040 microsecondi.
Facendo il rapporto tra la durata del livello HIGH ed il periodo totale si ottiene:
duty-cycle = 150/2040 = 0.073 = 7.3%

Viene quindi confermata la nostra impostazione software.  Notiamo un valore medio di 360mV.

ANALISI PIN 10 (duty-cycle 39.2%)

 

Notiamo come il livello HIGH abbia una durata di circa 1.6 divisioni con una costante TIME/DIV di 500 microsecondi.
Ne consegue che la durata efffettiva è di 800 microsecondi.
Il periodo torale invece è di 2040 microsecondi.
Facendo il rapporto tra la durata del livello HIGH ed il periodo totale si ottiene:
duty-cycle = 800/2040 = 0.392 = 39.2%

Viene quindi confermata la nostra impostazione software.Notiamo un valore medio di 1.57V.

 

ANALISI PIN 11 (duty-cycle 78.4%)

 

Notiamo come il livello HIGH abbia una durata di circa 3.2 divisioni con una costante TIME/DIV di 500 microsecondi.
Ne consegue che la durata efffettiva è di 1600 microsecondi.
Il periodo torale invece è di 2040 microsecondi.
Facendo il rapporto tra la durata del livello HIGH ed il periodo totale si ottiene:
duty-cycle = 1600/2040 = 0.784 = 78.4%

Viene quindi confermata la nostra impostazione software.Notiamo un valore medio di 2.8V.

 

Concludendo possiamo notare da queste semplici prove che il valore medio è strettamente legato al duty-cycle in un sistema di controllo PWM.