GENERATORE PWM A FREQUENZA VARIABILE



 

Introduzione

Il progetto presentato in queste pagine e' un generatore di segnale pwm a frequenza variabile e con duty cycle variabile da 0% a 100%. Il progetto, basato sul versatile microcontrollore a 8 bit della famiglia 10F322 prodotto dalla Microchip, prende spunto dal funzionamento della periferica PWM  in esso presente. Le applicazioni di questo semplice progetto sono svariate e la sua presenza in un moderno laboratorio per hobbista e' necessario.


Idea di base

Il punto di partenza di questo progetto e'  il modulo  PWM (Pulse Width Modulation) presente nel micro controllore 10F322 e il suo schema a blocchi e' mostrato in figura:

schema a blocchi del modulo PWM del 10F322

Questo generatore di segnale PWM permette di generare un segnale ad onda quadra di frequenza e duty cycle ben preciso agendo su specifici registri di configurazione. Come si vede dallo schema a blocchi del modulo PWM, nella generazione del segnale PWM entra in gioco il TIMER2 usato per la definizione della durata dell'impulso alto e per la definizione del periodo del segnale PWM quindi della sua frequenza:

Per la definizione della durata dell' impulso alto il valore del TIMER2 e' comparato con il valore definito dai registri PWMxDCH e PWMxDCL. In particolare, gli 8 bit piu significativi sono contenuti nel registro PWMxDCH<7:0> mentre i due bit meno significativi sono contenuti nei bit 7 e 6 del registro PWMxDCH<7:6>.
La risoluzione del duty cycle DC e' quindi di 10 bit ovvero si possono avere 1024 livelli di duty cycle tra 0 e 100%. Il valore del duty cycle DC e' quindi definito dai registri PWMxDCH e
PWMxDCL mediante la relazione:

DC = (PWMxDCH:PWMxDCL<7:6>) / [4(PR2 + 1)]

Per la definizione del periodo TPWM del segnale PWM e quindi della sua frequenza FPWM= 1/ TPWM, il valore del TIMER2 e' comparato con il valore definito dal registro PR2 secondo la formula


TPWM  = [(PR2) + 1] *4 *TOSC*(TMR2 Prescale Value)


Un ruolo importante gioca il prescaler del TIMER2 e il valore della frequenza dell'oscillatore principale del microcontrollore FOSC= 1/ TOSC.
Inoltre e' possibile definire la polarità del segnale PWM ovvero se assocciare al periodo TON il valore alto o basso di tensione. Ricordiamo che DC= TON / TPWM