Forme d'onda di uscita del rotary encoder
Fig. 1/2 Forme d'onda di uscita del rotary encoder "pulite" per rotazione oraria dell'albero

Nella prima puntata di questa serie sui rotary encoder [1], ne abbiamo studiato insieme il comportamento logico ed elettrico, almeno nel caso in cui tutto funzioni come dovrebbe o, meglio, come vorremmo… Tuttavia, per rendere l'utilizzo dell'encoder vantaggioso, è necessario che abbia un costo contenuto relativamente al valore di mercato del prodotto che si sta progettando. Gli encoder più economici sono proprio quelli di tipo meccanico, di cui ci stiamo occupando in questi articoli, costituiti da due contatti che strisciano su una ruota dentata; gli impulsi sono generati grazie all'alternanza durante la rotazione tra il contatto e la mancanza di contatto con i denti della ruota. A differenza di altre soluzioni (come gli encoder ottici) questa tecnologia presenta un severo inconveniente noto con il nome di "rimbalzo" o bouncing. Si può trattare di un vero rimbalzo tra parti meccaniche, come avverrebbe tra i contatti e la ruota dentata se la superficie di quest'ultima non fosse perfettamente co-planare con il materiale isolante che la contiene, ma più in generale si tratta di brevi intervalli di tempo durante i quali i contatti sono incerti, con conseguente oscillazione indesiderata dei segnali elettrici ("chattering"). I fenomeni di bouncing sono tipici di tutti i componenti elettromeccanici di commutazione, come gli interruttori, i deviatori, i pulsanti, i relé, etc. Scegliendo componenti di buona qualità, il bouncing sarà ridotto in ampiezza o in durata ma, almeno facendo riferimento alla mia esperienza, mai assente. In questa seconda puntata sui rotary encoder, analizziamo il problema dal punto di vista elettrico e confrontiamo un rotary encoder molto economico di fabbricazione probabilmente cinese o comunque asiatica e di modesta qualità, con uno di marca occidentale, di qualità migliore ma che potrebbe essere anche stato prodotto in Cina, magari nello stesso stabilimento di quello economico, certamente con un altro design e maggiore considerazione dei concetti di funzionalità, affidabilità e qualità. Prima di addentrarci nell'analisi, vorrei anticipare che, in questi casi di presenza di rimbalzo dei contatti, per non causare problemi ai circuiti e ai sistemi di elaborazione a valle, è necessario realizzare un dispositivo "anti-rimbalzo" o di "de-bouncing", di cui parleremo prossimamente.

Giusto per fissare le idee, prendiamo come riferimento una delle forme d'onda con cui ci siamo salutati nella prima parte, quella corrispondente alla rotazione in senso orario che, per vostra comodità, riporto nuovamente in Fig. 1 (tutte le figure che cito in questa parte 2 del tutorial hanno suffisso /2 se non diversamente specificato). Ora vediamo cosa succede abbastanza frequentemente con il rotary encoder montato su una scheda tipo HW-040 o KY-040 (molto usata con ARDUINO) che ho comprato su un sito di e-commerce cinese da un fornitore cinese, Fig. 2, 3, 4 e 5. Direi che siamo d'accordo tutti che un eventuale microcontrollore collegato a segnali del genere "non saprebbe che pesci prendere". Gli impulsi spuri hanno ampiezza confrontabile con l'intera dinamica di tensione disponibile e hanno durata che, in alcuni casi, supera notevolmente anche i 10 ms!

(A proposito, abbiate pazienza se alcune immagini non sono molto nitide embarassed, ho fotografato "al volo" lo schermo dell'oscilloscopio con il mio vecchio smartphone che, dal punto di vista della fotografia, non è mai stato molto facile da usare. Ho pensato di condividere ugualmente le immagini in quanto, a dispetto della qualità, mostrano molto bene i fenomeni di cui vi sto parlando). 

Rotary encoder 040 commutazione iniziale affetta da chattering
Fig. 2/2 Scheda 040, rotazione in senso antiorario dell'albero del rotary encoder: il canale 2 dell'oscilloscopio mostra evidenti fenomeni di chattering (bouncing) di durata intorno ai 5 ms
040 commutazione molto
Fig. 3/2 Scheda 040, rotazione antioraria, più di 40 ms di autentico "delirio" da parte del rotary encoder… foot-in-mouth
040 fenomeni di bouncing o chattering
Fig. 4/2 Scheda 040 fenomeni di bouncing o chattering durante la rotazione in senso orario. Si noti la base tempi di 0,5 ms/quadro, significa che la durata totale del chattering mostrato sullo schermo dell'oscilloscopio è 4,5 ms. 
040 bouncing
Fig. 5/2 Scheda 040, rotazione oraria, anche qui la base tempi è di 0,5 ms/quadro, quindi la parte con commutazioni indesiderate "devastanti" dura circa 2,5 ms, ma il rumore continua per altri 2 ms.

Ma i segnali sono veramente sempre così sporchi a ogni commutazione dei contatti?

La risposta è no surprised. Per fortuna, per ottenere dei fenomeni di chattering così evidenti, ho dovuto fare diversi tentativi ruotando l'albero a diverse velocità. Le forme d'onda peggiori si riscontrano ruotando l'albero molto lentamente, cosa che mi fa pensare che, dietro alle commutazioni indesiderate, vi possa essere una lunga durata dell'intervallo durante il quale lo stato del contatto con la ruota dentata è "indeterminato", cioè il contatto può sussistere o meno a seconda del tremore della mano, oscillazioni meccaniche interne, spostamento di particelle di ossido, polvere o altra sporcizia tra le due facce del contatto, etc. Ma ve la sentireste di escludere a priori che un qualsiasi utente della vostra realizzazione possa ruotare la manopola lentamente, magari cercando di raggiungere una regolazione più fine del parametro e invece ottenendo l'effetto opposto? Diciamo che, con un giudizio del tutto personale basato sulla sensazione che ho avuto, un 60-65% delle volte gli impulsi sono abbastanza definiti anche con l'encoder di provenienza cinese. Questo è moderatamente consolante ma certamente abbiamo un serio problema di de-bouncing da affrontare...

E con l'encoder di marca, le cose vanno meglio?

Le acquisizioni fatte con l'oscilloscopio in un circuito identico a quello usato per l'encoder cinese, le ho riportate nelle Fig. 6, 7, 8. Vediamo che è tutta un'altra storia. Questa volta, per ottenere bouncing evidente mi sono dovuto sforzare molto di più, direi che nell'80% delle commutazioni, il chattering non era visibile nelle scale di tempo 0.5 ms/div e superiori. Un'ottima performance. Anche nei casi in cui sono riuscito ad ottenere le oscillazioni, queste durano meno di 2 ms, che è il tempo massimo di bouncing dichiarato nel data sheet del produttore. Direi che il campione è perfettamente in specifica. Con l'usura, potrebbe peggiorare ma partiamo da un prodotto che ha un tempo di bouncing che dura meno di 1/5 del prodotto cinese, dunque immagino che, a parità di usura, il prodotto cinese avrà sempre un comportamento molto peggiore.

Rotary encoder Bourns montato su scheda 040
Fig. 6/2 Rotary encoder Bourns montato su scheda 040. Rotazione oraria. Anche con questo dispositivo osserviamo fenomeni di bouncing ma guardate la scala dei tempi: 0,2 ms/quadro. La commutazione è rumorosa per meno di 2 ms, perfettamente in linea con quanto garantito dal costruttore.
Rotary encoder Bourns montato su scheda 040
Fig. 7/2 Rotary encoder Bourns montato su scheda 040. Rotazione antioraria. Anche qua la durata dell'intervallo rumoroso della commutazione è inferiore ai 2 ms, siamo sempre "in specifica".
Rotary encoder Bourns montato su scheda 040
Fig. 8/2 Rotary encoder Bourns montato su scheda 040. Rotazione oraria. Questa volta i fenomeni di chattering sono relegati ai primi 500 microsecondi successivi alla commutazione principale, direi che vada più che bene, no?

I due rotary encoder che ho analizzato sono entrambi dotati di pulsante momentaneo collegato all'albero. In Fig. 9 si vede il segnale prodotto dal campione cinese, in Fig. 10 quello del campione di marca. Secondo me, in questo caso, non ci sono differenze apprezzabili. Ho acquisito molte decine di forme d'onda simili per ambedue i dispositivi senza mai ottenere bouncing evidente.

Scheda 040, commutazione del pulsante
Fig. 9/2 Scheda 040, commutazione del pulsante. Direi ottima… cool
Rotary encoder bourns, commutazione del pulsante
Fig. 10/2 Rotary encoder Bourns, commutazione del pulsante. Anche qui, la forma è pulita.

Ultima considerazione: dieci schedine tipo HW-040 complete di rotary encoder, resistenze di pull'up e connettore, già completamente assemblate e pronte all'uso, le ho pagate il doppio di un solo rotary encoder di marca, senza scheda, resistenze e connettore. La differenza di prezzo è notevole money-mouth. Per fare le prove, ho smontato l'encoder cinese da una di queste schede e l'ho sostituito con l'encoder di marca, in questo modo ho confrontato i due dispositivi in condizioni di funzionamento praticamente identiche.

Ora, ognuno può trarre le sue conclusioni. Il dilemma principale mi sembra: mi conviene risparmiare dei bei soldini sull'acquisto del rotary encoder e spendere tempo e risorse per risolvere un complicato problema di de-bouncing o spendere un po' di più (un bel po' di più!) per un dispositivo ben fatto e risparmiare tempo risolvere un semplicissimo problema di de-bouncing?

Fra qualche settimana, quando anche questa seconda puntata avrà avuto qualche centinaio di letture, pubblicherò l'articolo sul de-bouncing hardware e software. Se non volete aspettare, condividete questo articolo in modo che il numero degli accessi aumenti velocemente…wink

A presto!

ik1hge Roberto

RIFERIMENTI

[1] ik1hge, Tutorial rotary encoder parte 1: a cosa serve, come è fatto e come funziona, 16 settembre 2019. https://www.ik1hge.com/index.php/it/progetti/elettronica-e-rf/93-rotary-encoder-parte-1-a-cosa-serve-come-e-fatto-e-come-funziona

Fonte: prodotto in proprio https://www.ik1hge.com/

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