SnipCard Convertitore ADC 24 bit per Arduino e Archiduino
La domanda che ci siamo posti è stata: è possibile costruire un convertitore ADC 24 bit per Arduino e Archiduino ad alta risoluzione che sia realmente utilizzabile fino all’ultimo bit? È possibile evitare il rumore tipico che si incontra a determinate bassissime tensioni? Riusciamo a farcene uno in casa? La risposta – se ce n’è una – la trovate in questo articolo, sempre tenendo a mente che chi scrive non è un ingegnere o un professore di elettronica e che quindi l’articolo potrebbe anche non essere esaustivo, metodico o scientificamente dimostrabile.
Introduzione
Per chi non sapesse cos’è un convertitore AD (o DA) bisognerebbe scrivere un libro a parte, ma sono sicuro che lo abbiano già fatto. Non sarà quindi il caso di questo modesto articolo. Sappiate che è un dispositivo per convertire un segnale analogico in digitale (AD) o digitale in analogico (DA). Facendo un esempiaccio: abbiamo il nostro microcontroller (un Arduino, diciamo) e dobbiamo leggere una tensione proveniente dal mondo esterno. Quello che ci serve è un ADC (analog to digital converter) in grado di trasformare – tramite un processo detto “campionamento” – questa tensione in bit in modo che il processore sia in grado di interpretarli. Allo stesso modo accade quando dobbiamo pilotare e modulare una tensione con un micro: in tal caso ciò che serve è un DAC (digital to analog converter), ovvero il dispositivo che trasforma la nostra scala di bit in una tensione.
Partiamo da un dato di fatto: Arduino non ha un convertitore AD integrato ad alta risoluzione. Le board Uno, Nano, Mini e Leonardo hanno a disposizione il solo AD interno degli ingressi analogici che è a 10 bit. Ciò significa che la lettura di una tensione su tali pin avverrà a una risoluzione di 1024 punti (1024 decimale = 1111111111 binario). Le board Due e Zero hanno gli AD a 12 bit (4096 punti). Arduino Mega 2560 ha solo AD a 10 bit.
Per chi non è pratico di questi numeri, ecco un esempio a contatto con la realtà. Prendiamo il caso in cui vogliamo leggere con un microcontroller una tensione variabile fra 0 e 5 volt. Se usiamo la classica funzione analogRead (PIN) avremo questi 5 volt suddivisi in una scala da 0 a 1024 elementi. Quindi logicamente avremo una sequenza di letture data dalla formula bit * vMax / adRes, la quale ci permette di notare che la nostra risoluzione massima è di quasi 5 mV (4,8 milliVolt).
Che cosa c’è che non va? Apparentemente nulla. Se dobbiamo monitorare il valore della tensione di una pila da 1,5 volt, ad esempio, per indicare al firmware di intervenire con un avviso di low battery, una risoluzione di 5 mV è ampiamente sufficiente. Così lo è per molte altre applicazioni dove la precisione al di sotto dei milliVolt non è indispensabile, come nel caso della lettura di una sonda di temperatura LM35Z, che ha una risoluzione di 10mV/°C.
«No, aspetta, torna indietro un attimo. Come sarebbe che la LM35Z ha una risoluzione di 10mV/°C? Quindi vuoi dirmi che avrò una lettura con un errore di +/- 0,5°C?». Sì, è così. Ed è in situazioni come queste che interviene la necessità di avere una maggiore risoluzione. Un AD a 12 bit in questo caso potrebbe già andare bene, ma cosa succede se vogliamo leggere i dati di una cella di carico che fornisce una tensione di 1 mV a fondo scala? Succede che il nostro covo di sinapsi più brillanti si mette a urlare: “Pump the resolution!”.
L’integrato LTC2484
Per tuffarsi nel mondo dei microVolt è consigliabile usare un convertitore AD a 24 bit, in modo da ottenere una risoluzione di appena 0,3 microVolt, ovvero 300 nanoVolt. La cara zia Linear ha prodotto – fra milioni di altri – il chip LTC2484, un convertitore sigma delta differenziale a 24 bit di risoluzione massima. Per chi volesse farsi una cultura consiglio di leggere il datasheet e questa breve spiegazione su Wikipedia sul come funziona la modulazione a densità di impulsi sigma delta.
Per la SnipCard ADC 24 bit abbiamo scelto questo componente per le sue caratteristiche di stabilità termica e la sua buona riluttanza al rumore. Può essere gestito tramite protocollo SPI, cosa che lo rende fruibile senza bisogno di librerie strane. Ovviamente la qualità ha un prezzo: un singolo pezzo di questo integrato costa infatti oltre 6 euro. Seppure questa fascia di spesa sia ancora alla portata degli hobbisti, non lo è il package. Trattasi infatti di un minuscolo DFN a 10 pin, dalle dimensioni di soli 3 x 3 mm. Ogni suo piedino è largo 0,25 millimetri, quindi saldare questo componente è un lavoro fattibile ma richiede mano ferma, vista ottima, un po’ di esperienza e qualche malizia del mestiere.
Le incognite
Quando abbiamo optato per la realizzazione di un ADC a 24 bit ci siamo domandati se saremmo riusciti a realizzare una scheda in grado di “tenere alla larga” il rumore elettrico (banalizzando: i 50 Hz della tensione di rete) di cui sembrano andare pazzi i segnali a bassissima tensione. La Linear ha reso disponibili alcune application reference dove dà indicazioni su come va utilizzato l’integrato e sulle configurazioni software per migliorare la noise rejection ratio (NRR), ma oltre a questo – e ai loro costosi development kit – bisogna far da sé e trovare la via migliore con varie prove.
Le applicazioni
Sappiamo che uno dei sensori più usati e più “difficili” da leggere è rappresentato dalla cosiddetta cella di carico. Questi sensori sono presenti in tutti i sistemi di pesatura digitali, dalla bilancina che usiamo in cucina per la nostra dieta al sistema di calibrazione degli assi di una locomotiva. Su Wikipedia c’è un buon riassunto della modalità di funzionamento di una cella di carico. Ve la riporto per intero, per comodità (e per promemoria mio, ché con la teoria ho sempre qualche impiccio dovuto all’età):
Si tratta di uno strumento che rileva la deformazione meccanica di un oggetto in maniera indiretta, leggendola in millivolt o in V e trasformandola nella corretta unità di misura. Questo componente è generalmente costituito da un corpo metallico (Acciaio inox martensitico o Alluminio). Nel caso dell’acciaio, esso viene indurito con una tempra al fine di ottenere una maggiore rigidezza. Al corpo della cella di carico vengono applicati uno o più estensimetri che leggono la deformazione meccanica del materiale (di compressione o trazione) tramite la variazione di resistenza elettrica che tale deformazione causa sul loro circuito elettrico. Per amplificare l’entità del segnale la scelta più comune è quella di usare quattro estensimetri collegati tra di loro in una configurazione a ponte di Wheatstone. Esistono configurazioni più semplici che prevedono l’impiego di uno o due estensimetri. Il segnale elettrico ottenuto (differenziale) è normalmente dell’ordine di pochi millivolt e richiede un’ulteriore amplificazione con un amplificatore da strumentazione prima di essere utilizzato. Il segnale viene poi eventualmente elaborato mediante un algoritmo per calcolare la forza applicata al trasduttore. È richiesta la correzione delle non linearità, calibrazione, compensazione delle variazioni dovute alla temperatura, ecc.
Ecco il punto saliente: bisogna badare alla non linearità, alla calibrazione e alla compensazione delle variazioni dovute alla temperatura. Non solo sulla cella di carico in sé (problemi di cui si deve preoccupare il suo costrutture) ma anche sulla scheda che dovrà leggere e misurare il segnale proveniente da tale cella. Per metterci al riparo dai problemi abbiamo usato componenti di alta qualità, resistenze a bassa deriva termica e, soprattutto, una voltage reference di fascia alta che da sola costa come tutta la scheda. Infatti il chip LT1236-A di Linear è una vref ad alta stabilità (2ppm/°C) con una precisione dello 0,05%. Questa scelta permette a un progettista di evitare in un progetto già “critico” almeno le più comuni fonti di errore, come una vRef troppo variabile che altererebbe il segnale di uno degli ingressi del comparatore.
Lo schema
La scheda è dotata di un regolatore a 5 VCC perché Archiduino non ha a disposizione questa tensione sulla base board (che lavora a 12 e 3.3 volt). I 5 volt servono anche per alimentare il sensore o la cella di carico e sono presenti sul connettore CN3.
Il chip LT1236, incaricato di fornire la vRef, ha un package SOIC8 ed è pin compatibile con l’ADR03 di Analog Devices, un altro ottimo vRef (a 2,5 volt) dal costo meno proibitivo.
Per le applicazioni non troppo critiche si può usare la vRef a 2,5 volt di Archiduino (fatta con un LM4030-2.5, una Signora vRef, mica bruscolini) e risparmiare il costoso LT1236. La SnipCard è dotata di ponticelli per fare la scelta opportuna e di un divisore di tensione per adattare la reference alle esigenze specifiche di ogni singolo progetto.
La scheda è stata progettata per poter ospitare in alternativa il chip LTC2485, il fratello del LTC2484, nel caso volessimo utilizzare la comunicazione I2C bus anziché la SPI. Per fare ciò bisogna però agire sui ponticelli SJ3 e SJ2 in modo da convogliare i segnali sui pin corretti.
I test
Le prove effettuate in laboratorio ci hanno dato risultati molto incoraggianti. Collegando una cella di carico di una comunissima bilancia da cucina super economica abbiamo ottenuto un valore stabile, privo di rumore, approssimato a +/- 100 microgrammi. La tensione letta con tale carico era di appena 0,000015 volt (15 microvolt). Una volta effettuata la calibrazione con pesi campione certificati da 1 grammo e 100 grammi abbiamo ripetuto i test e abbiamo fatto le verifiche con un litro di acqua distillata, ottenendo un sorprendente valore di 999,981 grammi. Poteva essere più preciso? Sì, ma ricordiamo che la cella di carico usata era ultra cheap con una non-linearità assai accentuata.
Conclusioni
Pur non avendo per le mani uno strumento calibrato in qualche blasonato Istituto di Metrologia, possiamo dire che la SnipCard ADC 24 bit è un ottimo convertitore analogico/digitale che può essere usato in svariati settori, non solo per le celle di carico ma anche per leggere con ottima precisione una termocoppia o una sonda di temperatura al platino tipo PT1000. Il metodo costruttivo è quello consueto delle SnipCard per Archiduino, dove ogni ingresso è protetto da sovratensioni e disturbi. In tal modo possiamo usarla sul nostro microcontroller anche in ambito industriale senza pericolo di ottenere dati errati o, peggio ancora, di veder andare in fumo la SnipCard o la CPU per qualche extratensione tipica degli ambienti di lavoro dove operano motori, attuatori e macchinari ad alta potenza.
Commenti recenti