Premessa
Il forum di Electroportal ospita da qualche tempo uno spazio dedicato ai microcontrollori PIC prodotti da Microchip Technology. In questo ambito, è aperta una sezione specifica sul software per PIC che pian piano prende forma con esempi di codice. Con alcuni appuntamenti di questa rubrica, porto all'attenzione degli utenti cosa si può fare con i microcontrollori ed in particolare con i PIC che, per costo e diffusione, hanno una popolarità molto elevata.
Le luci di cortesia e il PWM software
Credo che dire che cosa sia la modulazione a larghezza d'impulso (PWM, Pulse Width Modulation) sia superfluo, in questa sede. Vorrei invece mostrare un'applicazione che sfrutta il PWM: le luci di cortesia per auto.
Benché la maggior parte delle autovetture di oggi dispongano già di luci di cortesia, ritengo questo un buon esercizio per partire. Innanzitutto, cosa sono le luci di cortesia? Non sono altro che un modo gentile per accogliere il conducente ed i passeggeri a bordo. Ecco come funzionano: all'apertura delle portiere, le luci interne si accendono e restano accese fintanto che le portiere restano aperte. Non appena l'ultima portiera si chiude, le luci restano accese per un certo tempo, per permettere al conducente di sistemarsi sul sedile e di poter individuare facilmente il punto di innesto della chiave di avviamento. Intanto il timer che mantiene accesa la luce interna va ad esaurirsi; quando scade, l'intensità luminosa della luce si abbassa gradualmente, sino a spegnersi.
A livello concettuale, propongo lo schema di figura 1 che rappresenta il cuore del progetto;

un microcontrollore PIC12F508, alimentato a 5V, viene collegato ad un interruttore di una portiera (S1) ed alla lampadina (PWM_OUT). Ovviamente, non è possibile eseguire un collegamento diretto né dell'interruttore sulla portiera né alla lampadina! Come detto lo schema è concettuale. Per provare il concetto, è però possibile collegare un semplice interruttore al PIC ed un LED con una resistenza di limitazione della corrente. In figura 2 è mostrata la fotografia del prototipo impiegato per le prove e le misure illustrate nel seguito.

La macchina a stati
Il problema proposto si presta bene ad essere analizzato come una macchina a stati. Lo stato da tenere sotto controllo è quello della portiera:
- portiera chiusa;
- portiera aperta;
- portiera appena richiusa;
- portiera chiusa con luce in evanescenza.
In figura 3 sono riportati gli stati e le condizioni di commutazione tra stato e stato e le condizioni di stazionamento in ciascuno stato.

Gli stati sono rappresentati dai cerchi, le condizioni di commutazione tra uno stato e l'altro sono rappresentate dalle frecce nere, mentre le frecce rosse indicano le condizioni di permanenza in uno stato. Per poter analizzare in modo semplice il problema, consiglio di partire dalla condizione di portiera chiusa.
Il codice del firmware
Recentemente, Microchip ha messo a disposizione nel suo ambiente MPLAB un compilatore C gratuito e senza limitazioni sviluppato da una società terza: CCS C Compiler. Questo compilatore C è sì gratuito e senza limitazioni in termini di ampiezza di codice, ma è limitato ad un certo numero di microcontrollori ed in particolar modo a quelli definiti a core 12-bit, come appunto il PIC12F508. Ecco quindi che propongo nel seguito i due file scritti in C che vanno compilati con CCS; questi vanno inseriti in un progetto di MPLAB come illustrato in figura 4.

Consiglio di impiegare lo strumento PROJECT WIZARD che aiuta a preparare l'albero di progetto ed a scegliere il compilatore C di CCS.
|
|
La routine più interessante di questo piccolo progetto è quella del PWM software, in quanto non è disponibile il modulo PWM hardware (come per altri PIC); il PIC12F508 dispone di un timer (TMR0) ma non di interrupt sull'overflow di quel timer, quindi la sfida è ardua, ma interessante. Come fare, allora, per generare il PWM? Fissata la frequenza del PWM, si considera un periodo; questo periodo lo si spezzetta in una serie di sottointervalli (per questo esempio ho scelto 255). Quando il timer si esaurisce, si confronta il valore di un contatore (che va da 0 a 255, il numero dei sottointervalli) con il duty-cycle previsto. Se k (contatore dei sottointervalli) è minore o uguale del duty-cycle, la luce viene accesa; viceversa, la si spegne. Il timer viene riavviato, e si decrementa il valore del duty-cycle.
Le misure
Nelle figure che seguono, riporto le misure eseguite con l'oscilloscopio: stato di porta richiusa e avvio del PWM,

la durata del PWM con le sue "sfumature"

ed infine la frequenza del PWM.

Per concludere
Questo esercizio di elettronica facilmente si risolveva con un la carica di un condensatore la cui scarica sarebbe servita a pilotare la base di un transistor deputato a pilotare la lampada... Non era questo lo scopo della lezione.
Nei prossimi appuntamenti mostrerò come si possa realizzare il medesimo esercizio con un PIC dotato di interrupt sul timer.
Riferimenti
Tutto ciò che riguarda i PIC va ricercato presso la Casa costruttrice: http://www.microchip.com
Per maggiori informazioni sul compilatore C di CCS: http://www.ccsinfo.com

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)