Camillo80 Inserito: 22 giugno 2016 Segnala Inserito: 22 giugno 2016 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
Livio Orsini Inserita: 22 giugno 2016 Segnala Inserita: 22 giugno 2016 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.
Camillo80 Inserita: 22 giugno 2016 Autore Segnala Inserita: 22 giugno 2016 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
Livio Orsini Inserita: 22 giugno 2016 Segnala Inserita: 22 giugno 2016 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.
Camillo80 Inserita: 22 giugno 2016 Autore Segnala Inserita: 22 giugno 2016 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
Livio Orsini Inserita: 23 giugno 2016 Segnala Inserita: 23 giugno 2016 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
Camillo80 Inserita: 23 giugno 2016 Autore Segnala Inserita: 23 giugno 2016 Cosa intendi per lettura "diretta" ? (rispetto a quale alternativa ?)
Livio Orsini Inserita: 24 giugno 2016 Segnala Inserita: 24 giugno 2016 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
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora