|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GENERATORE PWM A FREQUENZA VARIABILE - 3 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Implementazione
FIRMWARE A livello di firmware per prima cosa, definito il micro utilizzato e opportunamente configurato come sistema. bisognerà configurare i pins per assolvere il compito a loro associato agendo sui registri di configurazione della porta A e del modulo PWM. Per la definizione del duty cycle si utilizza la parte MSB della conversione della tensione sul pin RA0 (I00 nel PICCINO) che e' direttamente caricata sul registro PWMxDCH <7:0> mettendo a zero i bit 7 e 6 del registro PWMxDCL: in questo modo si hanno 256 livelli per il duty cycle DC nel range 0-100%. Nel caso in cui il valore della conversione e' zero ( la tensione sul pin e' zero) allora la tensione di uscita PWM sarà' sempre zero mentre nel caso in cui il valore della conversione e' 255 la tensione sul pin di uscita PWM e' forzata al valore alto di tensione qualunque sia il valore delle frequenza impostato. Le routine CHECK_0 e CHECK_FF assolvano questa funzione. Per
la definizione della frequenza, dovendo garantire la risoluzione del
duty cycle e la precisione con cui viene genenrato ( numero di bit) ,
si utilizza un sistema che fa uso di
una lookup table
o tabella di corrispondenza.
I valori
selezionabili
tramite il potenziometro sono riportati nella seguente tabella ( valori
in Hz). Questi valori possono essere cambiati da firmware
compatibilmente ai settaggio del del modulo PWM circa il numero di bit
di con cui si vuole definire il duty cycle del segnale PWM. Si rimanda
alla pagina 1 per
TAB 1: valori frequenza selezionabili in Hz * se la frequenza e’ impostata a 0 Hz l’uscita e’ fissata a 0V qualunque sia il valore del duty cycle. La selezione avviene tramite
un indice IND che e' ricavato dalla conversione della tensione
sul pin RA2 ( IO2 nel PICCINO) e diviso per 8 in modo da avere 32
livelli possibili. In
realtà i valori possibili di frequenza, come indicato nella tabella
presente nella pagina
precedente, sono 24. Quindi il valore di IND e'
limitato dalla costante NUM_FREQ che vale 23. La routine CHECK_NUM
assolve
questo compito. Ottenuto l'indice IND vengono ricavati i valori dalla
mappe FREQ_MAP e FREQ_CONF alla posizione IND. Queste mappe sono
calcolate in
modo da avere per ogni frequenza selezionata il valore corrispondente
del registro PR2, T2CON e OOSCON. In particolare, dalla mappa
FREQ_GEN si ricava il valore del registro PR2 mentre dalla mappa
FREQ_CONF si ricavano i valori del registro T2CON prendendo il nibble
superiore del byte letto alla posizione IND mentre il nibble inferiore
e' il
valore del registro OSCON con cui si definisce la frequenza
dell'oscillatore interno del micro. Questa funzione e' assolta dalla
routine SEL_FREQ. Definito il valore della
frequenza viene aggiornato il valore del DUTY CYCLE tramite la
routine GEN_PWM. Di seguito il codice ASM del
generatore PWM scaricabile dal seguente link: PWMGEN.zip in cui sono
presenti tutti i files (ASM, Hex ) e quelli relativi allo IDE MPLAB
oltre al foglio di calcolo che permette calcolare tabella di
corrispondenze delle frequenze nel caso si volessero cambiare rispetto
a quelle fornite nel progetto.
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||