Go Down

Topic: Pt100 e Smartec UTI (Read 6470 times) previous topic - next topic

GianfrancoPa

No no, nessuna media, sono solo i valori nudi e crudi. Con una media secondo te i valori si appiattirebbero??

Inoltre ho effettuato un altro tipo di collegamento, come indicato nella figura 9c di pagina 13 del datasheet. Ottengo rilevazioni più stabili:

Resistenza: 109.92   Base Zero: 9.92   Temperatura: 25.83   Norm: 25.83   
Resistenza: 109.90   Base Zero: 9.90   Temperatura: 25.79   Norm: 25.79   
Resistenza: 109.78   Base Zero: 9.78   Temperatura: 25.48   Norm: 25.48   
Resistenza: 109.83   Base Zero: 9.83   Temperatura: 25.61   Norm: 25.61   
Resistenza: 109.88   Base Zero: 9.88   Temperatura: 25.74   Norm: 25.74   
Resistenza: 109.84   Base Zero: 9.84   Temperatura: 25.64   Norm: 25.64   
Resistenza: 109.93   Base Zero: 9.93   Temperatura: 25.87   Norm: 25.87   
Resistenza: 109.92   Base Zero: 9.92   Temperatura: 25.84   Norm: 25.84   
Resistenza: 109.92   Base Zero: 9.92   Temperatura: 25.84   Norm: 25.84   
Resistenza: 109.96   Base Zero: 9.96   Temperatura: 25.95   Norm: 25.95   
Resistenza: 109.89   Base Zero: 9.89   Temperatura: 25.76   Norm: 25.76   
Resistenza: 109.92   Base Zero: 9.92   Temperatura: 25.83   Norm: 25.83   
Resistenza: 109.87   Base Zero: 9.87   Temperatura: 25.71   Norm: 25.71   
Resistenza: 109.92   Base Zero: 9.92   Temperatura: 25.85   Norm: 25.85


Così secondo me sono ottime rilevazioni!! Di sicuro non sono più "isteriche" come accadeva quando usavo il cavo lungo...

Ora resterebbe solo da fare prove in altri ambienti, come da te consigliato, e soprattutto tarare per benino il sensore. come consigliereste di fare???

Grazie mille ;)
Gianfranco

PaoloP


Ora resterebbe solo da fare prove in altri ambienti, come da te consigliato, e soprattutto tarare per benino il sensore. come consigliereste di fare???


Per tararla, considerando un rapporto lineare tra resistenza e temperatura, ti servono 2 punti noti. Due coppie resistenza e temperatura.
I più semplici da ottenere sono 0 °C e 100 °C .
Con lo zero ho visto che hai già sperimentato. Adesso, all'ora di pranzo... quando la pasta bolle... misuri la resistenza del sensore. (occhio all'eventuale moglie/compagna/fidanzata)
Con le due coppie di dati ti calcoli le constanti da inserire nella formula.

GianfrancoPa

Perfetto, grazie per la conferma. Solo un piccolo chiarimento:

per l'esperimento del ghiaccio devo aspettare che questo si sciolga e misurare la temperatura dell'acqua con il ghiaccio ancora in parte non dissolto? Come descritto qua in pratica : http://www.fisica.uniud.it/URDF/secif/termo/stati/es19.htm
Gianfranco

lesto

sì, il ghiaccio che non si scioglie ha una tempoeratura più bassa degli 0°. onvcee il ghiaaccio che si cioglie, può essere anche in forno, ma fichè è sotto forma di ghiaggio non va sopra gli 0°. il calore in più fa solo aumentare la velocità di fusione. la stessa cosa vale per l'acqua che evapora: non supera mai i 100°, per questo alcune cose si fanno  a bagno maria, come il cioccolato, perchè a temperature poco oltre i 100° brucierebbero, e con questo trucco invece si fa un cuscinetto s'acqua della giusta temperatura.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

GianfrancoPa

#19
Oct 28, 2012, 02:35 pm Last Edit: Oct 28, 2012, 03:06 pm by GianfrancoPa Reason: 1
Allora, ho effettuato le prove di calibrazione, ecco come ho condotto gli esperimenti (si vede che sono in cucina :D):






Il sensore immerso nel ghiaccio + acqua segna mediamente una resistenza di 101.82 ohm, mentre nel punto di ebollizione mediamente registra 138,69 ohm. La pressione atmosferica non normalizzata è 985 hPa, di conseguenza il punto di ebollizione dovrebbe essere di 99,3°C, il che porterebbe l'ipotetico valore dei 100°C a 138,96 ohm

Considerando che il sensore è una PT100 classe B dovrebbe in teoria segnare 100 ohm a 0°C e 138,4°C a 100°C. Ovviamente che il mio a 0°C segni qualche ohm in più ci sta, ma per il punto di ebollizione ottenere uno scostamento uguale a quello ottenuto per il punto di fusione? Come dovrei regolarmi nella taratura? dovrei fare 138,96 - 101.82 e dividere per 100?

Grazie mille a tutti!!!
Gianfranco

PaoloP

#20
Oct 28, 2012, 04:01 pm Last Edit: Oct 28, 2012, 04:07 pm by PaoloP Reason: 1
Considerando un andamento lineare la formula per calcolare la temperatura dovrebbe essere di questo tipo:
Temperatura = A*Resistenza+B

Per calcolare le costanti A e B hai bisogno due coppie.
Ora tu hai:
0° e 101.82
99.3° e 138,69

Bene adesso risolvi il sistema lineare di due equazioni e troverai i coefficienti A e B.

Con dei calcoli veloci ho ottenuto:
A = 2,69324654
B = -274,226363

Quindi la tua formula dovrebbe essere:
Temperatura = 2,69324654*Resistenza-274,226363

GianfrancoPa

Ottimo, grazie!!!

In settimana attendo le resistenze con tolleranza dell'1%, dopodichè metto su il tutto su una millefori o su basetta autocostruita e vediamo se aumento ancora la precisione!

A che ci sono avrei qualche domandina da porvi:

1) Per ottenere la massima precisione nel risultato, a parità di classe, meglio una PT100 o una PT1000? Ovviamente per le prossime applicazioni acquisterò sonde a 4 fili.
2) Ho visto delle resistenze al platino in film, come questa qua http://it.rs-online.com/web/p/termoresistenza-al-platino/6667362/, che ne pensate? Una Pt100 classe A dal costo relativamente basso.
Gianfranco

GianfrancoPa

Allora, usando delle resistenze con precisione 1% non so per quale ragione, ma ottengo risultati abbastanza disomogenei... ritorno ad utilizzare le resistenze con precisione 5% come indicato nel datasheet.

Inoltre ho adattato il codice per un utilizzo con una PT100 a 4 vie:

Code: [Select]
int ReadUTI(uint8_t pin, float * res1,float * res2,float * res3,int refRes)
{
    int state = HIGH;
    int i,startindex=-1;
    uint8_t bit = digitalPinToBitMask(pin);
    uint8_t port = digitalPinToPort(pin);
    uint8_t stateMask = (state ? bit : 0);
    unsigned long width[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
    float nOff=0,nAB=0,nCD=0,nBC=0,nDF=0;
       
    while ( (*portInputRegister(port) & bit) != stateMask)
        ;
   
    for(i=0;i<10;i++) {
      while ( (*portInputRegister(port) & bit) == stateMask)
          width[i]++;
      while ( (*portInputRegister(port) & bit) != stateMask)
          width[i]++;
    }
    for(i=1;i<10;i++) {
      if(i<6) {
        if(width[i]<width[i+2]&&width[i]<width[i+3]&&width[i]<width[i+4]&&width[i+1]<width[i+2]&&width[i+1]<width[i+3]&&width[i+1]<width[i+4]) {
          startindex=i;
          i=10;
        }
      }
    }
    if(startindex!=-1) {
      nOff=width[startindex]+width[startindex+1];
      nAB=width[startindex+2];
      nCD=width[startindex+3];
      nBC=width[startindex+4];
      nDF=width[startindex+5];
     
      *res1=((nBC-nOff)/(nAB-nOff))*refRes;
      *res2=((nCD-nOff)/(nAB-nOff))*refRes;
      *res3=((nDF-nOff)/(nAB-nOff))*refRes;
     
      return 1;
    }
    else {
      return 0;
    }
}


Il valore della resistenza è dato da res2, tutte le altre variabili sono superflue in questo caso.
Gianfranco

GianfrancoPa

Allora, ho fatto altre prove. Il sensore a 4 fili mostra essere decisamente più stabile nelle letture della temperatura, inoltre ho anche trasferito il tutto da breadboard a basetta millefori. Ho implementato il codice affinchè effettui una media di venti valori, uno ogni mezzo secondo. La media tiene conto delle ultime venti rilevazioni e di volta in volta scarta il valore più vecchio.

Utilizzando questa configurazione, mettendo il termometro nel ghiaccio, ottenevo valori che andavano da 99.7 Ohm a 100.2 ohm. Decisamente meglio rispetto a prima, ma la forchetta di oscillazione era ancora ampia!!

Allora ho seguito, anche se in ritardo, uno dei consigli iniziali, ovvero ho ricoperto tutto il cavo con della pellicola di alluminio e poi l'ho collegata a gnd. Non so per quale ragione, ma nel momento in cui effettuavo il collegamento, la rilevazione schizzava immediatamente di circa 2 ohm. Con stupore però ho notato che sotto schermatura ho raggiunto una stabilità che mi lascia davvero soddisfatto, con oscillazioni che vanno nell'ordine di +- 0.1 ohm.

Con la schermatura ho eseguito le calibrature a 0°C e 100°C, e successivamente ho trovato (sempre come mi avete consigliato di fare), la formula corrispondente.

Questo è il grafico delle rilevazioni ottenute immergendo la sonda in acqua e ghiaccio per oltre 10 minuti:



Valori che hanno oscillato tra 102,09 e 102. Molto stabile!!!

Poi ho messo il sensore in un pentolino a fuoco costante, partendo da acqua a temperatura ambiente:



Ecco il grafico ottenuto risultato dopo un campionamento di circa 40 minuti:



In fase di ebollizione ho ottenuto un valore medio di 140,39 ohm.

Considerando che la schermatura ha aggiunto un offset di circa 2 ohm, i valori rientrano nelle specifiche del sensore. Ma qualcuno saprebbe spiegarmi il motivo di questo slittamento e conseguente guadagno in stabilità???

Grazie mille!!!
Gianfranco

PaoloP

Sono felice che tu abbia risolto.
Riguardo alla stabilità credo che la calza riduca le interferenze esterne, per lo slittamento non so.

Se vuoi condividere il tuo lavoro con gli altri potresti postare gli schemi dei collegamenti, le foto della board e lo sketch utilizzato.
Altri utenti sicuramente apprezzerebbero.  :D
Grazie.  ;)

GianfrancoPa

Aggiungo solo questo:

Poichè la pressione ambientale non normalizzata al momento dei test era di circa 996,8 hPa, posso desumere che la temperatura di ebollizione era di circa 99,56°C. Utilizzando i dati a disposizione trovo la formula:

T = 2,596415876 * Ohm - 264,95648

Facendo la formula inversa trovo che per 100°C la resistenza dovrebbe essere di 140,56 ohm. Levando l'offset di 2 ohm che ottengo dalla schermatura mi ritrovo 138,56°C, che dovrebbe essere il valore di costruzione per 100°C.

In ogni caso certo che voglio condividere, scrivo tutto proprio per questa ragione!! Appena ho novità metto tutto qui :D
Gianfranco

astrobeed


In ogni caso certo che voglio condividere, scrivo tutto proprio per questa ragione!! Appena ho novità metto tutto qui :D


Giusto per curiosità, dove hai acquistato lo Smartec UTI ?
Sia Digikey che Mouser e RS non trattano questo produttore.


lesto

GRANDE! felice che sia riuscito a risolvere, ora che hai capito che il gosso problema era l'effetto antenna, vedi miglioramenti tra l'uso di resistenze di precisione e normali resistenze?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

GianfrancoPa

Allora, la differenza tra pt100 a 2 fili e 4 fili c'è, si vede, e non è poco. Su internet ho cercato molte informazioni sulle PT100 e su come realizzare la strumentazione adatta per limitare il più possibile l'errore nelle rilevazioni. Ad un certo punto mi son messo le mani nei capelli per quante cose possono incidere nella validità dei risultati! La soluzione a 4 fili risolve una moltitudine di problemi, come la resistenza del cavo, delle saldature, ecc ecc!

Alla fine all'errore di costruzione che per una PT100 classe A è di 0,15°C bisogna aggiungere quello della strumentazione che può valere tantissimo. Così tanto che forse è conveniente utilizzare un semplice ds18b20 che per costruzione ha un errore di mezzo grado C. Considerate che il solo smartec uti ha di suo un errore di costruzione di circa +- 0,1°C (80 mK).
Poi è un casino per quel che riguarda l'auto riscaldamento del sensore. Non nascondo che ancora non sono in grado di affrontare e gestire appieno questo inconveniente, infatti sarà questo l'oggetto dei miei prossimi studi...

Altra cosa che sto studiando per bene è la conversione del valore da ohm a gradi C. Il semplice dividere il valore della resistenza per 0,384 è davvero una pessima soluzione quando si vuole realizzare uno strumento di precisione!!!

Lo smartec uti l'ho preso da distrelect, quasi 9 euro di integrato più spese postali...

Ecco il link https://www.distrelec.it/sensor-interface-dil-16/smartec/uti-dil16/647495
Gianfranco

PaoloP

Per la trasformazione da resistenza a temperatura potresti passare all'interpolazione polinomiale, ma non è così semplice.

Go Up