SnipCard Convertitore ADC 24 bit per Arduino e Archiduino

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

SnipCard ADC 24 bit sigma delta

SnipCard ADC 24 bit sigma delta: notare l’integrato LTC2484 accanto al jumper rosso. Piccino il DFN10, vero?

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

Circuito di esempio per LTC2484

Circuito di esempio per 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

Cella di carico a trazione commercializzata da Idealtek: http://www.idealtec.it/prodotti/item/22-cella-a-trazione/50-celle-di-carico-a-trazione-e-compressione-serie-ts.html

Cella di carico a trazione commercializzata da Idealtek: http://www.idealtec.it/prodotti/item/22-cella-a-trazione/50-celle-di-carico-a-trazione-e-compressione-serie-ts.html

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

Schema SnipCard ADC 24 bit

Schema SnipCard ADC 24 bit

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.

 

1-­WIRE DS18B20 used with RS232 to TTL multiform MiniMax interface (application note 01)

1-­WIRE DS18B20 used with RS232 to TTL multiform MiniMax interface (application note 01)

In this article we show how to connect 1-­WIRE DS18B20 temperature sensor to our MiniMax  RS232 interface. Below a list of the necessary materials:

1) Minimax interface

2) A RS232 cable for PC port (USB or serial standard)

3) DS18B20 1­wire temperature sensor (1 or more)

4) A piece of software to read the sensors: LOGTEMP or other similar programs

5) A piece of software to set RS232 “DTR” and “RTS” signals at high level

6) Terminal block, wires and some connectors socket

On to MiniMax RS232 interface set the jumpers: JP1 = ON; JP2 = OFF. Connect the DS18B20 sensor to the side B of the interface with wires, sockets and terminal block as we see in the images below.

DS18B20 connection to RS232 minimax interface

DS18B20 connection to RS232 minimax interface

1-WIRE DS18B20 wiring

1-WIRE DS18B20 wiring

We can use more then one DS18B20, we have not tested how many the normal RS232 ports can sustain. If the DS18B20 power supply is external and not the RS232 port, the number of devices connected can be many more.

Connect the minimax interface to the PC serial port. Start the “LOGTEMP” software and set the following parameters:

1) “SHOW”→ “SETUP”→”GENERAL”:

set adapter as DS9097E, set interval at 15 seconds, set port COM at the one we have connected MiniMax RS232 interface (example COM port 2). Confirm and return to main menu.

2) “SHOW”→ “SETUP”→”SENSORS”:

set DS18B20. Confirm and return to main menu’.

3) Click “GO” and the program starts to scan for the DS18B20 sensors

Good luck!

Note: tested with FTDI usb to serial RS232 interface.

Here’s the link  to “LOGTEMP” software: http://www.mrsoft.fi/ohj01en.htm

LOGTEMP data recording

LOGTEMP data recording

LOGTEMP data recording

LOGTEMP data recording

MiniMax RS232 TTL Multiform Interface – Pictures gallery

MiniMax RS232 TTL Multiform Interface – Pictures gallery

A picture is worth a thousand words, they say. So, two pictures are worth two thousand words, and three pic… oh, wait, I just heard my own conscience screaming “Hey, weirdo, what the heck are you trying to do?”.

In these pictures I show the last home baked PCB. It’s the MiniMax RS232 TTL Multiform Interface board. The pictures were taken to explain how to fit correctly the pin #7 from DB9 connector to the PCB with a single pin of a strip line 90 degrees connector. I hope no other words are necessary to explain what you can see clearly in the pictures. But, if you need any other explanations, please leave a comment below.

RS232 to TTL multiform MiniMax interface  (serial, TTL, 1-Wire)

RS232 to TTL multiform MiniMax interface (serial, TTL, 1-Wire)

RS232 to TTL multiform MiniMax interface  (serial, TTL, 1-Wire)

Below we are going to describe a simple interface circuit for RS232 serial line; nothing new, in the web there are many similar schemes. In this circuit we tried to put together, with the bare minimum of components, various features as listed here:

– Interface signals TTL / C-MOS 0/5 volt with ability to power devices connected (a few mA)
– Interface 0-12 volt logic signals
– Selection of half-duplex and full-duplex
– Paralleling 2 or more RS232 ports
– 1-wire bus interface with ability to power devices connected
– Selection of echo tx to rx or echo suppression when in half-duplex

LEDs are used to show the logical high RX (green) and TX (red) signals. The components used are very common, they are not particularly critical, the circuit is feasible with the material that every electronic hobbyist has in the drawer. The operation of the circuit has been tested to a transmission rate of 250 kbaud for sections of short length. It has also been tested with the 1-wire network on a cable length of 100 meters with 8 (eight) DS18B20 sensors, powered by the same RS232 serial port. The auxiliary power supply is derived from the signals “DTR” and “RTS”, held at the high logic state.

Description of the circuit

As can be seen from the schematic, the circuit is very simple. The output stage, connected to the TX of RS 232, is composed of R3 (base current of Q3), DS8 (protection negative voltage), Q3 (output driver) and DZ3 (regulator output voltage limiter or voltage input). DZ3 may have different values of zener: when used with TTL levels should be 5.1 volts, when used with other logic levels can be 3.3 or 12 volts.
The resistor R5 is the resistance that brings power to output and must be calculated in relation to the zener DZ3, the milliampere available on the RS232 driver and the external devices that we want to power. The diodes DS1 and DS6 bring the voltage available on the signals “DTR” and “RTS” (when at high level) to the circuit composed of the capacitor C1, R5 and DZ3. The diode DZ2 polarizes Q1 and Q2 to the right voltage which activates a high logic level signal onto RX of RS232. R1 keeps the RX signal to zero volts when Q1 is off or when Q2 is enabled. When at side B is received a signal at the logical level zero, through R4 the current flows into the base of Q1 that starts to conduct and leads to a high level signal onto RX of RS232 port.

JP1 = ON, in this case the RX and TX are in common and it is the situation that occurs in the 1-wire bus, which is a half-duplex bus.
JP2 = ON, in this case when the TX port RS232 transmits, the signal via R2 activate Q2 conduction and blocking the echo of characters (if JP1 = ON)

The green LED1 displays the status of the high signal RX and red LED2 displays the status of TX.

Practical realization, assembly and construction

This is the schematic for the RS232 to TTL multiform MiniMax interface. You can download also the Eagle files, see at the end of the post in the download section. You can do it yourself or just ask’n’wait for a little help (we’re dealing with people of a tech company who soon will realize a purchasable kit at a very affordable price. Stay tuned for upcoming updates!)

RS232 TTL MiniMax multiform interface - Schematic

RS232 TTL MiniMax multiform interface – Schematic – Please always refer to the downloadable PDF for further updates not reported in the pictures.

This is the PCB for the RS232 to TTL multiform MiniMax interface

RS232 TTL MiniMax multiform interface - PCB with components

RS232 TTL MiniMax multiform interface – PCB with components – Please always refer to the downloadable PDF for further updates not reported in the pictures.

And here the very prototype. Note that in this picture the DB9 connector J1 is soldered on bottom side / copper side of the board, but this is a weird prototype. Following the scheme, you’ll guess that the correct mounting way is to embed the PCB between the two rows of pins of the connector, making the pins corresponding to soldering places. The five-pins row obviously must be turned to copper side, and in top side it must be placed JP3 in order to connect itself to the pin 7 of the DB9 connector. You should (and PCB is designed to) use 1 x pin header strip (90° angle, 2.54mm pitch).

RS232 MiniMax Multiform Interface - The prototype

RS232 MiniMax Multiform Interface – The prototype

 

Editor’s note: original files are not available here. If you need any of them (schematic, pcb layout, BOM et cetera) please leave a comment with a valid email address and we will send it to you asap.

 

Footnote(s)

  1. If you find something useful and you test it, use it, experiment with it, elaborate/upgrade it, please let us know;

  2. If you find any inaccuracies or errors in the projects, documents and texts, they were probably made to give you the opportunity to report them to us and make us realize that we can make mistakes and we ignore many things.