Когда речь идет об измерении температуры несколькими датчиками, простое большинство определяет истину. Семь датчиков показывают температуру 25…26 °С, один – около 23…24 °С. Вывод напрашивается сам собой – истинная температура 25,5 °С, а восьмой датчик даёт ложные значения.
На рисунке 1 показаны результаты измерения комнатной температуры несколькими аналоговыми и цифровыми датчиками. Характеристики первых рассмотрены в статье «Сравнение датчиков температуры. Часть 1, аналоговые», характеристики вторых в статье «Сравнение датчиков температуры. Часть 2, цифровые». В этой публикации собраны результаты.
Схема на макетной плате
Итак, изначальная задумка – собрать разные датчики и подключить к одному микроконтроллеру. Затем нужно вывести результаты измерений на график, посмотреть, что получится. Сбором показаний будет заниматься отладочная плата на базе STM32G030F6P6. Три датчика (AHT20, STLM75, BME280) вешаем на шину I2C, один (MAX6675) на SPI, один (DS18B20) на UART, остальное подключено к аналоговым входам. Прелесть выбранного контроллера в том, что все необходимые интерфейсы не пересекаются между собой. Более того, из семнадцати GPIO шесть остались свободны, так что есть потенциал для расширения. Передачей данных на ПК занимается USB-UART преобразователь FT232RL. Общая схема подключения показана на рисунке 2.
При монтаже схемы может потребоваться навык вязания крючком. Длинные провода, отсутствие общего полигона земли и слабая фильтрация питания – это всё источники вносимых погрешностей. На фото показано размещение датчиков на макетной плате.
Последний этап приготовлений – терминал для вывода результатов. Здесь на помощь приходят PyQt5, QtSerialPort и pyqtgraph. Даже обладая минимальными знаниями на Python, можно написать небольшое приложение под текущую задачу. Но и переоценивать простоту языка не следует, для разбора данных с последовательного порта потребовался дополнительный поток. Так что приложение на вечер превратилось в приложение на неделю. Здорово помог курс по PyQt5 и QtDesigner, радует обилие готовых проектов на GitHub. Так или иначе терминал заработал, первый эксперимент по измерению комнатной температуры был показан на рисунке 1. Теперь можно заняться более интересными опытами.
Испытания датчиков
Допустим летним утром вы открываете окно комнаты, чтобы прохладный свежий воздух заполнил помещение. Легкий ветерок колышет шторы, и вы радуетесь тому, что удаётся немного охладиться, развеять духоту. Но действительно ли утренний ветерок холодный? Взгляните на рисунок 4.
Датчики MF52 и MAX6675 (термопара), самые маленькие по размеру, т.е. имеют наименьшую теплоемкость. Именно они лучше всего отреагировали на небольшие притоки теплого воздуха с улицы. Можно сказать, что на графике видны дуновения ветра, во время которых происходит рост температуры, затем датчики возвращается к исходным показаниям. В данном случае свежий ветер ощущается как прохладный, но на самом деле он повышает общую температуру в комнате.
«Ты, без платья, налегке,
Искупайся в молоке,
Тут побудь в воде вареной,
А потом еще в студеной,
И скажу тебе, отец,
Будешь знатный молодец!»
Чтобы оценить скорость реакции датчиков на изменение температуры и работу на морозе, открытой форточки явно недостаточно, нужны более радикальные меры. Из домашнего инвентаря морозильная камера хорошо подходит для обозначенной цели. Взгляните на следующий рисунок.
Как и в предыдущий раз датчики с наименьшей теплоёмкостью быстрее всех отреагировали на изменение температуры. MF52 поменял показания с +20 °С до -10 °С приблизительно за 30 секунд. Тем временем термопара дошла до порогового 0 °С, а AHT20 и вовсе «отвалился». Оставшиеся в живых датчики приблизились к правдивым показаниям спустя две минуты.
Кратковременный сброс питания реанимировал AHT20, но не надолго. С чем связано подобное поведение для меня останется загадкой. Проблемы могут крыться как в самом чипе, так и в плохих контактах макетной платы или проблемами обмена шины I2C. Эксперимент с охлаждением впоследствии был повторен и AHT20 засбоил при температуре -3,2 °С. В сравнении с комнатной температурой для остальных датчиков вырос разброс показаний, LM335M судя по всему завышает значения, STM32G0 – занижает. Оцениваю, вновь, по мнению большинства.
С отрицательными температурами теперь все более-менее понятно, а как насчет температур положительных? На помощь приходит другой неотъемлемый реквизит кухонного оборудования – газовая духовка. Но с поддержанием стабильной температуры здесь все немного сложнее, после включения нагрева температура нарастает довольно резко, создаётся риск измерить не температуру, а количество выживших устройств. Поэтому спустя 5…6 секунд пламя пришлось погасить. На начальный участок графика рисунка 7 не стоит обращать внимания, это инициализация массива начальными значениями.
Цифровые датчики, как всегда, отреагировали на изменение температуры с некоторой задержкой, их характеристика более плавная. Судя по всему, внутри микросхемы имеется механизм фильтрации показаний. Спустя две минуты температура начала постепенной падать, в некотором приближении можно зафиксировать стабилизацию процесса.
Теперь LM335M показывает заниженные результаты, ошибка от общего мнения больше 4..5 °С. Полученный результат радует, т.к. говорит о симметричности отклонений относительно нуля, ошибку легко исправить изменив значение углового коэффициента теоретически рассчитанной прямой. Цифровые датчики ведут себя достойно, единодушно объявив о нагреве до 55 °С.
Выводы
Мир настолько сложен, что мы вынуждены его упрощать, для понимания заменять общими моделями. Взять, к примеру, прогноз погоды, большую часть времени он верен. Тем не менее в середине лета мне довелось попасть под дождь, хотя утром обещали солнечный день. Стоит ли ожидать точность там, где её крайне сложно достичь.
Поводом к написанию публикации послужило наблюдение: разница показаний около 1 °С двух цифровых датчиков (если быть точнее, то разница в 0,7 °С двух датчиков: 29,1 °С от DS18B20 и 29,8 °С от SHT4). В комментариях предшествующих публикаций коллеги высказывали возможные причины такого расхождения. Почти наверняка используемый DS18B20 контрафактный, датчик приобретен в Поднебесной и находится внутри металлической гильзы. Но вряд ли это стало определяющим фактором. Я нашел оригинальный DS18B20 2008 года выпуска на завалявшейся старой плате (благодарю @vau за полезную методику), разница показаний с тем, что приобретен на Али около 0,3 °С. Вероятно причин больше: потоки воздуха с окна или кулера ноутбука, теплоёмкость материала (в моём случае металлической гильзы), солнечный свет и т.п. Измерять температуру оказалось намного сложнее, чем я ожидал.
Большую часть времени датчики дают более-менее совпадающие результаты, в диапазоне 1 °С. Посмотрите, как дружно работают DS18B20, AHT20, MF52, STLM75.
Однако стоит открыть форточку, и ситуация изменится. А если поместить датчики в более жёсткие условия, от прежнего единства не останется и следа. На изменение температуры каждый датчик отреагирует по-разному и показания будут менять до тех пор, пока процесс не установится. Поэтому разница измерений в диапазоне 1 °С – это хороший результат.
Вторым неожиданным следствием публикации стал вопрос надежности самих датчиков. Когда разрабатываемое вами устройство трудится вдали от комфортной комнатной температуры а датчик установлен на самой плате, возможно лучше воспользоваться чем-то попроще. Пусть показания будут плавать и не всегда точны, зато и ломаться будет нечему. Программным фильтром легко сгладить резкие колебания считанных значений, защитив схему от ложных сигналов. При должной калибровке термистор MF52 за 7 рублей даст фору в десять раз более дорогой цифровой микросхеме.
Внимательно выбирайте датчик температуры под свои уникальные требования и задачи, надеюсь, данная публикация поспособствует это цели.
Комментарии (19)
a9d
14.09.2023 04:56При изменении температуры должны были изменится сопротивления резисторов. Также при изменении температуры источник опорного напряжения поплывет немного. АЦП на разных температурах работает по разному. Я так понимаю коррекция не производится.
Поэтому тест не корректен. Цифра делает всю коррекцию сама, а вот за аналоговые сенсоры все это нужно делать вручную.
Evgeny_E Автор
14.09.2023 04:56Да, действительно, в проведённом сравнении много вносимых погрешностей. Изменение характеристик компонентов из-за нагрева или охлаждения неизбежно и программной коррекции не производится. Проверки дают скорее качественное, а не количественно представление. И средства испытаний, давайте признаем, используются не поверенные. Все зависит от вашей задачи, делаете ли вы медицинский градусник или термореле, нужно ли учитывать обозначенные вами явления или нет.
Kudriavyi
14.09.2023 04:56+5Это вообще не сравнение, а так, набор цифр и графиков.
Во-первых, с чего вы взяли, что все датчики должны вам показать цифра в цифру? Если почитать описания на датчики, то на ds18b20 и на stlm75 дают точность +-0.5°С при комнатной температуре, что спокойно может дать 1°С расхождения между двумя датчиками. Lm335 вообще даёт без калибровки ошибку до 3°С при комнатной температуре и до 5°С во всем диапазоне в версии А, для остальных до 5°С при комнатной и до 9°С во всем диапазоне. Остальные мне лень смотреть, но там примерно то же самое.
Во вторых для таких исследований необходим опорный термометр. Не стану совсем занудствовать про поверку и реестр средств измерения, но он должен быть калиброван и обладать точностью желательно на порядок выше точности исследуемого датчика. Можно взять например lmt70, для которого заявлена точность +-0.13°С при комнатной температуре, типичное значение 0.05°С.
Evgeny_E Автор
14.09.2023 04:56+2Сравнение датчиков температуры - серия из трех публикаций, интересующая вас информация по точности датчиков приведена в первой части. Опорного термометра и термокамеры, в моем распоряжении не имеется. Изначально не планировалось делать какого-либо сравнения, я взял два датчика и просмотрел как они ведут себя вместе. Но поскольку добавить датчиков ещё оказалось не сложно, было принято решение собрать все на одной макетке и объединить в небольшой обзор. Датчики выбирались из тех, что были под рукой. Приведённая информация не претендует на академическую точность, тем не менее как сам материал, так и его обсуждение могут быть полезны другим инженерам.
Vitaly_Z
14.09.2023 04:56ИМХО, инженерная полезность сомнительна, ибо погрешность и разброс показаний датчиков заявлены производителями. В статье сделан уклон на изменение показаний датчиков с учётом изменения температуры среды измерения. Не помешало хотя бы сделать повторные испытания, например, с обдувом боарда с датчиками кулером на 80 или 120мм, и сделать выводы.
strvv
14.09.2023 04:56+2так и к такому выводу пришли и производители ЭБУ.
когда мозги были "слабыми", тот же бош (м1.5.3 и древнее, м1.5.4, отечественные "клоны" микас 5.3, 5.4) в своих поделиях использовал датчики температуры типа lm235, чтобы не производить вычисления, а сразу использовать значения ацп, благо, в автомобильном диапазоне -40..+125 они заявлялись как рабочими.
позже везде перешли на обычные ntc резисторы, с сначала таблично-линейной аппроксимацией, позже — просто рассчитывая значения.
VT100
14.09.2023 04:56Не помню, отмечен ли тот факт, что термодатчик микроконтроллера измеряет температуру именно микроконтроллера. В давние времена лично наблюдал вполне миленькую экспоненту, когда программа нагревала МК, выведенный из режима "Стоп".
Неохота также лезть за справочными данными на MAX6675. Может с арифметикой что-то не то, раз она не измеряет "минус"?
Про NTC-термистор — есть app. notes по линеаризации передаточной характеристики параллельным резистором у AVX и TDK-Epcos.Напоследок (если было в предыдущих статьях или комментариях — повторим) — не путаем разрешающую способность с точностью. Первая — всегда лучше второй. Например, для LM75 производства NSC — разрешение 0,5 °C (8 бит + знак в диапазоне от 125 до минус 55 °С), а точность ±3 °С (без калибровки).
Dr_Faksov
14.09.2023 04:56Самая большая ошибка данной платы - отсутствие вентилятора обдува датчиков. Многие не могут себе представить, что на расстоянии нескольких сантиметров температура воздуха может отличатся на градусы.
Evgeny_E Автор
14.09.2023 04:56Это не очевидно, датчики находятся на одной плате в безветренном помещении. Откуда взяться локальным точкам нагрева или охлаждения? Но вероятно вы правы, при размещении платы под вентилятором наблюдается сближение показаний для цифровых датчиков. Показания аналоговых остались без изменений.
После выключения обдува показания начинают разбегаться. Наверное в неоднородности температур воздуха и кроется основная причина наблюдаемой разницы показаний. Благодарю за комментарий.
Dr_Faksov
14.09.2023 04:56+1Вы не поверите, но цифровые датчики, как и просто терморезисторы, выделяют тепло. Что в малых закрытых объёмах может приводить к искажению картины измерений.
Вот почему термопары считаются лучшими измерителями температуры. Через них не течёт ток, способный вызвать обнаружимый нагрев. В нормальных измерителях с термопарами входное сопротивление меряется мегомами. По сути, измеряется эдс.
К стати, а чего так разбежался график для MCU и LM335 примерно на 405 секунде?
Evgeny_E Автор
14.09.2023 04:56Есть отличная книга Уильяма Зинсера, автор отмечает, что обороты вроде: разумеется, естественно, вы не поверите и т.п., засоряют нашу речь. Умение доносить информацию по существу дано не всем.
Dr_Faksov
14.09.2023 04:56Я с вами (и с Уильямом Зинсером) абсолютно согласен. Просто приходится быть предельно вежливым, чтобы иметь возможность оставить комментарий хотя бы раз в 5 минут.
А вопрос повторю - есть идея, чего так разбежался график для MCU и LM335 примерно на 405 секунде?
Evgeny_E Автор
14.09.2023 04:56Считаю что проблема кроется в показаниях АЦП микроконтроллера. Алгоритм опроса построен так, чтобы в один момент времени опрашивался только один датчик. Так я рассчитывал сгладить проблемы схемы питания, поскольку наблюдал сильное искажение показаний из-за шума питающих 3.3 В. Чтобы быть хоть как-то уверенным в результате, дополнительно производится контроль напряжения при помощи внутреннего источника опорного напряжения, об этом сказано в первой части публикации. Для себя я сделал вывод, чтобы адекватно оценить аналоговые датчики, макетной платы недостаточно, нужно трассировать отдельную плату по всем правилам. Считаю выбросы показаний результатом шума.
mlnw
14.09.2023 04:56Вы не поверите, но цифровые датчики, как и просто терморезисторы, выделяют тепло. Что в малых закрытых объёмах может приводить к искажению картины измерений.
Цифровые датчики обычно потребляют ток в районе 0.5-1.5мА в момент измерения и микроамперы или даже десятые микроампера в режиме ожидания. Если не гонять их в постоянном цикле измерений, а измерять температуру раз в несколько минут, никакой такой датчик не успеет нагреться настолько, чтобы дать погрешность в 0.5°С или более (а в реальности намного меньше).
Вот почему термопары считаются лучшими измерителями температуры.
Кем считаются?
Jury_78
Похоже у вас есть самодельные соединительные провода? Из чего делали?
Evgeny_E Автор
Для проводов используются соединители BLS (DS1071) с шагом 2,54, можно BLD 2.54. При этом пластиковая часть не нужна, берете только контакты. После обжимки (или пайки) на провод контактной части, её нужно поместить в термоусадку диаметром 2 мм. Выигрыш такой сборки в том, что "рабочая часть штыря" доходит до контакта, т.е. получается немного длиннее.
Jury_78
Спасибо, это гнезда? А штырьки?
Evgeny_E Автор
Штыри используются от соединителе PLS-40 (DS1021-1x40)