Newsgroup: it.hobby.elettronica.digitale
Titolo: encoder incrementale

voglio usare un mc per acquisire la rotazione da un'encoder incrementale.
Dall'encoder escono due segnali sfasati 90° tra di loro in modo da 
ricevere il senso di rotazione e gli impulsi.
Secondo voi si riesce in polling a ricevere gli impulsi ? con un polling 
ogni 12mS circa ?
O devo fare tutto tramite interrupts ?
grazie
PippoPippo

Pippo:

Dipende dai rimbalzi, da quanto possa variare la velocità e quanto possa
esserne il massimo. Io, con un encoder "manuale", usato per modificare la
luminosità di un display, a 400 Hz di campionamento ho avuto problemi
insormontabili: se si girava troppo veloce (in effetti *molto* veloce)
leggeva addirittura al contrario.
Meglio un interrupt su di una fase che controlla il livello dell'altra per
stabilire la direzione, così puoi anche fregartene di rimbalzi, dato che è
difficile che durino più della differenza tra le due fasi.

F. Bertolazzi ha scritto:

Grazie per il consiglio.Provo con  degli  interrupts.
Io avevo l'intenzione di gestire gli interrupts per tutti e due i 
segnali,ma forse è piu' logico utilizzare un interrupt su un solo 
segnale e controllare lo stato logico dell'altro senza che l'altro 
generi un'interrupt.(Come dici tu se non ho capito male)
E' cosi' ?
Grazie di nuovo
PippoPippo

 E' cosi' ?
Esattamently. Due interrupt č inutile e dannosissimo.


Dipende da che risoluzione vuoi.
Dà un'occhiata qui:
http://www.hobby-cnc.it/forum/viewtopic.php?f=11&t=105
ciao
tortuga 

 
http://www.hobby-cnc.it/forum/viewtopic.php?f=11&t=105
No, non va bene, è inutilmente complicato e ad alte velocità si incasina.

 ha
scritto:

Interrupts, e se vuoi stare tranquillo, ti serve un aggeggio così:
http://www.lsicsi.com/pdfs/Data_Sheets/LS7183_LS7184.pdf
--
ciao
  Stefano

"F. Bertolazzi"

Ciao
Quello linkato legge 3 encoder ( e li visualizza ,dopo alcuni calcoli )  in 
contemporanea con frequenza ciascuno di 16 kHz.
E non si è mai incasinato.
E' complicato al punto giusto per poter lavorare in quadratura, quindi con 
una risoluzione di 4*X(cpr/giro)
E comunque, è solo un esempio
Ciao
Tortuga

 >
perchè non aggiungere un good old 4013 tra l'encoder è il PIC?
ti fa subito da indicatore di direzione semplicemente collegando un uscita
dell'encoder al D e l'altra la CK,in un senso avrai sempre Q alto e
nell'altro Q basso
Se non ricordo male l'avevo fatto così e funziona da anni
ciao

 Se non ricordo male l'avevo fatto così e funziona da anni
Mi pare che così sprechi la risoluzione dell'encoder, comunque
sottoscrivo, gli encoder vanno gestiti con una logica hardware,
meglio ancora se include pure i contatori.
Se si vuole fare tutto con un micro, si deve essere disposti a
perdere qualche impulso, cosa che può essere accettabile
in qualche caso. L'ho visto anche in un rtx amatoriale "serio",
girando velocemente avanti e indietro la manopola di
sintonia, poi viene persa la corrispondenza tra la posizione
della stessa e la frequenza del display.

crow...@gmail.com
 ha scritto:

Grazie a tutti ho gia' risolto un interrupt (che è la strada migliore)
ciao ciao
Pippo Pippo

 Se non ricordo male l'avevo fatto così e funziona da anni
Mi pare che così sprechi la risoluzione dell'encoder,
perchè?le uscite dell'encoder le hai ancora se le vuoi processare,in questo
modo almeno sottrai al micro l'onere di dover ragionare troppo sulla
direzione;
sbaglio?


 perdere qualche impulso
Dipende dalla velocità di rotazione, dal clock del micro e dall'efficienza
dell'interrupt handler. I rimbalzi, ma questo vale anche per la soluzione
hardware, devono chiaramente terminare prima che l'altra fase commuti.
Se fai una cosa schisa schisa, ovvero incrementare/decrementare con un solo
if un registro a 8 bit che la main() provvederà a leggere e resettare,
senza fare push né pop puoi, in teoria, arrivare a frequenze di 1/10 del
clock del micro o quasi.

 sbaglio?
Non sbagli, ma effettivamente
hai un quarto della risoluzione.
Con un solo ff tu consideri solo il passaggio
0-1 di una fase. Se vuoi la massima
risoluzione possibile devi considerare
i fronti 0-1 e 1-0 di entrambi le fasi.
Discorso simile per quanto riguarda la
gestione via interrupt, con l'aggravante
che in caso di oscillazione veloce di una
fase l'interrupt non riesce a starci dietro.
Ho una certa esperienza di encoder montati su
aberi di motori che vibrano e so che sparano
fuori centinaia di kHz. Se il micro riesce a
gestire un milione di interrupt al secondo,
allora si può stare tranquilli. Altrimenti
o si accetta di perdere qualche impulso o si
si gestisce tutto via hardware.

 sbaglio?
Non sbagli, ma effettivamente
hai un quarto della risoluzione.
Con un solo ff tu consideri solo il passaggio
0-1 di una fase.
..è vero,
