Questo sito utilizza cookie, anche di terze parti, per migliorare la tua esperienza e offrire servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie vai alla sezioneCookie Policy

Il modulo CCP (PWM)

Ultimo aggiornamento: 31/07/2015

Come sappiamo, il modulo CCP di un picmicro è in grado di generare un treno continuo di impulsi a modulazione di ampiezza del quale, in ogni momento, possiamo cambiare il duty cicle.

Mettendo da parte tecnicismi, per i quali si rimanda ai vari datasheets, vediamo come.

16f877 16f887

 

Per il nostro esempio utilizzeremo un comunissimo pic 16F877 o, meglio, un piu' recente 16F887, piu' moderno e con un maggior numero di moduli.

Possiamo notare che il picmicro dispone di una coppia di moduli CCP disposti sui pin 16 e 17, piedini dai quali potra' essere prelevato il segnale pwm.

L'utilizzo di linguaggi per la programmazione di picmicro evoluti, quali il Mikroc od il Mikrobasic, semplifichera' notevolmente le cose consentendo di predisporre i moduli in maniera molto semplice e rapida:

TRISC = 0x00                     ' portc come output)
PWM1_Init(70000)             ' inizializza il PWM1 at 70KHz  
PWM2_Init(70000)             ' Inizializza il PWM2 a 70KHz
PWM1_Start()                     ' avvia PWM1 
PWM2_Start()                     ' avvia PWM2
PWM1_Set_Duty(127)        ' setta il duty cicle al 50%
PWM2_Set_Duty(64)          ' setta il duty cicle PWM2 al 25%

Il risultato sara' che otterremo sui pin 16 e 17 una coppia di segnali a modulazione di ampiezza di uguale frequenza (70khz) e diverso duty cicle:

PWM Picmicro  

In ogni momento, durante la fase di programmazione, sara' possibile cambiare il valore del duty cicle oppure potremo fermare tale attivita' con un semplicissimo comando (mikrobasic):

PWM1_stop()
PWM2_stop()

L'implementazione di un segnale pwm puo' essere considerata una attivita' molto semplice; basta semplicemente scrivere qualche riga di codice ed il modulo lavorera' perfettamente. Utilizzando invece il Mikroc il codice da scrivere e' quasi equivalente:

void main() {
PORTC = 00; 
TRISC = 0; 
Pwm1_Init(70000);
Pwm2_Init(70000);
Pwm1_Start();
Pwm2_Start();
Pwm1_Change_Duty(127);
Pwm2_Change_Duty(64);
}

ed eventualmente stoppare il segnale con un:

Pwm1_stop();
Pwm2_stop();

quando si desidera fermarlo.

 

L'uso di linguaggi ad alto livello semplifica considerevolmente il lavoro di programmazione da farsi per ottenere tali risultati. Utilizzando linguaggi a basso livello (o compilatori che non dispongono di librerie gia' predisposte), infatti, l'utente dovra' redigere a mano le istruzioni dei settaggi degli specifici registri per ottenere l'attivazione del pwm, la frequenza di lavoro ed il duty cicle desiderato.

Infatti, in questo caso, si dovra':

  • scegliere la frequenza settando il registro PR2
  • settare il modulo per agire come PWM (T2CON)
  • abilitare il timer del microcontrollore ed il valore di prescaler (CCP1CON)
  • settare il valore del duty cicle (CCPR1L)

Un'altra caratteristica interessante di alcuni microcontrollori (valida pero' solo per il modulo CCP1) è la presenza di un modulo PWM avanzato. Talvolta il segnale pwm di un picmicro è utilizzato per pilotare direttamente ponti ad H per il controllo di motori dc o passo-passo. Settando il registro PWMCON1 in maniera appropriata, il segnale pwm viene generato con un leggero ritardo rispetto all'altro. Lo spegnimento di entrambi i rami del ponte ad H consente di prevenire flussi di corrente contemporanei e quindi di evitare corto-circuiti.

Diritti riservati Cuteminds.com 2008-2015. Tutti i marchi riportati sono detenuti dai legittimi proprietari. Tutto il materiale e` liberamente utilizzabile ma non per scopi commerciali. Non si assume alcuna responsabilita` sul materiale pubblicato per eventuali danni diretti o indiretti che possano derivare dall`utilizzo di schemi, progetti o altro materiale presente nel sito. Inviare una mail a: remove-admin@cuteminds.com (contenuti) remove-webmaster@cuteminds.com (webserver) per domande e/o suggerimenti.