Оглавление:
- Шаг 1: Компоненты
- Шаг 2: мост Уитстона
- Шаг 3: усиление
- Шаг 4: Включение схемы
- Шаг 5: Полная схема и код
- Step 6: Time Response of PT100
Видео: Измерение температуры с PT100 с использованием Arduino: 6 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-31 10:24
PT100 - это резистивный датчик температуры (RTD), который меняет свое сопротивление в зависимости от окружающей температуры, он широко используется для промышленных процессов с медленной динамикой и относительно широким диапазоном температур. Он используется для медленных динамических процессов, потому что RTD имеют медленное время отклика (о котором я подробнее расскажу позже), но они точны и имеют низкий дрейф с течением времени. То, что я собираюсь показать вам в этом руководстве, не будет соответствовать промышленным стандартам, но оно предложит вам альтернативный способ измерения температуры, отличный от использования LM35, с которым были бы знакомы многие любители, и показанная теория схем. может применяться к другим датчикам.
Шаг 1: Компоненты
1x PT100 (двухпроводной)
1x Arduino (любая модель)
3 операционных усилителя 741 (LM741 или UA741)
1x 80 Ом резистор
2 резистора по 3,9 кОм
2 резистора 3,3 кОм
2 резистора 8,2 кОм
2 резистора по 47 кОм
1x 5 кОм потенциометр
1x двухконтактный блок питания или 8 батарей AA 1,5 В
Я использую двухпроводной PT100, трех- и четырехпроводные PT100 будут иметь разные схемы. Значения резисторов для большинства из них не обязательно должны быть такими же, как указано выше, но если есть пара резисторов, то есть 3,9 кОм, если вы поменяли их местами, скажем, на 5 кОм, вам нужно будет поменять их местами на 5 кОм, а затем нужно быть таким же. Когда мы получим схему, я скажу эффект от выбора разных значений. Для операционных усилителей (операционных усилителей) вы можете использовать другие операционные усилители, но это те, которые я использовал.
Шаг 2: мост Уитстона
Прежде чем я расскажу о первой части схемы, мне нужно поговорить о формуле для определения температуры по сопротивлению для PT100, формула для сопротивления выглядит следующим образом:
где Rx - сопротивление PT100, R0 - сопротивление PT100 при 0 ° C, α - температурный коэффициент сопротивления, а T - температура.
R0 составляет 100 Ом, так как это PT100, если бы это был PT1000, R0 было бы 1000 Ом. α составляет 0,00385 Ом / градус Цельсия, взятое из таблицы данных. Существует также более точная формула, которую можно найти здесь, но приведенная выше формула подойдет для этого проекта. Если мы переставим формулу, мы сможем вычислить температуру для заданного сопротивления:
Допустим, мы хотим измерить что-то, что будет иметь диапазон температур от -51,85 до 130 градусов C, и мы поместили PT100 в схему, показанную на рисунке 1. Используя приведенное выше уравнение и уравнение для напряжения на делителе напряжения (показано на рисунке). на первом рисунке) мы можем рассчитать диапазон напряжений. Нижняя граница диапазона T = -51,85 (80 Ом)
и при 130 градусах (150 Ом):
Это даст диапазон 0,1187 В и смещение постоянного тока 0,142, потому что мы знаем, что наша температура никогда не опустится ниже -51,85 ° C, это снизит чувствительность в диапазоне, который нам важен (от 80 до 130 Ом), когда мы усилим это напряжение. Чтобы избавиться от этого смещения постоянного тока и повысить нашу чувствительность, мы можем использовать мост Уитстона, который показан на втором рисунке.
Выход второго делителя напряжения (Vb-) будет вычтен из выхода первого делителя напряжения (Vb +), используя позже дифференциальный усилитель. Формула выхода моста представляет собой всего два делителя напряжения:
Напряжение на выходе для PT100 составляет 80 Ом и другие значения на картинке:
а для Pt100 - 150 Ом:
Используя Уитстон, мы избавляемся от смещения постоянного тока и увеличиваем чувствительность после усиления. Теперь, когда мы знаем, как работает мост Уитстона, мы можем поговорить о том, почему мы используем 80 Ом и 3,3 кОм. Значение 80 Ом как бы объясняется приведенной выше формулой, выберите это значение (мы назовем это резистором смещения Roff), чтобы оно было нижним диапазоном вашей температуры или, что еще лучше, немного ниже нижней границы вашего диапазона, если оно используется для системы контроля для регулирования температуры или что-то в этом роде, вы хотите знать, насколько низкая температура становится ниже вашего диапазона температур. Поэтому, если -51,85 ° C - это нижняя граница вашего диапазона, используйте для Roff 74,975 Ом (-65 ° C).
Я выбрал 3,3 кОм для R1 и R3 по двум причинам, чтобы ограничить ток и увеличить линейность выхода. Поскольку PT100 изменяет сопротивление из-за температуры, пропускание через него слишком большого тока будет давать неверные показания из-за самонагрева, поэтому я выбрал максимальный ток 5-10 мА. Когда PT100 составляет 80 Ом, ток составляет 1,775 мА, что безопасно ниже максимального диапазона. Вы уменьшаете сопротивление, чтобы увеличить чувствительность, но это может отрицательно повлиять на линейность, поскольку мы будем использовать уравнение линии позже (y = mx + c) с нелинейным выходом, что приведет к ошибкам. На третьем изображении показан график выхода моста с использованием различных верхних резисторов, сплошная линия - фактический выход, а пунктирная линия - линейное приближение. Вы можете видеть на темно-синем графике (R1 и R3 = 200 Ом) дает самый большой диапазон напряжения, но выход наименее линейный. Светло-синий (R1 и R3 = 3,3 кОм) дает наименьший диапазон напряжения, но пунктирная и сплошная линии перекрываются, показывая, что линейность очень хорошая.
Не стесняйтесь изменять эти значения в соответствии с вашим приложением, а также, если вы изменяете напряжение, убедитесь, что ток не становится слишком большим.
Шаг 3: усиление
На последнем этапе мы обнаружили, что выходной диапазон двух вычитаемых делителей напряжения составлял от 0 до 0,1187, но мы не говорили о том, как вычесть эти напряжения. Для этого нам понадобится дифференциальный усилитель, который будет вычитать один вход из другого и усиливать его на коэффициент усиления усилителя. Схема дифференциального усилителя показана на первом рисунке. Вы подаете Vb + на инвертирующий вход и Vb- на неинвертирующий вход, и на выходе будет Vb + - Vb- с коэффициентом усиления, равным единице, т.е. без усиления, но добавив резисторы, показанные на рисунке, мы добавим коэффициент усиления 5,731. Прирост определяется по:
Ra - это R5 и R7, а Rb - это R6 и R8, выходное напряжение определяется по формуле:
Есть две проблемы, связанные с простым подключением этого усилителя к выходу моста: эффект нагрузки и изменение усиления. Для изменения коэффициента усиления усилителя необходимо заменить как минимум два резистора, поскольку две пары резисторов должны быть одинаковыми, поэтому наличие двух горшков, которые должны иметь одинаковое значение, будет раздражать, поэтому мы будем использовать так называемый инструментальный усилитель. о котором я расскажу ниже. Эффект нагрузки заключается в том, что входные резисторы в усилителе влияют на падение напряжения на PT100, мы хотим, чтобы напряжение на PT100 оставалось неизменным, и для этого мы можем выбрать очень большие резисторы для входных резисторов, чтобы параллельное сопротивление PT100 а входной резистор очень близок к сопротивлению PT100, но это может вызвать проблемы с шумом и смещением выходного напряжения, о которых я не буду вдаваться. Просто выберите средний диапазон в диапазоне Комса, но, как я уже говорил, наличие небольших резисторов тоже плохо, поэтому мы немного изменим схему.
На втором изображении у нас есть выход моста, подключенный к инструментальному усилителю, который действует как буферный усилитель для разделения двух половин схем (мост и усиление), а также позволяет использовать для усиления входа, изменяя только один потенциометр (Ргейн). Коэффициент усиления инструментального усилителя определяется как:
где Rc - два резистора 3,9 кОм выше и ниже потенциометра.
При уменьшении Rgain усиление увеличивается. Затем в точках Va и Vb (усиленные Vb + и Vb-) это просто дифференциальный усилитель, как и раньше, а общий коэффициент усиления схемы - это просто коэффициенты усиления, умноженные вместе.
Чтобы выбрать коэффициент усиления, который вы хотите сделать так, как мы делали раньше с Roff, мы должны выбрать сопротивление чуть выше вашей максимальной температуры в вашем диапазоне на случай, если оно превысит. Поскольку мы используем Arduino с напряжением постоянного тока 5 В, максимальный выход схемы должен составлять 5 В при выбранной вами максимальной температуре. Давайте выберем 150 Ом, так как максимальное сопротивление и напряжение моста без усиления составляло 0,1187 В, нам нужно усиление 42,185 (5 / 0,1187).
Допустим, мы сохраняем Ra, Rb и Rc равными 8,2k, 47k и 3,9k, нам просто нужно найти значение для банка Rgain:
Таким образом, чтобы получить полные 5 вольт из диапазона температур, который мы используем, измените значение Rgain на 1,226k. Выходное напряжение на выходе дифференциального усилителя определяется по формуле:
Шаг 4: Включение схемы
Это последний шаг схемы, вы могли заметить Vcc + и Vcc- на схемах операционного усилителя, потому что для правильной работы им требуется как положительное, так и отрицательное напряжение, вы можете получить операционные усилители с одной шиной, но я решил использовать эти усилители, так как это то, что у меня завалялось. Итак, мы подадим +6 В и -6 В, есть три способа сделать это. Первый показан на первом рисунке, где у нас есть два источника питания или два выходных терминала от одного источника питания, оба имеют напряжение 6 В и один положительный выход соединен с отрицательным полюсом другого. 6В верхнего источника питания будет нашим + 6В, положительный полюс нижнего источника питания будет GND, а отрицательный полюс нижнего источника питания - -6В. ПОДКЛЮЧАЙТЕ ЕГО ТАК ТОЛЬКО, ЕСЛИ ЗАЗЕМЛЕНИЯ ДВУХ ИСТОЧНИКОВ РАЗЪЕДИНЕНЫ, ИЛИ ЭТО ПОВРЕДИТ ВАШ ИСТОЧНИК ПИТАНИЯ. Все коммерческие источники питания должны иметь отдельные GND, но если вы хотите проверить, используйте тестер целостности на вашем мультиметре, если он гудит, не используйте эту настройку и используйте следующую. На своем самодельном питании я перегорел предохранитель, делая это.
На втором рисунке показана вторая возможная установка, для которой требуется, чтобы один источник питания имел удвоенное напряжение, чем другой, но не повредит источник питания, если подключены заземления. У нас есть два источника питания, один на 12 В, а другой на 6 В. 12 В будет действовать как + 6 В, 6 В на втором источнике питания будет действовать как заземление, а два фактических заземления на источниках будут действовать как -6 В.
Эта последняя установка предназначена для источников питания только с одним выходом, в ней используется буферный усилитель с коэффициентом усиления 1 для создания виртуального заземления, пропуская половину напряжения питания через буферный усилитель. Тогда 12 В будет действовать как + 6 В, а фактическая клемма GND будет -6 В.
Если вы хотите использовать батареи, я бы предложил первую настройку, но проблема с батареями заключается в том, что напряжение упадет, когда они начнут умирать, и напряжение на мосту также упадет, что приведет к неправильным показаниям температуры. Вы, конечно, можете считывать напряжение с батареек и включать их в расчеты или использовать регуляторы и другие батареи. В конце концов, решать только вам.
Шаг 5: Полная схема и код
Полная схема показана выше, и она была создана в новом пакете Circuits.io от Autodesk, который позволяет создавать схемы на макетной плате, редактировать принципиальную схему (показанную на рисунке 2) и схемы печатных плат, а лучшая часть позволяет моделировать схему с макета и можно даже запрограммировать Arduino и подключить его в режиме макета, далее на странице находится моделирование, и вы можете поиграть с двумя горшками. Если вы хотите скопировать схему и ввести свои собственные значения, вы можете найти схему здесь. Первый потенциометр на 70 Ом последовательно с резистором 80 Ом, который имитирует PT100 с диапазоном 80–150 Ом, второй потенциометр - это усиление инструментального усилителя. К сожалению, я использовал библиотеку, которую я загрузил для своего кода, поэтому 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 должен быть близок к вашему реальному Роффу. Из моего моделирования я вычислил эти значения:
По этому сопротивлению мы можем найти нашу температуру, используя формулу, которая была у нас в начале:
И все, код для Arduino ниже, если у вас возникнут проблемы, просто оставьте комментарий, и я постараюсь помочь.
Нет никаких изображений схемы, которую я сделал так, как я сделал ее некоторое время назад, и у меня больше нет PT100, чтобы переделать и протестировать, но вам просто нужно поверить мне, что она работает. Я нашел немногое о PT100 в Instructables, поэтому я сделал это возможным.
На следующем этапе я расскажу о времени отклика PT100, и если вас не интересует математика, когда вы измеряете изменение температуры, дайте PT100 отстояться на минуту или около того, прежде чем снимать показания.
Если вам интересно увидеть другие мои проекты, посетите мой
Блог: Робоблог
Канал YouTube: Роборо
Или посмотрите другие мои инструкции: здесь
Если HTML не соответствует приведенному ниже коду, код прилагается.
* Этот код рассчитывает температуру с помощью PT100
* Написано Роборо * Github: <a href = "https://github.com/RonanB96/Read-Temp-From-PT100-… <a href =" https://github.com/RonanB96/Read-Temp- From-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 * тау - это время, необходимое для установления нового устойчивого состояния. Коэффициент усиления K показывает, насколько будет усилен входной сигнал. Для PT100 коэффициент усиления равен тому, насколько изменяется сопротивление, разделенное на изменение температуры. Выбрав два случайных значения из этого таблицы данных, я получил коэффициент усиления 0,3856 Ом / C.
Раньше я сказал, что вы можете записывать напряжение каждые 2 секунды после того, как поместите зонд в жидкость, горячую или холодную, из этого мы можем вычислить постоянную времени системы. Сначала вам нужно определить, где находится начальная и конечная точки, начальная точка - это напряжение до того, как вы поместите зонд в жидкость, а конечная точка - когда оно установится. Затем вычтите их, и это изменение напряжения ступени. Тест, который вы провели, был ступенчатым изменением, которое представляет собой внезапное изменение входного сигнала в систему, ступенькой которой является температура. Теперь на вашем графике перейдите к 63,2% изменения напряжения, и на этот раз это постоянная времени.
Если вы подставите это значение в передаточную функцию, тогда у вас будет формула для описания частотной характеристики систем, но это не то, что мы хотим прямо сейчас, нам нужна фактическая температура в момент времени t для ступенчатого изменения температуры, поэтому мы собираемся чтобы выполнить обратное преобразование Лапласа шага в систему. Передаточная функция системы первого порядка с входом ступеньки следующая:
Где Ks - размер шага, т.е. разница температур. Допустим, зонд установлен при 20 градусах Цельсия, помещен в воду при 30 градусах Цельсия, а зонд имеет постоянную времени 8 с, передаточная функция и формула временной области выглядят следующим образом:
Δ (t) просто означает импульс, т.е. смещение постоянного тока на 20 градусов по Цельсию, в этом случае вы можете просто написать 20 в своих уравнениях при вычислении. Это стандартное уравнение для перехода в систему первого порядка:
Вышеупомянутое вычисляет температуру в момент времени t, но это будет работать для напряжения, поскольку они пропорциональны друг другу, вам просто нужно начальное и конечное значение, постоянная времени и размер шага. Веб-сайт под названием Symbolab отлично подходит для проверки правильности ваших математических расчетов, он может выполнять Лапласа, интеграцию, дифференциацию и многое другое, и он дает вам все шаги на этом пути. Обратное преобразование Лапласа, указанное выше, можно найти здесь.
Рекомендуемые:
Измерение температуры с использованием LM75BIMM и Arduino Nano: 4 шага
Измерение температуры с использованием LM75BIMM и Arduino Nano: LM75BIMM - это цифровой датчик температуры со встроенным тепловым сторожевым таймером и двухпроводным интерфейсом, который поддерживает его работу на частотах до 400 кГц. Он имеет выход по перегреву с программируемым пределом и гистерезисом. В этом руководстве интерфейс
Измерение температуры с использованием MCP9803 и Arduino Nano: 4 шага
Измерение температуры с использованием MCP9803 и Arduino Nano: MCP9803 - это двухпроводной высокоточный датчик температуры. В них реализованы программируемые пользователем регистры, которые упрощают приложения для измерения температуры. Этот датчик подходит для сложной многозонной системы контроля температуры. В
Измерение температуры с использованием TMP112 и Arduino Nano: 4 шага
Измерение температуры с использованием TMP112 и Arduino Nano: модуль TMP112 с высокоточным, маломощным цифровым датчиком температуры I2C MINI. TMP112 идеально подходит для расширенного измерения температуры. Это устройство обеспечивает точность ± 0,5 ° C без необходимости калибровки или обработки сигнала от внешних компонентов. I
Измерение температуры с помощью PT100 и Arduino: 16 шагов
Измерение температуры с помощью PT100 и Arduino: цель этого проекта - разработать, построить и протестировать систему измерения температуры. Система была разработана для измерения диапазона температур от 0 до 100 ° C. Для измерения температуры использовался PT100, и это резистивный датчик температуры (RTD)
Измерение температуры с использованием платформы Esp32 и Thingsio.ai: 6 шагов
Измерение температуры с использованием платформы Esp32 и Thingsio.ai: в этом руководстве я расскажу об измерении температуры в окружающей среде с помощью встроенного датчика температуры, присутствующего в плате разработки esp32. esp32 имеет множество встроенных датчиков, таких как датчик Холла, используемый в качестве датчика приближения, касания