Problema Encoder

Ciao ragazzi, mi sto imbattendo nella lettura di un encoder meccanico che potete trovare in allegato. Utilizzo un’alimentazione esterna a 5V per alimentare l’encoder e l’alimentazione USB per alimentare arduino. Certamente come ho imparato in questo forum ho messo la GND in comune. Ho collegato A e B in due ingressi digitali e provato diversi sketch, ma quello che leggevo nella seriale era sempre il valore 0.
Come vedete ho tagliato le resistenze poichè attivavo le resistenza di pull-up direttamente da codice. Avete dei suggerimenti da darmi ?? Forse sbaglio qualcosa nei collegamenti ?

Arduino utilizzato: Arduino mega
Grazie

Ciao :slight_smile:

forse ti sei dimenticato degli allegati? ahahah

MD

EDIT: come non detto :):slight_smile:

Ops, ho provveduto. Grazie :slight_smile:

hai provato a vedere se il circuito dell'encoder sta funzionando (provando con un'oscilloscopio sulle singole uscite A e B)? e che tensione in uscita fornisce? :slight_smile:

MD

Si, ho provato con l’oscilloscopio è il tutto funziona. Nel senso che, quando giro ho dei livelli alti e bassi di circa 5V

Ma hai lasciato collegato anche il resto del circuito all'encoder, insieme ad Arduino ? ... perche' potrebbe disturbare ...

Se no, provare ad alimentarlo con gli stessi 5V e GND dell'arduino, dubito che assorba piu di tanto ...

Ho già provato a utilizzare i 5V dell'arduino senza avere nessun cambiamento. Quale circuito intendi ?

Quello che usava l'encoder in origine.

Ho lasciato il circuito che trovi nella foto.

No, non quello sull’encoder … ho visto che era collegato con terminali, ed ho pensato che stessi cercando di leggerlo mentre era ancora collegato a qualche altra apparecchiatura …

Comunque se con l’oscilloscopio da i segnali corretti in uscita (e suppongo che tu abbia provato anche mentre era collegato ad arduino), allora e’ difficile che sia l’encoder … quindi potrebbe essere un problema di cablaggio (ma se i segnali li misuri corretti sui pin di arduino, neppure quello), oppure qualcosa nello sketch …

A proposito, che modello di encoder e’ ?

Controlla la foto in allegato :slight_smile:
Ho provato diversi esempi ma niente.

Non riesco a capire che encoder hai ... stando all'unico catalogo della HEDSS che sono riuscito a trovare, il modello a manopola con le viti dietro dovrebbe essere marcato ISM6045, non hanno alcun prodotto che inizia con ZSS645 come quello della tua foto ... a meno che non sia un "custom" non in commercio ...

Comunque se con arduino collegato, sui suoi pin hai i segnali corretti, l'encoder funziona ... pero' tieni presente che quelli sono encoder da CNC, non hanno scatti meccanici, quindi per leggerli correttamente servono per forza due interrupt, e che leggano sia il "rising" che il "falling", oppure che facciano il confronto fra i due segnali in entrambe le situazioni, per non "perdersi" le transizioni non in sequenze complete ...

Finche non ci dici dove hai collegato i segnali A e B sul Arduino e lo sketch che usi non possiamo mica aiutarti.

Se vedi con un oscilloscopio tra GND e A e tra GND e B un segnale 0V e 5V a secondo la posizione del asse l'encoder funziona.

Ciao Uwe

Ciao ragazzi ho delle novità. Inizialmente avevo provato l'encoder con l'oscilloscopio e funzionava in modo perfetto. Successivamente ho cominciato a fare delle prove, senza avere nessun riscontro.
Ho ricontrollato l'encoder con l'oscilloscopio e non mi funzionava più. Di preciso non so cosa sia successo, ho ricomprato l'encoder, appena arriva riprovo il tutto.
Grazie

Ha uscite open collector ? ... quando non funzionava piu, avevi le resistenze di pullup collegate ?

Per essere sicuro, tanto a provare ci vuole poco, attacca due resistenze da 10K (o valori simili) fra le due uscite ed il morsetto VCC, poi alimenta l'encoder e riprova con l'oscilloscopio ... giusto per essere sicuri se e' andato o meno ... :wink:

Ciao Etemenanki, quando facevo le prove con l'oscilloscopio avevo messo due resistenza da 47k tra VCC-->A e VCC--->B

Ciao. Non metto mani a un encoder dal lontano 1994, ma dando un'occhiata veloce a quello che facevo un tempo posso dirti che:

  1. Non hai bisogno di controllare entrambe le uscite A e B per leggere l'impulso.
  2. Non hai bisogno di interrupt sui PIN.
  3. Ti e' sufficiente usare il Timer Interrupt possibilmente attivandolo all'occorrenza.
  4. Ti serve sapere che risoluzione ha l'encoder che stai usando. N° Impulsi x giro completo a 360°.
  5. Anche se non serve, conviene sempre mettere una resistena di PULL-UP sul PIN del micro su cui andrai a collegare l'uscita dell'encoder, 10k e' l'ideale.

Nei miei progetti abilitavo il timer interrupt settando il prescaler in modo tale da ottenere 200usec. C'e' anche da dire che all'epoca c'erano micro davvero molto lenti e soprattutto CISC non RISC. Volendo fare un paragone, un atmega attuale esegue un intero programma nello stesso lasso di tempo necessario a un microcontroller dell'epoca per eseguire una sola istruzione.

I miei progetti erano industriali, controllavo macchine CNC, quindi molto affidabili ed esenti da qualsiasi bug. Un solo errore poteva causare diversi milioni di lire di danni, oltre che bloccare il ciclo produttivo....

Pasquale