Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

gestione encoder (azzerare la variabile di passi)

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[11] Re: gestione encoder (azzerare la variabile di passi)

Messaggioda Foto Utentedadduni » 9 giu 2018, 13:15

Calma, pazienza e tanto sangue freddo.
Se non descrivi il problema non si capisce nulla e non si va da nessuna parte. Hai parlato di encoder, di resettare variabili, di timer e poi di seriale di LCD e non so più di cos'altro.
Ricominciamo.

Ti faccio una serie di domande numerate e dovrai rispondere a tutte le domande in maniera numerata e molto dettagliata e rigorosa: non è per me ma è per il bene di chiunque legga questa conversazione.
Gli altri utenti che sono intervenuti a rispondere possono risolvere il tuo problema solo guardando Arduino negli occhi :mrgreen:

1) L'encoder rotativo funziona correttamente? Puoi provare impostando la seriale o con un led: acceso quando il conto dell'encoder è pari e spento quando è dispari così girando passo passo l'encoder dovrebbe lampeggiare.

2) Hai in qualche modo fatto debouncing sui pin dell'encoder? Puoi farlo software o hardware: può assomigliare ad un delay nel software o ad un passa basso in hardware ma ci vuole

3) perché devi resettare la variabile del conteggio dell'encoder?

4) devi farlo ogni secondo esatto o dopo un secondo che l'encoder non viene toccato tipo una specie di reset temporizzato?

5) non è una domanda ma un "affermità": la seriale di Arduino è lentuccia e fa polling sui registri quindi rallenta il processore è vero, ma leggere un encoder è essenzialmente controllare due pin con una interrupt: se non fuziona non è colpa della seriale

Attendo risposta a tutte le domande e vedrai che quando spiegherai bene cosa funziona, cosa no, cosa vuoi fare e cosa vuoi ottenere la soluzione sarà semplice
Avatar utente
Foto Utentedadduni
2.073 2 7 12
Expert EY
Expert EY
 
Messaggi: 1370
Iscritto il: 23 mag 2014, 16:26

0
voti

[12] Re: gestione encoder (azzerare la variabile di passi)

Messaggioda Foto Utenteluchinho » 9 giu 2018, 19:01

Adesso spero di essere più dadduni

1) L'encoder è di tipo incrementare da 1080 passi per giro e posso assicurarti che funziona, ho provato i due canali all'osciloscopio e l'onda è squadrata benissima

2) Problemi di debouncing non penso di averne perché l'onda è squadrata molto bene, cioè con un piccolo delay non posso metterlo perché la velocità di rotazione continua a cambiare

3) Io devo avere tre variabili per contare i passi (quelli posistivi, negativi e quelli effettivi positivi), perché devo verificare una velocità cioè se ho una quantità di passi ben definiti in una certa quatità di tempo trovo una velocità PS i passi negativi servono per il progetto che sto facendo che sopra una certa quantità blocco il tutto

4) Ogni secondo esatto perché così posso definire una velocità ogni secondo

Spero di essermi fatto capire, se qualcosa non ti torna dimmelo. Grazie molto gentile
Avatar utente
Foto Utenteluchinho
0 3
 
Messaggi: 23
Iscritto il: 15 giu 2017, 22:24

0
voti

[13] Re: gestione encoder (azzerare la variabile di passi)

Messaggioda Foto Utentedadduni » 9 giu 2018, 19:10

Adesso spero di essere più dadduni

Mmm... non sapevo che il mio nick fosse un aggettivo! :roll:

1) ok, l'encoder funziona, ma Arduino lo legge bene? hai fatto la prova del led con numeri pari e dispari?

2) Io un mini passa-basso lo metterei comunque il contatto meccanico è sempre un mezzo rischio. Puoi farlo sia software che hardware, se funziona così bene allora un gruppino RC può farti stare ancora più tranquillo

3) Una volta stabilito il punto 1 questo è banale perché stabilito il senso di rotazione si tratti di fare incrementi e decrementi di variabili

4) Stai lavorando su un AtMega che ha dei timer: hai visto come si usano? il datasheet del componente non è complesso e per di più ci dovrebbero essere anche delle librerie prefatte per Arduino. Ti serve un timer che ogni secondo generi un interrupt: se cerchi online trovi tutto.

E' inutile pensare al timer se non hai la garanzia che l'encoder funzioni. Fai le prove del punto 1 poi, assodato che Arduino legge bene l'encoder senza problemi senza raddoppiare i passi senza rimbalzi allora si ha una infrastruttura solida e il resto sono 5 righe di codice.
Davide
Avatar utente
Foto Utentedadduni
2.073 2 7 12
Expert EY
Expert EY
 
Messaggi: 1370
Iscritto il: 23 mag 2014, 16:26

0
voti

[14] Re: gestione encoder (azzerare la variabile di passi)

Messaggioda Foto Utenteelfo » 9 giu 2018, 20:19

luchinho ha scritto: Problemi di debouncing non penso di averne perché l'onda è squadrata molto bene

Questa affermazione e' "pericolosa".

Guarda questo thread ed in particolare i post di Foto Utentevenexian [15] [17] [19] [21] e [23].

http://www.electroyou.it/forum/viewtopic.php?f=1&t=73690

Un encoder *deve* essere interfacciato (HW o SW) in modo proprio!
Avatar utente
Foto Utenteelfo
6.819 4 5 7
G.Master EY
G.Master EY
 
Messaggi: 2828
Iscritto il: 15 lug 2016, 13:27

0
voti

[15] Re: gestione encoder (azzerare la variabile di passi)

Messaggioda Foto UtenteWALTERmwp » 10 giu 2018, 22:22

Foto Utenteluchinho, oltre alle pertinenti osservazioni già fatte, chiedo, cosa accade se si scatenano gli interrupt mentre stai eseguendo gli statement che precedono le print ?

Invece, più nello specifico, quando esegui la routine associata allo ISR, perché impieghi due variabili (cioè i,j) dal momento che fai, almeno mi pare, una assegnazione incondizionata ?
Chiedo questo, ma potrei interpretare in modo errato.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

Precedente

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 22 ospiti