Съдържание:
- Стъпка 1: Компоненти
- Стъпка 2: Мост от Уитстоун
- Стъпка 3: Усилване
- Стъпка 4: Захранване на веригата
- Стъпка 5: Пълна схема и код
- Step 6: Time Response of PT100
Видео: Измерване на температурата от PT100 с помощта на Arduino: 6 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-31 10:17
PT100 е температурен детектор на съпротивление (RTD), който променя съпротивлението си в зависимост от температурата на околната среда, използва се широко за промишлени процеси с бавна динамика и относително широки температурни диапазони. Използва се за бавни динамични процеси, тъй като RTD имат бавно време за реакция (за което ще говоря по -късно), но са точни и имат ниско отклонение във времето. Това, което ще ви покажа в тази инструкция, няма да отговаря на индустриалните стандарти, но ще ви изложи на алтернативен начин за измерване на температурата, отколкото използването на LM35, с който много любители биха били запознати и показаната теория на веригата може да се приложи към други сензори.
Стъпка 1: Компоненти
1x PT100 (двупроводна)
1x Arduino (всеки модел)
3x 741 операционни усилватели (LM741 или UA741)
1x 80ohm резистор
2x 3.9 kohms резистори
2x резистори по 3.3 кома
2x резистори по 8,2 кома
2x 47kohms резистори
1x 5 -омов потенциометър
1x Две терминални захранвания или 8x 1.5V AA батерии
Използвам двупроводни PT100, три и четири жични PT100 ще имат различни схеми. Стойностите на резисторите за повечето от тях не трябва да са точно същите като по -горе, но ако има двойка резистори, т.е. трябва да са същите. Когато получим веригата, ще кажа ефекта от избора на различни стойности. За операционните усилватели (операционни усилватели) можете да използвате други операционни усилватели, но това са тези, които използвах.
Стъпка 2: Мост от Уитстоун
Първо трябва да говоря за формулата за получаване на температурата от съпротивлението за PT100, преди да говоря за първата част на веригата, формулата за съпротивлението е следната:
където Rx е съпротивлението на PT100, R0 е съпротивлението на PT100 при 0 градуса C, α е коефициентът на температурно съпротивление и T е температурата.
R0 е 100ohms, тъй като това е PT100, ако е PT1000, R0 ще бъде 1000ohms. α е 0,00385 ома/градуса C, взети от листа с данни. Има и по -точна формула, която може да се намери тук, но горната формула ще е подходяща за този проект. Ако транспонираме формулата, можем да изчислим температурата за дадено съпротивление:
Да речем, че искаме да измерим нещо, което би имало температурен диапазон от -51.85 до 130 градуса C и поставихме PT100 във веригата, показана на снимка 1. Използвайки уравнението по -горе и уравнението за напрежението извън делителя на напрежение (показано на първата снимка) можем да изчислим диапазона на напрежението. Долната част на обхвата T = -51.85 (80ohms)
и при 130 градуса (150ohms):
Това би дало диапазон от 0.1187V и DC компенсиране от 0.142, защото знаем, че температурата ни никога няма да падне под -51.85 градуса C, това ще намали чувствителността в обхвата, който ни интересува (80 до 130ohms), когато усилим това напрежение. За да се отървем от това DC компенсиране и да увеличим нашата чувствителност, можем да използваме моста на Уитстоун, който е показан на втората снимка.
Изходът на втория делител на напрежение (Vb-) ще бъде изваден от първия изход на делителя на напрежение (Vb+) с помощта на диференциален усилвател по-късно. Формулата за изхода на моста е само два делителя на напрежение:
Изходното напрежение за PT100 е 80 ома и използва другите стойности на снимката:
и за Pt100, който е 150 ома:
С помощта на Wheatstone се освобождаваме от DC изместването и увеличаваме чувствителността след усилване. Сега, когато знаем как работи мостът на Уитстоун, можем да говорим за това защо използваме 80ohms и 3.3kohms. 80ohms е някак обяснено от формулата по -горе, изберете тази стойност (ние ще наречем това офсетов резистор Roff), за да бъде долният диапазон на вашата температура или дори по -добре, малко под дъното на вашия диапазон, ако това се използва за система за управление за регулиране на температурата или нещо подобно, бихте искали да знаете колко ниска температура пада под вашия температурен диапазон. Така че, ако -51.85C е дъното на вашия диапазон, използвайте 74.975 ома (-65 градуса C) за вашия Roff.
Избрах 3.3k за R1 и R3 по две причини, за да огранича тока и да увелича линейността на изхода. Тъй като PT100 променя съпротивлението поради температура, преминаването на твърде много ток през него ще даде неправилни показания поради самонагряване, затова избрах максимален ток от 5-10mA. Когато PT100 е 80ohms токът е 1.775mA толкова безопасно под максималния диапазон. Намалявате съпротивлението, за да увеличите чувствителността, но това може да има отрицателен ефект върху линейността, тъй като по-късно ще използваме уравнението на линия (y = mx+c), като нелинейният изход ще доведе до грешки. Третата картина има графика на изхода на моста, използваща различни горни резистори, плътната линия е действителният изход, а пунктираната линия е линейното приближение. Можете да видите в тъмносинята графика (R1 & R3 = 200ohms) дава най -големия диапазон на напрежение, но изходът е най -малко линеен. Светлосиньото (R1 & R3 = 3,3 kohms) дава най -малкия диапазон на напрежение, но пунктираната линия и плътната линия се припокриват, което показва, че нейната линейност е много добра.
Чувствайте се свободни да промените тези стойности, за да отговарят на вашето приложение, също и ако промените напрежението, уверете се, че токът не става твърде висок.
Стъпка 3: Усилване
В последната стъпка открихме, че изходният диапазон на двата извадени делителя на напрежение е от 0 до 0.1187, но не сме говорили как да извадим тези напрежения. За да направим това, ще ни е необходим диференциален усилвател, който ще извади единия вход от другия и ще усили това чрез усилването на усилвателя. Схемата за диференциален усилвател е показана на първата снимка. Захранвате Vb+ към инвертиращия вход и Vb- в неинвертиращия вход и изходът ще бъде Vb+- Vb- с усилване от едно т.е. без усилване, но чрез добавяне на резисторите, показани на снимката, добавяме печалба от 5.731. Печалбата се дава от:
Ra е R5 & R7 и Rb е R6 & R8, изходното напрежение се определя от:
Има два проблема само с свързването на този усилвател към изхода на моста, ефекта на натоварване и промяната на усилването. Промяната на усилването на усилвателя изисква да смените поне два резистора, тъй като двете двойки резистори трябва да са еднакви, така че наличието на два пота, които трябва да имат една и съща стойност, би било досадно, затова ще използваме нещо, наречено инструментален усилвател за което говоря по -долу. Ефектът на натоварване е входните резистори в усилвателя, влияещи на спада на напрежението в PT100, искаме напрежението в PT100 да бъде непроменено и за да направим това, можем да изберем много големи резистори за входните резистори, така че паралелното съпротивление на PT100 и входният резистор е много близо до съпротивлението на PT100, но това може да причини проблеми с шума и изместването на изхода на напрежението, в което няма да влизам. Просто изберете среден диапазон в диапазона на Комс, но както казах, наличието на малки резистори също е лошо, така че ще променим малко схемата.
Във втората картина имаме изхода на моста, свързан с инструментален усилвател, който действа като буферен усилвател, за да раздели двете половини на веригите (моста и усилването), а също така позволява използването за усилване на входа чрез смяна само на един потенциометър (Rgain). Печалбата на инструменталния усилвател се дава от:
където Rc е двата 3.9k резистора над и под пота.
Чрез намаляване на Rgain, усилването се увеличава. Тогава в точка Va и Vb (усилени Vb+ и Vb-), това е просто диференциален усилвател както преди и общото усилване на веригата е само печалбите, умножени заедно.
За да изберете вашата печалба, която искате да направите, както направихме преди с Roff, трябва да изберем съпротивление точно над максималната ви температура във вашия диапазон, в случай че премине. Тъй като използваме Arduino, който има 5V adc, максималният изход на веригата трябва да бъде 5V при максималната температура, която сте избрали. Нека изберем 150 ома като максимално съпротивление и напрежението на моста без усилване е 0.1187V, усилването, от което се нуждаем, е 42.185 (5/0.1187)
Да кажем, че запазваме Ra, Rb и Rc като 8.2k, 47k и 3.9k, просто трябва да намерим стойността за пота Rgain:
Така че, за да извадите пълните 5 волта от температурния диапазон, който използваме, променете стойността на Rgain на 1.226k. Изходното напрежение, излизащо от диференциалния усилвател, се определя от:
Стъпка 4: Захранване на веригата
Това е последната стъпка от веригата, може би сте забелязали Vcc+ и Vcc- на схемите на операционния усилвател, това е така, защото те се нуждаят както от положително, така и от отрицателно напрежение, за да функционират правилно, можете да получите единични релсови оп-усилватели, но реших да използвам този усилвател, тъй като точно това лежах наоколо. Така че ние ще доставим +6V и -6V, има три начина да направим това. Първият е показан на първата снимка, където трябва да имаме два захранващи устройства или два изходни извода от едно захранване, да имат и двете на 6V и да имат един положителен изход, свързан с отрицателния на другия. 6V на горното захранване ще бъде нашето +6V, положителното на долното захранване е GND, а отрицателното на долното захранване е -6V. САМО СЕ СВЪРЗВАЙТЕ ТАКА ТОВА, АКО ПЛАНОВЕТЕ НА ДВЕТЕ ДОСТАВКИ СА РАЗДЕЛЕНИ ИЛИ ЩЕ УВРЕЖДАТ ВАШЕТО ЗАХРАНВАНЕ. Всички търговски източници на захранване биха имали разделени GND, но ако искате да проверите, използвайте тестера за непрекъснатост на вашия мултицет, ако звъни, не използвайте тази настройка и използвайте следващата. На моето домашно снабдяване изгорих предпазителя, правейки това.
Във втората картина е втората настройка, която можем да имаме, тя изисква едно захранване да има двойно напрежение на друго, но няма да повреди захранването, ако GND са свързани. Имаме две захранвания, едната на 12V и друга на 6V. 12V ще действа като наше +6V, 6V от второто захранване ще действа като GND, а двата действителни GND от захранванията ще действат като -6V.
Тази последна настройка е за захранвания само с един изход, тя използва буферен усилвател с усилване 1, за да създаде виртуално заземяване чрез преминаване на половината захранващо напрежение през буферния усилвател. Тогава 12V ще действа като +6V, а действителният GND терминал ще бъде -6V.
Ако искате да използвате батерии, бих предложил първата настройка, но проблем с батериите е, че напрежението ще падне, когато започнат да умират, и напрежението от моста също ще падне, което дава грешни показания за температурата. Разбира се, можете да прочетете напрежението от батериите и да ги включите в изчисленията или да използвате регулатори и още батерии. В крайна сметка зависи от вас.
Стъпка 5: Пълна схема и код
Пълната схема е показана по -горе и е направена в новите Circuits.io на Autodesk, която ви позволява да създавате схеми на макет, да редактирате електрическа схема (показана на снимка 2) и диаграми на печатни платки, а най -добрата част, ви позволява да симулирате веригата от макета и можете дори да програмирате Arduino и да го свържете в режим на макет, по -надолу на страницата е симулацията и можете да играете с две тенджери. Ако искате да дублирате веригата и да въведете свои собствени стойности, можете да намерите веригата тук. Първият пот е 70ohms и серийно с 80ohm резистор, който симулира PT100 с диапазон 80-150ohms, вторият pot е печалбата на усилвателя за инструменти. За съжаление използвах библиотека, която изтеглих за моя код, така че Arduino не е включен в схемата по -долу, но има само два допълнителни проводника, които трябва да свържете. Ако ви е по -удобно с LTspice, включих asc файл с веригата.
Свържете щифт A0 към изхода на диференциалния усилвател
Свържете GND на Arduino към GND на веригата (НЕ НА -6V)
И това е веригата свършена, сега към кода. По -рано споменах, че ще използваме формулата y = mx+c, а сега ще изчислим m (наклона) и c (изместването). В Arduino ще четем напрежение, но температурното уравнение трябва да знаем съпротивлението на PT100, така че начинът, по който можем да направим това, е като заменим Serial.println (temp) със Serial.println (V) и запишем напрежение и съпротивление при две температури. Когато правите този тест, оставете PT100 сам за малко, например минута или две и се пазете от източници на топлина (слънчева светлина, вентилатор за лаптоп, тялото ви и т.н.).
Първата точка, която можем да вземем, е стайната температура, когато веригата е свързана и работи, запишете напрежението (Vt1), прочетено от Arduino на серийния монитор и бързо изключете PT100 и запишете неговото съпротивление (Rt1), не поставяйте ръцете на сондата при изключване, тъй като това ще промени съпротивлението. За втората температура можем да поставим сондата в ледена или гореща вода (бъдете внимателни, ако използвате топла вода) и да повторите това, което направихме, преди да открием Vt2 и Rt2. Веднага след като поставите сондата в течността, изчакайте минута или две, докато съпротивлението се успокои. Ако се интересувате от времевата характеристика на PT100, записвайте напрежението на серийния монитор на всеки 2 секунди и можем да изготвим графика от това и ще го обясня по -късно. Използвайки двете напрежения и съпротивления, можем да изчислим наклона, както следва:
Rt1 и Rt2 са съпротивленията при двете температури и същото важи и за напреженията Vt1 и Vt2. От наклона и един от двата набора точки, които сте записали, можем да изчислим изместването:
C трябва да е близо до вашия истински Roff, От моята симулация изчислих тези стойности:
От това съпротивление можем да намерим нашата температура, използвайки формулата, която имахме в началото:
И това е, кодът за Arduino е по -долу, ако имате някакви проблеми, просто оставете коментар и аз ще се опитам да помогна.
Няма снимки на схемата, която направих, както я направих преди известно време и вече нямам PT100 за преработка и тестване, но просто ще трябва да ми повярвате, че работи. Не намерих много за PT100 на Instructables, затова направих това ible.
В следващата стъпка ще говоря за времевата реакция на PT100 и ако не се интересувате от математиката, когато измервате температурната промяна, оставете PT100 да се утаи за около минута, преди да вземете показанията.
Ако се интересувате да видите други проекти, които съм направил, посетете моя
Блог: Roboroblog
YouTube канал: Roboro
Или погледнете другите ми инструкции: тук
Ако HTML се обърка с кода по -долу, кодът е прикачен
* Този код изчислява температурата с помощта на PT100
* Написано от Roboro * Github: <a href = "https://github.com/RonanB96/Read-Temp-From-PT100-… <a href =" https://github.com/RonanB96/Read-Temp- От-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
Затова споменах, че PT100 има бавен отговор, но можем да получим формула за текущата температура, отчетена от PT100 по всяко време t. Отговорът на PT100 е отговор от първа поръчка, който може да бъде записан по термините на Лаплас, т.е. трансферна функция, като:
където tau (τ) е времевата константа, K е усилването на системата и s е операторът на Лаплас, който може да бъде записан като jω, където ω е честота.
Временната константа ви показва колко време отнема системата от първа поръчка да се установи на новата си стойност, а правило или палец е, че 5*tau е колко време ще отнеме да се установи в новото стабилно състояние. Печалбата K ви казва колко ще бъде усилен входът. С PT100, печалбата е колко се променя съпротивлението, разделено на температурната промяна, от избирането на две случайни стойности от този лист с данни, имам печалба от 0,3856 ома/C.
Преди да кажа, че можете да записвате напрежението на всеки 2 секунди, след като поставите сондата в течността, гореща или студена, от това можем да изчислим времевата константа на системата. Първо трябва да определите къде е началната и крайната точка, като началната точка е напрежението, преди да поставите сондата в течността, а крайната точка, когато се утаи. След това ги извадете и това е промяната на напрежението на стъпката, тестът, който проведохте, беше промяна на стъпка, която е внезапна промяна във входа на системата, като стъпката е температурата. Сега на вашата графика отидете на 63,2% от промяната на напрежението и този път е постоянната на времето.
Ако включите тази стойност в трансферната функция, тогава имате формулата, която описва честотната характеристика на системите, но това не е това, което искаме в момента, ние искаме действителната температура в момент t за стъпка в температурата, така че ще продължим да трябва да извърши обратна трансформация на Лаплас на стъпка в системата. Трансферната функция на система от първи ред с вход на стъпка е както следва:
Където Ks е размерът на стъпката, т.е. температурната разлика. Така че, нека кажем, че сондата е установена при 20 градуса C, поставена във вода при 30 градуса C и сондата има времева константа 8s, трансферната функция и формулата във времевата област са както следва:
Δ (t) просто означава импулс, т.е. DC отместване от 20 градуса C в този случай, можете просто да напишете 20 във вашите уравнения, когато изчислявате това. Това е стандартното уравнение за стъпката в системата от първи ред:
Горното изчислява температурата в момент t, но това ще работи за напрежението, тъй като те са пропорционални един на друг, просто се нуждаете от началната и крайната стойност, времевата константа и размера на стъпката. Уебсайт, наречен Symbolab, е чудесен за проверка дали математиката ви е правилна, може да направи Laplace, интеграция, диференциация и много други неща и ви дава всички стъпки по пътя. Обратното преобразуване на Лаплас по -горе може да се намери тук.
Препоръчано:
Измерване на температурата с помощта на STS21 и Arduino Nano: 4 стъпки
Измерване на температурата с помощта на STS21 и Arduino Nano: Цифровият сензор за температура STS21 предлага превъзходна производителност и пести място. Той осигурява калибрирани, линеаризирани сигнали в цифров, I2C формат. Изработката на този сензор се основава на CMOSens технологията, която се дължи на превъзходните
Измерване на температурата с помощта на ADT75 и Arduino Nano: 4 стъпки
Измерване на температурата с помощта на ADT75 и Arduino Nano: ADT75 е високо точен, цифров температурен сензор. Той се състои от сензор за температурен диапазон и 12-битов аналогово-цифров преобразувател за наблюдение и дигитализиране на температурата. Неговият изключително чувствителен сензор го прави достатъчно компетентен за мен
Измерване на температурата с помощта на LM75BIMM и Arduino Nano: 4 стъпки
Измерване на температурата с помощта на LM75BIMM и Arduino Nano: LM75BIMM е цифров температурен сензор, интегриран с термичен наблюдател и има двужичен интерфейс, който поддържа работата му до 400 kHz. Той има свръхтемпературен изход с програмируема граница и истерия. В този урок интерфейсът
Измерване на температурата с помощта на MCP9803 и Arduino Nano: 4 стъпки
Измерване на температурата с помощта на MCP9803 и Arduino Nano: MCP9803 е двупроводен температурен сензор с висока точност. Те са въплътени с програмируеми от потребителя регистри, които улесняват приложенията за измерване на температурата. Този сензор е подходящ за много сложна многозонова система за мониторинг на температурата
Измерване на температурата с помощта на PT100 и Arduino: 16 стъпки
Измерване на температурата с помощта на PT100 и Arduino: Целта на този проект е да се проектира, изгради и тества система за измерване на температурата. Системата е проектирана да измерва температурен диапазон от 0 до 100 ° C. За измерване на температурата беше използван PT100 и той е терморезистентен детектор (RTD)