Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Maggiore precisione con contagiri PIC

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 30 giu 2011, 9:48

Ciao a tutti.

Vorrei una delucidazione se riuscite a darmela.
Ho realizzato finalmente il contagiri con un PIC (avevo aperto un post tempo fa sull'argomento) per conoscere il numero di giri di un motore a scoppio monocilindrico di un piccolo mezzo agricolo. Volendo un metodo poco invasivo per poterli visualizzare, ho preso spunto da un contagiri ad induzione che il mio babbo utilizza in campagna su un trattore.
Così ho pensato di sfruttare un PIC per leggere gli impulsi (con una oppurtuna elettronica di acqusizione del segnale) provenienti da un filo avvolto a spirale sul cavo candela.
Ho utilizzato un quarzo da 40kHz ed un prescaler di 128 per avere con buona precisione dal TMR0 una base dei tempi di circa 1s e tramite interrupt ho contanto gli impulsi ricevuti in un secondo e moltiplicato per 60 per avere i giri/min.
Tutto funziona bene se non per l'errore di 60 giri/min (soprattutto a basse velocità) che ottengo durante la visualizzazione dei giri su LCD.
Infatti l'errore è formato da passi di 60 g/min, infatti 60 impulsi al secondo = 3600 al minuto mentre 59 implusi al secondo = 3540 il peso di un'impluso in piu o in meno è sempre di 60 g/min.
Avevo pensato anche di aumentare la base dei tempi, diminuendo così la costante moltiplicativa. Solo che in tal modo ho un ritardo nella visualizzazione dei giri.

E' possibile secondo voi una visualizzazione sempre circa ogni secondo ma con una maggiore precisione, ovvero con un errore piccolo inferiore ai 10 giri/min?
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

0
voti

[2] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteAjKDAP » 30 giu 2011, 10:17

Un paio d'anni fa ebbi lo stresso problema durante la realizzazione di un frequenzimetro (la stessa cosa di un contagiri :) ) ed infatti dovevo scegliere se avere un'adeguata precisione alle basse frequenze oppure avere un maggior fondoscala.

Alla fine ho implementato una sorta di "autorange", sotto una certa soglia il PIC cambia configurazione per poter avere maggior precisione. Potresti provare a fare una cosa del genere.

Per quanto riguarda il refresh dell'LCD dovresti postare il codice per far capire a me ed agli altri come ti sei organizzato.

A che frequenza esegui il campionamento del segnale?

A che frequenza esegui il refresh dell'LCD?

Ciao! O_/
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[3] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 30 giu 2011, 10:51

Intanto grazie per la risposta.

Allorail funzionamento è abbastanza semplice.

- Imposto una base dei tempi di circa 1secondo conTMR0;
- Setto l'interrupt su RB0 e TMR0;
- Inizializzo TMR0 e azzero la variabile conta_impulsi associata agli interrupt su RB0;
- Accendo il motore e inizio a contare gli impulsi (ogni volta che arriva un impulso disabilito gli interrupte incremento la variabile conta_impulsi e poi riabilito gli interrupt);
- Appena TMR0 va a zero (dopo circa 1s) , prendo il numero di impulsi in un secondo che sono stati rilevati dalla variabile conta_impulsi e li moltiplico per 60 e il risultato lo metto nella variabile risultato=conta_impulsi*60;
- Azzero la variabile conta_impulsi;
- Re-inizializzo TMR0;
- Aggiorno il risultato dell'operazione su LCD.
e il ciclo ricomincia.

Il risultato è buono ma basta una perdita di un impulso per avere un errore di 60 giri/min ad ogni visualizzazione, che su 2000 giri può anche essere meno visibile, ma quando la macchina gira sui 900 giri fa abbastanza ribrezzo.
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

0
voti

[4] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteAjKDAP » 30 giu 2011, 11:01

Io usavo il pin T1CLK per incrementare automaticamente il timer1 a 16bit ogni volta che arrivava un impulso esterno. (niente interrupt, solamente incremento del timer1)

Con il timer0 invece creavo una base tempi mediante interrupt per overflow ogni secondo ad esempio.

Ogni volta che volevo campionare la frequenza non dovevo far altro che:
-azzerare il timer1 (conta impulsi)
-azzerare il timer0 (azzerare o impostare il relativo preset)
-aspettare l'interrupt di overflow del timer0
-leggere il timer1 per sapere quanti impulsi ho ricevuto nell'arco di 1sec ad esempio.

Cambiando il preset del timer0 si può facilmente mandarlo in overflow con tempi diversi e quindi cambiare facilmente la base tempi.
Cambiando poi il calcolo della frequenza con la nuova base tempi puoi facilmente calcolarti il nuovo risultato.
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[5] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 30 giu 2011, 11:16

Si, è quello che in soldoni faccio pure io utilizzando però solo TMR0 come base dei tempi.

Ad ogni interrupt su RB0 conto gli impulsi. Quando TMR0 va in overflow significa che è trascorso 1s.
Quindi prendo il numero di impulsi contati in quel secondo e gli moltiplico per 60. Poi inizializzo ancora tutto e ricomincia il ciclo.

Solo che in tal modo ho sempre un errore di 60. Se aumento la base dei tempi per esempio 2 secondi, riduco la costante moltiplicativa, però di contro aggiorno la misura dei giri/min ogni 2 secondi .
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

1
voti

[6] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteDirtyDeeds » 30 giu 2011, 11:18

AjKDAP ha scritto:Un paio d'anni fa ebbi lo stresso problema durante la realizzazione di un frequenzimetro (la stessa cosa di un contagiri :) ) ed infatti dovevo scegliere se avere un'adeguata precisione alle basse frequenze oppure avere un maggior fondoscala.


Il modo "giusto" per ovviare a questi problemi è quello di realizzare un frequenzimetro reciproco, che è il modo in cui vengono realizzati tutti i frequenzimetri moderni. Bisogna però gestire due conteggi contemporaneamente.

Per Foto UtenteEdge che chiede

Edge ha scritto:E' possibile secondo voi una visualizzazione sempre circa ogni secondo ma con una maggiore precisione, ovvero con un errore piccolo inferiore ai 10 giri/min?


Volendo evitare di fare un frequenzimetro reciproco, te la puoi cavare in due modi: i) facendo una misura di periodo, invece che di frequenza (quant'è il massimo numero di giri che devi misurare?); ii) moltiplicando la frequenza da misurare: se hai una ruota dentata potresti utilizzarla come ruota fonica.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[7] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteAjKDAP » 30 giu 2011, 11:21

DirtyDeeds ha scritto:Il modo "giusto" per ovviare a questi problemi è quello di realizzare un frequenzimetro reciproco, che è il modo in cui vengono realizzati tutti i frequenzimetri moderni.


Mi potresti spiegare a grandi linee come funziona un "frequenzimetro reciproco" ?

(scusa Edge se vado un attimo OT :-) )
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[8] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteDirtyDeeds » 30 giu 2011, 11:24

Siccome la storia è un po' lunghetta e non mi piacciono i link che si trovano in giro, cercherò di scrivere qualcosa nei prossimi giorni.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[9] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteAjKDAP » 30 giu 2011, 11:25

Grazie, basta che non sia un disturbo!

Ciao!
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[10] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 30 giu 2011, 11:56

scusa Edge se vado un attimo OT


Macché scuse, l'argomento è interessante e se non si reca troppo disturbo sarebbe molto interessante capire di cosa si tratta.

Volendo evitare di fare un frequenzimetro reciproco, te la puoi cavare in due modi: i) facendo una misura di periodo, invece che di frequenza


Allora, per quanto riguarda la massima frequenza da misurare questa risulta bassa, perché volendo fare un contagiri il cui numero di giri massimo ipotizzati è di 9000 giri/min (in realtà per il motore con cui ho a che fare non supererò mai i 4000 giri/min) la frequenza massima è minore di 200Hz, --> 9000 g/min /60 = 150 giri/sec ovvero 150 Hz.

Quindi tu dici di prendere come riferimento il periodo tra 2 impulsi successivi?
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti