Lettura di un encoder rotativo e resistenze pull down

Sezione dedicata all'elettronica in generale.
Rispondi
Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Lettura di un encoder rotativo e resistenze pull down

Messaggio da walgri » giovedì 13 ottobre 2011, 16:24

Saluti a tutti,

mi sto approcciando all'elettronica facendo dei semplici schemi con un Arduino e i soliti gingilli per principianti.

In questo momento ho realizzato un circuitino per la lettura di un encoder rotativo recuperato da un stampante HP, i contatti dell'encoder sono +5V, GND, A, B. L'encoder è alimentato da Arduino.

Lo sketch che ho scritto prevede di collegare due routine che vengono richiamate a ogni fronte d'onda dei due pin di ingresso. Le routine non fanno altro che copiare lo stato dei due pin di ingresso rispettivamente in due pin di uscita, a cui sono collegati i soliti due led con le resistenze da 330 kOhm.

In questa configurazione tutto funziona come ci si aspetta e i due led replicano prefettamente le due onde quadre.

A questo punto ho provato a collegare delle resistenze di pull down. Se non ho capito male, dovrei mettere, in parallelo per ciascuna delle uscite A e B, un resistore da 10 kOhm verso GND.

Ebbene in questo caso i led spia non si accendono.

Qualcuno può aiutarmi a capire cosa sto sbagliando ?

Grazie !
Ultima modifica di Zebrauno il domenica 16 ottobre 2011, 9:55, modificato 1 volta in totale.
Motivazione: Correzione ortografica del titolo per favorirne la ricerca.
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

billielliot
Senior
Senior
Messaggi: 1748
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da billielliot » giovedì 13 ottobre 2011, 17:32

Ciao walgri,

se metti due resistenze di pull-down forzi un segnale logico basso sulle linee A e B.

Probabilmente l'encoder non e' in grado di sollevarle a un livello logico alto.

Perche' vuoi forzare le linee a livello logico basso?

Verifica se l'encoder e/o il micro non preferisca che venga forzato un livello logico alto (pull-up).

Ciao .-)

Mauro
Amat victoria curam

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da walgri » giovedì 13 ottobre 2011, 17:40

Ehmmm, perchè sono un principiante :oops:
Ho letto in tal senso nella documentazione di Arduino.

Torno a studiare e poi ti dico.

Intanto grazie !!
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
claudio.lorini
Junior
Junior
Messaggi: 199
Iscritto il: domenica 31 maggio 2009, 13:03
Località: Genova

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da claudio.lorini » giovedì 13 ottobre 2011, 18:09

...strano che dicono di mettere dei pull-down!
saranno mica da mettere dei pull-up? (10K verso l'alimentazione)
C.
...no, non è terra.

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da walgri » giovedì 13 ottobre 2011, 22:00

Ciao, l'ho letto qui http://arduino.cc/playground/Main/RotaryEncoders
in effetti non è nella documentazione ufficiale, ma nell'area "playground".

Nel mio modello mentale mi sembrava comunque sensato e intuitivo fare in questo modo.

Peraltro è possibile attivare i pull-up interni di Arduino, quindi ora mi provo di capire come dovrebbe essere il circuito.

Grazie !
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da walgri » giovedì 13 ottobre 2011, 23:14

Questa di seguito è la pensata. Una rapida ricerca su internet mostra molti collegamenti pullup, ma relativi a un semplice interruttore che manda a massa la Vcc.

Con un encoder l'unica cosa che ho pensato è che quando il segnale è alto, in realtà  al pin del microprocessore arrivino due segnali alti, quello del pullup e quello dell'encoder. Quando il segnale dell'encoder è basso il collegamento a massa del pin del microprocessore avviene attraverso l'encoder.

Ho quindi realizzato e provato su breadboard questo schema:
CollegamentoPULLUP.png
Sembra funzionare, ma se poteste darci una occhiata e segnalare gli errori ve ne sarei grato.

Grazie ! Ciao
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

billielliot
Senior
Senior
Messaggi: 1748
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da billielliot » venerdì 14 ottobre 2011, 10:30

Ciao walgri,

complimeti!

Se cosi' funziona, hai trovato la combinazione vincente.

La tua spiegazione e' corretta: l'encoder si comporta come un interruttore e chiude a massa il pin dell'Arduino. Le resistenze da 10K impediscono che si crei un cortocircuito quando l'interruttore si chiude, mentre forzano il segnale a uno stato logico alto nel momento in cui l'interruttore e' aperto. Gli esempi usano un intrerruttore ma l'interruttore puo' essere una porta logica, un transitor o un componente che sia in grado di fare questa operazione. Senza voler sminuire il lavoro di progettazione che c'e' dietro molti circuiti piu' o meno complessi, in elettronica digitale le cose sono "abbastanza" semplici.

La tecnica del pul-up o pul-down la usi per avere la certezza dello stato logico di una linea. In questo modo rinforzi l'immunita' ai segnali spuri e puoi permetterti linee di collegamento piu' lunghe. Non e' un caso che lo abbiano integrato direttamente nel micro.

Ogni circuito e' a se'. Non esiste la soluzione ottimale che funziona per tutto. Probabilmente il tuo encoder ha delle uscite progettate per funzionare con il pull-up. Oltre ai dati che trovi in internet, leggi i dati del datasheet dell'encoder. A volte ci sono dei circuiti di esempio.

La comodita' di avere i pull-up interni a Arduino ti permette di risparmiare sui costi di realizzazione (due rsistenze in meno) e ti semplifica la vita nel creare le basette (oltre a consentirti minori ingombri).

N.B. non conosco Arduino ma per esperienza ti posso dire che gli schemi e/o esempi che trovi in internet sono spesso pieni di errori. A volte e' l'autore che commette un vero e proprio errore di progettazione elettronica. A volte sono sviste nello scrivere. Altre volte l'errore non viene corretto anche se segnalato da altri utenti. E' sempre meglio controllare e capire bene los chema prima di iniziare a comperare componenti e a impazzire nel tentativo di capire perche' un circuito non funziona (pensando di aver commesso chissa' quale errore quando invece non dipende da noi!).

Ciao :-)

Mauro
Amat victoria curam

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da walgri » venerdì 14 ottobre 2011, 11:42

Grazie !

Non ero sicuro che fosse lo schema corretto. Avere due segnali alti sull'ingresso mi sembra(va) controinuitivo. E infine non ero sicuro che questo circuito evitasse realmente i disturbi, perchè magari durante le prove non ve ne erano.

Mi ha aiutato nel ragionamento pensare che se Arduino ha i pullup interni, allora il segnale esterno non può che essere in parallelo. Un altro passettino fatto.

Grazie Mauro !
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

billielliot
Senior
Senior
Messaggi: 1748
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da billielliot » venerdì 14 ottobre 2011, 14:30

Ciao walgri,

sono convinto che tu abbia capito ma aggiungo una piccola nota a quanto hai scritto.

Mettere le resitenze di pull-up non significa creare una situazione dove ci sono due segnali in parallelo (encoder+pull_up).

In effetti l'encoder non emette nessun segnale dai pin A e/o B (quindi non fornisce 5 volt in uscita. Al massimo li cortocircuita a massa con il famoso "interruttore" che usano per meglio far comprendere questo concetto).

Ovviamente questo dettaglio lo puoi scoprire solo leggendo il datasheet dell'encoder.

Ciao :-)

Mauro
Amat victoria curam

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da walgri » venerdì 14 ottobre 2011, 15:46

Grazie ancora Mauro,

in realtà  di questo specifico encoder non trovo i datasheet, è un HP/Agilent HP9874 recuperato da una Deskjet500 degli anni '90 e ancora attaccato al suo motore. Ora cercherò il datasheet di un altro encoder ottico e cerco di impare qualcosa da lì.

Grazie per l'aiuto !
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

billielliot
Senior
Senior
Messaggi: 1748
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da billielliot » venerdì 14 ottobre 2011, 16:01

Ciao walgri,

per caso e' questo: encoder HP9874

Ciao :-)

Mauro
Amat victoria curam

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da walgri » venerdì 14 ottobre 2011, 19:02

Ciao Mauro,

grazie per il link. Il mio encoder è simile, ma non esattamente quello. Nel datasheet che mi hai linkato vedo che quell'encoder ha già  le resistenze di pull-up, che potrebbe spiegare molte cose. Ora provo a leggerlo attentamente e a documentarmi su come l'encoder può essere costruito.

Grazie
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da walgri » sabato 15 ottobre 2011, 2:31

Allego lo schema di un fotointerruttore Honeywell HOA2005, nel cui datasheet ho trovato lo schema elettrico e che mi pare che mostri quello di cui si parla. Le frecce rosse le ho aggiunte io, per il resto spero di averlo ricopiato senza errori.
SchemaelettricoHoneywellHOA2005.jpg
La resistenza A ai miei occhi ha tutta l'aria di essere il pull-up.
Se a questo punto collegassi Vo ad un pin di input in cui è attivata la resistenza di pull-up interna, non ho in realtà  due tensioni alte collegate allo stesso pin ? Scusa(te) se insisto con questo concetto, è che temo di non aver capito.

Il transistor NPN (giusto ?) manda a massa Vo e il ramo che contiene la resistenza A quando almeno uno degli ingressi del gate D è diverso dagli altri. In questo modo manda a massa anche la tensione "di pull-up" interna all'Arduino, o mi sbaglio ?

Sto tralasciando (per il momento) di approfondire il funzionamento dell'amplificatore e l'andamento delle tensioni che guidano l'output di D.

Nel frattempo: notizie del diodo B ? Ricircolo ?

Grazie per l'interessamento al caso :D Ciao !
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

billielliot
Senior
Senior
Messaggi: 1748
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da billielliot » sabato 15 ottobre 2011, 15:08

Ciao walgri,

lo schema rende bene l'idea. Dove tu hai messo le frecce rosse c'e' il disco con le fessure. Ogni volta che una fessura permette il passaggio della luce (dal diodo al fotodiodo), ottieni un segnale in uscita.

La resistenza "A" e' usata come pull-up.

Il transistor e' usato come un interruttore. Se lo attivi cortocircuiti a massa la linea (A o B). Il diodo ricircola e se non ricircola...non fa male metterlo. A parte le battute, non saprei spiegarti nel dettaglio perche' lo hanno inserito (per evitare inversioni di polarita? Per scaricare velocemente eventuali capacita' messe in parallelo sulle linee A o B?).

"D" e' unporta logica con inegrato un Trigger di Schmitt ed e' usato per pulire e squadrare il segnale ricevuto dal fotodiodo (Wiki).

Ora un piccolo dettaglio. Dall'inizio del post immagini la possibilita' che esistano due segnali "paralleli" sullo stesso filo.

Questa situazione non e' possibile.

Se metti due (o piu') resistenze di pull-up, ottieni solo una ridondanza. Il segnale alto e' uno solo e sara' sostenuto da entrambe le resistenze contemporaneamente. Quando il transistor andra' in conduzione, la tensione crollera' a zero anche se ci fossero 2, 3 o 10 resistenze in parallelo.

Spero di avere reso l'idea.

Ciao :-)

Mauro
Amat victoria curam

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Lettura di un encoder rotativo e resistense pull down

Messaggio da walgri » sabato 15 ottobre 2011, 16:00

Mauro, si a tutto !! Grazie !

In effetti non era chiaro dai miei interventi che anche io consideravo una ridondanza il doppio (triplo, se oltre ad attivare quella dell'Arduino ci metto pure il mio, come facevo erroneamente) pull-up. E non avevo neanche scritto chiaramente che, a prescindere dal numero dei pull-up, il microprocessore ovviamente legge un solo segnale, la tensione al pin, a prescindere da quelo che ci sta a monte.

Mi vien solo da pensare che una tale ridondanza potrebbe essere utile, forse in casi estremi, in cui il segnale dell'encoder venisse interrotto da una recisione del sul cavo e non si voglia lasciare l'ingresso flottante.

Alla fine ce n'è voluto, ma adesso appare evidente quanto sia stato insensato mettere i pull-down a valle di un fotointerruttore come questo (che all'atto pratico sembra del tutto simile all'HP9874 che ho sottomano).

Stavo immaginando un comportamento completamente diverso del fotointerruttore, come mi hai fatto notare tu ormai molti interventi fa :oops:

Che bella lezione ! Grazie infinite !
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Rispondi

Torna a “Elettronica”