HOME

                                                                            Periodimetro Più

                            Duty-Cicle

Introduzione.

Salve, alcuni di voi probabilmente si ricorderanno di un mio progettino che alcuni anni fa ho pubblicato su questo stesso sito, il cui titolo era "semplice ma preciso periodimetro". Adesso, dato che ho ripescato su uno dei miei cd di backup, il file di un progettino analogo, che oltre a svolgere le funzioni del precedente misura anche il duty-cycle, ho deciso di proporvelo coi relativi file sorgenti a corredo. 

Suggerisco, anche se non interessati al progetto, di scorrere comunque il file asm, dal quale si possono attingere precise nozioni, su come adoperare al meglio, un importante blocco molto flessibile e potente, che prende il nome di "CAPTURE MODE BLOCK", implementato su quasi tutti i microcontrollori PIC, prodotti dalla notissima Microchip. 

Tutti almeno una volta abbiamo avuto la necessità di misurare il periodo di un segnale, soprattutto quando quest’ultimo si presenta di valore molto alto e quindi di frequenza molto bassa, al punto da non poter essere più usato il frequenzimetro che visualizzerebbe dei valori assai incerti.

In questi casi, notoriamente è usato più vantaggiosamente il periodimetro, in grado di rappresentare il valore del periodo appunto, con elevata precisione, ovvero il tempo che intercorre tra due fronti di salita del segnale, oppure tra due fronti di discesa che è la stessa cosa.

Normalmente, avendo a che fare con segnali perfettamente simmetrici, non ci si pone il problema di sapere quale sia il duty-cycle del segnale, cioè quale sia il tempo in cui il segnale resta ad ON ed il tempo in cui resta ad OFF, sappiamo a priori che sarà la metà dell’intero periodo.

Nei casi in cui invece il segnale è asimmetrico, per talune applicazioni, può sorgere la necessità di sapere quali siano i valori del semiperiodo ON e del semiperiodo OFF.
E’ per questo motivo, ma soprattutto per studiare la particolare funzione svolta dai microcontrollori PIC cui mi riferivo prima, che mi sono cimentato nella realizzazione di un periodimetro che mi rappresentasse anche il valore del Duty-Cycle del segnale.

Principio di funzionamento.  

Il cuore di tutto il sistema è costituito da un microcontrollore prodotto dalla Microchip, il notissimo 16F628. Non sto qui ad elencare tutte le funzioni in esso implementate che sono davvero tante. Ulteriori approfondimenti si possono trovare, consultando il sito stesso della Microchip. Una delle tante funzioni svolte da questo microcontrollore è nota come “Capture Mode” il cui schema a blocchi è visibile nella fig1 e che noi sfrutteremo per il nostro periodimetro.

Il pin attraverso il quale si accede alla funzione “Capture Mode” è il numero 9 del PIC, corrispondente alla porta d’ingresso RB3. Da software inoltre, vi è la possibilità di inserire o disinserire il “Prescaler”, che ci permette di considerare il segnale così come si presenta all’ingresso, oppure di dividerlo per 4 o per 16. Inoltre, sempre da software, possiamo stabilire se considerare solo ogni fronte di salita del segnale, solo ogni fronte di discesa, oppure entrambi i fronti di salita e di discesa. Quest’ultima possibilità ci permette di misurare il tempo in cui il segnale permane a livello logico alto “ON” ed il tempo in cui permane a livello logico basso “OFF”. 

Ciò è possibile, poiché uno dei timer interni del PIC, in questo caso il “Timer1”, viene continuamente incrementato da un segnale di clock, e tutte le volte che un fronte di salita o di discesa si presenta all’ingresso RB3, il valore in esso contenuto è trasferito nel registro “CCPR1”, permettendoci di risalire al tempo trascorso dal precedente fronte, eseguendo semplicemente una sottrazione, tra il valore di quel momento ed il precedente, che abbiamo avuto l’accortezza di memorizzare sulla ram del pic. 

I due registri menzionati prima, sono in realtà costituiti da due byte, per cui, il massimo conteggio ottenibile può arrivare fino a 65535, ma sfruttando la possibilità del “Timer1”, di generare un “Interrupt” quando va in “Overflow”, si fa in modo da software di aggiungere ancora un byte, estendendo il limite della misura a valori ben più elevati, nel nostro caso fino a 16 secondi circa.

Per completezza aggiungo soltanto, che il “Timer1” può essere incrementato da un clock esterno, oppure come nel nostro caso dal clock interno. Avendo adottato nel nostro circuito un quarzo di 4MHz, il cui valore di frequenza com'è noto viene diviso per quattro dai circuiti interni del PIC, otteniamo alla fine 1MHz, quindi l’incremento minimo della misura è di un microsecondo e di conseguenza anche la risoluzione dello strumento.

Sulla prima riga del display, a sinistra, sarà visualizzato in microsecondi il tempo in cui il segnale sta ad “ON”, ed a destra il Duty-Cicle in percentuale; mentre sulla seconda riga, a sinistra, sarà visualizzato in microsecondi il valore del periodo completo ed a destra il valore della frequenza in Hz.

Circuito elettrico


Il circuito elettrico è visibile in fig.2 e non credo abbia bisogno di lunghe spiegazioni. Tutte le funzioni infatti, di elaborazione, di controllo e di gestione interrupt, sono svolte dal PIC; anche i componenti passivi esterni sono ridotti veramente al minimo.



Il transistor 2N2222 funge da amplificatore e squadratore per il segnale d’ingresso, rendendo possibili misure fino a circa 70 mVpp. A tutto il resto, provvede il software, che potrete studiarvi dopo averlo scaricato, cliccando sul testo evidenziato in rosso. Qui di seguito trovate il file .hex per programmare il pic e qui il file .asm che potrete modificare ed adattare a vostro piacimento.

Salutandovi, auguro a tutti buon lavoro e buon divertimento.

IT9DPX - #135  (Francesco M.)