Vai al contenuto
PLC Forum


Pic e encoder


Camillo80

Messaggi consigliati

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 al commento
Condividi su altri siti


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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...