Encoder
incrementale
Introduzione
Salve.
Era da tempo che volevo provare a realizzare un “encoder incrementale” da usare
nel mio generatore di segnali, per incrementare o decrementare la frequenza
generata. In commercio se ne trovano, anche se con tanta difficoltà ed a prezzi
un tantino elevati per un hobbista. Da qui la decisione di tentare di
realizzarne uno che svolgesse la funzione richiesta.
Questo tipo di encoder e chiamato anche “encoder relativo” poiché permette di
conoscere solo se la rotazione del suo asse, sta avvenendo in senso orario od
antiorario e di conseguenza incrementare o decrementare un contatore, un
generatore etc.
Per completezza aggiungo soltanto che esiste un dispositivo simile chiamato
“encoder assoluto”, il quale come il precedente permette di conoscere il verso
di rotazione ed in più anche la posizione angolare assunta dal suo asse in quel
preciso istante. Insieme fanno parte della grande famiglia dei trasduttori di
posizione.
Per ulteriori approfondimenti in merito, su internet troverete tutto e di più.
Realizzazione
L’encoder in questione è stato realizzato adoperando quello che un pò tutti
abbiamo nei nostri cassetti. Dalle foto che seguono è possibile riconoscere un
potenziometro dal cui interno o tolto tutto, lasciando solo l’alberino libero di
ruotare su 360°; sono visibili inoltre due finecorsa ottici che ho recuperato da
una vecchia stampante ed un dischetto di plastica dentato che ho ottenuto
ritagliando il coperchio di una vaschetta in plastica.
Anche se il funzionamento dell’encoder è in ogni caso assicurato, per la
realizzazione del dischetto è richiesta un po’ d’attenzione e di pazienza,
poiché dalla precisione con cui lo realizzerete, dipenderà anche la precisione
dell’encoder. In questo caso infatti, ci basta solo sapere se la rotazione è
oraria od antioraria e non di quanti gradi e stato ruotato l’asse dell’encoder.
Per realizzare il dischetto ho usato un compasso con un’apertura di 25mm circa,
col quale ho tracciato la circonferenza che poi ho ritagliato. Sul dischetto
così ottenuto ho tracciato un’altra circonferenza con raggio inferiore di circa
10mm della precedente. Per finire con l’aiuto di un goniometro ho diviso in 18
spicchi il disco così ottenuto, ed ho ritagliato dallo stesso le parti dentate.
Nelle figure che seguono sono rappresentate le varie fasi del lavoro.
|
|
|
|
Le misure che vi ho suggerito sono solo indicative, potrete aumentarle o
diminuirle in funzione della vostra abilità manuale. Stesso discorso vale anche
per il numero dei denti del disco, da cui dipenderà il numero di incrementi o
decrementi per ogni rotazione completa dell’asse, in questo caso come vedremo
più avanti 18.
Dovrete adesso, con una piccolissima vite passante per il centro del disco,
avvitare (od incollare) il disco al potenziometro e poi saldare il potenziometro
alla basetta che dovrà avere la forma visibile in figura.
|
|
Quindi con della colla a caldo o con altri sistemi a vostra scelta, fisserete i due finecorsa sulla basetta, in modo che i denti del disco in fase di rotazione vi passino attraverso, avendo cura di fissarli ad una distanza angolare, tale che, quando un dente occulta completamente uno dei due finecorsa, l’altro finecorsa sia parzialmente occultato da un altro dente esattamente a meta. Anche in questo caso la posizione assunta dai due finecorsa non comprometterà il corretto funzionamento dell’encoder. Essi, possono risultare diametralmente opposti, uno accanto all’altro, a 90° o come volete; purché sia rispettata la condizione descritta prima, come evidenziato nella foto accanto.
|
I due finecorsa da me usati, erano già corredati di resistenze di limitazione, se così non fosse anche nel vostro caso, lo schema da utilizzare è il seguente.
|
|
Funzionamento Quando alimenterete l’encoder e ruoterete il suo asse, in uscita saranno presenti due segnali ad onda quadra sfasati tra loro di 90° come rappresentato in figura. Per comprenderne il funzionamento dovremo leggere tali segnali da sinistra verso destra se la rotazione è oraria, da destra verso sinistra se la rotazione è antioraria. Nel primo caso ci ritroveremo i fronti di salita dell’onda a sinistra del segnale “A”, nel secondo caso ce li ritroveremo a destra, cosi come evidenziato dai tratti in rosso.
|
Per
interpretare tali segnali occorre un microcontrollore con due dei suoi pin
abilitati come input, uno dei quali programmato per essere sensibile ai fronti
di salita dell’onda “A”. Tutte le volte che un fronte di salita si presenterà su
tale ingresso, scatterà una routin di interrupt che andrà a leggere lo stato
dell’onda “B” sull’altro ingresso. Se lo stato dell’onda “B” è alto, allora
vuol dire che la rotazione in atto è oraria, se invece è basso, allora vuol dire
che la rotazione in atto è antioraria, così come si evince anche dai due
grafici.
Lo stesso principio di funzionamento fin’ora descritto, è applicabile anche ai
fronti di discesa dell’onda “A”, ottenendo per ogni rotazione dell’asse, degli
incrementi o decrementi pari al doppio del numero dei denti del disco. Quindi,
anche al presentarsi di un fronte di discesa all'ingresso “A”, la stessa routin
di prima andrà a leggere lo stato dell’onda “B” sull’altro ingresso. In questo
caso, se lo stato dell’onda “B” è basso, allora vuol dire che la rotazione in
atto è oraria, se invece è alto, allora vuol dire che la rotazione in atto è
antioraria, così come si evince dai due grafici di prima.
A questo punto il software di gestione dell’encoder deciderà se incrementare o
decrementare il contatore, il generatore di frequenza o altro. Se a montaggio
ultimato, ruotando in senso orario l’asse dell’encoder, il contatore sarà
decrementato anziché incrementato, ovviamente dovrete invertire i due fili che
veicolano i due segnali “A” e “B”.
Il software che vi propongo è solo dimostrativo e potrete
scaricarlo QUI,
se lo desiderate, potrete inserirlo in altri progetti più complessi. Non credo
sia necessario descriverne le varie istruzioni, ma se richiesto sarò lieto di
potervi dare delle delucidazioni o chiarimenti in merito.
Il microcontrollore usato è un pic 16f84, inserito nello schema elettrico
visibile nella figura che segue, lo stesso che ho usato per la realizzazione del
metro ad ultrasuoni. Il solo compito che svolge come abbiamo visto, consiste
solo nel leggere lo stato dell’onda “B”, quando un fronte di salita o di discesa
si presenta sull’onda “A”; oltre naturalmente a pilotare il display lcd.
Con questo credo di aver detto tutto e sperando anche di averlo fatto con
sufficiente chiarezza, auguro a tutti, buon lavoro e buon divertimento.
Saluti.
Francesco M.
IT9DPX #135