Sommario:
- Passaggio 1: componenti
- Passaggio 2: ponte di Wheatstone
- Passaggio 3: amplificazione
- Passaggio 4: alimentazione del circuito
- Passaggio 5: circuito completo e codice
- Step 6: Time Response of PT100
Video: Misurazione della temperatura da PT100 utilizzando Arduino: 6 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-31 10:21
Il PT100 è un rilevatore di temperatura a resistenza (RTD) che cambia la sua resistenza a seconda della temperatura circostante, è ampiamente utilizzato per processi industriali con dinamiche lente e intervalli di temperatura relativamente ampi. Viene utilizzato per processi dinamici lenti perché gli RTD hanno tempi di risposta lenti (di cui parlerò più avanti) ma sono precisi e hanno una deriva ridotta nel tempo. Quello che ti mostrerò in questo Instructable non sarebbe all'altezza degli standard industriali ma ti esporrà a un modo alternativo per misurare la temperatura rispetto all'utilizzo dell'LM35 con cui molti hobbisti avrebbero familiarità e la teoria del circuito mostrata può essere applicato ad altri sensori.
Passaggio 1: componenti
1x PT100 (due fili)
1x Arduino (qualsiasi modello)
3 amplificatori operazionali 741 (LM741 o UA741)
1x resistenza da 80 ohm
2 resistori da 3,9 kohm
2 resistori da 3,3 kohm
2 resistenze da 8,2 kohm
2 resistori da 47 kohm
1x potenziometro da 5 kohm
1x alimentatore a due terminali o 8 batterie AA da 1,5 V
Sto usando una PT100 a due fili, le PT100 a tre e quattro fili avranno circuiti diversi. I valori dei resistori per la maggior parte di questi non devono essere esattamente gli stessi di quelli sopra, ma se c'è una coppia di resistori, ad esempio i 3.9Kohm, se li hai scambiati per diciamo 5k, dovresti scambiarli entrambi per 5k come allora deve essere lo stesso. Quando avremo il circuito dirò l'effetto della scelta di valori diversi. Per gli amplificatori operazionali (operazionali) puoi usare altri amplificatori operazionali ma questi sono quelli che ho usato io.
Passaggio 2: ponte di Wheatstone
Devo prima parlare della formula per ottenere la temperatura dalla resistenza per il PT100 prima di parlare della prima parte del circuito, la formula per la resistenza è la seguente:
dove Rx è la resistenza PT100, R0 è la resistenza PT100 a 0 gradi C, α è il coefficiente di resistenza alla temperatura e T è la temperatura.
R0 è 100 ohm poiché questo è un PT100, se fosse un PT1000, R0 sarebbe 1000 ohm. α è 0,00385 ohm/gradi C preso dalla scheda tecnica. C'è anche una formula più accurata che può essere trovata qui, ma la formula sopra andrà bene per questo progetto. Se trasponiamo la formula possiamo calcolare la temperatura per una data resistenza:
Diciamo che vogliamo misurare qualcosa che avrebbe un intervallo di temperatura da -51,85 a 130 gradi C e abbiamo posizionato il PT100 nel circuito mostrato nella figura 1. Usando l'equazione sopra e l'equazione per la tensione fuori da un partitore di tensione (mostrato nella prima immagine) possiamo calcolare il range di tensione. T inferiore della gamma = -51,85 (80 ohm)
e a 130 gradi (150 ohm):
Ciò darebbe un intervallo di 0,1187 V e un offset CC di 0,142 perché sappiamo che la nostra temperatura non scenderà mai al di sotto di -51,85 gradi C, questo ridurrà la sensibilità nell'intervallo che ci interessa (da 80 a 130 ohm) quando amplifichiamo questa tensione. Per eliminare questo offset DC e aumentare la nostra sensibilità, possiamo usare un ponte di Wheatstone mostrato nella seconda immagine.
L'uscita del secondo partitore di tensione (Vb-) verrà sottratta dalla prima uscita del partitore di tensione (Vb+) utilizzando un amplificatore differenziale in seguito. La formula per l'uscita del ponte è solo due divisori di tensione:
La tensione in uscita per il PT100 è di 80 ohm e utilizzando gli altri valori nell'immagine:
e per Pt100 essendo 150 ohm:
Usando il Wheatstone ci liberiamo dell'offset DC e aumentiamo la sensibilità dopo l'amplificazione. Ora che sappiamo come funziona il ponte di Wheatstone, possiamo parlare del motivo per cui usiamo 80 ohm e 3,3 kohm. Gli 80 ohm sono in qualche modo spiegati dalla formula sopra, scegli questo valore (lo chiameremo resistore di offset Roff) per essere il range inferiore della tua temperatura o anche meglio, leggermente al di sotto del fondo del tuo range, se questo viene utilizzato per un sistema di controllo per la regolazione della temperatura o qualcosa del genere, vorresti sapere quanto la temperatura scende al di sotto del tuo intervallo di temperatura. Quindi se -51,85C è il minimo della tua gamma, usa 74,975 ohm (-65 gradi C) per il tuo Roff.
Ho scelto 3.3k per R1 e R3 per due motivi, per limitare la corrente e aumentare la linearità dell'uscita. Poiché il PT100 cambia resistenza a causa della temperatura, il passaggio di troppa corrente darà letture errate a causa dell'autoriscaldamento, quindi ho scelto una corrente massima di 5-10 mA. Quando il PT100 è 80 ohm, la corrente è 1,775 mA, quindi al di sotto del range massimo. Diminuisci la resistenza per aumentare la sensibilità, ma ciò potrebbe avere un effetto negativo sulla linearità, poiché utilizzeremo l'equazione di una linea in seguito (y=mx+c) con un'uscita non lineare introdurrà errori. La terza immagine ha un grafico dell'uscita del ponte utilizzando diversi resistori superiori, la linea continua è l'uscita effettiva e la linea tratteggiata è l'approssimazione lineare. Puoi vedere nel grafico blu scuro (R1 e R3 = 200 ohm) che fornisce la gamma di tensione più ampia ma l'uscita è la meno lineare. L'azzurro (R1 e R3 = 3,3 kohm) fornisce l'intervallo di tensione più piccolo, ma la linea tratteggiata e la linea continua sono sovrapposte, mostrando che la sua linearità è molto buona.
Sentiti libero di cambiare questi valori per adattarli alla tua applicazione, anche se cambi la tensione, assicurati che la corrente non diventi troppo alta.
Passaggio 3: amplificazione
Nell'ultimo passaggio, abbiamo scoperto che l'intervallo di uscita dei due divisori di tensione sottratti era compreso tra 0 e 0,1187 ma non abbiamo parlato di come sottrarre queste tensioni. Per fare ciò avremo bisogno di un amplificatore differenziale che sottragga un ingresso dall'altro e lo amplificherà del guadagno dell'amplificatore. Il circuito per un amplificatore differenziale è mostrato nella prima immagine. Si alimenta Vb+ nell'ingresso invertente e Vb- nell'ingresso non invertente e l'uscita sarà la Vb+ - Vb- con un guadagno di uno cioè nessuna amplificazione ma sommando le resistenze mostrate in figura si aggiunge un guadagno di 5.731. Il guadagno è dato da:
Ra è R5 e R7 e Rb è R6 e R8, la tensione in uscita è data da:
Ci sono due problemi con il semplice collegamento di questo amplificatore all'uscita del ponte, l'effetto di caricamento e la modifica del guadagno. Cambiare il guadagno dell'amplificatore richiede di cambiare almeno due resistori poiché le due coppie di resistori devono essere uguali, quindi avere due potenziometri che devono avere lo stesso valore sarebbe fastidioso, quindi useremo qualcosa chiamato amplificatore per strumentazione di cui parlo di seguito. L'effetto di caricamento sono i resistori di ingresso nell'amplificatore che influenzano la caduta di tensione attraverso il PT100, vogliamo che la tensione attraverso il PT100 sia invariata e per farlo possiamo scegliere resistori molto grandi per i resistori di ingresso in modo che la resistenza parallela del PT100 e il resistore di ingresso è molto vicino alla resistenza PT100, ma ciò può causare problemi con il rumore e l'offset dell'uscita di tensione che non ho intenzione di approfondire. Scegli la gamma media nella gamma Kohms ma, come stavo dicendo, anche avere piccoli resistori è un male, quindi cambieremo un po' il circuito.
Nella seconda immagine abbiamo l'uscita del ponte collegata ad un amplificatore da strumentazione che funge da amplificatore tampone per separare le due metà dei circuiti (il ponte e l'amplificazione) e permette anche di amplificare l'ingresso cambiando un solo potenziometro (Guadagno). Il guadagno dell'amplificatore per strumentazione è dato da:
dove Rc sono i due resistori da 3,9k sopra e sotto il potenziometro.
Diminuendo Rgain, l'amplificazione aumenta. Quindi al punto Va e Vb (Vb+ e Vb- amplificati), è solo un amplificatore differenziale come prima e il guadagno totale del circuito è solo i guadagni moltiplicati insieme.
Per scegliere il tuo guadagno vuoi fare qualcosa come abbiamo fatto prima con il Roff, dovremmo scegliere una resistenza appena al di sopra della tua temperatura massima nel tuo intervallo nel caso in cui superi. Poiché stiamo usando Arduino che ha un adc di 5 V, l'uscita massima del circuito dovrebbe 5 V alla temperatura massima che hai scelto. Scegliamo i 150 ohm come resistenza massima e la tensione del ponte non amplificata era 0,1187V, il guadagno di cui abbiamo bisogno è 42.185 (5/0.1187)
Diciamo che manteniamo Ra, Rb e Rc come 8.2k, 47k e 3.9k, dobbiamo solo trovare il valore per il pot Rgain:
Quindi, per ottenere tutti i 5 volt dall'intervallo di temperatura che stiamo utilizzando, cambia il valore di Rgain a 1.226k. La tensione di uscita in uscita dall'amplificatore differenziale è data da:
Passaggio 4: alimentazione del circuito
Questo è l'ultimo passaggio del circuito, potresti aver notato il Vcc+ e il Vcc- sui circuiti dell'amplificatore operazionale, questo perché hanno bisogno sia della tensione positiva che negativa per funzionare correttamente, puoi ottenere amplificatori operazionali a binario singolo ma ho deciso usare questi amplificatori perché era quello che avevo in giro. Quindi forniremo +6V e -6V, ci sono tre modi per farlo. Il primo è mostrato nella prima immagine dove dobbiamo due alimentatori o due terminali di uscita da un unico alimentatore, avere entrambi a 6V e avere un'uscita positiva collegata al negativo dell'altro. I 6V dell'alimentazione superiore saranno i nostri +6V, il positivo dell'alimentazione inferiore è GND e il negativo dell'alimentazione inferiore è -6V. COLLEGALO IN QUESTO MODO SOLO SE I GND DELLE DUE ALIMENTAZIONI SONO SEPARATI O DANNEGGERÀ LA TUA ALIMENTAZIONE. Tutti gli alimentatori commerciali avrebbero GND separati ma se vuoi controllare, usa il tester di continuità sul tuo multimetro, se ronza, non usare questa configurazione e usa il prossimo. Sulla mia scorta fatta in casa, ho fatto saltare il fusibile in questo modo.
Nella seconda immagine c'è la seconda configurazione che possiamo avere, richiede che un alimentatore abbia il doppio della tensione dell'altro ma non danneggerà l'alimentatore se i GND sono collegati. Abbiamo due alimentazioni, una a 12V e l'altra a 6V. Il 12V agirà come il nostro +6V, il 6V della seconda alimentazione fungerà da GND e le due GND effettive delle alimentazioni agiranno da -6V.
Quest'ultima configurazione è per gli alimentatori con una sola uscita, utilizza un amplificatore buffer di guadagno 1 per creare una massa virtuale facendo passare metà della tensione di alimentazione attraverso l'amplificatore buffer. Quindi il 12V fungerà da +6V e il terminale GND effettivo sarà -6V.
Se si desidera utilizzare le batterie, suggerirei la prima configurazione, ma un problema con le batterie è che la tensione diminuirà quando iniziano a esaurirsi e anche la tensione fuori dal ponte diminuirà, fornendo letture di temperatura errate. Ovviamente potresti leggere la tensione dalle batterie e includerle nei calcoli o utilizzare regolatori e più batterie. Alla fine, tocca a te.
Passaggio 5: circuito completo e codice
Il circuito completo è mostrato sopra ed è stato realizzato nel nuovo Circuits.io di Autodesk che consente di creare circuiti su breadboard, modificare lo schema circuitale (mostrato nella figura 2) e i diagrammi PCB e la parte migliore, consente di simulare il circuito dalla breadboard e puoi anche programmare un Arduino e collegarlo in modalità breadboard, più in basso nella pagina c'è la simulazione e puoi giocare con due pentole. Se vuoi duplicare il circuito e inserire i tuoi valori, puoi trovare il circuito qui. Il primo potenziometro è da 70ohm e in serie con un resistore da 80ohm che simula il PT100 con un range di 80-150ohm, il secondo potenziometro è il guadagno dell'amplificatore della strumentazione. Purtroppo ho usato una libreria che ho scaricato per il mio codice, quindi Arduino non è incluso nel circuito sottostante ma ci sono solo due fili extra che devi collegare. Se sei più a tuo agio con LTspice, ho incluso un file asc con il circuito.
Collegare il pin A0 all'uscita dell'amplificatore differenziale
Collega il GND di Arduino al GND del circuito (NON IL -6V)
E questo è il circuito fatto, ora sul codice. Prima ho detto che useremo la formula y=mx+c, ora calcoleremo m (la pendenza) e c (l'offset). In Arduino, leggeremo la tensione ma l'equazione della temperatura richiede che conosciamo la resistenza del PT100, quindi un modo per farlo è sostituire Serial.println(temp) con Serial.println(V) e registrare il tensione e resistenza a due temperature. Quando si esegue questo test, lasciare il PT100 da solo per un po', ad esempio un minuto o due, e tenerlo lontano da qualsiasi fonte di calore (luce solare, ventola del laptop, corpo, ecc.).
Il primo punto che possiamo prendere è la temperatura ambiente, quando avete il circuito collegato e funzionante, registrate la tensione (Vt1) letta da Arduino sul monitor seriale e scollegate velocemente il PT100 e registrate la sua resistenza (Rt1), non mettete il vostro mani sulla sonda durante la disconnessione in quanto ciò cambierà la resistenza. Per la seconda temperatura, potremmo mettere la sonda in acqua ghiacciata o acqua calda (attenzione se si usa acqua calda) e ripetere quanto fatto prima di trovare Vt2 e Rt2. Subito dopo aver posizionato la sonda nel liquido, attendere un minuto o due affinché la resistenza si stabilizzi. Se sei interessato al tempo di risposta del PT100, registra la tensione di spegnimento del monitor seriale ogni 2 secondi circa e possiamo trarre un grafico da questo e te lo spiego dopo. Utilizzando le due tensioni e resistenze, possiamo calcolare la pendenza come segue:
Rt1 e Rt2 sono le resistenze alle due temperature e lo stesso vale per le tensioni Vt1 e Vt2. Dalla pendenza e da uno dei due insiemi di punti che hai registrato possiamo calcolare l'offset:
C dovrebbe essere vicino al tuo vero Roff, dalla mia simulazione ho calcolato questi valori:
Da questa resistenza possiamo ricavare la nostra temperatura utilizzando la formula che avevamo all'inizio:
E questo è tutto, il codice per Arduino è sotto, se hai problemi, lascia un commento e cercherò di aiutarti.
Non ci sono foto del circuito che ho realizzato perché l'ho realizzato tempo fa e non ho più la PT100 da rifare e testare, ma devi solo credermi che funziona. Non c'è molto sul PT100 su Instructables che ho trovato, ecco perché l'ho reso bile.
Nel passaggio successivo parlerò del tempo di risposta del PT100 e se non sei interessato alla matematica, quando stai misurando un cambiamento di temperatura, lascia che il PT100 si stabilizzi per circa un minuto prima di prendere la lettura.
Se sei interessato a vedere altri progetti che ho realizzato, visita il mio
Blog: Roboroblog
Canale YouTube: Roboro
Oppure guarda gli altri miei Instructables: qui
Se l'HTML fa confusione con il codice sottostante, il codice è allegato
* Questo codice calcola la temperatura utilizzando un PT100
* Scritto da Roboro * Github: <a href="https://github.com/RonanB96/Read-Temp-From-PT100-… <a href="https://github.com/RonanB96/Read-Temp- Da-PT100-… <a href="https://github.com/RonanB96/Read-Temp-From-PT100-… >>>>>>>>> * Circuit: <a href=" href="https://github.com/RonanB96/Read-Temp-From-PT100-… <a href=" https://github.com/ronanb96/read-temp-from-pt100-…="">>>>>>>>>> * Blog: <a href=" href="https://github.com/RonanB96/Read-Temp-From-PT100-… <a href=" https://github.com/ronanb96/read-temp-from-pt100-…="">>>>>>>>>> * Instrustable Post: <a href=" href="https://github.com/RonanB96/Read-Temp-From-PT100-… <a href=" https://github.com/ronanb96/read-temp-from-pt100-…="">>>>>>>>>> * */ //You'll need to download this timer library from here //https://www.doctormonk.com/search?q=timer #include "Timer.h" // Define Variables float V; float temp; float Rx; // Variables to convert voltage to resistance float C = 79.489; float slope = 14.187; // Variables to convert resistance to temp float R0 = 100.0; float alpha = 0.00385; int Vin = A0; // Vin is Analog Pin A0 Timer t; // Define Timer object
void setup() {
Serial.begin(9600); // Set Baudrate at 9600 pinMode(Vin, INPUT); // Make Vin Input t.every(100, takeReading); // Take Reading Every 100ms } void loop() { t.update(); // Update Timer } void takeReading(){ // Bits to Voltage V = (analogRead(Vin)/1023.0)*5.0; // (bits/2^n-1)*Vmax // Voltage to resistance Rx = V*slope+C; //y=mx+c // Resistance to Temperature temp= (Rx/R0-1.0)/alpha; // from Rx = R0(1+alpha*X) // Uncommect to convet celsius to fehrenheit // temp = temp*1.8+32; Serial.println(temp); }
Step 6: Time Response of PT100
Quindi ho detto che il PT100 ha una risposta lenta ma possiamo ottenere una formula per la temperatura corrente letta dal PT100 in qualsiasi momento t. La risposta del PT100 è una risposta del primo ordine che può essere scritta in termini di Laplace, cioè funzione di trasferimento, come:
dove tau(τ) è la costante di tempo, K è il guadagno del sistema es è l'operatore di Laplace che può essere scritto come jω dove ω è la frequenza.
La costante di tempo ti dice quanto tempo impiega un sistema del primo ordine per assestarsi al suo nuovo valore e una regola o un pollice è che 5*tau è quanto tempo impiegherà per assestarsi al nuovo stato stazionario. Il guadagno K ti dice quanto sarà amplificato l'ingresso. Con il PT100, il guadagno è quanto cambia la resistenza diviso per il cambiamento di temperatura, scegliendo due valori casuali da questo foglio dati, ho ottenuto un guadagno di 0,3856 ohm/C.
Prima ti dicevo che potresti registrare la tensione ogni 2s dopo aver messo la sonda nel liquido, caldo o freddo, da questo possiamo calcolare la costante di tempo del sistema. Per prima cosa è necessario identificare dove si trovano il punto iniziale e il punto finale, il punto iniziale è la tensione prima di inserire la sonda nel liquido e il punto finale è quando si è stabilizzata. Quindi sottraili e questo è il cambiamento di tensione del gradino, il test che hai condotto era un cambiamento di gradino che è un cambiamento improvviso nell'input di un sistema, il gradino è la temperatura. Ora sul tuo grafico vai al 63,2% della variazione di tensione e questa volta è la costante di tempo.
Se inserisci quel valore nella funzione di trasferimento, hai la formula per descrivere la risposta in frequenza dei sistemi ma non è quello che vogliamo in questo momento, vogliamo la temperatura effettiva al tempo t per un gradino di temperatura, quindi stiamo andando dover eseguire una trasformata di Laplace inversa di un passo nel sistema. La funzione di trasferimento di un sistema del primo ordine con un input di un passo è la seguente:
Dove Ks è la dimensione del gradino, ovvero la differenza di temperatura. Quindi diciamo che la sonda è stabilizzata a 20 gradi C, posta in acqua a 30 gradi C e la sonda ha una costante di tempo di 8 secondi, la funzione di trasferimento e la formula del dominio del tempo sono le seguenti:
Il δ(t) significa solo un impulso, cioè un offset DC di 20 gradi C in questo caso, puoi semplicemente scrivere 20 nelle tue equazioni quando lo calcoli. Questa è l'equazione standard per il passaggio in un sistema del primo ordine:
Quanto sopra calcola la temperatura al tempo t, ma funzionerà per la tensione poiché sono proporzionali tra loro, hai solo bisogno del valore iniziale e finale, della costante di tempo e della dimensione del passo. Un sito web chiamato Symbolab è ottimo per verificare se i tuoi calcoli sono corretti, può fare Laplace, integrazione, differenziazione e molte altre cose e ti dà tutti i passaggi lungo la strada. L'inversa trasformata di Laplace sopra può essere trovata qui.
Consigliato:
Misurazione della temperatura utilizzando STS21 e Arduino Nano: 4 passaggi
Misurazione della temperatura utilizzando STS21 e Arduino Nano: il sensore di temperatura digitale STS21 offre prestazioni superiori e un ingombro ridotto. Fornisce segnali calibrati e linearizzati in formato digitale I2C. La fabbricazione di questo sensore si basa sulla tecnologia CMOSens, che attribuisce al superiore
Misurazione della temperatura utilizzando ADT75 e Arduino Nano: 4 passaggi
Misurazione della temperatura utilizzando ADT75 e Arduino Nano: ADT75 è un sensore di temperatura digitale altamente accurato. Comprende un sensore di temperatura a banda proibita e un convertitore da analogico a digitale a 12 bit per il monitoraggio e la digitalizzazione della temperatura. Il suo sensore altamente sensibile lo rende abbastanza competente per me
Misurazione dell'umidità e della temperatura utilizzando HIH6130 e Arduino Nano: 4 passaggi
Misurazione di umidità e temperatura utilizzando HIH6130 e Arduino Nano: HIH6130 è un sensore di umidità e temperatura con uscita digitale. Questi sensori forniscono un livello di precisione di ±4% UR. Con stabilità a lungo termine leader del settore, I2C digitale con compensazione della temperatura reale, affidabilità leader del settore, efficienza energetica
Misurazione della temperatura utilizzando LM75BIMM e Arduino Nano: 4 passaggi
Misurazione della temperatura utilizzando LM75BIMM e Arduino Nano: LM75BIMM è un sensore di temperatura digitale incorporato con watchdog termico e dispone di un'interfaccia a due fili che supporta il suo funzionamento fino a 400 kHz. Ha un'uscita di sovratemperatura con limite programmabile e isteresi. In questo tutorial l'interfaccia
Misurazione della temperatura utilizzando un PT100 e un Arduino: 16 passaggi
Misurazione della temperatura utilizzando un PT100 e un Arduino: lo scopo di questo progetto è progettare, costruire e testare un sistema di rilevamento della temperatura. Il sistema è stato progettato per misurare un intervallo di temperatura da 0 a 100 °C. Un PT100 è stato utilizzato per misurare la temperatura, ed è un rilevatore di temperatura a resistenza (RTD)