Датчик температуры без калибровки на PT100 с HX711

SergeyR7
Идет загрузка
Загрузка
27.10.2020
2694
19
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

8

Есть много различных решений по подключению термосопротивления PT100. Сложность применения таких датчиков заключается в том, что их нельзя подключить напрямую к обычному АЦП микроконтроллера из-за их малого изменения сопротивления в зависимости от температуры.

Схемотехническое решение 

Относительно простой вариант схемы измерения сопротивления PT100, это использование специальной микросхемы, например, MAX31865. Принцип работы примерно такой: последовательно с термосопротивлением включается один прецизионный резистор, термосопротивление подключается ко входу АЦП, а опорное напряжение для АЦП берётся с прецизионного резистора. В этом случае, АЦП измеряет отношение сопротивления датчика к сопротивлению прецизионного резистора. Так как резистор достаточно точный, то и измерение сопротивления датчика получается достаточно точным. 

Решил попробовать применить для измерения температуры дешёвый дельта-сигма АЦП HX711 применяемый для весов. Но у него нет возможности подключить внешний источник опорного напряжения, зато есть два канала с большим коэффициентом усиления - вот это можно использовать для измерения сопротивления датчика. 

Схема подключения датчика PT100 выглядит примерно так: 

Единственная и необходимая прецизионная деталь в этой схеме - резистор R4. Жёстких требований к источнику питания не предъявляется. 

Тонкости HX711 

Процесс цикла измерения сопротивления датчика заключается в следующем: сначала измеряется падение напряжения на датчике, потом измеряется падение напряжения на прецизионном резисторе. Зная точный номинал резистора, вычисляем ток в измерительной цепи. Затем, зная ток в цепи и напряжение на датчике, вычисляем сопротивление датчика PT100. По сопротивлению датчика вычисляем температуру. 

Теперь об особенностях HX711. Если использовать АЦП без внешнего генератора, то на выбор есть две частоты выборки - 10 Гц и 80 Гц 

Учитывая, что нужно переключать каналы для измерения, получаем в 4 раза меньше частоту выборки. Оказывается, при переключении канала, АЦП запускает несколько циклов измерения для стабилизации значения, что отражено в документации. Следовательно, выбираем вариант с максимальной частотой выборки - 80 Гц. При необходимости, можно ещё поднять частоту выборки, подключив внешний генератор.

Применение для 3D принтера

Как обычно, просто измерять температуру не интересно. Нужно сделать что-то полезное. Как вариант, сделать цифровой преобразователь температуры для 3D принтера. Подключение HX711 напрямую к плате, требует изменения прошивки, на что я ещё не готов, т.к. прошивок много. Могу сделать преобразователь, у которого на входе PT100, а на выходе напряжение, соответствующее температуре с определённой зависимостью. Можно было бы имитировать работу стандартного для принтера датчика температуры NTC3950 100 кОм, но у него пологая характеристика на высоких температурах. Датчик PT100 позволяет измерять температуры в более широком диапазоне и для экструдера принтера будет достаточно температуры до +500 °С. В моей статье Вариант установки термосопротивления Pt100 на термоблок в комментариях, уже было обсуждение параметров такого цифрового преобразователя, поэтому решил сделать его сразу на 2 канала. Применение такого преобразователя требует изменение прошивки только в указании типа датчика температуры - установить кастомный датчик и указать для него таблицу преобразования напряжения в температуру. 

На плате предусмотрел два выхода с разным диапазоном выходного напряжения 3,3 В и 5,0 В - на разных платах управления 3D принтером разные диапазоны. Для плат на Atmega - 5,0 В, для плат на ARMах - 3.3 В. Это не точно, нужно проверять по схемам конкретных плат. 

Плата была давно разработана и заказана, на сборку не хватало сначала компонентов, а потом и времени. 

На плате предусмотрен интерфейс UART и CAN, свободные выводы микроконтроллера выведены на разъёмы.

Сравнение с NTC3950 

Чтобы проверить корректность работы преобразователя, решил сделать так. Одна плата работает с датчиком NTC3950 и нагревает сопло принтера до рабочей температуры 235 градусов. На второй плате (клиппер) вместо датчика NTC3950 подключил плату преобразователя, а датчик PT100 установлю на тот же термоблок. 

Ещё один вариант, подключить на одну плату с двумя каналами E0 и E1. Но как обычно, получился третий вариант. Плата подключена к COM порту и в логе видно, какая температура на датчике. Преобразование температуры в напряжение сделал пока по линейному графику, 0 °С соответствует 0 В, +500 °С соответствует +3,3 В на выходе с диапазоном до 3,3 В и 5,0 В соответственно, на выходе с диапазоном 5,0 В.

В клипере добавил свой тип сенсора с соответствующей таблицей преобразования: 

Дальше всё пошло не по плану… При подключении выхода преобразователя к входу датчика температуры выяснилось, что применённый операционный усилитель LM2904 не “тянет” выход, т.к. на входе датчика температуры стоит подтягивающий резистор на 1 кОм или 4,7 кОм. Вместо 0,15 В на выходе преобразователя, после подключения к плате с клиппером становится 0,66 В, что сильно искажает показания температуры. Напряжение 0,66 В соответствует 100 °С, но клипер почему-то показывает 168 °С, что выглядело ещё более странным. Надо разбираться с клипером, почему такие показания...

Итоги можно подвести следующие:

  • Применение HX711 для измерения температуры с помощью термосопротивления PT100 допустимо.
  • Получился преобразователь с цифровым выходом (интерфейс UART + CAN). 
  • Для прямого подключения преобразователя на вход для датчика температуры NTC3950 требуется замена ОУ на ОУ с более мощным выходом, либо снятие подтягивающего резистора на входе датчика, что не желательно.
  • Остаётся проблема с заданием графика преобразования значений АЦП в температуру на клипере. Нужно разбираться дальше с клипером. 

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

8
Комментарии к статье

Комментарии

27.10.2020 в 12:54
0

Пример лога:

Программно определяется разрыв и замыкание датчика, превышение рабочего диапазона.

27.10.2020 в 14:01
1

Вы использовали оба канала 711, но не упомянули, что коэффициенты усиления у каналов разные. Если правильно помню у канала А 32 и 128, а у канала В лишь 64.

27.10.2020 в 14:32
1

коэффициенты усиления у каналов разные

Всё правильно.

Канал A использую с усилением x64, канал B c x32

У HX711 канал A может быть с двумя коэффициентами усиления x64 и x128

27.10.2020 в 14:29
1

у специальных микросхем типа MAX31865 есть еще такая полезная фишка как компенсация сопротивления проводов от температурного датчика. в данном применении этим можно конечно пренебречь, но в общем случае и там где требуется точность десятые и сотые градуса придется таки использовать правильные схемы

27.10.2020 в 14:35
0

компенсация сопротивления проводов от температурного датчика

На плате предусмотрено и это. Для компенсации сопротивления проводов можно использовать 4х проводное подключение датчика. Если нужно компенсировать на двух-проводном датчике, то это можно сделать программно.

27.10.2020 в 15:15
0

можно чуть подробнее про 3-х и 4-х проводное подключение?

27.10.2020 в 15:26
1

Для Pt100 способ подключения по 3х и 4х проводной схеме очень часто используют в промышленном оборудовании. Тут просто об этом написано.

27.10.2020 в 15:35
1

Про 4-х проводное подключение вижу так - на два провода подаётся питание датчик, а два других провода идут от датчика на вход АЦП. Ток для измерения сопротивления течёт через отдельные провода и падение напряжения на них исключается из измерений. Для трёх проводного варианта компенсация потерь на проводах работа схемы не предусмотрена.

27.10.2020 в 15:48
1

понял, спасибо. интересовало больше именно 3-проводное соединение...

27.10.2020 в 17:29
0

Идея имитировать сигнал с обычного термистора понравилась. Подскажите, а почему в названии "без калибровки" ? Вроде бы калибровка все равно нужна, или я что-то недопонял.

27.10.2020 в 18:32
0

Вроде бы калибровка все равно нужна, или я что-то недопонял

Калибровка обычно нужна для другого способа измерения, без точного резистора в цепи. Если взять платы с усилителем для PT100, на некоторых установлены подстроечные резисторы - вот их нужно подкрутить, чтобы усиление совпало с расчётным и смещение нуля было правильным. Эту подстройку и называю калибровкой. Как правило, значения температуры на датчиках типа NTC3950 на форуме часто называют "попугаями", т.к. реальное значение температуры датчика не совпадает со значением, отображаемым на экране принтера. Чтобы показания соответствовали реальному значению температуры, требуется калибровка. Но для 3D принтера точные показания температуры не обязательны, т.к. обычно для каждого пластика делается калибровка температуры с помощью печатью башни с перебором разных значений температуры.

В предлагаемом решении, как и на MAX31865, не требуется калибровка, если использовать цифровые значения напрямую. 

Точность показаний зависит только от допуска измерительного резистора R4 (0.1%) и класса точности применяемого термосопротивления PT100, ну и потери на проводах к датчику, если используется 2х проводное подключение. Но на коротких проводах их сопротивлением можно пренебречь.

28.10.2020 в 04:47
0

Распишу свой вопрос поподробнее.

Как я понял, все работает так - сопротивление PT100 преобразуется в цифровой код, а потом код преобразуется в напряжение, соответствующее падению напряжения на NTC3950 при этой температуре.

Для первого этапа коэффициент преобразования известен, т.к. точно известны характеристики PT-100.

А для второго этапа ? Как узнать, сколько милливольт подать, чтобы получить значение 200 градусов ?

28.10.2020 в 09:30
0

А для второго этапа ?

Есть в таблице марлина, возможность выбора пользовательского датчика. выбираешь и для него рисуешь таблицу соответствия напряжения(точнее кодаАЦП) температуре. Вообще можно любой выбрать из таблицы тип датчика и запихнуть свою таблицу.

25.11.2020 в 22:12
0

Да вот как раз я так и сделал когда пришёл новый экструдер с непонятно какой маркой термистора заменил таблицу на 61 типе на свою всё стало насвои места и довольно точно стал работать дажи качели пропали  Теперь выходит на заданную температуру и держит как вкопанный её ! Таблица с интервалом в 5 градусов. В перспективе установка терма пары по SPI вот тут и широкий диапазон хоть до 800 градусов и точность в 0,25 градуса

28.10.2020 в 10:00
0

А для второго этапа ? Как узнать, сколько милливольт подать, чтобы получить значение 200 градусов ?

Зная характеристики NTC3950 и температуру, вычисляется сопротивление датчика для заданной температуры. Чтобы перевести данные в напряжение, необходимо знать как включён этот дачик на плате, где требуется его имитация. На платах для 3D принтеров обычно датчик включён между GND и входом АЦП, и висит подтягивающий резистор на питание микроконтроллера, либо 3,3 В, либо 5,0 В. Зная сопротивление подтягивающего резистора, можно вычислить требуемое напряжение на входе АЦП. Вот его и надо выдавать с цифрового преобразователя.

28.10.2020 в 16:53
1

Спасибо за разъяснение.  Кстати, пришел в голову другой вариант - посмотреть исходник Marlin, как там код АЦП преобразуется в температуру, и какое используется опорное напряжение. Вычислить, какое напряжение подать на вход АЦП, чтобы в Marlin получилась необходимая температура 

28.10.2020 в 17:03
0

и какое используется опорное напряжение

Обычно оно совпадает с напряжением питания микроконтроллера. Надо смотреть принципиальную схему вашей платы.

28.10.2020 в 18:56
1

какое используется опорное напряжение. 

файл_марлина AVR HAL.h

#define HAL_ADC_VREF 5.00

26.11.2020 в 07:53
0

Блин народ смотрю я на вашу беседу и диву даюся толи я дурак толи лыжи не едут :) Я конечно понимаю что нормальные герои не ищут лёгких путей и как говорится в одном из мультиков луше день потерять потом за час долететь :) Вы так смотрю и за  датчика температур новую прошивку напишите :) 

посмотреть исходник Marlin, как там код АЦП преобразуется в температуру, и какое используется опорное напряжение.

Чтоб не рыть долго и нудно листинги это можно посмотреть в датшите на МК насколько помню по АVR там всего два варианта либо внутренний источник либо внешний всё хорошо описано по этому поводу в датшитах да и всети можно найти кучу всего на эту тему. Да также хочу напомнить про существование тестера и переменного резистора чтоб определить при какой температуре сколько милливольт должно быть у вас на ноге. Ну и последнее зачем долбатся на эту тему если есть уже готовое решение 

MAX31855 MAX6675  Тип K термопары под экструдеры можно купить без проблем и собствено не какая калибровка не требуется при условии что термопара исправна и с ответствует типу 


Да вот также у себя в прошивке обноружел такие строчки

* -5 : PT100 / PT1000 with MAX31865 (only for sensors 0-1)

* 1047 : Pt1000 with 4k7 pullup (E3D)

 * 1010 : Pt1000 with 1k pullup (non standard)

 * 147 : Pt100 with 4k7 pullup

 * 110 : Pt100 with 1k pullup (non standard)

 это разве не то что вам нужно ? если вам так хочется использовать PT100

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Очередной REFR тест, или ищем лучшее время засветки

Выпущена учебная версия T-FLEX CAD 17!

T-FLEX CAD 17 – самая быстрая САПР?

Чёрная пятница 2020: 27.11 - 04.12

Schüler. Erster Druck auf Photon Mono X.

Дробовик производства Bandit "Чистильщик" из Borderlands 2