Utilizzare il modulo CCP in modalità PWM ed Enhanced PWM

Frequentemente ci si trova a dover usare il modulo PWM presente in molti microcontrollori della Microchip. Spesso però  il datasheet può essere causa di alcune incertezze, qualora si stia utilizzando il modulo PWM per la prima volta. In questa Brief Note si cercherà di colmare con qualche esempio i dubbi che si possono avere alla prima lettura del datasheet. Quanto verrà spiegato prenderà come esempio il PIC18F4550, ma vale in realtà per tutti i microcontrollori che hanno un modulo PWM standard o migliorato (Enhanced). La seguente Brief Note non è un'alternativa al datasheet ma solo un aiuto alla comprensione dello stesso.

Cos'è un segnale PWM

Prima di procedere è bene ricordare cosa sia un segnale PWM, ovvero Pulse Width Modulation. Un segnale PWM rappresenta in realtà una tecnica digitale di modulazione, infatti la sigla stessa significa modulazione della larghezza d'impulso. Frequentemente un segnale che sia modulato con questa tecnica viene detto in breve segnale PWM. La caratteristica di un segnale PWM è quella di avere una frequenza costante e un duty cycle (in breve DC) variabile. Il Duty Cycle espresso in percentuale è definito come:

DC = (TON / T ) · 100

Dove TON rappresenta il tempo per cui l'impulso è a livello alto, mentre T è il periodo dell'impulso, ovvero l'inverso della frequenza del segnale PWM. In Figura 1 è riportato un esempio di DC del 25% .

Esempio di segnale modulato con DC del 25%

Figura 1: Esempio di segnale modulato con DC del 25%.

Il segnale PWM si definisce digitale poiché la sua ampiezza può avere solo due livelli, o “0” o “1”. Il livello di tensione dello “0” e dell'“1” non sono specificati come per un segnale digitale TTL. In ogni modo i microcontrollori se alimentati a 5V avranno un segnale PWM che per “0”  avrà la massa e per “1” avrà 5V. Se il PIC comanderà poi dei driver di potenza, come spesso accade, i livelli possono essere traslati al livello di tensione utilizzato per pilotare il carico di cui si sta facendo uso.
Il gioco del modulare l'impulso permette di controllare l'energia trasferita su un carico, controllando la stessa in modo molto efficiente poiché in generale non si ha bisogno di un resistore di limitazione in serie al carico, al fine di avere una caduta di tensione sulla resistenza e limitare la tensione di alimentazione. Facendo uso di una resistenza per controllare la potenza di un carico si dissipa molta potenza sulla resistenza stessa, rendendo il sistema poco efficiente (problematica importante in sistemi a batteria). Grazie alla modulazione PWM, qualora il carico abbia per sua natura un comportamento di filtro passa basso, per esempio i motori, è possibile usare un segnale modulato in PWM al fine di controllare l'energia trasferita al carico, senza aver bisogno di un resistore in serie.
Qualora il carico non abbia per sua natura un comportamento di filtro passa basso, per esempio diodi LED, è necessario aggiungerlo. Spesso il filtro passa basso non viene aggiunto ai sistemi con diodi LED, poiché tra le tecniche utilizzate per controllarli vi è l'utilizzo di convertitori DC-DC switching standard, ed il filtro passa basso non è rappresentato dal diodo ma dall'induttore utilizzato nel convertitore switching in aggiunta alla resistenza parassita dei MOS di comando e i resistori di feedback posti frequentemente in serie al diodo per mantenere la corrente sugli stessi costante.
Oltre alle applicazioni sopra citate, ovvero il controllo dei motori e dei LED, la modulazione PWM potrebbe essere utilizzata per trasmettere un segnale vocale (si pensi agli amplificatori audio in Classe D) o anche realizzare degli economici convertitori Digitali Analogici. Quest'ultima applicazione risulta molto utile in tutti quei casi in cui il microcontrollore che si sta utilizzando sia senza DAC (Digital to Analog Converter) e si abbia l'esigenza di un tale modulo.

Maggiori dettagli e applicazioni sulla modulazione PWM possono essere trovati nel Tutorial “PWM, Pulse Width Modulation”  e nella Brief Note BN0006 Stadi di potenza per il controllo di motori DC e passo passo”.

...quanti moduli PWM?

Frequentemente ricevo la domanda relativamente a quanti moduli PWM siano effettivamente disponibili all'interno di un PIC. Il numero varia naturalmente da modello a modello, ma la confusione nel distinguere il numero discende prevalentemente dal fatto che spesso nei PIC18 è presente sia il modulo PWM standard che il modulo PWM Enhanced.
Come prima cosa è  bene dire che il modulo PWM è  parte del modulo CCP (Caputure, Compare, PWM). Il modulo CCP può dunque essere utilizzato in varie modalità, ogni modalità è mutuamente esclusiva, ovvero se si sta utilizzando il modulo CCP in modalità Compare non lo si può utilizzare in contemporanea per generare un segnale PWM. Si noti che ho detto in contemporanea, infatti le impostazioni del modulo sono dinamiche, e durante l'esecuzione del programma si potrebbe variare la modalità di funzionamento del modulo stesso. In ogni caso quello che spesso si vuole è dedicare il modulo ad una sola funzionalità, dunque una volta impostato è improbabile che si possa cambiare la sua impostazione, altrimenti si perderebbe la funzionalità della vecchia modalità.

Anche se in questa Brief Note ci concentreremo sull'utilizzo del modulo PWM vediamo qualche dettaglio delle varie modalità di funzionamento del modulo CCP.

Modalità Capture

Nella modalità Capture, il valore del timer TMR1 o TMR3 viene catturato e memorizzato nei registri CCPRxH:CCPRxL (la x dipende dal numero del modulo CCP usato) ogni qual volta si verifichi uno dei seguenti eventi sul pin associato al modulo CCPx:

  • Ogni fronte di discesa
  • Ogni fronte di salita
  • Ogni 4 fronti di salita
  • Ogni 16 fronti di salita

I pin associati ai moduli CCP1 e CCP2 sono normalmente RC2 per il modulo CCP1 e RC1 o RB3 per il modulo CCP2. La modalità Capture può essere utile per misurare la larghezza di un impulso, ovvero la sua durata. Potrebbe per esempio essere utilizzata nei metri ad ultrasuoni in cui si deve misurare il tempo di ritorno dell'eco.

L'impostazione del modulo avviene per mezzo del registro CCPxCON.

Modalità Compare

In questa modalità i registri CCPRx vengono confrontati con uno dei timer TMR1 o TMR3. Quando il valore del timer è  uguale a quello impostato nei registri CCPRx, il pin del PIC relativo al modulo CCP utilizzato può essere:

  • Settato al livello alto
  • Settato al livello basso
  • Toggle del suo valore (ovvero il suo valore viene invertito)
  • Il suo valore rimane invariato

La funzionalità di lasciare invariato il valore del pin ovvero di lasciarlo al suo valore settato per mezzo del registro PORT o LATCH è usata quando si ha interesse ad impostare il modulo per generare un interrupt o generare il trigger di avvio per il modulo ADC, ovvero start conversion viene settato dal modulo Compare. L'avviare in automatico l'ADC permette di campionare un segnale in ingresso a frequenza costante senza temere ritardi derivanti da interrupt di altra natura. Il mantenere il tempo di campionamento costante è una condizione richiesta dallo stesso Teorema sul Campionamento.

In generale questa modalità può risultare utile qualora si debba svolgere una funzione a tempi regolari, limitando l'utilizzo della CPU. Si pensi per esempio se si volesse inviare un trigger a frequenza costante fuori dal PIC. L'impostazione del modulo avviene per mezzo del registro CCPxCON.

Modalità PWM

La modalità  PWM permette di modulare i pin di uscita del modulo CCP utilizzato, per mezzo di un segnale PWM. Maggiori dettagli saranno esposti nei paragrafi successivi.

All'interno di un PIC possono essere presenti uno o più moduli CCP, normalmente i modelli classici hanno CCP1 e CCP2, quindi PIC con due moduli CCP hanno la possibilità di avere due segnali PWM indipendenti. Il PIC18F4550 possiede, come molti altri PIC anche il modulo Enhanced, il quale però è solo una seconda veste del modulo CCP1, dunque il modulo CCP1 o lo si usa in modalità PWM standard o lo si usa in modalità PWM Enhanced. Questo significa che abbiamo ancora due soli segnali PWM. Come si vedrà a breve il modulo PWM Enhanced possiede 1, 2 o 4 uscite PWM, ma queste non sono indipendenti, visto che generate da un unico modulo CCP. Dunque  le quattro uscite PWM non possono per esempio essere usate per controllare in maniera indipendente i tre colori Red, Green e Blue di un LED tricromatico. Per fare questo o si genera un PWM software, con le sue complicazioni e pesantezza software o si sceglie un altro PIC con un numero sufficiente di moduli CCP. Un modo molto veloce per selezionare il PIC d'interesse è quello di utilizzare il Tool di selezione della stessa Microchip, ovvero il Product Slector Tool.
 

Il modulo PWM del PIC18F4550

Utilizzare il modulo PWM permette di ottenere una modulazione PWM senza dover caricare eccessivamente il software ed in particolare permette di ottenere ottime risoluzioni.
Come per i moduli Capture e Compare, ovvero le prime due modalità del modulo CCP descritte, la configurazione del modulo CCP in modalità PWM avviene per mezzo del registro CCPxCON riportato in Tabella 1.

Registro di configurazione CCPxCON

Tabella 1: Registro di configurazione CCPxCON

In particolare il PIC18F4550 possiede due moduli, il CCP1 e il CCP2, dunque i registri di configurazione sono rispettivamente CCP1CON e CCP2CON.
I pin esterni assegnati ai moduli CCP sono rispettivamente il pin RC2 per il modulo CCP1 e RC1 per il modulo CCP2 (pin standard assegnati al modulo PWM). Il PIC18F4550 ha la possibilità di impostare il pin del modulo CCP2 anche sul pin RB3. La selezione di un pin o l'altro è mutuamente esclusiva, quindi il segnale PWM del modulo CCP2 o è presente sul pin RC1 o sul pin RB3. La selezione di un pin o l'altro deve essere impostata in fase di programmazione, per mezzo delle direttive pragma (se si scrive in C18), dunque una volta selezionato il pin e compilato il programma, l'impostazione sarà fissata. In particolare per impostare il modulo CCP2 su RC1 si deve scrivere:

#pragma config CCP2MX = ON

mentre per impostare il pin del CCP2 su RB3 bisogna scrivere:

#pragma config CCP2MX = OFF

Non scrivendo la direttiva, il pin assegnato al modulo CCP2 è il pin RC1. Maggiori informazioni sulle impostazioni del PIC d'interesse possono essere trovate nel file hlpPIC18ConfigSet presente nella directory d'installazione del C18 (sottocartella doc).

Indipendentemente dal modulo CCP e pin utilizzato, il pin d'interesse deve essere impostato come uscita per mezzo del registro di configurazione TRIS associato alla porta del pin da utilizzare.

Come detto il segnale PWM è caratterizzato essenzialmente da una frequenza fissa e un Duty Cycle variabile. Si capisce dunque che impostare il modulo PWM consiste essenzialmente nell'impostare la frequenza e il Duty Cycle del segnale. Normalmente una volta fissata la frequenza, questa rimane fissa durante l'esecuzione dell'applicazione mentre il Duty Cycle viene continuamente aggiornato.

La frequenza del segnale PWM viene impostata per mezzo del Timer TMR2. Entrambi i moduli CCP1 e CCP2 del PIC18F4550 fanno uso dello stesso Timer, per cui la frequenza del segnale PWM sarà uguale per tutti e due i moduli. Ciononostante dal momento che il Duty Cycle può essere variato indipendentemente per i due moduli, si hanno effettivamente due segnali PWM indipendenti.

Per impostare il modulo CCPx in modalità PWM bisogna seguire la seguente procedura, consigliata nello stesso datasheet:

  • Impostare il periodo del PWM, ovvero la frequenza.
  • Impostare il Duty Cycle del segnale.
  • Settare a 0 (ovvero uscita) il pin associato al modulo CCP da usare
  • Impostare il Prescaler del timer TMR2 (se richiesto) e abilitare il TMR2
  • Abilitare il modulo CCP in modalità PWM

Vediamo in maggior dettaglio i vari passi.

Impostare il Periodo

Per impostare il periodo del segnale PWM ovvero la sua frequenza, è necessario scriverlo nel registro ad 8 bit PR2 del PIC. Questo registro viene usato per entrambi i moduli CCP, quindi, come detto, la frequenza a cui opereranno sarà la stessa. Il valore da scrivere nel registro PR2, che chiameremo period nella discussione che seguirà, deve essere calcolato come segue:

Calcolo del valore del registro PR2

Dove Tosc rappresenta il periodo in secondi del quarzo utilizzato mentre a numeratore vi è il periodo del segnale PWM. Se si vuole far uso della frequenza basterà scrivere a numeratore la frequenza del quarzo in Hz mentre a denominatore la frequenza sempre in Hz del segnale PWM (togliendo naturalmente i rispettivi periodi). La formula potrebbe essere anche riscritta come nel datasheet:

Calcolo del valore del registro PR2
Si ricorda che il registro PR2 è a 8 bit, dunque a seconda dei casi può essere necessario far uso del Prescaler del timer TMR2 al fine di ridurre il valore di period ad un valore massimo pari a 255.

Impostare il Duty Cycle

Per impostare il Duty Cycle, avendo a disposizione 10 bit, bisogna scrivere il valore in due registri, in particolare gli 8 bit più significativi sono scritti nel registro CCPRxL mentre i due bit rimanenti sono scritti nel registro CCPxCON (Tabella 1), rispettivamente nei bit DCxB1 e DCxB0, ovvero Duty Cycle Bit 0 e Bit 1. Dal momento che scrivere il Duty Cycle è leggermente più laborioso che non impostare il periodo, è bene scrivere una piccola funzione ad hoc o fare uso della libreria Microchip.

Una funzione di esempio potrebbe essere:

void set_duty_cycle (int duty_cycle) {

//Imposto il byte più significativo
CCPR1L = (unsigned char) (duty_cycle >> 2);

//Imposto il bit B0
if (duty_cycle & 0x0001)

CCP1CONbits.DC1B0 = 0x0001;

else

CCP1CONbits.DC1B0 = 0x0000;

//Imposto il bit B1
if (duty_cycle & 0x0002)

CCP1CONbits.DC1B1 = 0x0001;

else

CCP1CONbits.DC1B1 = 0x0000;

}

Alla funzione viene passato il valore del Duty Cycle, il quale viene usato per impostare i vari registri. In particolare tale funzione è impostata per funzionare per il modulo CCP1, si noti infatti il valore 1 nei vari registri.

Impostare il registro TRIS

A questo punto,  secondo le specifiche del datasheet è possibile attivare l'uscita del modulo CCPx. Il modo migliore, al fine di non alterare il valore degli altri bit è per mezzo di una maschera realizzata con operatore AND. Per esempio per il modulo CCP1, volendo porre a 0 il bit di controllo del pin RC2 si potrebbe fare:

TRISC = TRISC & 0b11111011;

oppure

TRISC &=  0b11111011;

Come detto la maschera utilizzata per l'operazione di AND permette di lasciare invariati gli altri bit del registro TRIS e porre a 0 solo il bit di RC2.

Impostare il Timer TMR2

Dal momento che solo il Timer TMR2 può essere usato dai moduli CCPx, la frequenza di lavoro è la stessa per entrambi. Il Timer TMR2, possiede il solo registro di controllo T2CON (Tabella 2) oltre a quello dedicato alle interruzioni e livello di priorità. Le interruzioni potrebbero essere o meno utilizzate anche quando si sta facendo uso della modalità PWM, ma ora prenderò in considerazione la sola impostazione del Timer senza interruzioni.

Registro di configurazione T2CON

Tabella 2: Registro di configurazione T2CON.

Il Timer TMR2 è ad 8 bit, ma possiede un Prescaler e un Postscaler che permettono di dividere ulteriormente la frequenza operativa dello stesso, rallentandone dunque il suo funzionamento. In particolare il Postscaler non viene utilizzato per il funzionamento del modulo PWM mentre il Prescaler può essere usato ed impostato a 1, 4, 16 permettendo di attenere valori entro 255 per il registro PR2, usato per impostare il periodo (frequenza) del segnale PWM.

Una volta impostato il Prescaler, il Timer  può essere attivato per mezzo del bit TMR2ON sempre del registro T2CON.

Attivare il modulo CCP in modalità PWM

Una volta eseguiti i passi appena spiegati, è possibile attivare il modulo PWM semplicemente scrivendo 0x0C nel registro CCPxCON ovvero impostando come da specifica la modalità PWM standard. In realtà per non alterare il valore del Duty Cycle precedentemente impostato è bene fare questa operazione per mezzo di una maschera OR.

CCPxCON =  CCPxCON | 0x0C

Considerazioni generali

Dopo aver visto come impostare il modulo PWM, vediamo qualche altra considerazione da tenere a mente. Una cosa molto importante è l'impostazione della frequenza operativa che a seconda delle applicazioni permette di ottimizzare dimensioni ed efficienza del sistema stesso.

Gli esempi tabellati nel datasheet riportano valori di frequenza operativa fino a 416,67KHz, ma la risoluzione del PWM ottenibile a questi valori è notevolmente ridotta, avendo infatti a disposizione solo 6 bit. Per frequenze fino a circa 40KHz è invece possibile ottenere risoluzioni di 10bit.   

Come visto il periodo può essere impostato indipendentemente dal Duty Cycle, però è bene tenere a mente che la durata dell'impulso deve essere inferiore del periodo stesso, altrimenti il valore del pin del modulo CCPx varrà 1 anche quando il Duty Cycle è inferiore al 100%. Il tempo per cui il segnale modulato PWM rimane attivo è calcolato come

PWM tempo attivo = (valore DC scritto in CCPRxL e CCPxCON) ·Tosc · TMR2 Prescaler  

Questo deve essere sempre minore del Periodo del segnale stesso.

Applicazioni

Il modulo PWM standard risulta particolarmente comodo in semplici applicazioni per regolare l'intensità luminosa di LED, lampade o controllare un motore in modalità Signed Magnitude (si veda la BN0006 per maggiori informazioni). Facendo uso di una NOT esterna è anche possibile controllare i motori in modalità LAP. La porta NOT può essere evitata facendo uso del modulo PWM Enhanced, il quale introduce anche altre caratteristiche interessanti.

Il modulo Enhanced CCP

Iniziamo subito con il dire che il modulo ECCP non rappresenta un terzo modulo CCP oltre ai due appena introdotti. Il modulo ECCP è ancora il nostro vecchio modulo CCP1 che diversamente dal modulo CCP2 ha delle funzioni aggiuntive che possono essere attivate rendendolo appunto Enhanced. Per quanto riguarda le funzioni Capture e Compare, il modulo ECCP si comporta come un normale modulo CCP dunque non dirò altro in aggiunta. Per quanto riguarda il modulo PWM ci sono diverse caratteristiche che lo rendono particolarmente appetibile per il controllo di ponti H, dunque per il controllo di motori DC o qualunque altra applicazione che richieda un ponte H. Il modulo Enhanced PWM possiede 1, 2 o 4 uscite PWM, nominate P1A, P1B, P1C, P1D, ma questo non significa che si possono avere realmente 4 uscite PWM indipendenti. Infatti indipendentemente dalle uscite PWM selezionate il modulo per il controllo della frequenza e Duty Cycle è solo uno, dunque si capisce che le varie uscite sono in realtà correlate tra loro.

Il numero di uscite del modulo PWM sono selezionate per mezzo dei bit P1M0 e P1M1 presenti nel registro CCP1CON precedentemente usato anche per il modulo CCP1 standard ma che in modalità Enhanced presenta qualche altra caratteristica, come riportato in Tabella 3.

Registro di configurazione CCP1CON

Tabella 3: Registro di configurazione CCP1CON.

I bit P1M0 e P1M1 sono gli stessi bit che nel modulo CCP1 non erano “implementati”. In realtà i bit sono implementati anche per il modulo CCP1 ma le specifiche dicono che non vanno toccati e vengono letti come 0. Il valore di default 0 è proprio il valore che imposta il modulo Enhanced PWM ad una sola uscita rendendolo compatibile (essendo lo stesso) con il modulo PWM standard. Le impostazioni che è possibile avere per mezzo dei bit P1M0 e P1M1 sono anche mezzo ponte H (ovvero due uscite PWM) o ponte H completo (ovvero 4 uscite PWM). Per il ponte H completo sono presenti due modalità che permettendo di cambiare la rotazione di un motore semplicemente cambiando la modalità del modulo. I bit CCP1M0:CCP1M3 permettono di impostare il modulo Capture e Compare (come per il modulo standard CCP1) ma anche il livello logico delle uscite PWM (maggiori dettagli sono spiegati a breve).

Vediamo le caratteristiche ed applicazioni a seconda delle uscite PWM.

Singola uscita PWM

Come detto questa modalità rappresenta quella  standard e l'uscita P1A è proprio RC2. Le applicazioni ed impostazioni sono come quelle precedentemente utilizzate per il modulo CCP1.

Doppia uscita PWM

Le uscite PWM disponibili sono P1A e P1B, rispettivamente localizzate al pin RC2 e RD5. In questa modalità definita nel datasheet come Half Bridge è possibile controllare sia mezzo ponte H come riportato in Figura 2 a), che un ponte H completo come riportato in Figura 2 b).  
 

Figura 2: Esempio di utilizzo di due uscite PWM.
Figura 2: Esempio di utilizzo di due uscite PWM.


Si noti che la configurazione a ponte intero è praticamente identica a quella introdotta nella Brief Note BN0006 togliendo però la NOT. La NOT non è presente poiché la caratteristica dei due segnali PWM (P1A e P1B) è quella di essere già l'uno il complemento dell'altro, come riportato in Figura 3. Dalla Figura si evince che tale configurazione permette di comandare i motori in modalità LAP. In particolare integrati come l'L298 e l'L6203 potrebbero essere comandati direttamente per mezzo di questi segnali al fine di avere il controllo dei rami del ponte.

Figura 3: Misura dei segnali PWM in uscita ai pin RC2(linea blu) e RD5(linea gialla).

Figura 3: Misura dei segnali PWM in uscita ai pin RC2(linea blu) e RD5(linea gialla).

Per mezzo del registro CCP1CON, è possibile, come detto, impostare anche il livello attivo delle linee PWM. In Figura 3 è riportato il caso in cui le uscite P1A e P1B sono entrambe attive alte, quindi lo “0” è rappresentato dalla massa mentre l'“1” è rappresentato da Vcc. Cambiando l'uscita P1B in attiva bassa si inverte (o meglio si salta la NOT) il segnale presente su P1B, ottenendo quanto riportato in Figura 4. Si può subito notare che questa volta i due segnali sono in fase, ovvero uguali.


Figura 4: Misura dei segnali PWM in uscita ai pin RC2(linea blu) e RD5(linea gialla).


Figura 4: Misura dei segnali PWM in uscita ai pin RC2(linea blu) e RD5(linea gialla).

Questa configurazione può ancora essere utilizzata per comandare un ponte H ma esternamente ci deve essere una qualche “forma” di NOT per non attivare i rami del ponte H contemporaneamente.
Invertendo tutte e due le uscite, si ha è che il Duty Cycle, per come è stato sopra definito è in realtà invertito nel suo significato, dunque un DC dell'80% non significa avere un segnale alto per molto tempo bensì solo per il 20%.

Oltre alla possibilità  di impostare il livello attivo del segnale PWM in uscita, il modulo Enhanced ha la peculiarità di poter impostare un tempo definito Dead Band, ovvero un periodo di attesa tra una commutazione ed un'altra. Questa funzione risulta utile per evitare che i transistor presenti sullo stesso ramo possano risultare attivi nello stesso tempo causando un corto delle alimentazioni.   
Il  tempo di ritardo è selezionabile per mezzo del registro ECCP1DEL (Tabella 4) ed è espresso in numeri di cicli istruzioni del PIC (un ciclo istruzione è pari a 4 volte il periodo del quarzo utilizzato). Il ritardo massimo selezionabile è pari a 127, poiché solo 7 degli 8 bit del registro  ECCP1DEL sono assegnati alla funzione Dead Band.

Tabella 4: Registro di configurazione ECCP1DEL.
Tabella 4: Registro di configurazione ECCP1DEL.

Un esempio di ritardo è riportato in Figura 5. Il ritardo è impostato a 15; utilizzando un quarzo di 20MHz equivale all'avere un ritardo di 3?. Spesso facendo uso di ponti H integrati, tale funzione non viene usata poiché implementata nel ponte stesso.

 Figura 5: Utilizzo del ritardo Dead Band pari a 3us.

Figura 5: Utilizzo del ritardo Dead Band pari a 3us.

In ultimo ma non meno importante, il modulo Enhanced PWM offre la possibilità di auto shutdown ovvero di auto spegnimento. Lo spegnimento del modulo può avvenire per mezzo dei comparatori interni al PIC, o un segnale basso sulla linea FLT0 (pin RB0). Lo spegnimento del modulo PWM permette di disattivare il ponte H, infatti lo spegnimento, grazie al registro ECCP1AS (Tabella 5) permette, al verificarsi di uno degli eventi di spegnimento, di porre a 0, 1 o ad alta impedenza le linee PWM.
 

Tabella 5: Registro di configurazione ECCP1AS.
Tabella 5: Registro di configurazione ECCP1AS.

Il fatto di avere le uscite a 0, 1 o alta impedenza permette in generale al progettista di disattivare il ponte, mettendolo spesso nella posizione di frenatura elettromeccanica.
Lo stato di Shutdown è segnalato per mezzo del bit ECCPASE. Di default il verificarsi di un evento di Shutdown richiede un intervento software al fine di resettare il bit  ECCPASE e tentare di ripristinare il funzionamento del sistema. Ponendo ad 1 il bit PRSEN del registro  ECCP1DEL (Tabella 4) è invece possibile riattivare il ponte automaticamente una volta cessato l'evento che ha causato lo Shutdown del ponte.

La funzionalità  di auto Shutdown per mezzo della linea FLT0 può essere utile per controllare uno stop di emergenza mentre uno Shutdown per mezzo dei comparatori può ritornare utile per misurare la corrente ed imporre un limite massimo. Questa funzione risulta utile oltre alle eventuali misure di corrente fatte in maniera continua per mezzo del modulo ADC (Analog to Digital Converter).

Quando si fa uso dell'impostazione di porre le uscite ad alta impedenza è bene che il ponte H abbia i propri ingressi collegati in maniera opportuna a resistori di pull-up o pull-down. Questi resistori è comunque bene averli indipendentemente dall'utilizzo o meno della funzionalità di auto Shutdown, visto che all'avvio del PIC le uscite sono comunque in stato di alta impedenza. Prima che il PIC prenda il controllo delle uscite è bene dunque che il ponte non sia attivo (per analogia, tale regola è bene applicarla anche alla linea di Enable spesso presente in molti ponti H integrati).

Quattro uscite PWM

La modalità a quattro uscite PWM è molto simile a quella a due uscite ma permette di controllare i singoli MOS del ponte H come riportato in Figura 6.
 

Figura 6: Esempio di utilizzo di quattro linee PWM per il controllo di un ponte H discreto.

Figura 6: Esempio di utilizzo di quattro linee PWM per il controllo di un ponte H discreto.

Diversamente dalla modalità a due uscite, una sola linea alla volta risulta modulata in PWM mentre le altre hanno un valore fisso tale da permettere la rotazione del motore in un determinato verso, come riportato in Figura 7.

Figura 7: Segnali PWM in modalità Full Bridge a) rotazione oraria b) rotazione antioraria.
Figura 7: Segnali PWM in modalità Full Bridge a) rotazione oraria b) rotazione antioraria.

Come detto è possibile invertire la rotazione del motore semplicemente intervenendo sul registro CCP1CON, che permette appunto di passare dalla modalità a) alla modalità b) di Figura 7.

É bene far notare che spesso la modalità a due uscite permette di comandare direttamente i ponti H integrati visto che questi hanno i driver necessari per pilotare opportunamente i transistor interni. Questo in generale non è vero nel caso di ponti H discreti per i quali è quasi d'obbligo l'utilizzo di driver ad hoc. I driver esterni permettono di comandare velocemente i transistor fornendo la corrente necessaria per la commutazione da uno stato ad un altro. Frequentemente i driver, se concepiti per pilotare mezzo ponte H hanno anche la circuiteria di boost necessaria per elevare la tensione e comandare in maniera opportuna la parte alta del ponte ed ottenere basse resistenze nello stato di ON (cosa importante per ragioni di efficienza). Spesso i driver per comandare mezzo ponte possiedono anche la circuiteria necessaria per avere dei tempi di ritardo tra una commutazione ed un'altra (Dead Band), funzione che come detto è presente anche nel modulo EPWM.

Indipendentemente dal numero di uscite utilizzate, nel caso in cui si faccia uso del modulo Enhanced PWM è bene seguire la procedura di inizializzazione del modulo come descritto nel datasheet. Per la natura del modulo e numero di impostazioni, il numero di passi da seguire per impostare lo stesso sono maggiori che non nel caso standard. Con la speranza di aver portato chiarezza, non riporto questi passi ben descritti sul datasheet.

Nota:
Per maggiori dettagli sul modulo CCP e ECCP si rimanda al datasheet del PIC18F4550, utilizzato come riferimento in questa Brief Note. Ciononostante si raccomanda sempre di far riferimento al datasheet del PIC utilizzato visto che sono presenti diverse varianti in termini di moduli disponibili e configurazioni utilizzabili.