Modulo rotary encoder tipo KY-040 comprato su un sito di e-commerce cinese
Fig. 1/1 Modulo rotary encoder tipo KY-040 comprato su un sito di e-commerce cinese

INTRODUZIONE

Il trasduttore di posizione angolare, in ingegneria elettronica detto anche encoder, è un dispositivo elettromeccanico che converte la posizione angolare del suo asse rotante in brevi impulsi elettrici che necessitano di essere elaborati da un circuito di analisi del segnale sotto forma di segnali numerici digitali. Mentre negli encoder assoluti i segnali elettrici d'uscita codificano l'esatta posizione istantanea del rotore rispetto al corpo, cioè forniscono segnali elettrici diversi per ogni posizione angolare rispetto a un riferimento (detto home) in modo che sia sempre possibile determinare questa posizione leggendo i segnali attraverso appositi circuiti, negli encoder relativi i segnali elettrici d'uscita sono proporzionali allo spostamento del rotore rispetto al corpo [1]; da essi, semplici circuiti possono leggere e visualizzare la velocità e l'accelerazione dell'asse in esame, ma non la posizione istantanea. Le Fig. 1 e 2 mostrano esempi di rotary encoder meccanici montati su schede elettroniche. In questo articolo e negli altri articoli di questa serie, capiremo insieme il funzionamento e l'utilizzo dei rotary encoder relativi, in particolare nelle applicazioni a microcontrollore, con particolare riguardo e misurazioni relative al problema del rimbalzo dei contatti o "bouncing". Ho aggiunto il suffisso /1 a tutte le figure della parte 1 del tutorial; le figure della parte 2 avranno suffisso /2 e quelle della parte 3... va be', è chiaro!

A COSA SERVE IL ROTARY ENCODER

Tra i suoi diversi utilizzi, l'encoder rotativo, o rotary encoder, è un componente importantissimo per i pannelli di comando dei circuiti elettronici, in particolare per l'inserimento dei dati da parte dell'utente. Per questo scopo, normalmente è già interessante la sola informazione sul fatto che l'utente stia ruotando l'albero in una direzione o nell'altra, in maniera che il sistema di elaborazione a valle possa corrispondentemente incrementare o decrementare il valore di una variabile. Finché l'utente fa ruotare l'albero nella stessa direzione, si continuerà a variare il parametro. Chiaramente, non è interessante la posizione assoluta dell'albero, ma solo il fatto che stia ruotando.

Rotary encoder PEC11R-4220F-S0024 che ho montato su scheda tipo KY-040 in sostituzione di quello originale
Fig. 2/1 Rotary encoder PEC11R-4220F-S0024 che ho montato su scheda tipo KY-040 in sostituzione di quello originale

Questo aspetto è vantaggioso in quanto è possibile utilizzare lo stesso encoder per variare il valore di più variabili, decidendo di volta in volta su quale variabile agire. I rotary encoder sono solitamente disponibili anche nella versione con pulsante: questo pulsante è collegato meccanicamente all'albero cosicché, premendo l'albero, si aziona il pulsante. In questo modo si dispone di uno strumento che può essere utilizzato, per esempio, per selezionare il parametro da variare e/o per confermarne l'inserimento del nuovo valore nel sistema di elaborazione. Ovviamente, sarà necessario anche un dispositivo di uscita, come un display che presenti all'operatore l'effetto dell'azione di rotazione, cioè il nuovo valore del parametro che si sta modificando. Questo è il modo in cui molti utenti di Arduino usano il rotary encoder.

L'encoder rotativo, per lo scopo di cui stiamo parlando (input dei parametri), sostituisce spesso uno o più potenziometri, rispetto ai quali offre alcuni vantaggi:

- la mancanza del fine corsa, e quindi la possibilità di ruotare infinite volte in senso orario o antiorario senza arrestarsi (in realtà, dopo qualche decina di migliaia di giri, prima o poi si romperà, ma direi che è una durata più che ragionevole) ci permette di incrementare o decrementare il valore del parametro con la risoluzione che vogliamo e fino al valore che vogliamo, mentre con un potenziometro o perfino con un trimmer multi-giri, saremmo soggetti a dei limiti di rotazione

- utilizzare le informazioni sulla rotazione relativa, cioè sulla direzione di rotazione e sul solo fatto che l'albero stia ruotando o no, ignorando la posizione assoluta dell'albero, consente come accennavo poc'anzi di controllare, a scelta, il valore di molti parametri; con il potenziometro non è solitamente possibile per via dei fine corsa anche se il potenziometro, grazie a una tacca sulla manopola, consentirebbe a colpo d'occhio di stimare la grandezza della variabile a seconda della posizione della tacca rispetto ai due fine corsa, mentre l'encoder ha sempre bisogno di un ulteriori dispositivi di presentazione dati

- gli encoder rotativi di buona qualità hanno una notevole robustezza meccanica e affidabilità nella generazione degli impulsi elettrici, che sono "quasi" segnali digitali (chiariremo in seguito il perché) mentre i potenziometri sono molto sensibili alla presenza di sporcizia (p.es polvere) tra i contatti e all'usura del materiale resistivo e del cursore, che ne rendono instabile il valore di resistenza con effetti deleteri sui circuiti controllati

PIEDINATURA

Gli encoder rotativi possono avere disparate distribuzioni dei terminali. Io vi mostro una delle più comuni piedinature, in caso dovreste imbattervi in un dispositivo con terminali posizionati diversamente, o diversa denominazione dei terminali, dopo aver letto questo articolo non credo che avrete difficoltà a collegarlo correttamente. In Fig. 3 ho messo la fotografia di due rotary encoder. Ora vi confondo un po' le idee: quello sulla destra, marca DHV, l'ho smontato dalla scheda HW-040. Quello a sinistra, montato sulla scheda HW-040, è un Bourns che ho comprato da un distributore europeo di componentistica e ho montato sulla scheda. In altre parole, non crediate di trovarvi un componente Bourns su una scheda HW-040...

Pinout rotary encoder
Fig. 3/1 Pinout rotary encoder

Il terminale che ho indicato con C è il "Comune", quindi il terminale in basso e quello in alto, sono collegati insieme. A è una delle due uscite del dispositivo e B è l'altra. D è l'uscita collegata al pulsante, che non è presente in tutti i rotary encoder. Questa nomenclatura delle uscite non è standard, quindi le uscite potranno essere indicate diversamente. Per es. il terminale A potrebbe essere chiamato anche S1 o U1, semplicemente 1, o potrà avere qualche altro nome di fantasia. Parimenti, il terminale B, potrebbe essere identificato come S2, U2, 2, etc. Stesso discorso per il terminale D. Nel modulo sulla sinistra della fotografia, il terminale A è collegato all'uscita CLK (clock), il terminale B all'uscita DT (data), il terminale D a SW (switch) e C a GND (ground). Vedremo fra poco come il terminale VCC (tensione di alimentazione) della scheda è collegato.

PRINCIPIO DI FUNZIONAMENTO ELETTRO-MECCANICO

Ho pensato di fare l'"autopsia" di un rotary encoder, che però non era "morto" ma perfettamente funzionante quindi, forse, dovremmo parlare di "vivisezione"… Il dispositivo l'ho smontato da un modulo HW-040, o qualcosa del genere, comprato in Cina per pochi centesimi. Un rotary encoder relativo meccanico (Fig. 4, sulla sinistra) si compone principalmente di:

  • Fig. 4 a destra - un albero collegato a un rotore isolante di cui fa parte una ruota dentata metallica (vale a dire, conduttiva, visibile in dettaglio in Fig. 5) sulla quale strisciano dei contatti. Un contatto doppio, detto "comune", striscia sula parte della ruota metallica vicina al centro, perciò il contatto tra il comune e la ruota è permanente (in Fig. 6, è il contatto costituito dalle due lamelle sagomate più interne);
  • Fig. 4 in basso - due contatti doppi (quelli più esterni), strisciano in corrispondenza dei denti cosicché, durante il movimento della ruota, si troveranno collegati o scollegati dalla ruota, a seconda della posizione angolare istantanea (sono le due lamelle biforcute più esterne in Fig. 6);
  • Fig. 4 in basso - un contatto centrale nel caso in cui sia presente il pulsante opzionale.
Come è fatto un rotary encoder
Fig. 4/1 Anatomia di un rotary encoder

 In Fig. 5 si vede bene come è fatta la ruota dentata. La parte più interna della zona centrale in plastica nera, è collegata all'albero: non solo può ruotare solidalmente con la corona, ma può muoversi anche lungo l'asse, sebbene il movimento abbia un'estensione molto limitata.

Ruota dentata rotary encoder
Fig. 5/1 Ruota dentata di un rotary encoder economico

Trovo la Fig. 6 molto interessante perché mostra, sulla sinistra e sulla destra, le lamelle collegate ai terminali di uscita. Se cercate su internet, vi fanno tutti vedere che i due contatti sono vicinissimi uno all'altro, in questo caso reale ciò non è vero. Dal punto di vista del principio di funzionamento, comunque, non cambia nulla. Al centro si vede una lamina bombata che costituisce il contatto del pulsante collegato all'albero (terminale D, collegato all'uscita SW della scheda che stiamo usando).

Contatti del rotary encoder e lamella del pulsante
Fig. 6/1 Contatti del rotary encoder e lamella del pulsante

Cominciamo a parlare del pulsante. Come ho cercato di mostrare in Fig. 7, premendo al centro, la lamina scatta (e fa contatto con un'altra lamina retrostante, chiudendo il circuito del pulsante; smettendo di premere, la lamina torna in posizione di riposo, cioè torna ad essere bombata, aprendo il circuito. Non so se è chiaro che con la punta della matita sto premendo sulla lamina, si dovrebbe capire dal gioco di riflessi ma, se non si capisce, pazienza, l'importante è che abbiate capito bene il meccanismo. Nel normale funzionamento del dispositivo, sarà l'albero che, premuto dall'utente, spingerà sulla lamina bombata. Lo schema elettrico equivalente del pulsante l'ho disegnato in Fig. 8.

Azionamento del contatto del pulsante del rotary encoder
Fig. 7/1 Azionamento del contatto del pulsante dell'encoder rotativo
Schema circuito elettrico equivalente del solo pulsante di un rotary encoder

Fig. 8/1 Schema circuito elettrico equivalente del solo pulsante di un rotary encoder

Ora torniamo all'encoder e vediamo come sono disposti i contatti delle uscite sulla ruota dentata. Facciamo riferimento alla Fig. 9, identica alla Fig. 5 ma con qualche aggiunta: ho disegnato la circonferenza bianca intorno alla base dell'albero per aiutarmi a disegnare gli assi della corona, che sono quelli gialli. Il segmento rosso unisce un dente della ruota con quello diametralmente opposto. Viceversa, il segmento verde unisce il centro di due interspazi tra i denti, anch'essi diametralmente opposti. Direi che non ci sono dubbi sulla simmetria della ruota dentata rispetto al punto centrale. La corona è collegata al comune attraverso i contatti striscianti più interni (più verso il centro), quelli che appaiono separati dagli altri in Fig. 6. I due contatti doppi che si vedono sempre in Fig. 6 strisciano sulla ruota in corrispondenza dei denti. L'area in cui ciascun doppio contatto striscia sulla ruota, l'ho rappresentato con un cerchietto celeste in Fig. 9. Come vedete, i contatti sono posti su una linea parallela a un diametro della ruota (p. es. la linea bianca). Nella posizione fotografata, i due contatti toccano la plastica isolante. Quindi i due circuiti di uscita sono aperti. Se l'utente ruota l'albero in senso orario, il moto per noi che osserviamo dal retro del dispositivo, avviene in senso opposto: anti-orario. La lamella collegata all'uscita A sarà la prima a contattare un dente della ruota metallica, quindi il suo circuito sarà chiuso verso il comune. Il contatto B si troverà ancora in posizione elettricamente isolata. Man mano che la ruota gira, anche la lamella B contatterà un dente, quindi anche il circuito dell'uscita B sarà chiuso verso il comune. In questo momento entrambe le uscite sono collegate al comune. Dovrebbe essere già chiaro che questo sistema di contatti, da un punto di vista elettrico, equivalga a due interruttori con un terminale comune (Fig. 10). Inoltre, l'evoluzione che sto descrivendo dello stato (chiuso/aperto) dei due interruttori equivalenti è rappresentato in Fig. 11. Immaginando che la ruota continui a girare, Il contatto A striscerà fuori dalla zona metallica, aprendo l'uscita corrispondente, mentre B è ancora collegata al comune. Infine, anche il contatto B si troverà in una zona interdentale, quindi isolata, per cui il circuito di B è aperto. Dal punto di vista dello stato delle uscite, tutto è identico alla stato iniziale, però ora l'albero è in un'altra posizione angolare. Se si continua a far ruotare la corona, tutto si ripete nello stesso modo. Se si fa ruotare l'albero in verso contrario (anti-orario), la sequenza degli stati dei due interruttori A e B viene percorsa al contrario, ovvero il grafico di Fig. 11 viene percorso da destra verso sinistra. 

Esempio posizione contatti rotary encoder
Fig. 9/1 Esempio di possibile posizione dei contatti sulla ruota dentata di un rotary encoder
Schema circuito elettrico equivalente del rotary encoder
Fig. 10 Schema circuito elettrico equivalente del rotary encoder
Evoluzione nel tempo dello stato dei contatti per rotazione in senso orario dell'albero del rotary encoder
Fig. 11 Evoluzione nel tempo dello stato dei contatti per rotazione in senso orario dell'albero
Schema elettrico di base per l'utilizzo di un rotary encoder
Fig. 12/1 Schema elettrico di base per l'utilizzo di un rotary encoder

PRINCIPIO DI FUNZIONAMENTO ELETTRICO

A livello elettrico, abbiamo detto che i trasduttori di posizione angolare, inseriti in un circuito adatto, durante la rotazione dell'albero generano degli impulsi. Questo è vero solo se il dispositivo viene inserito in un circuito adatto. Dunque: in Fig. 12 ho disegnato nel riquadro verde, in basso, il circuito equivalente di un rotary encoder. La parte sulla destra della linea tratteggiata è presente solo nei dispositivi con il pulsante opzionale. Al di fuori del rettangolo verde, ho disegnato il circuito di base che ci permette di collegare il rotary encoder agli ingressi di un circuito logico, come un microcontrollore. Poiché i contatti dell'encoder si comportano come degli interruttori (SA e SB), è necessaria una sorgente di alimentazione (VCC) con tensione pari a quella che vogliono "vedere" i circuiti a valle, e delle resistenze di pull-up per portare a livello alto (cioè VCC, in assenza di carico) le uscite CLK, DT e, eventualmente, SW, quando gli interruttori sono aperti. Viceversa, quando gli interruttori si chiudono, le uscite corrispondenti saranno collegate al potenziale di riferimento (GND). Noi interpreteremo il livello di tensione di uscita alto come 1 (uno) logico e quello basso (GND) come 0 (zero) logico.

DIGRESSIONE: Ci tengo a dirvi che questa interpretazione è arbitraria (si potrebbe associare l'1 logico al livello basso e lo 0 al livello alto) e che anche il circuito potrebbe essere fatto in modi diversi; per esempio, invertendo i collegamenti di VCC e massa, si avrebbero livelli di tensione bassi quando gli interruttori sono aperti.

PRINCIPIO DI FUNZIONAMENTO LOGICO

Come abbiamo appena detto, a livello logico questi segnali sono interpretati come bit, cioè le uscite assumono valore 1 o 0 variando nel tempo in modo da indicare quello che istantaneamente sta succedendo all'albero (sta ruotando o no? In che direzione?); in altre parole, le uscite indicano lo stato del dispositivo. In che modo? Tralasciamo, per il momento, il comportamento del pulsante, che comunque è analogo a qualsiasi altro pulsante normalmente aperto e quindi è banale. Se interpretiamo un livello di tensione alto di un'uscita come 1 logico, e se supponiamo di partire da una posizione angolare in cui tutte e due le uscite sono alte (CLK = 1 e DT = 1), ruotando l'albero in senso orario di un angolo molto piccolo, le uscite assumeranno il valori CLK = 0 e DT = 1. Come ho rappresentato in Fig. 13 in cui sugli assi verticali ho riportato i valori logici delle uscite e sugli assi orizzontali il tempo (t), man mano che continueremo a far ruotare l'albero in senso orario, le uscite assumeranno i valori 00, poi 10 e infine torneranno al valore iniziale 11, anche se adesso la posizione angolare sarà ovviamente diversa da quella iniziale. Per maggiore chiarezza ho riportato la sequenza anche in Tab. 1.  Se continuiamo a far rotare l'albero, le uscite percorrono nuovamente la sequenza e così via. Se invece ruotiamo l'albero in senso anti-orario (counter-clock wise, abbreviato con CCW) sempre partendo dallo stato 11, la sequenza delle uscite viene percorsa al contrario, come rappresentato in Fig. 14 e in Tab. 2, cioè 10, 00, 01, 11 e così via, se continuiamo a variare la posizione angolare nella stessa direzione. Per inciso, una sequenza di combinazioni come queste in cui varia sempre un solo bit per volta, viene chiamata "Codice Gray". Inoltre, se le osservate bene, le forme d'onda delle due uscite sono identiche ma sono sfasate nel tempo di "mezzo" impulso. Nel gergo dei segnali, si dice che le due forme d'onda sono in relazione di "quadratura di fase" o, più semplicemente, che le due uscite sono in quadratura. Per questo, in inglese un rotary encoder relativo viene anche detto "quadrature encoder".

Rotary encoder: segnali di uscita per rotazione in senso orario (CW)
Fig. 13/1 Rotary encoder: segnali di uscita per rotazione in senso orario (CW)

Rotary encoder: segnali di uscita per rotazione in senso anti-orario (CCW)
Fig. 14/1 Rotary encoder: segnali di uscita per rotazione in senso anti-orario (CCW)

Notiamo subito che a un determinato stato di uscita, per esempio 01, possono corrispondere tante posizioni angolari diverse (tanti quanto sono gli "impulsi per rotazione" del dispositivo, per es. 16, o 20, o 24). Ovviamente, da una sola combinazione, non solo non posso determinare la posizione ma nemmeno il verso di rotazione o la velocità di rotazione:

- per riconoscere il senso di rotazione abbiamo bisogno almeno di due codici consecutivi; p. es. se i due codici fossero 00 e 01, riconosceremmo la rotazione oraria, se invece fossero 00 e 10, riconosceremmo la rotazione anti-oraria;

- per valutare la velocità di rotazione, avremmo bisogno di misurare il tempo di permanenza di ogni coppia di valori di uscita, o il tempo di ritorno della stessa coppia di valori, conoscendo a priori l'intervallo di rotazione che fa variare le uscite da un certo codice ad un altro.

Tab. 1/1 Sequenza valori logici di uscita per rotazione in senso orario (clockwise CW)

CLK

DT

1

1

0

1

0

0

1

0

1

1

 

Tab. 2/1 Sequenza valori logici di uscita per rotazione in senso anti-orario

CLK

DT

1

1

1

0

0

0

0

1

1

1

 

COMPORTAMENTO DEL CIRCUITO REALE

Le uscite del rotary encoder sono collegate come mostrato in Fig. 12; gli impulsi elettrici che esse forniscono, quando tutto funziona bene, sono rappresentati in Fig. 15 e Fig. 16. Molti encoder rotativi non hanno una rotazione "continua, "liscia", ma ruotano a scatti, cioè hanno delle posizioni angolari rese stabili dal dente di arresto ("detent"). Nel corso della transizione angolare da una posizione stabile a quella successiva viene percorsa tutta la sequenza di codici partendo da quello di riposo (11) e ritornando a quello di riposo. Questa forma d'onda, nel gergo dei rotary encoder relativi meccanici con "detent", costituisce un singolo impulso (in effetti, se ci riferiamo a uno solo dei due segnali, durante la generazione della sequenza di quattro codici, ci accorgiamo che realizza un unico impulso attivo basso). Dovrebbe ora essere maggiormente comprensibile il fatto che un componente che fornisce 16 impulsi per giro, man mano che si ruota il suo albero da 0 a 360°, fornisce 16 volte i segnali di Fig. 6, per poi ricominciare se si continua a ruotare. Ovviamente, un rotary encoder a 20 impulsi, presenterà 20 volte questi segnali, anziché 16, nel corso di una rivoluzione completa dell'albero, e così via. Se si ruota da 360° a 0, si ripeteranno invece le forme d'onda di Fig. 7. Se si ruota l'albero più velocemente, gli impulsi saranno più ravvicinati tra loro nel tempo. La Fig. 15 e la Fig. 16 si riferiscono al caso di un rotary encoder di buona qualità quando siamo fortunati e non abbiamo fenomeni evidenti di bouncing. Per ora, quindi, tutto ok!

Segnali forniti da un rotary encoder relativo meccanico durante la rotazione in senso orario quando tutto funziona bene
Fig. 15/1 Segnali forniti da un rotary encoder relativo meccanico durante la rotazione in senso orario quando tutto funziona bene
Segnali forniti da un rotary encoder relativo meccanico durante la rotazione in senso anti-orario quando tutto funziona bene
Fig. 16/1 Segnali forniti da un rotary encoder relativo meccanico durante la rotazione in senso anti-orario quando tutto funziona bene

 

Purtroppo le cose non vanno sempre così. Se si facesse uno zoom sull'asse dei tempi, per visualizzare cosa succede vicino ai fronti di commutazione nei due casi di Fig. 15 e 16, diventerebbero visibili alcune brevi oscillazioni riconducibili ai rimbalzi dei contatti… Nella seconda parte di questo articolo, vedremo le acquisizioni delle forme d'onda nei casi, molto frequenti, in cui si verifica il fenomeno del bouncing, o rimbalzo dei contatti, e confronteremo il comportamento di un encoder rotativo economico con quello di un dispositivo di migliore fattura [2].

73 de IK1HGE 

RFERIMENTI

[1] Trasduttore di posizione angolare. (2 giugno 2019). Wikipedia, L'enciclopedia libera. Tratto il 16 settembre 2019, 07:41 da //it.wikipedia.org/w/index.php?title=Trasduttore_di_posizione_angolare&oldid=105332410 

[2]  ik1,hge, Tutorial rotary encoder parte 2: il fenomeno del bouncing ("rimbalzo" dei contatti), 18 ottobre 2019. https://www.ik1hge.com/index.php/it/progetti/elettronica-e-rf/95-tutorial-rotary-encoder-parte-2-il-fenomeno-del-bouncing-rimbalzo-dei-contatti

LICENZA D'USO DI QUESTO ARTICOLO

Licenza Creative Commons
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 4.0 Internazionale. Autore: ik1hge Roberto Filippo