Lettura encoder incrementale con uC...

Jan 21, 2005 12 Replies

Dovendo leggere un encoder con un microcontrollore famiglia 8051, collegherei una delle 2 fasi al piedino di interrupt esterno del uC e nella routine di interrupt leggerei lo stato dell'altra fase (collegata a un pin di ingresso del uC) stabilendo così la direzione di rotazione. Ci son metodi più efficienti? L'unico alternativo che conosco sarebbe leggere di continuo lo stato delle 2 fasi ma lo scarto in partenza.


Mandi e grasie.


Il giorno Fri, 21 Jan 2005 17:19:38 GMT, "Roby P.I. ®" ha scritto:

Di solito si fa così, puoi aggiungere un latch collegato alla fase1 che ti 'congeli' la fase 2 fino alla lettura. Basta un Flip-Flop collegato all'interrupt. Oltre una certa velocità le onde diventano trapezoidali e l'8051 non è certo un fulmine, quindi rischi degli errori se non leggi bene la fase.

ciao Stefano

io di solito faccio un demodulatore di quadratura esterno con mi pare 4 flip flop (ormai si fa con le logiche programmabili) cosi' ho un clock ed una direzione. Con il clock entro sul timer

-- =============================================================== Alberto Rubinelli - A2 SISTEMI Opera 7.54->news.individual.net Via Costantino Perazzi 22 - 28100 NOVARA - ITALY Tel 0321 640149 Fax 0321 391769 BBS 0321 392320 Mail: snipped-for-privacy@retrocomputing.net ICQ : 49872318 Visita il mio museo di computers:

formatting link

--------------------------------------------------------------- Per favore, non scrivetemi in html, testo ascii a 7 bit Non rispondo a chi mi scrive con indirizzo di reply alterato ===============================================================

Il giorno Fri, 21 Jan 2005 19:00:52 +0100, "Alberto Rubinelli" ha scritto:

Più sofisticato, indubbiamente.

Io con l'Atmel cambio il fronte dell'Interrupt e leggo i due fronti, aumentando la risoluzione. (uso due Flip-Flop e un inverter). Provato fino a 1000g/m con un 1000 impulsi/giro.

Perchè sul timer?

Usi un timer UP/DOWN ?

ciao Stefano

utilizzo anche io una tecnica simile, ma fatta con una cpld, su un controllo assi. in pratica posso avere risoluzioni 1x 2x e 4x contando i fronti.

no, entro sull'ingresso di clock del timer interno del controllore, cosi' mi alleggerisce il software.

di solito poi metto lo zero dell'encoder su un interrupt Ciao.Alberto.

=============================================================== Alberto Rubinelli - A2 SISTEMI Opera 7.54->news.individual.net Via Costantino Perazzi 22 - 28100 NOVARA - ITALY Tel 0321 640149 Fax 0321 391769 BBS 0321 392320 Mail: alberto@retrocomputing.net ICQ : 49872318 Visita il mio museo di computers: http://www.oldcomputers.it --------------------------------------------------------------- Per favore, non scrivetemi in html, testo ascii a 7 bit Non rispondo a chi mi scrive con indirizzo di reply alterato ===============================================================

Approfitto di questo thread per richiedere qualche suggerimento riguardo quanto segue:

ho recuperato un doppio pulsante NA tipo "commutatore rotante" senza fine, che cerco di descrivere: tre pin, il centrale è il comune, i due laterali (chiamiamoli A e B) sono contatti Normalmente Aperti.

Se giro in senso orario si chiude per un istante prima A e poi (sempre per un istante) B

A ----- ----- ----- - -

B ------ ----- ---- - -

--------------------------------> tempo

Se giro in senso anti-orario si chiude per un istante prima B e poi (sempre per un istante) A

A ----- ----- ----- - -

B ---- ----- ---- - -

--------------------------------> tempo

Quindi in senso orario ho una serie di "impulsi" (chiusura dei contatti) A-B A-B A-B .... mentre in senso anti-orario ho una serie di "impulsi" B-A B-A B-A ....

Avevo chiesto se esistesse un IC apposito (encoder?) per utilizzare tale "pulsante" al posto dei due classici pulsanti separati UP DOWN, mi hanno suggerito LS7183, ma a parte la reperibilità, non mi pare faccia al mio caso, in quanto i miei impulsi A e B sono strettamente in relazione tra loro.

Forse con un PIC16F84, ma come faccio a gestisre le due condizioni: A-B A-B A-B ... funzione 1 (up) B-A B-A B-A ... funzione 2 (down)

Col Pic non sono esperto ma sono in grado di controllare entrate ed uscite per eventi semplici (pressione di tasti, etc...)

Se potete suggerirmi qualcosa da cui partire...

Grazie!

Bye! Scossa per rispondere togli LaCorrente e-mail: maLaCorrente.manfredi@tiscali.it

Approfitto di questo thread per richiedere qualche

suggerimento riguardo quanto segue:

ho recuperato un doppio pulsante NA tipo "commutatore rotante" senza fine, che cerco di descrivere: tre pin, il centrale è il comune, i due laterali (chiamiamoli A e B) sono contatti Normalmente Aperti.

Se giro in senso orario si chiude per un istante prima A e poi (sempre per un istante) B

A ----- ----- ----- - -

B ------ ----- ---- - -

--------------------------------> tempo

Se giro in senso anti-orario si chiude per un istante prima B e poi (sempre per un istante) A

A ----- ----- ----- - -

B ---- ----- ---- - -

--------------------------------> tempo

Quindi in senso orario ho una serie di "impulsi" (chiusura dei contatti) A-B A-B A-B .... mentre in senso anti-orario ho una serie di "impulsi" B-A B-A B-A ....

Avevo chiesto se esistesse un IC apposito (encoder?) per utilizzare tale "pulsante" al posto

dei due classici pulsanti separati UP DOWN, mi hanno suggerito LS7183, ma a parte la reperibilità, non mi pare faccia al mio caso, in quanto i miei impulsi A e B sono strettamente in relazione tra loro.

Forse con un PIC16F84, ma come faccio a gestisre le due condizioni: A-B A-B A-B ... funzione 1 (up) B-A B-A B-A ... funzione 2 (down)

Col Pic non sono esperto ma sono in grado di controllare entrate ed uscite per eventi semplici (pressione di tasti, etc...)

Se potete suggerirmi qualcosa da cui partire...

Grazie!

Bye! Scossa per rispondere togli LaCorrente e-mail: maLaCorrente.manfredi@tiscali.it

"SB" ha scritto nel messaggio news: snipped-for-privacy@4ax.com...

E' che mi secca un po' interrompere di continuo il uC da quello che sta facendo per leggere l'encoder. Ho visto che ci sono degli integrati dedicati tipo il HCTL2016 ma con quelli bisogna 'sprecare' un bel po' di piedini I/O per la lettura del contatore dei passi. Quasi quasi provo a fare una cosa simile con un PIC e questo lo collego via I2C al uC principale, il PIC tiene conto dei passi tramite un contatore di adeguata capacità e se serve la posizione al uC la si legge tramite I2C. L'unica rogna è che bisogna implementare uno slave I2C sul PIC ed è più complesso che fare un master, vediamo cosa trovo, magari ci son già PIC con 'sta funzione implementata via hardware... Però poi se devo aggiungere altri ancoder basta collegare tutto sul bus a 2 fili.

A dire la verità è un DS89C450 della dallas cloccato a 12MHz circa, un 8051 più arzillo insomma. :) L'encoder ha le uscite differenziali dal canto suo, uso un SN75175 per convertirli in segnali logici normali. Dovrebbero essere più squadrate di quelle che intendi tu, sempre che tu parli di encoder che hanno in uscita l'uscita del fotodiodo interno.

"Alberto Rubinelli" ha scritto nel messaggio news:opskysbqgo053poy@pca104alberto...

Eh ma non ho logiche programmabili a disposizione.

"Alberto Rubinelli" ha scritto nel messaggio news:opskzvb6hs053poy@pca104alberto...

Ma è configurato come contatore con clock esterno?

Il giorno Sat, 22 Jan 2005 13:48:32 GMT, "Roby P.I. ®" ha scritto:

E' una buona soluzione, io ne ho usata una simile per acquisire e controlare degli incrementali ciascuno con un Atmel AT90S1200, che è velocissimo, funziona in INT e lavora autonomamente.

Io l'ho messo su un bus a 8 bits (se hai un display ne hai uno per forza) e viene visto come una porta di I/O dal µP principale, mi fa il conteggio e il controllo del raggiungimento di una quota che gli carico. In questo modo alleggerisco di molto il lavoro della CPU principale, il 1200 fa quasi da solo il lavoro che faceva un vecchia scheda con una ventina di integrati TTL.

Questa è una soluzione professionale, se hai input differenziali è senz'altro meglio, ma per andare veloce senza errori è meglio usare i flip flop in quadratura. E considera che un Atmel fa 16Mips, molto più di un pic, qiundi serviranno a maggior ragione.

ciao Stefano

Il giorno Sat, 22 Jan 2005 09:03:32 +0100, "Alberto Rubinelli" ha scritto:

Si, però non capisco come fai in questo modo a gestire l' UP/DOWN.

Lo puoi fare con ecoder monodirezionali, con qualche rischio ad esempio in caso di vibrazioni a macchina ferma. (parlo per esperienza purtroppo)

ciao Stefano

Il giorno Sat, 22 Jan 2005 14:40:22 GMT, SB ha scritto:

Mi correggo da solo prima che qualcuno mi riprenda. ;-)

L' AT90S1200 è considerato maturo, per nuovi progetti consigliano di usare l' ATtiny2313 che è compatibile, ha qualcosa in più e fa 20Mips @ 20Mhz.

ciao Stefano

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required