Jump to content
PLC Forum

Camillo80

Pic e encoder

Recommended Posts

Camillo80

Salve a tutti,

 

probabilmente si tratta di un argomento "trito e ri-trito" ma sono decisamente alle prime esperienze percui vorrei sottoporre un quesito su come rilevare gli impusi provenienti da un encoder tramite pic.

 

Ho un encoder ottico rotativo che genera 2 treni di impulsi ad onda quadra sfasati di 90° per poter individuare il senso di marcia.

 

Vorrei poter sfruttare il pic (18F4550 ma non è vincolante) per poter leggere su display LCD H44780 il numero di impulsi in incremento e decremento.

 

Ora , da alcune ricerche in rete e parlando con un amico ho visto che i metodi sono numerosi. Qualcuno usa gli interrupts , altri il modulo timer in configurazione capture mentre io avrei semplicemente incrementato una variabile del tipo "impulsi++".

 

Devo dire che la frequenza del segnale è relativamente modesta e si aggira su 1Khz.

 

Io programmo , da poco, in C percui se qualcuno volesse fare qualche esempio ...... prego di non usare l'assembler o altri linguaggi perchè non li conosco.

 

Grazie per l'aiuto.

 

Camillo

Link to post
Share on other sites

Livio Orsini

Usa 2 ingressi ad interrupt perchè oltre al conteggio degli impulsi devi discriminare il senso, quindi devi sapere esattamente  quale fronte è arrivato per primo.

Non solo devi anche realizzare un minimo di filtraggio per evitare di contare come impulsi un'oscillazione attorno ad un fronte.

 

Cerco di chiarirti con un esempio. Con l'interrupt del canale A setti un flag, con l'interrupt del canale B verifichi se il flag è alto incrementi il conteggio.

 

L'ideale sarebbe se il micro che vai ad impiegare disponesse di 2 ingressi di interrupt sensibili al fronte e non al livello.

Link to post
Share on other sites
Camillo80

Buongiorno Livio,

 

non ho mai usato gli interrupt nè i flag. Proverò a fare qualcosa.

 

Riguardo il filtraggio, ti riferisci ad un filtraggio pre-pic o software ?

Ti posso confermare che dall'oscilloscopio ho potuto notare che in punti prossimi al fronte di salita possono verificarsi "momenti di incertezza" con l'invio di impulsi indesiderati.

 

Grazie

Camillo

Link to post
Share on other sites
Livio Orsini
Quote

che in punti prossimi al fronte di salita possono verificarsi "momenti di incertezza" con l'invio di impulsi indesiderati.

 

Se fosse veramente così, quell'encoder sarebbe da buttare. Presumo che tu lo stia ruotando a mano lentamente e quelle "incertezze" siano leggere oscillazioni dell'albero.

Quale è la risoluzione dell'encoder, ovvero quanti impulsi per giro fa?

Il filtraggio software, che è quello ho descritto in modo molto sommario, serve proprio per evitare conteggi impropri dovuti a queste oscillazioni.

 

 

Link to post
Share on other sites
Camillo80

Si, lo giro a mano....

4096 impulsi giro

 

Mi dai qualche dritta su come impostare il filtraggio ? non vi è il rischio di pregiudicare il conteggio a velocità alte ?

 

Camillo

Link to post
Share on other sites
Livio Orsini

Con 4096 impulsi giro ti sconsiglio vivamente la lettura diretta degli impulsi. Dovresti usare un contatore esterno in Hw, oppure fare un il discriminatore esterno del senso di rotazione, inviare gli impulsi avanti ad un ingresso esterno di un contatore-timer del pic e gli impulsi indietro a ad un altro ingresso.

Oppure, molto meglio farti un contatore ap/down esterno.

Tieni conto che con 10 giri al secondo il tuo encoder genera una frequenza di 40960 Hz e 10 giri al secondondo sono solo 600 rpm

Link to post
Share on other sites
Camillo80

Cosa intendi per lettura "diretta" ? (rispetto a quale alternativa ?)

Link to post
Share on other sites
Livio Orsini

Lettura diretta: te l'ho spiegata nel mio ultimo messaggio. L'alternativa è la lettura Sw che vorresti fare tu contando gli impulsi su di un ingresso o tramite interrupt.

Già a 10 giri al secondo il periodo di un impulso è di soli 24.4µs; essendo 2 gli impulsi distanziati di soli 6µs circa, dovresti scriverti una funzione super ottimizzata per non perdere gli impulsi, inoltre il micro non avrebbe risorse per eseguire altri programmi

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...