Go Down

Topic: Strumento di misura (Read 1 time) previous topic - next topic

Etan

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.




brunol949

#1
Apr 13, 2012, 11:17 am Last Edit: Apr 13, 2012, 11:19 am by brunol949 Reason: 1

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  :smiley-fat:
Considera anche che 4-20 corrispondono a 1-5 per cui il range di risoluzione e' ulteriormrnte ridotto

Quote

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
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

astrobeed


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.

astrobeed


Ma se poi devi entrare su Arduino sempre 10 bit avrai  :smiley-fat:


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

brunol949



Ma se poi devi entrare su Arduino sempre 10 bit avrai  :smiley-fat:

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 ??
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

astrobeed


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  :smiley-mr-green:

BrainBooster

non mischiamo le cose :)
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.

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  :smiley-mr-green:

Intendevo dire che dovendo entrare da un AIn sempre 1024 avra' ed a lui servono 10000 punti ; lasciando perdere la storia del 1%
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

brunol949


non mischiamo le cose :)
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
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

astrobeed


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.

brunol949


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
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

astrobeed


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.

Quote

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.


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, 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

astrobeed


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.

BrainBooster

io nel mio intervento parlavo di protocollo non a caso :)
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 ;)

Go Up