PWM (Pulse Width Modulation)

Il microcontrollore, oltre ad avere delle uscite e ingressi digitali, può anche gestire i segnali analogici,  infatti, il microcontrollore   ATmega328  ha alcuni ingressi che sono dotati di un convertitore ADC  (Analog  Digital Converter ) selezionabile dai registri di configurazione del microcontrollore.

In particolare, il microcontrollore sopracitato, montato sulla scheda di Arduino Uno, non possiede un DAC (Digital Analog Converter),  per la generazione dei segnali analogici.

Tuttavia, questa mancanza può essere superata , seppur con qualche limitazione, tramite un segnale PWM.

Un segnale PWM  ha una frequenza costante, ma il duty cycle è  variabile nel tempo, se variamo in percentuale il tempo in cui il segnale è nello stato alto, nella Figura 1 si chiarisce il concetto:

Figura 1

Come anticipato in precedenza, un segnale analogico può essere generato da un segnale PWM, infatti, il suo valore medio varia in funzione della percentuale, nel periodo, in cui la forma d’onda si trova nello stato alto. Il valore medio di un segnale PWM può essere ottenuto grazie all’utilizzo di un filtro passa basso ( descriveremo in un futuro post).

Approfondimenti

La frequenza di un segnale periodico è data dal numero di volte che esso si ripete in un secondo, per esempio, se ha una frequenza di 1kHz, significa che in un secondo il segnale si ripete per mille volte. Mentre, il periodo è l’intervallo temporale che intercorre, per esempio, tra due fronti di salita, nel caso di onda quadra.

Il periodo e la frequenza  sono inversamente proporzionali, cioè se il periodo aumenta, di conseguenza diminuisce la frequenza, perché in un secondo ci sono meno ripetizione, poiche’ ogni singola forma d’onda ha una durata maggiore. Se conosciamo il periodo possiamo ricavare la frequenza da questa relazione:

f = 1/T

dove f è la frequenza e T il periodo.

Viceversa se abbiamo la frequenza possiamo ricavare il periodo:

T = 1/f

 

Come pilotare l’uscita PWM

Il PWM del microcontrollore ATmega328 ha una risoluzione di 8 bit , pertanto,  abbiamo la possibilità di generare 28 combinazione che  corrispondono a 255 valori,  con l’istruzione analogWrite(pin, i), dove i imposta in percentuale il tempo in cui il segnale rimane alto, per esempio con i = 0 , il segnale rimane basso per l’intero periodo T, invece se impostiamo i = 127, il segnale rimane alto per il 50%  del periodo,  quindi, c’è una proporzionalità lineare tra il valore di i e il tempo  in cui il segnale rimane alto, mentre conpin” selezioniamo uno dei  pin dove si desidera attivare la periferica PWM. In Figura 2 e’ riportato lo schema elettrico, in questo caso, non abbiamo inserito, in serie al diodo LED, un filtro passo basso, perche’ il nostro occhio e’ intrinsecamente un filtro e quindi non riusciremo ad apprezzare gli intervalli d’accensione del diodo LED, ma rileveremo solo un aumento o una diminuzione dell’intensita’ luminosa, e’ lo stesso principio con il quale al cinema non riusciamo a rilevare la sequenza d’immagini proiettata sullo schemo.

Figura 2 (Disegnato con Fritzing)
const int LED=9; // il pin 9 e' rinominato come LED per usare un valore mnemonico
void setup()
	{
		pinMode (LED, OUTPUT); // Set the LED pin as an output
		analogWrite(LED, 0);
	}
void loop()
	{
			for (int i=0; i<256; i++)
			{
				analogWrite(LED, i);
				delay(10);
			}
			for (int i=255; i>=0; i--)
			{
				analogWrite(LED, i);
				delay(10);
			}
	}

Codice

Appena parte l’esecuzione del codice, il diodo LED  è spento, per poi eseguire le istruzioni presenti nel primo ciclo “for” che si ripete fino a quando la variabile i è inferiore a 256, il valore di i è incrementato ad ogni ciclo, ed essa setta  il valore di controllo del PWM, nella funzione analogWrite(LED, i);  per cui ad ogni ciclo, con un ritardo di 10 ms,   il diodo LED aumenta progressivamente la sua luminosità fino al valore massimo, cioè, quando la variabile i raggiunge il valore di 255. Nel secondo ciclo “for” la situazione è inversa,  il dido LED è alla massima intensità luminosa, ad ogni ciclo la variabile i è decrementata  e progressivamente l’intensità luminosa del diodo LED diminuisce fino a  raggiunge il valore di zero dove il diodo LED si spegne di nuovo.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ti sei iscritto alla newsletter

There was an error while trying to send your request. Please try again.

Quattrodispositivi utilizzerà le informazioni fornite in questo modulo per restare in contatto con te e fornire aggiornamenti del sito