AS5040 Magnetic Rotary Encoder

Passo necessario per la realizzazione del mio progetto di testa panoramica motorizzata è lo studio e la verifica di fattibilità di un sistema di misura della posizione (rotazione) dei motori servo a rotazione continua che attueranno i movimenti di Pan e Tilt della testa 'robotica'.
I motori servo a rotazione continua infatti non hanno un potenziometro interno che ne tengono sotto controllo la posizione attuale (come succede con i servo tradizionali). Per sapere in qualunque momento in che posizione si trovano i servo a rotazione continua, e controllarne quindi l'angolo di rotazione, occorre posizionare un 'sensore' di rotazione aggiuntivo che misuri con precisione la rotazione dell'albero motore e, tramite controllo software da parte del nostro Arduino, tenere sotto controllo e in tempo reale l'attività del motore servo.
Sfrugugliando sul forum di Arduino e sul web in generale ho scoperto la possibilità di utilizzare questi semplici quanto precisi sensori/encoder magnetici (contact-less): Austria Microsystems AS5040 encoder. Sono stato indirizzato a questo prodotto da un utente Arduino (GabrielD di Torino), che ringrazio, che mi ha consigliato come procedere al test di questo chip (cercate sul forum italiano se volete saperne di più). Nel frattempo ho trovato un sito che fornisce (Open source ed Open hardware philosophy) schematico e lista dei componenti necessari per la costruzione di una scheda adatta ad utilizzare l'encoder in progetti reali, software di testing compreso: MakerBot Industries. Da qui è possibile acquistare la scheda con il chip pronti per l'uso a circa 50$. Ma, come sempre, perché non risparmiare e divertirsi nella realizzazione di un prodotto simile fatto in casa?
Ho acquistato un paio di break-out boards della Sparkfun (Futura Elettronica) a 3 euro l'una e mi sono fatto spedire a casa dalla Austria Microsystems dei campioni gratuiti (free samples) del chip e dei magnetini, a costo zero. Spediscono via FedEx a casa senza nessuna spesa fino a 3 pezzi, non male. Quello che mi spaventava un pò era l'operazione di saldatura del chip (un SSOP-16 package, dimensioni 5.3x6.2 mm con 16 pins!). La mia esperienza di saldature era finora limitata normali fili elettrici, anche se piccoli. Ero indeciso sul da farsi, mi avevano chiesto fino a 15 euro per saldare questi chip SMD ma, i fantastici tutorials della Sparkfun electronics e il fatto che molti sono riusciti a farselo in casa, ci hanno messo una pezza ed ho deciso di provarci anch'io.
Sarò stato anche fortunato ma devo dire che, con un bel pò di attenzione e facendo le cose con estrema calma ... ci si riesce agevolmente.
01 - The AS5040 chip placed on the Sparkfun SSOP16 Breakout Board with double-sided adhesive02 - Soldering with a large tip and then removing bridges with solder wick

Alla fine ho saldato tutti e tre i chip su altrettante boards. Saldatura unica con punta larga e rimozione ponti con trecciola dissaldante (per il primo chip, per gli altri è stato sufficiente dosare bene la quantità di stagno sulla punta e 'accarezzare' più volte i piedini). Funzionano bene ed in modo identico, perlomeno in modalità incrementale (Quadrature A-B su 2 soli digital inputs). Con questa modalità bastano 4 pins, 2 per l'alimentazione e 2 per la lettura degli impulsi (5V, GND, QUAD-A e QUAD-B). Io comunque ho collegato anche la diagnostica del magnete (8 fili in tutto dalla board dell'AS5040 alla breadboard ed all'Arduino).
Un solo problema, i due led di diagnostica del magnete (Mag+ e Mag-) si accendono/spengono contemporaneamente, mentre dovrebbero essere indipendenti nel segnalare l'eccessiva vicinanza/lontananza del magnete dal chip sensore. Ho controllato più volte l'eventuale cortocircuitazione dei pin ma sempre con esito negativo (sia visivamente che con tester in modalità ohmetro) e non so spiegarmi la questione, oltretutto tutti e 3 i chip che ho saldato si comportano nello stesso modo ... bah

Comunque, gli encoder funzionano e forniscono 512 posizioni ad ogni rotazione completa dell'albero motore (risoluzione del chip di 1024 ppr, pulses per revolution in modalità Incremental a 10 bit), utilizzando la misura della quadratura A-B su 2 pin digitali.

Per il test degli AS5040 mi sono ingegnato nella realizzazione di piccolo test-bench (banco di prova) adatto allo scopo. Occorre infatii che, per funzionare correttamente, sensore e magnete vengano posizionati molto vicini fra di loro e con tolleranze piuttosto ridotte, sia in orientamento che posizionamento assoluto (nel datasheet disponibile sul sito dei sensori trovate tutto ciò che serve.
Allora, ho rispolverato il vecchio, caro 'Meccano' ...

08 - The 'Meccano' structure that support a manual rotating shaft with graduated disc and the AS5000 magnet on the right

Si sa, con l'età si torna bambini e se siamo fortunati torna anche la voglia di giocare ...
Grazie alla libreria PinChangeInt (la trovate nel Playground di Arduino) è possibile utilizzare altri pins oltre ai 2 e 3, dedicati a funzioni di interrupt. Ho così potuto verificare la possibilità di utilizzare una coppia di AS5040 in contemporanea sulla stessa scheda Arduino, in vista di un loro utilizzo nel sistema Pan&Tilt.

13 - Two AS5040 working at the same time

Se volete vedere più snapshots, qui trovate una piccola galleria di immagini:

Comments