Guida alla Programmazione in C del PIC, 7° Parte

Guida alla Programmazione in C del PIC, 4° PARTENella Settima Parte si Parlerà del PWM e di Come Generare un Segnale con Duty Cicle Variabile, Sarà Inoltre Presentato un Esempio…

 
 
 
 




 

INTRO

Il PIC dispone di un modulo PWM in grado di generare forme d’onda quadrate con Duty Cicle variabile utili per pilotare LED, motori, step up, step down o semplicemente come generatore di forme d’onda. La forma d’onda è la seguente:

forme d'onda PWMCome viene generata questa forma d’onda? Si sfrutta la comparazione con il Timer Counter ovvero il Timer Counter viene settato e conta, ad ogni inizio conteggio vi è un fronte di salita e si ha un inizio conteggio ogni qual volta il Timer Counter si resetta ovvero quando il Timer Counter eguaglia il valore contenuto nel registro PR2. Il fronte di discesa si ha quando il Timer Counter è uguale al registro che contiene il valore di comparazione per il duty cicle. La struttura è la seguente:

struttura pwm PIC18F252Vi sono due registri, PR2 per settare la frequenza e i registri CCPR1L e CCPR1H per la selezione del duty cicle. L’uscita del segnale PWM si trova su RC2 ovvero il PIN 17.

 




 
CONFIGURAZIONE

Per configurare il PWM bisogna effettuare le seguenti operazioni:

  1. Inserire il valore desiderato nel registro PR2 per settare la frequenza. La frequenza si ottiene dalla seguente formula:

EQUAZIONI PWM PIC18F252Con quest’ultima formula posso conoscere il valore da inserire nel registro PR2.

  1. Settare il valore del registro CCPR1L e dei due bit contenuti nel registro CCP1CON che si trovano in posizione 5:4, in modo tale da settare il Duty Cicle. Il PIC18F252 ha un PWM con risoluzione di 10 bit, ovvero si possono avere 1023 possibili Duty Cicle, questo numero decresce all’aumentare della frequenza del PWM, in particolare la risoluzione è:

EQUAZIONI PWM PIC18F252 RISOLUZIONEQuindi ad esempio se si ha una frequenza di funzionamento di 8MHz e una frequenza del PWM di 2KHz si ha una risoluzione di 11,96Bit quindi ho la risoluzione massima della struttura, ovvero 10Bit, se invece ho una frequenza del segnale PWM di 20KHz si avrà una risoluzione di 8,64Bit quindi posso variare solo 8 LSB a disposizione dei 10Bit. Inoltre la risoluzione è legata al valore contenuto nel registro PR2.

Il Duty Cicle può essere variato in opera variando il valore dei registri, solo che la modifica del Duty Cicle avverrà quando si ha la comparazione tra il Timer Counter 2 e il registro PR2.

  1. Settare il pin d’uscita ovvero TRISC.F2
  1. Settare i valori di prescaler del Timer Counter 2 e accenderlo tramite il registro T2CON. Questo registro è così organizzato:

t2con registro PIC18F252

I Bit 6:3 servono a settare il Postscaler, che in questa applicazione non viene usato. Il Bit TMR2ON serve per attivare il Timer Counter 2 mentre gli ultimi due bit, T2CKPS1 e T2CKPS1 servono a settare il Prescaler (00 =>Prescaler 1, 01 =>Prescaler 4, 10 e 11 =>Prescaler 16).

 

  1. Infine si setta il modulo CCP per farlo lavorare come PWM. Questo si fa settando opportunamente il registro CCP1CON, in particolare si fa settando gli ultimi 4Bit ad 1.

ccp1con registro PIC18F252

 




 

ESEMPIO

Ecco di seguito il codice per avere in uscita un segnale PWM con frequenza di 2KHz e Duty Cicle del 25%.

Iniziamo dalla formule, considerando il fatto di avere una frequenza di funzionamento di 8MHz e usare un prescaler del TMR2 di 4:

EQUAZIONI ESEMPIO

Il codice sarà quindi:

void main() {

PR2 = 0b11111001;       //valore 250 nel registro PR2

CCPR1L = 0b01000000;    //Valore di comparazione setting DC
CCP1CON = 0b00000000;   //25% del valore max

TRISC.F2 = 0;           //Pin 17 uscita

T2CON = 0b00000101;      //TMR2 on, prescaler 4

CCP1CON = 0b00001111;   //pwm on

   while(1){            //ciclo infinito
   }
}

Quindi prima di tutto setto il valore della frequenza, poi setto il valore del Duty Cicle e configuro il pin 17 come uscita. Attivo e setto il Timer Counter 2 e attivo il PWM. Infine chiudo il programma in un ciclo infinito. Il risultato sarà:

SCHEMA PWM PIC18F252

 

Potete scaricare il codice e la simulazione dal seguente LINK!!!




 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

3 pensieri su “Guida alla Programmazione in C del PIC, 7° Parte

  1. Perchè ci siamo fermati? Il sito è ben sviluppato: interessante, ordinato, contiene validi schemi e tutor per chi è appassionato di elettronica, digitale e non.
    Un invito a continuare e grazie fin qui per il lavoro eseguito e condiviso in rete.
    Cordialità.
    Dario

  2. sto cercando di imparare a programmare le sezioni degli articoli sono ben fatti complimenti ,per le spiegazioni
    un incoraggiamento per continuare ,le sessioni per imparare ,sempre più grazie ancora

Rispondi a NE555 Annulla risposta

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