Cuprins:
- Pasul 1: Componente
- Pasul 2: Podul Wheatstone
- Pasul 3: Amplificare
- Pasul 4: Alimentarea circuitului
- Pasul 5: Circuit complet și cod
- Step 6: Time Response of PT100
Video: Măsurarea temperaturii de la PT100 folosind Arduino: 6 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-31 10:24
PT100 este un detector de temperatură de rezistență (RTD) care își schimbă rezistența în funcție de temperatura din jur, este utilizat pe scară largă pentru procese industriale cu dinamică lentă și intervale de temperatură relativ largi. Este folosit pentru procese dinamice lente, deoarece RTD-urile au timpi de răspuns lente (despre care vorbesc mai târziu), dar sunt exacte și au o deriva redusă în timp. Ceea ce vă voi arăta în acest Instructable nu ar fi la înălțimea standardului industrial, dar vă va expune la un mod alternativ de măsurare a temperaturii decât utilizarea LM35, pe care o mulțime de pasionați ar fi familiarizați cu aceasta și teoria circuitului arătată poate fi aplicat altor senzori.
Pasul 1: Componente
1x PT100 (cu două fire)
1x Arduino (orice model)
3x Amplificatoare de funcționare 741 (LM741 sau UA741)
1x rezistor de 80ohm
2x rezistențe de 3,9 kohmi
2x rezistențe de 3,3 kohmi
Rezistențe 2x 8,2kohms
2x Rezistențe 47kohms
1x Potențiometru de 5 kohmi
1x sursă de alimentare cu două terminale sau 8x baterii AA de 1,5V
Folosesc un PT100 cu două fire, PT100 cu trei și patru fire vor avea circuite diferite. Valorile rezistenței pentru cele mai multe dintre acestea nu trebuie să fie exact aceleași ca mai sus, dar dacă există o pereche de rezistențe, adică 3,9 Kohmi, dacă le-ați schimbat cu să spunem 5k, ar trebui să le schimbați pe 5k ca atunci trebuie să fie la fel. Când vom obține circuitul, voi spune efectul alegerii diferitelor valori. Pentru amplificatoarele de funcționare (amplificatoare de operare) puteți utiliza alte amplificatoare de operare, dar acestea sunt cele pe care le-am folosit.
Pasul 2: Podul Wheatstone
Mai întâi trebuie să vorbesc despre formula pentru obținerea temperaturii din rezistența pentru PT100 înainte de a vorbi despre prima parte a circuitului, formula pentru rezistență este după cum urmează:
unde Rx este rezistența PT100, R0 este rezistența PT100 la 0 grade C, α este coeficientul de rezistență la temperatură și T este temperatura.
R0 este 100ohms deoarece acesta este un PT100, dacă ar fi un PT1000, R0 ar fi 1000ohms. α este 0,00385 ohmi / grade C preluat din foaia de date. Există, de asemenea, o formulă mai precisă care poate fi găsită aici, dar formula de mai sus va fi utilă pentru acest proiect. Dacă transpunem formula putem calcula temperatura pentru o rezistență dată:
Să presupunem că vrem să măsurăm ceva care ar avea un interval de temperatură de -51,85 la 130 grade C și am plasat PT100 în circuitul prezentat în imaginea 1. Folosind ecuația de mai sus și ecuația pentru tensiunea dintr-un divizor de tensiune (prezentat în prima imagine) putem calcula domeniul de tensiune. Partea inferioară a gamei T = -51,85 (80ohms)
și la 130 de grade (150 ohmi):
Acest lucru ar oferi un interval de 0.1187V și un offset DC de 0.142, deoarece știm că temperatura noastră nu va scădea niciodată sub -51.85 grade C, acest lucru va reduce sensibilitatea în domeniul la care ne pasă (80 până la 130ohms) atunci când amplificăm această tensiune. Pentru a scăpa de acest offset DC și a ne crește sensibilitatea, putem folosi un pod Wheatstone care este prezentat în a doua imagine.
Ieșirea celui de-al doilea divizor de tensiune (Vb-) va fi scăzută din prima ieșire a divizorului de tensiune (Vb +) folosind un amplificator diferențial mai târziu. Formula pentru ieșirea podului este doar două divizoare de tensiune:
Tensiunea de ieșire pentru PT100 fiind de 80 ohmi și folosind celelalte valori din imagine:
iar pentru Pt100 fiind 150ohms:
Folosind Wheatstone, scăpăm de offset-ul DC și creștem sensibilitatea după amplificare. Acum, că știm cum funcționează podul Wheatstone, putem vorbi despre motivul pentru care folosim 80ohmi și 3,3kohmi. 80ohms este un fel explicat din formula de mai sus, alegeți această valoare (o vom numi rezistorul offset Roff) pentru a fi gama inferioară a temperaturii dvs. sau chiar mai bună, puțin sub partea inferioară a intervalului dvs., dacă aceasta este utilizată pentru un sistem de control pentru reglarea temperaturii sau ceva de genul acesta, ați dori să știți cât de scăzută este temperatura sub nivelul dvs. de temperatură. Deci, dacă -51.85C este partea de jos a gamei dvs., utilizați 74.975 ohmi (-65 grade C) pentru Roff.
Am ales 3.3k pentru R1 și R3 din două motive, pentru a limita curentul și a crește liniaritatea ieșirii. Deoarece PT100 schimbă rezistența din cauza temperaturii, trecerea prea mult curent prin el va da citiri incorecte din cauza autoîncălzirii, așa că am ales un curent maxim de 5-10mA. Când PT100 este de 80 ohmi, curentul este de 1,775 mA, atât de sigur, sub intervalul maxim. Reduceți rezistența pentru a crește sensibilitatea, dar acest lucru ar putea avea un efect negativ asupra liniarității, deoarece vom folosi ecuația unei linii mai târziu (y = mx + c) având o ieșire neliniară vom introduce erori. A treia imagine are un grafic al ieșirii podului folosind diferite rezistențe superioare, linia continuă este ieșirea reală, iar linia punctată este aproximarea liniară. Puteți vedea în graficul albastru închis (R1 & R3 = 200ohms) oferă cea mai mare gamă de tensiune, dar ieșirea este cea mai mică liniară. Albastrul deschis (R1 și R3 = 3,3kohms) oferă cel mai mic interval de tensiune, dar linia punctată și linia continuă se suprapun, arătând că liniaritatea sa este foarte bună.
Nu ezitați să modificați aceste valori pentru a se potrivi aplicației dvs., de asemenea, dacă modificați tensiunea, asigurați-vă că curentul nu devine prea mare.
Pasul 3: Amplificare
În ultimul pas, am constatat că intervalul de ieșire al celor două divizoare de tensiune scăzute a fost de la 0 la 0,1887, dar nu am vorbit despre cum să scădem aceste tensiuni. Pentru a face acest lucru, vom avea nevoie de un amplificator diferențial care va scădea o intrare din cealaltă și o va amplifica prin câștigul amplificatorului. Circuitul pentru un amplificator diferențial este prezentat în prima imagine. Introduceți Vb + în intrarea inversă și Vb- în intrarea care nu inversează, iar ieșirea va fi Vb + - Vb- cu un câștig de 1 adică fără amplificare, dar prin adăugarea rezistențelor prezentate în imagine adăugăm un câștig de 5.731. Câștigul este dat de:
Ra este R5 și R7 și Rb este R6 și R8, tensiunea de ieșire este dată de:
Există două probleme legate doar de conectarea acestui amplificator la ieșirea podului, efectul de încărcare și schimbarea câștigului. Schimbarea câștigului amplificatorului necesită schimbarea a cel puțin două rezistențe, deoarece cele două perechi de rezistențe trebuie să fie aceleași, astfel încât să ai două poturi care trebuie să aibă aceeași valoare ar fi enervant, așa că vom folosi ceva numit amplificator pentru instrumentație despre care vorbesc mai jos. Efectul de încărcare este rezistențele de intrare în amplificator care afectează căderea de tensiune pe PT100, dorim ca tensiunea pe PT100 să fie neschimbată și pentru a face acest lucru putem alege rezistențe foarte mari pentru rezistențele de intrare, astfel încât rezistența paralelă a PT100 și rezistența de intrare este foarte aproape de rezistența PT100, dar acest lucru poate provoca probleme cu zgomotul și tensiunea de ieșire compensată în care nu am de gând să intru. Alegeți doar gama medie din gama Kohms, dar, așa cum spuneam, să aveți rezistențe mici este și rău, așa că vom schimba puțin circuitul.
În a doua imagine, avem ieșirea podului conectat la un amplificator de instrumentație care acționează un amplificator tampon pentru a separa cele două jumătăți ale circuitelor (podul și amplificarea), de asemenea, permite utilizarea amplificării intrării prin schimbarea unui singur potențiometru (Rgain). Câștigul amplificatorului instrumentar este dat de:
unde Rc sunt cele două rezistențe de 3,9k deasupra și dedesubtul potului.
Prin scăderea Rgain, amplificarea crește. Apoi, la punctul Va și Vb (amplificat Vb + și Vb-), este doar un amplificator diferențial ca înainte și câștigul total al circuitului este doar câștigurile înmulțite împreună.
Pentru a alege câștigul dvs., doriți să faceți ceva așa cum am făcut înainte cu Roff, ar trebui să alegeți o rezistență chiar peste temperatura maximă din intervalul dvs., în caz că depășește. Deoarece folosim Arduino care are o tensiune de 5V, puterea maximă a circuitului ar trebui să fie de 5V la temperatura maximă pe care ați ales-o. Să alegem 150ohmi ca rezistență maximă și tensiunea de punte neamplificată a fost de 0.1187V, câștigul de care avem nevoie este de 42.185 (5 / 0.1187)
Să presupunem că păstrăm Ra, Rb și Rc ca 8.2k, 47k și 3.9k, trebuie doar să găsim valoarea potului Rgain:
Deci, pentru a scoate cei 5 volți din intervalul de temperatură pe care îl folosim, schimbați valoarea Rgain la 1.226k. Tensiunea de ieșire care iese din amplificatorul diferențial este dată de:
Pasul 4: Alimentarea circuitului
Acesta este ultimul pas al circuitului, s-ar putea să fi observat Vcc + și Vcc- pe circuitele amplificatorului op, deoarece acestea au nevoie de tensiune pozitivă și negativă pentru a funcționa corect, puteți obține amplificatoare operaționale cu o singură șină, dar am decis să folosesc aceste amplificatoare, așa cum am avut eu în jur. Deci vom furniza + 6V și -6V, există trei moduri în care putem face acest lucru. Primul este prezentat în prima imagine în care trebuie să avem două surse de alimentare sau două terminale de ieșire dintr-o singură sursă de alimentare, avem ambele la 6V și avem o ieșire pozitivă conectată la negativul celeilalte. 6V al sursei superioare va fi + 6V, pozitivul sursei inferioare este GND și negativul sursei inferioare este -6V. CONECTAȚI-O DOAR ASA, DACĂ GND-urile celor două surse sunt separate sau va deteriora sursa de alimentare. Toate sursele de alimentare comerciale ar fi separat GND-uri, dar dacă doriți să verificați, utilizați testerul de continuitate de pe multimetru, dacă sună, nu utilizați această configurare și utilizați următoarea. Pe aprovizionarea mea de casă, am suflat siguranța făcând asta.
În cea de-a doua imagine este cea de-a doua configurare pe care o putem avea, necesită o sursă pentru a avea dublul tensiunii altei, dar nu va deteriora sursa dacă GND-urile sunt conectate. Avem două consumabile, una la 12V și alta la 6V. 12V va acționa ca + 6V al nostru, 6V din a doua sursă va acționa ca GND și cele două GND reale din aprovizionare vor acționa ca -6V.
Această ultimă configurare este pentru sursele de alimentare cu o singură ieșire, folosește un amplificator tampon de câștig 1 pentru a crea o masă virtuală trecând jumătate din tensiunea de alimentare prin amplificatorul tampon. Apoi 12V va acționa ca + 6V și terminalul GND real va fi -6V.
Dacă doriți să utilizați baterii, aș sugera prima configurare, dar o problemă cu bateriile este că tensiunea va scădea pe măsură ce încep să moară și tensiunea din pod va scădea, de asemenea, oferind valori greșite ale temperaturii. Puteți, desigur, să citiți tensiunea din baterii și să le includeți în calcule sau să folosiți regulatoare și mai multe baterii. În cele din urmă, depinde de tine.
Pasul 5: Circuit complet și cod
Circuitul complet este prezentat mai sus și a fost realizat în noul Circuit.io al Autodesk, care vă permite să creați circuite pe breadboard, să editați diagrama circuitului (prezentat în imaginea 2) și diagramele PCB și cea mai bună parte, vă permite să simulați circuitul din breadboard și Poți chiar să programezi un Arduino și să-l conectezi în modul breadboard, mai jos pagina este simularea și te poți juca cu două pot-uri. Dacă doriți să copiați circuitul și să introduceți propriile valori, puteți găsi circuitul aici. Primul pot este de 70ohms și în serie cu un rezistor de 80ohm care simulează PT100 cu un interval de 80-150ohms, al doilea pot este câștigul amplificatorului de instrumentare. Din păcate, am folosit o bibliotecă pe care am descărcat-o pentru codul meu, astfel încât Arduino nu este inclus în circuitul de mai jos, dar există doar două fire suplimentare de care trebuie să vă conectați. Dacă sunteți mai confortabil cu LTspice, am inclus un fișier asc cu circuitul.
Conectați pinul A0 la ieșirea amplificatorului diferențial
Conectați GND-ul Arduino la GND-ul circuitului (NU LA -6V)
Și acesta este circuitul făcut, acum în cod. Anterior am menționat că vom folosi formula y = mx + c, ei bine, acum vom calcula m (panta) și c (decalajul). În Arduino, vom citi tensiunea, dar ecuația temperaturii are nevoie să cunoaștem rezistența PT100, așa că o modalitate prin care putem face acest lucru este înlocuind Serial.println (temp) cu Serial.println (V) și înregistrați tensiune și rezistență la două temperaturi. Când faceți acest test, lăsați PT100 în pace un pic, cum ar fi un minut sau două și țineți-l departe de orice sursă de căldură (lumina soarelui, ventilatorul laptopului, corpul dvs. etc.).
Primul punct pe care îl putem lua este temperatura camerei, când aveți circuitul conectat și funcționează, înregistrați tensiunea (Vt1) citită de Arduino pe monitorul serial și deconectați rapid PT100 și înregistrați rezistența acestuia (Rt1), nu puneți mâinile pe sondă atunci când deconectați, deoarece aceasta va schimba rezistența. Pentru a doua temperatură, am putea plasa sonda în apă cu gheață sau apă fierbinte (aveți grijă dacă folosiți apă fierbinte) și repetați ceea ce am făcut înainte de a găsi Vt2 și Rt2. Imediat după ce ați plasat sonda în lichid, așteptați un minut sau două pentru a rezista rezistența. Dacă sunteți interesat de răspunsul în timp al PT100, înregistrați tensiunea de pe monitorul serial la fiecare 2 secunde și cam așa putem trage un grafic din acesta și vă voi explica mai târziu. Folosind cele două tensiuni și rezistențe, putem calcula panta după cum urmează:
Rt1 și Rt2 sunt rezistențele la cele două temperaturi și același lucru este valabil pentru tensiunile Vt1 și Vt2. Din panta și unul dintre cele două seturi de puncte pe care le-ați înregistrat putem calcula decalajul:
C ar trebui să fie aproape de Roff-ul tău real, din simularea mea am calculat aceste valori:
Din această rezistență ne putem găsi temperatura folosind formula pe care am avut-o la început:
Și gata, codul pentru Arduino este mai jos, dacă aveți probleme, lăsați doar un comentariu și voi încerca să vă ajut.
Nu există imagini ale circuitului pe care l-am făcut așa cum l-am făcut acum ceva timp și nu mai am PT100 de refăcut și testat, dar va trebui doar să mă credeți că funcționează. Nu am găsit prea multe despre PT100 pe Instructables, de aceea am făcut acest lucru.
În pasul următor voi vorbi despre răspunsul în timp al PT100 și, dacă nu sunteți interesat de matematică, atunci când măsurați o schimbare de temperatură, lăsați PT100 să se stabilească pentru un minut sau cam așa ceva înainte de a lua citirea.
Dacă sunteți interesat să vedeți alte proiecte pe care le-am făcut, vizitați-le
Blog: Roboroblog
Canal YouTube: Roboro
Sau uitați-vă la celelalte instructabile ale mele: aici
Dacă codul HTML se încurcă cu codul de mai jos, codul este atașat
* Acest cod calculează temperatura folosind un PT100
* Scris de Roboro * Github: <a href = "https://github.com/RonanB96/Read-Temp-From-PT100-… <a href =" https://github.com/RonanB96/Read-Temp- De la-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
Așa că am menționat că PT100 are un răspuns lent, dar putem obține o formulă pentru temperatura curentă citită de PT100 în orice moment t. Răspunsul PT100 este un răspuns de primă ordine care poate fi scris în termeni Laplace, adică funcție de transfer, ca:
unde tau (τ) este constanta de timp, K este câștigul sistemului și s este operatorul Laplace care poate fi scris ca jω unde ω este frecvență.
Constanta de timp vă spune cât timp durează un sistem de primă ordine pentru a se stabili la noua sa valoare și o regulă sau degetul mare este că 5 * tau este cât timp va dura până la stabilirea noii stări de echilibru. Câștigul K vă spune cât de mult va fi amplificată intrarea. Cu PT100, câștigul este cât de mult se schimbă rezistența împărțit la schimbarea temperaturii, din alegerea a două valori aleatorii din această foaie de date, am obținut un câștig de 0,3856 ohm / C.
Înainte să spun că puteți înregistra tensiunea la fiecare 2 secunde după ce ați pus sonda în lichid, fierbinte sau rece, din aceasta putem calcula constanta de timp a sistemului. Mai întâi trebuie să identificați unde punctul de pornire și punctul de sfârșit, punctul de pornire fiind tensiunea înainte de a pune sonda în lichid și punctul final fiind când s-a instalat. Apoi scadeți-le și aceasta este schimbarea de tensiune a pasului, testul pe care l-ați efectuat a fost o schimbare de pas care este o schimbare bruscă a intrării într-un sistem, pasul fiind temperatura. Acum, pe graficul dvs., mergeți la 63,2% din modificarea tensiunii și de data aceasta este constanta de timp.
Dacă conectați acea valoare la funcția de transfer, atunci aveți formula pentru a descrie răspunsul în frecvență al sistemelor, dar nu asta ne dorim acum, vrem temperatura reală la momentul t pentru un pas de temperatură, așa că mergem să trebuiască să efectueze o transformare Laplace inversă a unui pas în sistem. Funcția de transfer a unui sistem de prim ordin cu intrarea unui pas este după cum urmează:
Unde Ks este dimensiunea treptei, adică diferența de temperatură. Deci, să presupunem că sonda este așezată la 20 de grade C, plasată în apă la 30 de grade C și sonda are o constantă de timp de 8s, funcția de transfer și formula domeniului de timp sunt după cum urmează:
Δ (t) înseamnă doar un impuls, adică un decalaj continuu de 20 grade C în acest caz, puteți scrie doar 20 în ecuațiile dvs. atunci când calculați acest lucru. Aceasta este ecuația standard pentru pasul către un sistem de prim ordin:
Cele de mai sus calculează temperatura la momentul t, dar aceasta va funcționa pentru tensiune, deoarece acestea sunt proporționale între ele, trebuie doar valoarea de pornire și sfârșit, constanta de timp și dimensiunea pasului. Un site web numit Symbolab este excelent pentru a verifica dacă matematica dvs. este corectă, poate face Laplace, integrare, diferențiere și multe alte lucruri și vă oferă toți pașii pe parcurs. Transformarea Laplace inversă de mai sus poate fi găsită aici.
Recomandat:
Măsurarea temperaturii folosind STS21 și Arduino Nano: 4 pași
Măsurarea temperaturii utilizând STS21 și Arduino Nano: senzorul digital de temperatură STS21 oferă performanțe superioare și o amprentă de economisire a spațiului. Oferă semnale calibrate, liniarizate în format digital, I2C. Fabricarea acestui senzor se bazează pe tehnologia CMOSens, care se atribuie superiorului
Măsurarea temperaturii folosind ADT75 și Arduino Nano: 4 pași
Măsurarea temperaturii utilizând ADT75 și Arduino Nano: ADT75 este un senzor digital de temperatură extrem de precis. Acesta cuprinde un senzor de temperatură de bandă și un convertor analogic digital pe 12 biți pentru monitorizarea și digitalizarea temperaturii. Senzorul său extrem de sensibil îl face suficient de competent pentru mine
Măsurarea umidității și temperaturii folosind HIH6130 și Arduino Nano: 4 pași
Măsurarea umidității și temperaturii folosind HIH6130 și Arduino Nano: HIH6130 este un senzor de umiditate și temperatură cu ieșire digitală. Acești senzori oferă un nivel de precizie de ± 4% HR. Cu stabilitate pe termen lung lider în industrie, I2C digital cu adevărat compensat de temperatură, fiabilitate lider în industrie, eficiență energetică
Măsurarea temperaturii și a umidității folosind HDC1000 și Arduino Nano: 4 pași
Măsurarea temperaturii și a umidității folosind HDC1000 și Arduino Nano: HDC1000 este un senzor digital de umiditate cu senzor de temperatură integrat care oferă o precizie excelentă de măsurare la o putere foarte mică. Dispozitivul măsoară umiditatea pe baza unui nou senzor capacitiv. Senzorii de umiditate și temperatură sunt fac
Măsurarea temperaturii folosind un PT100 și un Arduino: 16 pași
Măsurarea temperaturii folosind un PT100 și un Arduino: Scopul acestui proiect este de a proiecta, construi și testa un sistem de detectare a temperaturii. Sistemul a fost proiectat pentru a măsura un interval de temperatură de la 0 la 100 ° C. Un PT100 a fost folosit pentru a măsura temperatura și este un detector de temperatură de rezistență (RTD)