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:
utilizzare dei pulsanti per modificare e memorizzare in EEPROM la costante di conversione
provare quarzo da 32kHz come sorgente esterna per TMR1
eseguire la media di più misure
aumentare la risoluzione aggiungendo la gestione del punto decimale
trasformazione in tachimetro
inserire funzioni per memorizzare velocità massima o contare il numero delle rivoluzioni
inserire un sistema di risparmio energetico per per prolungare la durata della batteria (spegnere LED IR)
Home - Progetti - Appunti - Avvertenze - Contatti