lettura mV ad alta precisione

Come faccio a specificare altri pin di collegamento?
Io ho predisposto il pcb con i pin (uno a fianco all'altro sull'arduino):
GND --> GND
CS --> 13
MISO --> 12
SCK --> 11

Non puoi scegliere i pin a piacere, il codice usa la SPI (Serial Peripheral Interface) hardware di cui è dotata la MCU e pin fisici non sono modificabili, quelli sono e quelli sei obbligato ad usare.

ma nel codice riportato nel primo post non so proprio come fare....

Ok il codice per ricavare la media, ma nell'esempio tu leggi da A0, mentre nel codice per LTC2400 viene ricavato da SPI, tu su questo valore vuoi effettuare la media?

La variabile ltw contiene il valore grezzo ricavato da SPI, accumulare più letture e poi calcolare la media, esempio:

   if (sig) ltw |= 0xf0000000;    // if input negative insert sign bit
   ltw=ltw/16;                    // scale result down , last 4 bits have no information
   
   mediaCounter++;
   mediaValue += ltw;

   if ( mediaCounter == nSamples ) {
       mediaValue /= nSamples;
       volt = mediaValue * v_ref / 16777216; // max scale

       Serial.print(cnt++);
       Serial.print(";  ");
       printFloat(volt,6);           // print voltage as floating number
       Serial.println("  ");

       mediaCounter = 0;
       mediaValue = 0;
   }

Fuori da ogni funzione devi dichiara le seguenti 3 variabili:

long int mediaValue = 0;
byte mediaCounter = 0;
const byte nSamples = 5;   // The LTC2400 gives you a resolution of up to 24 bit at a datarate of 5 samples per seconds

Quindi in totale accumuli 5 campioni in mediaValue in 1 secondi, quando mediaCounter
== 5 calcoli media e stampi.

Ciao.

intanto, grazie mille per gli aiuti.

Leggendo lo stesso segnale di riferimento (5V) prodotto dall' LT1021 riesco ad avere una precisione minima di 5 uV.

Ho adesso alcune perplessità sul lato elettronico.

Intanto, il circuito riportato al link (e che ho realizzato, pur costruendo un PCB "migliore")


ha in ingresso un condensatore elettrolitico da 10 uF (di livellamento, immagino). Ma, mi chiedo, tale capacità non perturba il segnale di ingresso?
Altra questione riguarda la possibilità di inserire un filtro passa basso. Il termometro (che comunque è uno strumento di precisione, per quanto sia vecchio, ed è quindi dotato di opportuna elettronica, immagino) è alimentato a 230Vac, potrebbe esserci una certa componente alternata a bassa frequenza (50 Hz o meno) trasmessa sull'uscita, o è improbabile?
Al contrario di quanto si vede nella pagina in cui è riportato quello schema, sarebbe necessario fare un piano di massa esteso, magari sul layer opposto a quello del circuito?
Dato che il segnale oscilla moltissimo, cosa posso fare per ridurre tale oscillazione?
Ho montato il circuito in un box di metallo per prototipi, collegando il GND allo stesso, ma l'oscillazione è sempre presente. Mi chiedo se è smorzabile in qualche modo, del resto la lettura sul display è abbastanza stabile.

In allegato sono riportate le immagini dell'acquisizione del segnale di riferimento e di un test di lettura (i punti con indicatore a croce indicano le letture fatte usando il display dello stesso termometro). In realtà, ho traslato il segnale acquisito eseguendo una correzione basata sulle stesse letture fatte da display ma, non riuscendo a definire una costante di correzione, solo una parte dei punti cadono nella zona delle letture.

ha in ingresso un condensatore elettrolitico da 10 uF (di livellamento, immagino). Ma, mi chiedo, tale capacità non perturba il segnale di ingresso?

Ma me lo chiedo anche io, cosa dice il datasheet in merito al valore e qualità di questa capacità?

Di sicuro se chi genera il segnale da campionare ha una impedenza di uscita costante e bassa il convertitore lavora meglio, sempre se la conversione è ti tipo sample/hold

RTFM e facci sapere.

Maurotec:
RTFM e facci sapere.

tanto per chiarire... "Read The Fucking Manual" :smiley:

Patrick_M:
tanto per chiarire... "Read The Fucking Manual" :smiley:

non so se si è capito, ma io non sono un esperto di elettronica digitale... altrimenti mi sarei risolto il problema da solo...

Maurotec:
Ma me lo chiedo anche io, cosa dice il datasheet in merito al valore e qualità di questa capacità?

Cercando qua e là in rete ho trovato un altro schema


dove viene usato un condensatore da 1 uF.
Il datasheet del LTC2400 non mi sembra dica (esplicitamente) qualcosa a riguardo ma a pagina 38 riporta lo schema della demo board DC228 del produttore dell'ADC in cui si vede che sull'ingresso mette un condensatore da 10 uF.

Maurotec:
Di sicuro se chi genera il segnale da campionare ha una impedenza di uscita costante e bassa il convertitore lavora meglio, sempre se la conversione è ti tipo sample/hold

non conosco l'impedenza di uscita del termometro nè come avvenga la conversione.
Mi sa che proverò a cambiare il valore di quel condensatore e vedrò che succede...

non so se si è capito, ma io non sono un esperto di elettronica digitale... altrimenti mi sarei risolto il problema da solo...

Guarda che anche se un ingegnere legge il datasheet non è detto che il problema se lo può risolvere da solo, ma comunque è sempre un ingegnere, tu stai facendo il compito che spetta ad un ingegnere elettronico pur non essendolo. Procedi pure per tentativi, prova e riprova magari esce fuori ciò che ti soddisfa, ma è uno streess. Dico, chiedo, mi pongo una domanda; sei in un laboratorio, ci sarà pure uno straccio di ingegnere a cui chiedere lumi. Mi chiedo anche; che laboratorio è se non è possibile recapitare uno straccio di oscilloscopio, lo hai o no?

Cercando qua e là in rete ho trovato un altro schema
http://www.steveluce.com/24bits/LTC2400%20wireless%20-%20full%20wireless%20wiring%20diagram%20-%20larger%20ARD%20version.jpg
dove viene usato un condensatore da 1 uF.
Il datasheet del LTC2400 non mi sembra dica (esplicitamente) qualcosa a riguardo ma a pagina 38 riporta lo schema della demo board DC228 del produttore dell'ADC in cui si vede che sull'ingresso mette un condensatore da 10 uF.

mmmmm, grrrrr. Strada che non porta a nulla provare con questo e con quello copiato li e la.

Altra questione riguarda la possibilità di inserire un filtro passa basso. Il termometro (che comunque è uno strumento di precisione, per quanto sia vecchio, ed è quindi dotato di opportuna elettronica, immagino) è alimentato a 230Vac, potrebbe esserci una certa componente alternata a bassa frequenza (50 Hz o meno) trasmessa sull'uscita, o è improbabile?
Al contrario di quanto si vede nella pagina in cui è riportato quello schema, sarebbe necessario fare un piano di massa esteso, magari sul layer opposto a quello del circuito?
Dato che il segnale oscilla moltissimo, cosa posso fare per ridurre tale oscillazione?

Il datasheet dice:

Conversion ClockA major advantage delta-sigma converters offer overconventional type converters is an on-chip digital filter(commonly known as Sinc or Comb filter). For highresolution, low frequency applications, this filter is typi-cally designed to reject line frequencies of 50 or 60Hz plustheir harmonics. In order to reject these frequencies inexcess of 110dB, a highly accurate conversion clock isrequired. The LTC2400 incorporates an on-chip highlyaccurate oscillator. This eliminates the need for externalfrequency setting components such as crystals or oscilla-tors. Clocked by the on-chip oscillator, the LTC2400rejects line frequencies (50 or 60Hz ±2%) a minimum of110dB.

Brevemente, se si configura il chip per usare l'oscillatore interno, il 2400 filtra i residui 50 oo 60Hz al valore di 110dB (che ottimo, ma non sufficiente). Per vanificare il filtraggio il tuo termometro dovrebbe essere afflitto da un disturbo di linea in cui è presente un segnale a queste frequenze di intensità 110dB.

Oscilloscopio alla mano, si analizza il segnale analogico fornito dal termometro è si verifica l'entità di questo segnale indesiderato.

Ancora il fottuto manuale dice:

Frequency Rejection Selection (FO Pin Connection)The LTC2400 internal oscillator provides better than 110dBnormal mode rejection at the line frequency and all itsharmonics for 50Hz ±2% or 60Hz ±2%. For 60Hz rejec-tion, FO (Pin 8) should be connected to GND (Pin 4) whilefor 50Hz rejection the FO pin should be connected to VCC(Pin 1).

Per filtrare 60Hz FO (pin-8) collegalo a GND.
Per filtrare 50Hz FO (pin-8) collegalo a VCC (pin-1)

Il resto del manuale me lo leggo (forse più tardi).

Ciao.

Dio Bono è un termometro, giusto?
Non importa molto il tempo di risposta
Ammennocche la frequenza di campionamento non sia vicina a un (sotto)multiplo della frequenza di rete in pochi secondi di media si toglie tutto il ripple
Che poi sarebbe a 100 o 120 Hz, doppia semionda

"Questi convertitori hanno un filtro digitale nel chip (detto Comb filter). Per applicazioni a bassa frequenza e alta risoluzione, questo filtro offre una reiezione della frequenza di rete a 50 o 60Hz e relative armoniche. Per ottenere una reiezione di oltre 110dB (300.000 volte!), è richiesta una frequenza del clock di conversione molto precisa. L'LTC2400 incorpora un oscillatore molto preciso. (...) Con oscillatore interno, l'LTC2400 offre una reiezione (a 50 o 60Hz+- 2%) di almeno 110dB."

Quindi o abbiamo una buona alimentazione, o abbiamo un buon clock oppure andiamo di filtri....

Che poi servirebbe conoscere anche la rejezione della fonte di tensione, il valore del ripple e eventuali filtrati lato analogico, quel condensatore a qualcosa servirà...
Comunque se ricordo bene 110 decibel sono 11 Bel, ovvero lascia una parte su 100 miliardi, mi sembra anche eccessivo, non si parlava di precisioni dell'ordine di una parte su centomila?
1 centesimo su alcune decine, diciamo una parte su centomila, e stiamo sicuri

Intanto. grazie mille per il tempo, la voglia, ecc, che dedicate a rispondere alle mie domande.

Maurotec:
Guarda che anche se un ingegnere legge il datasheet non è detto che il problema se lo può risolvere da solo, ma comunque è sempre un ingegnere, tu stai facendo il compito che spetta ad un ingegnere elettronico pur non essendolo. Procedi pure per tentativi, prova e riprova magari esce fuori ciò che ti soddisfa, ma è uno streess. Dico, chiedo, mi pongo una domanda; sei in un laboratorio, ci sarà pure uno straccio di ingegnere a cui chiedere lumi. Mi chiedo anche; che laboratorio è se non è possibile recapitare uno straccio di oscilloscopio, lo hai o no?

Il laboratorio in cui mi trovo sarebbe pure uno di quelli importanti in italia, visto che solo quì si fanno certe cose; ha strumentazione di un certo tipo ma non una buona (recente) strumentazione elettronica, anche se per gli esperimenti in corso sono stati fatti "grossi acquisti" per l'apparato di acquisizione. Non ci occupiamo di elettronica (evidentemente) ma nell'acquisizione dati (e ne facciamo moltissima) è fondamentale l'elettronica (ma questo alcuni dei miei capi lo capiscono poco o fanno finta di non capirlo). La tendenza che c'è è appunto comprare strumenti/apparati già fatti (per quanto detto, ovvero che noi non siamo elettronici), anche perchè farsele da sè è molto complicato e rognoso...
Ma come ho detto a inizio post, abbiamo pochi fondi e Arduino (pur essendo una board ad alto rumore, mi pare di aver capito) ha un potenziale pazzesco, soprattutto per i non elettronici.
Da quasi ingegnere (sono un laureando) so che non è affatto detto che avendo tutti i dati di una macchina la si può usare nel modo migliore. Quindi come hai giustamente detto, saper leggere il datasheet, che immagino richieda anche un certo tempo e studio, non vuol dire risolvere facilmente il problema.

Detto ciò, nel team di ricerca (tutti ingegneri) non abbiamo un elettronico (in condizioni "standard" non ne avremmo bisogno) ma solo un "tecnico" elettronico (...) che però viene impiegato in modo molto marginale.
Abbiamo un oscilloscopio (che per interesse personale mi piacerebbe imparare ad usare ma...), potrei tentare di fare qualche misura...

Maurotec:
mmmmm, grrrrr. Strada che non porta a nulla provare con questo e con quello copiato li e la.

Sono d'accordo. E' anche molto frustrante andare a tentativi in questo modo perchè "poco scientifico"...
Ma non posso fare molto di più temo...

Maurotec:
Il datasheet dice:
Brevemente, se si configura il chip per usare l'oscillatore interno, il 2400 filtra i residui 50 oo 60Hz al valore di 110dB (che ottimo, ma non sufficiente). Per vanificare il filtraggio il tuo termometro dovrebbe essere afflitto da un disturbo di linea in cui è presente un segnale a queste frequenze di intensità 110dB.

Oscilloscopio alla mano, si analizza il segnale analogico fornito dal termometro è si verifica l'entità di questo segnale indesiderato.

Quindi dovrei esaminare lo spettro del segnale in uscita e capire quali frequenze contiene, giusto?

Maurotec:
Ancora il fottuto manuale dice:
Per filtrare 60Hz FO (pin-8) collegalo a GND.
Per filtrare 50Hz FO (pin-8) collegalo a VCC (pin-1)

E questo l'avevo notato ed è il motivo (immagino) per cui nel circuito linkato a inizio post (di un posto in Germania, dove la rete è a 50Hz) c'è il collegamento da FO a VCC.

Maurotec:
Il resto del manuale me lo leggo (forse più tardi).

Ciao.

Ovviamente apprezzo moltissimo quanto hai già fatto, se troverai il tempo/la voglia per darmi altri suggerimenti te ne sarò grato.

Una domanda di contorno: quanto è importante la costruzione del PCB in questo tipo di applicazioni? Cioè, ci sono raccomandazioni su come predisporre il circuito? (posizione dei componenti, larghezza/lunghezza delle piste, schermatura del circuito, ecc)

Standardoil:
Dio Bono è un termometro, giusto?
Non importa molto il tempo di risposta
Ammennocche la frequenza di campionamento non sia vicina a un (sotto)multiplo della frequenza di rete in pochi secondi di media si toglie tutto il ripple
Che poi sarebbe a 100 o 120 Hz, doppia semionda

Diciamo che vorrei poter disporre (in acquisizione) di un campione ogni tot secondi (diciamo 5-10 secondi) perchè per quelle che devo fare la temperatura non varia (non dovrebbe variare) rapidamente.
Purtroppo quando converto in digitale vedo il segnale che ho allegato nel mio penultimo post... ma immagino che l'oscillazione sia legata alla conversione analogico-digitale.

Datman:
"Questi convertitori hanno un filtro digitale nel chip (detto Comb filter). Per applicazioni a bassa frequenza e alta risoluzione, questo filtro offre una reiezione della frequenza di rete a 50 o 60Hz e relative armoniche. Per ottenere una reiezione di oltre 110dB (300.000 volte!), è richiesta una frequenza del clock di conversione molto precisa. L'LTC2400 incorpora un oscillatore molto preciso. (...) Con oscillatore interno, l'LTC2400 offre una reiezione (a 50 o 60Hz+- 2%) di almeno 110dB."

Quindi posso assumere che la rete di sicuro non mi influenza l'acquisizione?

secondo me ti stai andando ad incertare...
mi sembra strano che tu abbia forti oscillazioni, ammenocche tu non abbia errori marchiani nel cablaggio
anche sì il problema del filtraggio delle alimentazioni del termometro è già stao risolto, dal costruttore del termometro
fai così

  1. prova a batteria: stacca il termometro e leggi la tensione di una pila
  2. prova a batteria 2.0: stacca anche l'alimentatore di Arduino e DAC e mettici due pile apposta per loro
  3. prova a batteria 33e1/3 l'insulto finale: leggi la seriale con un PC portatile "senza" il cavo di alimentazione, a batteria anche lui
    vedi cosa ottieni, poi posta qui risultati e codice
  1. prova a batteria: stacca il termometro e leggi la tensione di una pila
  2. prova a batteria 2.0: stacca anche l'alimentatore di Arduino e DAC e mettici due pile apposta per loro
  3. prova a batteria 33e1/3 l'insulto finale: leggi la seriale con un PC portatile "senza" il cavo di alimentazione, a batteria anche lui
    vedi cosa ottieni, poi posta qui risultati e codice

Saggia decisione, più che fare acquisire al LTC la tensione VREF che può essere inquinata.

Quindi posso assumere che la rete di sicuro non mi influenza l'acquisizione?

Di certezza no, analizzando il segnale uscente dal termometro tramite un oscilloscopio e analizzatore di spettro (FFT) puoi quantificare il disturbo e il segnale utile e ricavare il rapporto segnale/rumore. Allora sai che il disturbo viene filtrato di 110dB, se il rumore fosse di 10dB 110-10=100dB sotto il segnale utile, Allora se il rumore è -10dB sotto il segnale utile -10+ -110 = 120dB di attenuazione alla frequenza di 50Hz (noi in Italia questa abbiamo) allora potresti dire che di sicuro non ti influenza l'acquisizione.

Il suggerimento di @Standardoil ti viene in aiuto per escludere o meno l'inquinamento del segnale introdotto nel ADC.

Che poi sarebbe a 100 o 120 Hz, doppia semionda

Si, in sostanza il ripple residuo dopo raddrizzamento e livellamento e stabilizzazione. Tuttavia basta una sorgente che lavora a tensione di rete nelle vicinanze (una plafoniera neon, la lampada LED da scrivania ecc) per inquinare un segnale di impedenza relativamente alta. In questo caso una FFT sul segnale dovrebbe dare una indicazione dello spettro attorno queste frequenze e loro armoniche.

Una domanda di contorno: quanto è importante la costruzione del PCB in questo tipo di applicazioni? Cioè, ci sono raccomandazioni su come predisporre il circuito? (posizione dei componenti, larghezza/lunghezza delle piste, schermatura del circuito, ecc)

Importantissimo, però a meno di errori gravi ed evidenti all'attuale layer PCB questo è l'ultimo problema.
Comunque anche il manuale del LTC2400 contiene informazioni in relazione al layer e all'impedenza della sorgente da acquisire in relazione al condensatore da 10uf di cui parlavi.

Pag-22 - Driving the Input and Reference
Stessa pagina consiglia un collegamento delle masse a stella.
Pag-23 da indicazioni per selezionare il condensatore CIN in relazione a Rsource (impedenza della sorgente da acquisire)

Pag-24 - Figure 21. Full-Scale Error vs RSOURCE (Large C)
Pare evidente che se l'impedenza della sorgente da acquisire è prossima a 0 anche l'errore lo è, indipendentemente CIN.

Gli strumenti analogici dovrebbero avere impedenza standard di 600 ohm, quindi ridurre CIN riduce
anche l'errore, ma ci sarà anche un side effect, qual'è al momento non lo so.

Segui il suggerimento di @standardoil e facci sapere.

Ciao.

Allora sai che il disturbo viene filtrato di 110dB, se il rumore fosse di 10dB 110-10=100dB sotto il segnale utile, allora potresti dire che di sicuro non ti influenza l'acquisizione.

Forse volevi dire:
Se il rapporto segnale/rumore iniziale fosse 10dB, con 110dB di attenuazione in seguito al filtraggio otterresti un rapporto segnale/rumore di 10+110=120dB.

Forse volevi dire:
Se il rapporto segnale/rumore iniziale fosse 10dB, con 110dB di attenuazione in seguito al filtraggio otterresti un rapporto segnale/rumore di 10+110=120dB.

Esattamente. :slight_smile: correggo il post come meglio posso.

Intanto grazie anche per la traduzione di un pezzo di manuale LTC2400.

Ciao.

Aggiungo anche che CIN deve essere di buona qualità, in particolare la ESR (Equivalent series resistance) deve essere contenuta. Equivalent series resistance - Wikipedia

Ad esempio un condensatore ceramico SMD da 1uF 25V potrebbe essere la scelta di gran lunga migliore rispetto all'elettrolitico. Consigliata la posizione vicino ai pin VIN e GND.

Se vuoi approfondire sui condensatori: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=2ahUKEwifxo6Fh4TiAhXD2aQKHbNWDmUQFjAAegQIBhAB&url=https%3A%2F%2Fit.wikipedia.org%2Fwiki%2FCondensatore_(elettrotecnica)&usg=AOvVaw0XjNyaJ_lgBPfJTJqe-upv

Ciao.

aspetta, non esageriamo
che LOW ESR, filtraggi, madie mobili, ripple rejection rate e compagnia bella facciano bene sono pienamente d'accordo
ma qui stiamo parlando di un segnale in DC (e non parliami di variazioni rapide di temperatura), fornito da uno strumento di misura che "è previsto" per dare un segnale pulito in uscita
io ho dei forti dubbi che il problema sia nel filtraggio
vorrei vedere lo schema
il programma
il datasheet dello strumento
il datashett del DAC
le prestazioni degli alimentatori
ma PRIMA di tutto questo, togliamo le cause "banali":
alimentatori che hanno fuga al PE
anelli di massa sul PE
errori marchiani di cablaggio e di programmazione
ché io voto che il problema è li da quelle parti
comunque: una bella prova tutto a batterie, solo DC non servono condensatore ne filtri, abbiamo delle indicazioni

@standardoil
Condivido, però mi riferisco a CIN che non ha funzione di filtro ma serve al circuito sample/hold per lavorare.
Questo condensatore c'è anche nel atmega ma è integrato nel chip. LTC2400 non lo ha integrato e quindi e possibile sceglierne il valore, tipo ecc.

A questo link vedi lo schema di principio e il funzionamento.
Stessa cosa per ADC dell'atmega che richiede una sorgente da acquisire di impedenza non superiore a circa 10kohm.

Da fonte wikipedia un condesatore da 22uf ha una ESR 7–30 Ω Standard aluminum.

Ciao.