Home   -     Progetti    -    Appunti    -    Avvertenze   -    Contatti


Contagiri Ottico Digitale

 

Scarica i file per realizzare questo progetto

 

Introduzione
L'obiettivo di questa esperienza è realizzare un'applicazione per sperimentare una delle funzioni del modulo CCP (Capture-Compare-PWM) integrato in molti microcontrollori PIC. Di solito si utilizza il modulo CCP nella configurazione per generare un segnale PWM. In questo caso si vuole sperimentare la funzione Capture del modulo. L'applicazione consiste nel realizzare un contagiri digitale, ed eventualmente in seguito un tachimetro. Sfruttare questa periferica integrata permette di realizzare funzioni di conteggio e misura ad elevata precisione, con una minima occupazione dell'unità di calcolo centrale, la quale può svolgere ulteriori attività.

L'ipotesi di partenza è disporre di un sensore digitale in grado di fornire un numero N di impulsi ad ogni rotazione di 360°  dell'albero da misurare. Il circuito dovrà misurare il periodo di questo segnale e con un semplice calcolo matematico risalire alla velocità di rotazione in caso di contagiri, alla velocità di avanzamento in caso di tachimetro.

 

Risorsa Capture nei PIC
La periferca CCP integrata nel chip di numerosi modelli di PIC può essere configurata per funzionare in uno di tre modi diversi Compare, Capture o Pwm. Di seguito utilizziamo il Capture.
Con questa funzione è possibile fare in modo che, al manifestarsi di un evento esterno, il valore di un contatore in free-running venga memorizzato in un registro ausiliario. 
La risorsa utilizzata come contatore in free-running è TMR1. La frequenza di conteggio di TMR1 può essere divisa a monte da un prescaler (divisore di frequenza) dedicato esclusivamente a TMR1. L'ingresso di clock al prescaler di TMR1 può essere scelto tra diverse sorgenti. Si può prendere la frequenza di oscillazione interna del PIC (Fosc/4) oppure utilizzare un oscillatore collegato a pin esterni RB6 e RB7.

Tutte le volte che è rilevato un evento sul pin RB3, il valore del contatore TMR1 e' copiato nel registro CCPR1x. L'evento che causa l'azione di capture può essere configurato con diverse opzioni. E' possibile scegliere di attivare la funzione Capture sul fronte di salita o discesa e/o considerare solo un multiplo della frequenza sul pin RB3. 

Andando a calcolare la differenza del valore conteggiato  da CCPR1[H:L] tra due eventi successivi sul pin RB3, è possibile determinare la loro distanza temporale e quindi il periodo del segnale in ingresso. In pratica la frequenza di conteggio di TMR1 determina la risoluzione della misura del periodo. Ovvio che esiste un limite superiore alla frequenza di conteggio di TMR1. Il limite è dato dal modulo di conteggio di TMR1, imposto dall'hardware a 16bit. Infatti affinchè la misura per differenza di conteggio sia attendibile, è indispensabile che, tra due eventi capture, la risorsa TMR1 non conteggi un numero di impulsi di clock superiore a quello che è il suo modulo 2^16=65336. Come vedremo imporre una frequenza di conteggio elevata per TMR1 porta sì ad una elevata risoluzione della misura e  quindi ad un basso errore, ma impone anche un limite superiore al massimo periodo misurabile per il segnale di ingresso su RB3. Tradotto in termini di giri al minuto esiste un limite inferiore sotto il quale il contagiri non è in grado di rilevare correttamente la velocità di rotazione dell'albero. Tutto questo per dire che la base tempi costituita dalla frequenza di conteggio per TMR1 deve essere scelta in modo opportuno, in funzione del compromesso tra limite inferiore alla misura di velocità angolare all'errore che si vuole ottenere.

 

Calcoli da eseguire
L' albero meccanico in rotazione esegue RPM rotazioni per minuto. Il numero di giri al secondo è quindi

RPS=RPM/60.

Con un sensore di rotazione digitale che genera N impulsi ad ogni rotazione dell'albero, la frequenza del segnale in uscita dal sensore è 

f=N*RPS.

col periodo del medesimo segnale dato da

T=1/f=1/(N*RPS).

Quindi la relazione che esiste tra il periodo del segnale in uscita del trasduttore e la velocità di rotazione dell'albero è

T= (1/N) * (60/RPM).

Invertendo la formula precedente, dalla misura del periodo del segnale in uscita dal trasduttore posso ricavare la velocità di rotazione dell'albero

RPM=1/N (60/T).

La tabella seguente vale per un sensore che genera un fronte di salita Ogni N=1 rotazioni dell'albero.

Velocità di rotazione in rpm Velocità di rotazione in rps Periodo

sec

1 0,0166 60
10 0,166 6
100 1,66 600x10^-3
1000 16,6 60x10^-3
10000 166,6 6x10^-3

Abbiamo detto che il modulo Capture fornisce il numero di impulsi di clock di TMR1 che sono compresi nel periodo del segnale d'ingresso al pin RB3; Indico allora con NCKTMR questo numero e con TCKTMR1 il periodo di clock di TMR1. Il periodo da misurare può essere espresso quindi come 

T= NCKTMR1 * TCKTMR1  

e la velocità di rotazione come

RPM=1/N (60/NCKTMR1 * TCKTMR1).

I parametri N e TCKTMR1 sono predeterminati. Per semplificare i calcoli da fare eseguire al microcontrollore, si possono inglobare alcuni parametri della formula precedente in una sola costante, riducendo la formula da fare calcolare alla CPU alla forma seguente

RPM=K/NCKTMR1

con K=60/N*TCKTMR1

 

Scelta della frequenza per TMR1
Indico con fosc e Tosc rispettivamente la frequenza e il periodo dell'oscillatore di sistema del PIC. Con PRESCT1 indico il rapporto di divisione impostato per TIMER1.  Con riferimento alla figura a inizio pagina si vede che il periodo massimo che può essere catturato con TIMER1 senza che questo compia un numero di conteggi maggiore del suo modulo (2^16) è 

Tmax = 2^16 * PRESCT1 * Tosc * 4

Esempio 1
Oscillatore di sistema
fosc=4MHz e N=1. Prescaler di TMR1 impostato con rapporto di riduzione massimo 1:8 quindi PRESCT1=8. Ottengo allora un Tmax uguale a 524288us che corrisponde ad una velocità minima misurabile di circa 114 giri al minuto. La costante K è uguale 7,5. 
Queste sono le impostazioni utilizzate nel codice di esempio.

Esempio 2
Oscillatore di sistema fosc=32768 kHz; Prescaler di TMR1 impostato con rapporto 1:1 (PRESCT1=1) ottengo
Tosc=1/32768 quindi un periodo massimo misurabile di Tmax=8 secondi. La velocità minima misurabile è di meno di un giro al minuto. Con questa configurazione il clock di sistema è davvero lento e l'esecuzione del programma risulta  particolarmente pesante. E' quindi indicata solo se si devono compiere poche altre funzioni oltre a quelle di conversione da periodo a velocità angolare.

Esempio 3
Esiste una ulteriore configurazione hardware, che coniuga i vantaggi dell'alta velocità di elaborazione dell'esempio 1 con l'ampio range di misura e della soluzione 2. In molti PIC è possibile installare un oscillatore tipicamente da 32KHz sui pin che riportano la descrizione T1OSI. In questo modo si ottiene una base tempi per TMR1 a bassa frequenza ed elevata precisione per eseguire le misure. Questa base tempi è del tutto indipendente dal clock di sistema che può essere scelto liberamente in funzione del carico di lavoro richiesto dal programma. Purtroppo i pin su cui collegare l'oscillatore esterno per TMR1 nel modello PIC16F628 coincidono a quelli utilizzati per la programmazione In-Circuit. Questo costituisce solo  un piccolo ostacolo nella fase di sviluppo.

 

Sonde ad infrarosso
Se non si dispone di un apposito sensore di prossimità per rilevare la rotazione dell'albero, è possibile utilizzare due diodi all'infrarosso. I diodi possono si possono fissare con della colla a caldo dentro un tubetto plastico, ad esempio ottenuto smontando una biro. Per rendere i tubicini opachi alla luce infrarossa è consigliabile avvolgerli con del nastro isolente nero, di quello usato dagli elettricisti. Si realizzano in questo modo due puntali, uno trasmittente ed uno ricevente.

Il sistema più affidabile per misurare la velocità di rotazione consiste nel disporre le due sonde sullo stesso asse con TX e RX affacciati e fare in modo che l'albero in rotazione interrompa il fascio a raggi infrarossi. Ad esempio per misurare la velocità di rotazione di un ventilatore è possibile montare i le due sonde a infrarosso ai lati delle pale rotanti, purché queste non risultino trasparenti.

La rotazione dell'albero può essere rilevata anche applicando sulla sua superficie un poco di vernice nera opaca se l'albero è riflettente, oppure un ritaglio di carta stagnola se la sua superficie è nera. Per leggere il segnale riflesso bisogna andare con il diodo trasmittente molto vicino all'albero e con il diodo ricevente molto più lontano.

In ogni caso bisogna prestare sempre molta attenzione a non avvicinare le mani ad eliche o pale, per evitare di ferirsi. Nella tabella che segue riporto alcune misure effettuate.

Oggetto Metodo misura Note di misura  Velocità di rotazione
Ventilatore Interruzione del fascio Valori da dividere per 3 per via del numero di pale dell'elica. 3 velocità misurate: 3484,3654,3874 
Disco abrasivo montato su motore da  lavatrice Riflessione su striscia di stagnola Motore a vuoto, velocità in "centrifuga" 2850 rpm
Smerigliatore angolare Riflessione su striscia di stagnola La velocità si stabilizza dopo un overshoot iniziale di pochi secondi 8340 rpm

 

Assemblaggio

Per contenere le dimensioni il circuito stampato è stato disegnato con piste che corrono su due lati, ma con una disposizione più attenta si può riuscire a renderlo monofaccia. Il perimetro è stato scelto in modo da farlo entrare in una scatola in ABS nero.

     

Lato Top

Lato Bot

Attenzione: le immagini possono differire dai file del progetto.

 

 Il layout del circuito è pensato per ospitare il modulo display LCD a 4 cifre, montato "a castello". Quattro viti a colonna permettono l'unione dei due circuiti e il loro fissaggio al pannello superiore della scatola. I circuiti sono connessi da una coppia maschio-femmina di connettori a 5 poli. Attualmente ai pulsanti non è implementata nessuna funzione. Per collegare le sonde avevo inizialmente previsto due connettori jack stereo da 3.5mm a 3 poli, come riportano le figure sopra. Poi ho trovato piu' pratico utilizzarne uno soltanto, in modo da sfruttare il cavo e la spinotto di un paio di auricolari economici.

 

Sviluppo del progetto

Una serie di idee per aggiungere funzioni al progetto:


Home   -     Progetti    -    Appunti    -    Avvertenze   -    Contatti