PWM: teoria e generazione con i micro - 3




Il PWM nei microcontrollori

Voler implementare un generatore di segnali PWM con controllo digitale del duty cycle D richiederebbe molte risorse firmware ed una complessità hardware non indifferente.
Fortunatamente, visto il largo impiego del PWM, i microcontrollori di nuova generazione implementano moduli generatori di segnali PWM con diverse caratteristiche e complessità.
Per il nostro studio prenderemo in esame il modulo CCP, presente dei microcontrollori della Microchip e in particolare dei micro a 8bit (  16F628A) che permette la generazione di segnali in PWM con risoluzione massima di 10 bit.

Il modulo CCP nel microcontrollori 16FXX

Con l'acronimo CCP (CAPTURE, COMPARE, PWM) s’identifica un modulo che permette di realizzare le funzioni di cattura, comparazione e generazione di segnali PWM. La scelta della funzione si attua  configurando il registro a 8 bit CCPCON [7:0].
Con la funzione di CAPTURE si carica sui registri CCPR1H e CCPR1L il valore del contatore a 16 bit TIMER1 quando si verifica un evento (fronte di salita, di discesa, ecc) sul pin RB3. Con la funzione di COMPARE, si confronta il valore del TIMER1 con il  contenuto caricato sui registri CCPR1H e CCPR1L e  si attiva il pin RB3 (da basso ad  alto) quando si verifica l'uguaglianza fra i due contenuti. 
Inoltre il modulo CCP è configurabile come generatore di segnali modulati in PWM, a diverse frequenze e con controllo digitale del duty cycle D. Per la configurazione e per  maggior dettagli sul modulo CCP si rimanda alla documentazione fornita dal costruttore del microcontrollore. Per ulteriori informazioni sul modulo CCP consultare il seguente tutorial CCP Tutorial

Il modulo CCP come PWM

Settando ad uno i bit 3 e 4 del registro CCPCON si attiva la funzione PWM del modulo CCP. In tal caso sul pin RB3 sarà presente un segnale modulato in PWM il cui duty cycle è definito dai registri CCPR1L[7:0] e da CCPCON[5:4]. In particolare, i bit 5 e 4 del CCPCON costituiscono i bit meno significativi (LSB) della parola a 10 bit con cui si definisce il duty cycle. Gli otto bit piu' significativi MSB sono contenuti nel registro CCPR1L[7:0]. In sintesi, per la generazione del segnale PWM si utilizza il contatore a 8 bit TIMER2, il suo prescaler TMR2_presc e altri registri (PR2) configurati sulla base del valore di frequenza che si vuole per i segnale in uscita. In figura 2 è riportato lo schema blocchi del generatore PWM.

Figura 2: schema a blocchi del modulo CCP in veste di generatore PWM

Si può notare che la generazione della fase alta del segnale è definita dal confronto tra il valori di CCPR1L[7:0] e da CCP1CON[5:4], caricati su CCPR1H, e il valore di TMR2 mentre il periodo del segnale T_pwm è definito dal confronto tra il valore di PR2 e quello di TMR2. Sulla base delle considerazioni fatte si possono definire le grandezze in gioco per il segnale PWM.
Il periodo T_pwm del segnale PWM è definito dalla seguente relazione :

T_pwm= (PR2+1) * 4 * t_osc * TMR2_presc

mentre il valore del duty cycle D è definito dalla relazione:

D = { CCPR1L[7:0] ,CCPCON[5:4] }* t_osc*TMR2_presc

la risoluzione in bit è :

Nbit =log (T_pwm / T_osc ) / log(2)

Quindi fissati il valore del quarzo bisogna definire i valori dei vari registri in base alla frequenza del segnale PWM e al numero e di bit per la risoluzione.
Infine per bisogna settare il pin RB3 come uscita azzerando il bit 3 del registro TRISB (TRISB(3)=0).


Applicazioni del PWM

Come applicazione della teoria ora esposta si può fare riferimento ai seguenti progetti pubblicati nel sito:

Titolo Progetto Descrizione
PWM_GEN Generatore di segnale PWM programmabile
PWM8ADC Convertitore analogico digitale a 8 bit ( non usa il modulo CCP)
PWM10ADC Convertitore Analogico Digitale a 10 bit 
PWM_SAR_ADC Convertitore analogico digitale a 10 bit ad approssimazioni successive (  SAR)
PWM10DAC Convertitore Digitale-Analogico a 10 bit