Когда речь идет об измерении температуры несколькими датчиками, простое большинство определяет истину. Семь датчиков показывают температуру 25…26 °С, один – около 23…24 °С. Вывод напрашивается сам собой – истинная температура 25,5 °С, а восьмой датчик даёт ложные значения.

Рисунок 1 - Измерение комнатной температуры
Рисунок 1 - Измерение комнатной температуры

На рисунке 1 показаны результаты измерения комнатной температуры несколькими аналоговыми и цифровыми датчиками. Характеристики первых рассмотрены в статье «Сравнение датчиков температуры. Часть 1, аналоговые», характеристики вторых в статье «Сравнение датчиков температуры. Часть 2, цифровые». В этой публикации собраны результаты.

Схема на макетной плате

Итак, изначальная задумка – собрать разные датчики и подключить к одному микроконтроллеру. Затем нужно вывести результаты измерений на график, посмотреть, что получится. Сбором показаний будет заниматься отладочная плата на базе STM32G030F6P6. Три датчика (AHT20, STLM75, BME280) вешаем на шину I2C, один (MAX6675) на SPI, один (DS18B20) на UART, остальное подключено к аналоговым входам. Прелесть выбранного контроллера в том, что все необходимые интерфейсы не пересекаются между собой. Более того, из семнадцати GPIO шесть остались свободны, так что есть потенциал для расширения. Передачей данных на ПК занимается USB-UART преобразователь FT232RL. Общая схема подключения показана на рисунке 2.

Рисунок 2 - Схема подключения датчиков
Рисунок 2 - Схема подключения датчиков

При монтаже схемы может потребоваться навык вязания крючком. Длинные провода, отсутствие общего полигона земли и слабая фильтрация питания – это всё источники вносимых погрешностей. На фото показано размещение датчиков на макетной плате.

Рисунок 3 - Размещение датчиков температуры на макетной плате
Рисунок 3 - Размещение датчиков температуры на макетной плате

Последний этап приготовлений – терминал для вывода результатов. Здесь на помощь приходят PyQt5, QtSerialPort и pyqtgraph. Даже обладая минимальными знаниями на Python, можно написать небольшое приложение под текущую задачу. Но и переоценивать простоту языка не следует, для разбора данных с последовательного порта потребовался дополнительный поток. Так что приложение на вечер превратилось в приложение на неделю. Здорово помог курс по PyQt5 и QtDesigner, радует обилие готовых проектов на GitHub. Так или иначе терминал заработал, первый эксперимент по измерению комнатной температуры был показан на рисунке 1. Теперь можно заняться более интересными опытами.

Испытания датчиков

Допустим летним утром вы открываете окно комнаты, чтобы прохладный свежий воздух заполнил помещение. Легкий ветерок колышет шторы, и вы радуетесь тому, что удаётся немного охладиться, развеять духоту. Но действительно ли утренний ветерок холодный? Взгляните на рисунок 4.

Рисунок 4 - Реакция датчиков на порывы ветра
Рисунок 4 - Реакция датчиков на порывы ветра

Датчики MF52 и MAX6675 (термопара), самые маленькие по размеру, т.е. имеют наименьшую теплоемкость. Именно они лучше всего отреагировали на небольшие притоки теплого воздуха с улицы. Можно сказать, что на графике видны дуновения ветра, во время которых происходит рост температуры, затем датчики возвращается к исходным показаниям. В данном случае свежий ветер ощущается как прохладный, но на самом деле он повышает общую температуру в комнате.

«Ты, без платья, налегке,

Искупайся в молоке,

Тут побудь в воде вареной,

А потом еще в студеной,

И скажу тебе, отец,

Будешь знатный молодец!»

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

Рисунок 5 - Резкое охлаждение датчиков
Рисунок 5 - Резкое охлаждение датчиков

Как и в предыдущий раз датчики с наименьшей теплоёмкостью быстрее всех отреагировали на изменение температуры. MF52 поменял показания с +20 °С до -10 °С приблизительно за 30 секунд. Тем временем термопара дошла до порогового 0 °С, а AHT20 и вовсе «отвалился». Оставшиеся в живых датчики приблизились к правдивым показаниям спустя две минуты.

Рисунок 6 - Датчики температуры в морозильной камере
Рисунок 6 - Датчики температуры в морозильной камере

Кратковременный сброс питания реанимировал AHT20, но не надолго. С чем связано подобное поведение для меня останется загадкой. Проблемы могут крыться как в самом чипе, так и в плохих контактах макетной платы или проблемами обмена шины I2C. Эксперимент с охлаждением впоследствии был повторен и AHT20 засбоил при температуре -3,2 °С. В сравнении с комнатной температурой для остальных датчиков вырос разброс показаний, LM335M судя по всему завышает значения, STM32G0 – занижает. Оцениваю, вновь, по мнению большинства.

С отрицательными температурами теперь все более-менее понятно, а как насчет температур положительных? На помощь приходит другой неотъемлемый реквизит кухонного оборудования – газовая духовка. Но с поддержанием стабильной температуры здесь все немного сложнее, после включения нагрева температура нарастает довольно резко, создаётся риск измерить не температуру, а количество выживших устройств. Поэтому спустя 5…6 секунд пламя пришлось погасить. На начальный участок графика рисунка 7 не стоит обращать внимания, это инициализация массива начальными значениями.

Рисунок 7 - Резкий нагрев датчиков температуры в газовой духовке
Рисунок 7 - Резкий нагрев датчиков температуры в газовой духовке

Цифровые датчики, как всегда, отреагировали на изменение температуры с некоторой задержкой, их характеристика более плавная. Судя по всему, внутри микросхемы имеется механизм фильтрации показаний. Спустя две минуты температура начала постепенной падать, в некотором приближении можно зафиксировать стабилизацию процесса.

Рисунок 8 - Поведение датчиков при высоких температурах
Рисунок 8 - Поведение датчиков при высоких температурах

Теперь LM335M показывает заниженные результаты, ошибка от общего мнения больше 4..5 °С. Полученный результат радует, т.к. говорит о симметричности отклонений относительно нуля, ошибку легко исправить изменив значение углового коэффициента теоретически рассчитанной прямой. Цифровые датчики ведут себя достойно, единодушно объявив о нагреве до  55 °С.

Выводы

Мир настолько сложен, что мы вынуждены его упрощать, для понимания заменять общими моделями. Взять, к примеру, прогноз погоды, большую часть времени он верен. Тем не менее в середине лета мне довелось попасть под дождь, хотя утром обещали солнечный день. Стоит ли ожидать точность там, где её крайне сложно достичь.

Поводом к написанию публикации послужило наблюдение: разница показаний около 1 °С двух цифровых датчиков (если быть точнее, то разница в 0,7 °С двух датчиков: 29,1 °С от DS18B20 и 29,8 °С от SHT4). В комментариях предшествующих публикаций коллеги высказывали возможные причины такого расхождения. Почти наверняка используемый DS18B20 контрафактный, датчик приобретен в Поднебесной и находится внутри металлической гильзы. Но вряд ли это стало определяющим фактором. Я нашел оригинальный DS18B20 2008 года выпуска на завалявшейся старой плате (благодарю @vau за полезную методику), разница показаний с тем, что приобретен на Али около 0,3 °С. Вероятно причин больше: потоки воздуха с окна или кулера ноутбука, теплоёмкость материала (в моём случае металлической гильзы), солнечный свет и т.п. Измерять температуру оказалось намного сложнее, чем я ожидал.

Большую часть времени датчики дают более-менее совпадающие результаты, в диапазоне 1 °С. Посмотрите, как дружно работают DS18B20, AHT20, MF52, STLM75.

Рисунок 9 - Цифровые датчики изменяют температуру в заявленных пределах
Рисунок 9 - Цифровые датчики изменяют температуру в заявленных пределах

Однако стоит открыть форточку, и ситуация изменится. А если поместить датчики в более жёсткие условия, от прежнего единства не останется и следа. На изменение температуры каждый датчик отреагирует по-разному и показания будут менять до тех пор, пока процесс не установится. Поэтому разница измерений в диапазоне 1 °С – это хороший результат.

Вторым неожиданным следствием публикации стал вопрос надежности самих датчиков. Когда разрабатываемое вами устройство трудится вдали от комфортной комнатной температуры а датчик установлен на самой плате, возможно лучше воспользоваться чем-то попроще. Пусть показания будут плавать и не всегда точны, зато и ломаться будет нечему. Программным фильтром легко сгладить резкие колебания считанных значений, защитив схему от ложных сигналов. При должной калибровке термистор MF52 за 7 рублей даст фору в десять раз более дорогой цифровой микросхеме.

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

Комментарии (19)


  1. Jury_78
    14.09.2023 04:56

    Размещение датчиков температуры на макетной плате

    Похоже у вас есть самодельные соединительные провода? Из чего делали?


    1. Evgeny_E Автор
      14.09.2023 04:56
      +1

      Для проводов используются соединители BLS (DS1071) с шагом 2,54, можно BLD 2.54. При этом пластиковая часть не нужна, берете только контакты. После обжимки (или пайки) на провод контактной части, её нужно поместить в термоусадку диаметром 2 мм. Выигрыш такой сборки в том, что "рабочая часть штыря" доходит до контакта, т.е. получается немного длиннее.


      1. Jury_78
        14.09.2023 04:56

        Спасибо, это гнезда? А штырьки?


        1. Evgeny_E Автор
          14.09.2023 04:56
          +1

          Штыри используются от соединителе PLS-40 (DS1021-1x40)


  1. a9d
    14.09.2023 04:56

    При изменении температуры должны были изменится сопротивления резисторов. Также при изменении температуры источник опорного напряжения поплывет немного. АЦП на разных температурах работает по разному. Я так понимаю коррекция не производится.

    Поэтому тест не корректен. Цифра делает всю коррекцию сама, а вот за аналоговые сенсоры все это нужно делать вручную.


    1. Evgeny_E Автор
      14.09.2023 04:56

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


  1. Kudriavyi
    14.09.2023 04:56
    +5

    Это вообще не сравнение, а так, набор цифр и графиков.

    Во-первых, с чего вы взяли, что все датчики должны вам показать цифра в цифру? Если почитать описания на датчики, то на ds18b20 и на stlm75 дают точность +-0.5°С при комнатной температуре, что спокойно может дать 1°С расхождения между двумя датчиками. Lm335 вообще даёт без калибровки ошибку до 3°С при комнатной температуре и до 5°С во всем диапазоне в версии А, для остальных до 5°С при комнатной и до 9°С во всем диапазоне. Остальные мне лень смотреть, но там примерно то же самое.

    Во вторых для таких исследований необходим опорный термометр. Не стану совсем занудствовать про поверку и реестр средств измерения, но он должен быть калиброван и обладать точностью желательно на порядок выше точности исследуемого датчика. Можно взять например lmt70, для которого заявлена точность +-0.13°С при комнатной температуре, типичное значение 0.05°С.


    1. Evgeny_E Автор
      14.09.2023 04:56
      +2

      Сравнение датчиков температуры - серия из трех публикаций, интересующая вас информация по точности датчиков приведена в первой части. Опорного термометра и термокамеры, в моем распоряжении не имеется. Изначально не планировалось делать какого-либо сравнения, я взял два датчика и просмотрел как они ведут себя вместе. Но поскольку добавить датчиков ещё оказалось не сложно, было принято решение собрать все на одной макетке и объединить в небольшой обзор. Датчики выбирались из тех, что были под рукой. Приведённая информация не претендует на академическую точность, тем не менее как сам материал, так и его обсуждение могут быть полезны другим инженерам.


      1. Vitaly_Z
        14.09.2023 04:56

        ИМХО, инженерная полезность сомнительна, ибо погрешность и разброс показаний датчиков заявлены производителями. В статье сделан уклон на изменение показаний датчиков с учётом изменения температуры среды измерения. Не помешало хотя бы сделать повторные испытания, например, с обдувом боарда с датчиками кулером на 80 или 120мм, и сделать выводы.


  1. strvv
    14.09.2023 04:56
    +2

    так и к такому выводу пришли и производители ЭБУ.
    когда мозги были "слабыми", тот же бош (м1.5.3 и древнее, м1.5.4, отечественные "клоны" микас 5.3, 5.4) в своих поделиях использовал датчики температуры типа lm235, чтобы не производить вычисления, а сразу использовать значения ацп, благо, в автомобильном диапазоне -40..+125 они заявлялись как рабочими.
    позже везде перешли на обычные ntc резисторы, с сначала таблично-линейной аппроксимацией, позже — просто рассчитывая значения.


  1. VT100
    14.09.2023 04:56

    Не помню, отмечен ли тот факт, что термодатчик микроконтроллера измеряет температуру именно микроконтроллера. В давние времена лично наблюдал вполне миленькую экспоненту, когда программа нагревала МК, выведенный из режима "Стоп".
    Неохота также лезть за справочными данными на MAX6675. Может с арифметикой что-то не то, раз она не измеряет "минус"?
    Про NTC-термистор — есть app. notes по линеаризации передаточной характеристики параллельным резистором у AVX и TDK-Epcos.


    Напоследок (если было в предыдущих статьях или комментариях — повторим) — не путаем разрешающую способность с точностью. Первая — всегда лучше второй. Например, для LM75 производства NSC — разрешение 0,5 °C (8 бит + знак в диапазоне от 125 до минус 55 °С), а точность ±3 °С (без калибровки).


  1. Dr_Faksov
    14.09.2023 04:56

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


    1. Evgeny_E Автор
      14.09.2023 04:56

      Размещение платы с датчиками под вентилятором
      Размещение платы с датчиками под вентилятором

      Это не очевидно, датчики находятся на одной плате в безветренном помещении. Откуда взяться локальным точкам нагрева или охлаждения? Но вероятно вы правы, при размещении платы под вентилятором наблюдается сближение показаний для цифровых датчиков. Показания аналоговых остались без изменений.

      Обдув платы выключен
      Обдув платы выключен

      После выключения обдува показания начинают разбегаться. Наверное в неоднородности температур воздуха и кроется основная причина наблюдаемой разницы показаний. Благодарю за комментарий.


      1. Dr_Faksov
        14.09.2023 04:56
        +1

        Вы не поверите, но цифровые датчики, как и просто терморезисторы, выделяют тепло. Что в малых закрытых объёмах может приводить к искажению картины измерений.

        Вот почему термопары считаются лучшими измерителями температуры. Через них не течёт ток, способный вызвать обнаружимый нагрев. В нормальных измерителях с термопарами входное сопротивление меряется мегомами. По сути, измеряется эдс.

        К стати, а чего так разбежался график для MCU и LM335 примерно на 405 секунде?


        1. Evgeny_E Автор
          14.09.2023 04:56

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


          1. Dr_Faksov
            14.09.2023 04:56

            Я с вами (и с Уильямом Зинсером) абсолютно согласен. Просто приходится быть предельно вежливым, чтобы иметь возможность оставить комментарий хотя бы раз в 5 минут.

            А вопрос повторю - есть идея, чего так разбежался график для MCU и LM335 примерно на 405 секунде?


            1. Evgeny_E Автор
              14.09.2023 04:56

              Считаю что проблема кроется в показаниях АЦП микроконтроллера. Алгоритм опроса построен так, чтобы в один момент времени опрашивался только один датчик. Так я рассчитывал сгладить проблемы схемы питания, поскольку наблюдал сильное искажение показаний из-за шума питающих 3.3 В. Чтобы быть хоть как-то уверенным в результате, дополнительно производится контроль напряжения при помощи внутреннего источника опорного напряжения, об этом сказано в первой части публикации. Для себя я сделал вывод, чтобы адекватно оценить аналоговые датчики, макетной платы недостаточно, нужно трассировать отдельную плату по всем правилам. Считаю выбросы показаний результатом шума.


              1. Dr_Faksov
                14.09.2023 04:56

                Спасибо.


        1. mlnw
          14.09.2023 04:56

          Вы не поверите, но цифровые датчики, как и просто терморезисторы, выделяют тепло. Что в малых закрытых объёмах может приводить к искажению картины измерений.

          Цифровые датчики обычно потребляют ток в районе 0.5-1.5мА в момент измерения и микроамперы или даже десятые микроампера в режиме ожидания. Если не гонять их в постоянном цикле измерений, а измерять температуру раз в несколько минут, никакой такой датчик не успеет нагреться настолько, чтобы дать погрешность в 0.5°С или более (а в реальности намного меньше).

          Вот почему термопары считаются лучшими измерителями температуры.

          Кем считаются?