Strumento di misura

Salve a tutti,
ricorro al vostro aiuto per un consiglio.
Devo realizzare uno strumento di misura, basato su arduino, per prove su materiali.
L'obiettivo è acquisire l'uscita di una cella di carico con portata 100g con risoluzione minima di 0,01g.
La cella di carico è dotata di uscita 4-20mA, a 0g corrispondono 4mA, a 100g ne corrispondono 20 mA.
Trattandosi di uno strumento di misura, leggo l'uscita del suddetto sensore su una resistenza di precisione (1%) da 250ohm.

Per la risoluzione desiderata, l'ADC dell'arduino mega a 10bit non è sufficiente, pertanto vorrei capire se è possibile utilizzare un ADC ad hoc con prestazioni maggiori.

Un'altro consiglio che vi chiedo è questo: ci sono particolari accorgimenti sull'alimentazione che devo curare per evitare fluttuazioni elettriche che possono influenzare la misura acquisita?
Dovrei utilizzare un'alimentatore stabilizzato o un normale regolatore tipo lm7805 può essere sufficiente?

Grazie per l'aiuto prezioso.

Etan:
Per la risoluzione desiderata, l'ADC dell'arduino mega a 10bit non è sufficiente, pertanto vorrei capire se è possibile utilizzare un ADC ad hoc con prestazioni maggiori.

Ma se poi devi entrare su Arduino sempre 10 bit avrai :drooling_face:
Considera anche che 4-20 corrispondono a 1-5 per cui il range di risoluzione e' ulteriormrnte ridotto

Un'altro consiglio che vi chiedo è questo: ci sono particolari accorgimenti sull'alimentazione che devo curare per evitare fluttuazioni elettriche che possono influenzare la misura acquisita?
Dovrei utilizzare un'alimentatore stabilizzato o un normale regolatore tipo lm7805 può essere sufficiente?

Io ho fatto una cosa simile per acquisire dei sensori di amperaggio
Ho usato il 7805 per alimentare i sensori ed anche l'ingresso AREF ; lo 0 dei sensori e' a Vin/2 per cui avevo necessita' che il riferimento fosse uguale al Vin dei sensori
Collegamenti fatti interamente con cavetti schermati con calza sul GND di Arduino

Non so se dico una c***ta ma mi viene da pensare che la resistenza sia meglio metterla dal lato Arduino ; il circuito in corrente dovrebbe essere meno disturbato che quello in tensione
Ciao

Etan:
La cella di carico è dotata di uscita 4-20mA, a 0g corrispondono 4mA, a 100g ne corrispondono 20 mA.
Trattandosi di uno strumento di misura, leggo l'uscita del suddetto sensore su una resistenza di precisione (1%) da 250ohm.

Dato che la resistenza è al 1% è inutile usare un ADC con una risoluzione maggiore di 10 bit, 1024 step, in quanto l'errore introdotto dalla resistenza è 10 volte la risoluzione.
Esempio pratico, 20 mA sono 100 grammi, con 1024 count hai una risoluzione pari a 0.1 grammi, però la precisione della resistenza comporta che invece di leggere 100 grammi leggi un qualunque valore compreso tra 99 e 101 grammi.
Per fare la misura in modo preciso devi dare l'alimentazione a Avcc del 328 disaccoppiandolo dal Vcc generale del micro tramite una resistenza da 10-30 ohm e un condensatore da 100 nf, inoltre devi usare un riferimento di tensione molto preciso e stabile su Aref, va benissimo il riferimento a 1.1 V interno del 328.
Dato che su Arduino Avcc è in parallelo a Vcc a meno che non ti metti a modificare la scheda non puoi fare nulla per questa cosa, puoi solo usare il riferimento interno a 1.1V, con una resistenza da 55 ohm 1%, in modo da ottenere una stabilità e precisione nettamente migliori di quelle standard utilizzando come riferimento i 5V della alimentazione.
L'ideale è alimentare Arduino tramite una batteria o un alimentatore ben stabilizzato e pulito piuttosto che tramite la USB che ha valori di tensione mai esattamente a 5V ed è molto sporca.

brunol949:
Ma se poi devi entrare su Arduino sempre 10 bit avrai :drooling_face:

Se usi un ADC esterno la risoluzione sarà quella di quest'ultimo e non certo quella del ADC di Arduino.

astrobeed:

brunol949:
Ma se poi devi entrare su Arduino sempre 10 bit avrai :drooling_face:

Se usi un ADC esterno la risoluzione sarà quella di quest'ultimo e non certo quella del ADC di Arduino.

Ma se poi i calcoli li fa Arduino da dove passi per avere una risoluzione maggiore ??

brunol949:
Ma se poi i calcoli li fa Arduino da dove passi per avere una risoluzione maggiore ??

E da quando i calcoli di Arduino sono limitati a 10 bit ?
Se non hanno cambiato il compilatore stamattina mi risulta che i calcoli li puoi fare fino 32 bit :grin:

non mischiamo le cose :slight_smile:
con un adc esterno, il valore della campionatura viene comunicato ad arduino (tramite il protocollo che prevede l'adc) il quale non esegue nessun calcolo, semplicemente legge il valore che gli è stato passato.

astrobeed:

brunol949:
Ma se poi i calcoli li fa Arduino da dove passi per avere una risoluzione maggiore ??

E da quando i calcoli di Arduino sono limitati a 10 bit ?
Se non hanno cambiato il compilatore stamattina mi risulta che i calcoli li puoi fare fino 32 bit :grin:

Intendevo dire che dovendo entrare da un AIn sempre 1024 avra' ed a lui servono 10000 punti ; lasciando perdere la storia del 1%

BrainBooster:
non mischiamo le cose :slight_smile:
con un adc esterno, il valore della campionatura viene comunicato ad arduino (tramite il protocollo che prevede l'adc) il quale non esegue nessun calcolo, semplicemente legge il valore che gli è stato passato.

Ok
Ci vuole una schedina che oltre al ADC comunichi con arduino via bus

brunol949:
Intendevo dire che dovendo entrare da un AIn sempre 1024 avra' ed a lui servono 10000 punti ; lasciando perdere la storia del 1%

Dove sta scritto che un ADC esterno si collega ad un ingresso analogico di Arduino ?
Un ADC esterno o comunica tramite interfaccia parallela, tanti pin impegnati, oppure tramite un bus seriale come la I2C, SPI etc, e ovviamente passa i dati con la sua risoluzione, ovvero se è da 12 bit avrai un valore intero contenente un valore al massimo pari a 4096.

astrobeed:
Dove sta scritto che un ADC esterno si collega ad un ingresso analogico di Arduino ?

Da nessuna parte
Inizialmente si e' parlato di ADC per cui io intendo un coso nero con dei piedini
Per essere precisi si deve allora parlare di "Scheda di acquisizione analogica completa di sistema di comunicazione"
Ecco l'origine del mio malinteso
Purtroppo sono abituato a immaginare limitatamente a quello che leggo

brunol949:
Inizialmente si e’ parlato di ADC per cui io intendo un coso nero con dei piedini

Si ma il coso nero pieno di piedini in qualche modo deve comunicare con il mondo esterno, ovvero una parte di quei piedini sono un qualche bus di comunicazione.

Per essere precisi si deve allora parlare di “Scheda di acquisizione analogica completa di sistema di comunicazione”

Un conto è una scheda intera, che potrebbe anche lavorare totalmente stand alone e magari salvare i dati su una SD, e un conto è parlare del singolo componente, inteso come circuito integrato, ADC che per forza di cose deve possedere un modo per comunicare con il mondo esterno.

Forse, io non ho mai provato, si può utilizzare l'ADC interno dell' ATmega con la tecnica dell'oversampling per aumentare la risoluzione dell'ADC, come descritto nella Application Note AVR120 di Atmel dopo avere eseguito la calibrazione dell'ADC.
Il prezzo da pagare per l'oversampling è la diminuzione della bandwidth che a 10 bit corrisponde a 7600Hz e scende a 475Hz con 12 bit.

Ciao
QP

QuercusPetraea:
Forse, io non ho mai provato, si può utilizzare l’ADC interno dell’ ATmega con la tecnica dell’oversampling per aumentare la risoluzione dell’ADC

L’oversampling e conseguente decimazione per aumentare la risoluzione del ADC funziona solo se il segnale analogico è rumoroso, e c’è tutta una serie di considerazioni su come e quanto deve esserlo, in fin dei conti questa tecnica è un compromesso di condizioni e non una soluzione assoluta.
Una cella di carico fornisce un segnale abbastanza pulito quindi l’oversampling non è applicabile a meno di non introdurre volontariamente un rumore su Aref, ma qui le cose cominciano a farsi molto complicate e difficilmente gestibili a livello amatoriale senza disporre di idonea strumentazione per la messa a punto del sistema.
Esempio pratico, l’oversampling funziona bene con uscite analogiche da sensori mems che sono molto rumorose di loro, non funziona per niente se la applichi ad una tensione presa da un partitore resistivo alimentato da una tensione pulita.

io nel mio intervento parlavo di protocollo non a caso :slight_smile:
Per avere un esempio teorico/pratico prendete inesame il MAX127 o il 128 (è quasi uguale)
http://www.maxim-ic.com/datasheet/index.mvp/id/1890
quei 3 condensatori esterni sono tutto quello che serve per farlo funzionare (il lo ho montato su una protoshield), la risoluizione è ottima e con i2c ne vieni fuori solo impegnando 2 pin di arduino :wink:

Buongiorno a tutti,
innanzitutto grazie per l'interesse profuso in questo post.

Provo a raccogliere le idee in modo da definire le caratteristiche finali del sistema.

--- ADC ---

Per avere un esempio teorico/pratico prendete inesame il MAX127 o il 128 (è quasi uguale)
http://www.maxim-ic.com/datasheet/index.mvp/id/1890

Credo che la soluzione proposta da Brainbooster faccia al caso mio.

--- Precisione Resistenza ----

Dato che la resistenza è al 1% è inutile usare un ADC con una risoluzione maggiore di 10 bit, 1024 step, in quanto l'errore introdotto dalla resistenza è 10 volte la risoluzione.

L'appunto di Astro è corretto, ho già individuato una resistenza con tolleranza dello 0,01%, costa 17 eur ma è perfetta.

--- Precisione Alimentazione ---
Riguardo a questo ho ancora le idee un pò confuse.

Dato che su Arduino Avcc è in parallelo a Vcc a meno che nn ti metti a modificare la scheda non puoi fare nulla per questa cosa, puoi solo usare il riferimento interno a 1.1V, con una resistenza da 55 ohm 1%, in modo da ottenere una stabilità e precisione nettamente migliori di quelle standard utilizzando come riferimento i 5V della alimentazione.

Qundi non ho possibilità di dare un'alimentazione diversa al pin AVcc, ma non ho capito come fornire il riferimento interno da 1.1V. Dove devo collegare la resisrtenza da 55 ohm. (anche qui conviene una resistenza con tolleranza 0.01% ?)

A parte questo accorgimento volevo capire se posso usare un regolatore tipo LM7805 per alimentare Arduino, vi ricordo che parto da un alimentatore 24Vdc stabilizzato.

Grazie ancora

Salve ragazzi, è rimasto il seguente quesito aperto riguardo il riferimento 1.1V.
Potreste darmi una mano a capire meglio?

--- Precisione Alimentazione ---
Riguardo a questo ho ancora le idee un pò confuse.

Dato che su Arduino Avcc è in parallelo a Vcc a meno che nn ti metti a modificare la scheda non puoi fare nulla per questa cosa, puoi solo usare il riferimento interno a 1.1V, con una resistenza da 55 ohm 1%, in modo da ottenere una stabilità e precisione nettamente migliori di quelle standard utilizzando come riferimento i 5V della alimentazione.

Qundi non ho possibilità di dare un'alimentazione diversa al pin AVcc, ma non ho capito come fornire il riferimento interno da 1.1V. Dove devo collegare la resisrtenza da 55 ohm. (anche qui conviene una resistenza con tolleranza 0.01% ?)

A parte questo accorgimento volevo capire se posso usare un regolatore tipo LM7805 per alimentare Arduino, vi ricordo che parto da un alimentatore 24Vdc stabilizzato.