Проверите свою наблюдательность? Скажите, сколько датчиков температуры находится в вашем доме? Посчитаю, на примере квартиры. В холодильнике два, основная камера и морозилка; электрический чайник, умеет греть от 60 °C до 100 °C; мультиварка, имеет защиту от перегрева; газовая плита, прекращает подачу газа при отсутствии пламени и поддерживает температуру в духовке; в комнате метеостанция; в шкафу медицинский градусник; на балконе устройство для полива фиалки; в ванной водонагреватель и стиральная машина; в рабочей комнате ноутбук, а на столе паяльная станция. Наверняка датчики температуры есть и в смартфоне, но уже из перечисленного набралось больше дюжины. В ноутбуке вовсе не один датчик, AIDA64 насчитала семь. Итого: 19.
Цифровой градусник выбился в лидеры по точности показаний. Ошибка в 0.1 °С для данного прибора не страшна, ошибка в 1 °С повлияет на ваше настроение или изменит планы на день. Термостат газовой плиты стал лидером среди экстремальных значений, температура в духовке поддерживается на уровне 200…300 °С. От корреляции реальной и измеренной температуры зависит качество приготовляемого картофеля.
Создается впечатление, что невозможно разрабатывать электронику, не измеряя при этом температуру. В инженерной практике доводилось подогревать платы по сигналу DS18B20, калибровать термистор 103F-ET-1-3435F066, включать греющий кабель при росте сопротивления NTCLE100E3 выше порога, поддерживать стабильность температуры по данным от SHT40-AD1B-R2. Поводом к написанию публикации послужило наблюдение: разница показаний около 1 °С двух цифровых датчиков. Любопытство и инженерная потребность точности не позволяют пройти мимо обозначенного вопроса.
Как сравнить датчики температуры между собой? Соберём горстку разных датчиков и подключим все к микроконтроллеру. Далее организуем сбор данных и вывод на график. В силу большого объема материала публикация разделена на три части: обзор аналоговых датчиков, обзор цифровых и практика. Тем, кому по душе изучать загадочные характеристики микросхем или у кого есть насущная задача использовать датчик температуры в своей DIY разработке, предлагаю начать ознакомление с теории. Те, кого интересуют результаты, могут сразу перейти к графикам.
Для сравнения выбраны следующие датчики:
Наименование датчика | Основные характеристики | Описание |
MAX6675 | Преобразователь термопары | Диапазон измеряемых температур от 0°C до 1024°C, рабочий диапазон микросхемы от -20°C до +85°C, разрешение АЦП 12 бит, интерфейс SPI, корпус SO8 |
DS18B20 | Цифровой датчик температуры | Диапазон измеряемых температур от -55°C до 125°C, точность ±0.5°C в середине рабочего диапазона, интерфейс 1-wire, корпус TO92 |
AHT20 | Высокоточный датчик температуры и влажности | Диапазон измеряемых температур от -40°C до 85°C, точность ±0.3°C, интерфейс I2C, корпус DFN-6 |
BME280 | Высокоточный датчик температуры, давления и влажности | Диапазон измеряемых температур от -40°C до 85°C, точность датчика температуры ±1°C, интерфейс I2C, корпус LGA-8 |
STLM75DS2F | Датчик температуры с функцией теплового сторожевого таймера | Диапазон измеряемых температур от -55°C до 125°C, точность ±0.5°C, интерфейс I2C, корпус SSOP8 |
LM335M | Аналоговый датчик температуры | Диапазон измеряемых температур от -40°C до 100°C, точность ±2°C, корпус SO8 |
MF52 | NTC термистор | Диапазон измеряемых температур от -40°C до 125°C |
STM32G030 | Внутренний датчик температуры микроконтроллера | Диапазон измеряемых температур от -40°C до 85°C |
Сбором показаний будет заниматься отладочная плата с микроконтроллером STM32G030F6P6. Прежде, чем перейти к рассмотрению самих датчиков, уделим внимание не менее важному вопросу – качеству питающего напряжения.
Источник опорного напряжения
При плохом питании у человека может наблюдаться гипотермия (пониженная температура тела), а при голодании температура, наоборот, повышается. В этом плане, датчики мало отличаются от людей, отсутствие стабильности напряжения питания не способствует росту точности показаний. В первую очередь это относится к аналоговым датчикам, опросом которых занимается АЦП.
Контроллер STM32G0 имеет всего один питающий вывод, объединенный VDD/VDDA, а на отладочной плате установлен простой линейный стабилизатор AMS1117. Так что точность измерений упадет в силу отсутствия достойной фильтрации по питанию, отсутствия полигона земли и длины соединительных проводов. Однако можно контролировать напряжение стабилизатора, ведь в микроконтроллере есть встроенный источник опорного напряжения. Принцип измерения показан на рисунке 1.
При изменении питающего напряжения показания с VREFINT также будут меняться. Для выбранного микроконтроллера значение внутреннего источника опорного напряжения составляет 1.212 В. Т.е. можно составить пропорцию:
Приведу пример на числах. Допустим с 12-и разрядного АЦП получаем значение 1516 единиц. По формуле рассчитываем:
Проверка Vpow прецизионным мультиметром дает 3.279 В, т.е. относительно VREFINT напряжение измеряется весьма точно. Расчет показаний с аналоговых датчиков привязан к уровню напряжения 3.3 В, за счет схемы питания вносится незначительная погрешность. Дополнительный контроль напряжения питания позволит убедиться в корректности показаний, а его проверка получилась без каких-либо внешних компонентов.
Датчик температуры микроконтроллера
Аналоговый датчик температуры есть внутри микроконтроллера STM32G0. Мелочь, а приятно! Вспоминается пример из практики – включение подогрева платы при температуре ниже -20 °С. Если бы тогда на борту стоял G0, удалось бы сэкономить на датчике температуры. Но добиться очень точных показаний не получится. В памяти МК данной серии сохранена только одна калибровочная константа (по адресу 0x1FFF75A8), соответствующая температуре 30 °С. Согласно документации единицы АЦП для контроллера STM32G030 изменяются пропорционально температуре с углом наклона 2.5 мВ/°С.
И сразу загвоздка: «Measured at VDDA = 3.0 V ±10 mV. The V30 ADC conversion result is stored in the TS_CAL1 byte [1]». Зачем STM поменяли напряжение питания при калибровке на 3 В остается загадка, для серии F0, например, используется 3.3 В. Соответственно необходимо пересчитать калибровочную константу TS_CAL1 на напряжение 3.3 В. Для моего контроллера получаем:
Где d – коэффициент деления, ADCcalib – значение АЦП при 30 °С из памяти.
Внимательный читатель может задаться вопросом, почему TS_CAL1 делится на d, а не умножается. Ответ скрыт где-то в толще полупроводниковых слоёв микросхемы. Все зависит от того, в верхнем или нижнем плече внутреннего делителя STM32G0 установлен термочувствительный элемент. Эксперименты показали, что на d нужно делить.
Попробуем найти уравнение температурной зависимости. Опорное напряжение в моем случае 3300 мВ, разрешение АЦП 12 бит. Имеем:
Т.е. показания АЦП изменяются на 3,1 единицы при изменении температуры на один градус при напряжении питания 3,3 В. Согласитесь, что это совсем мало. Даже учитывая, что датчик подключен к каналу внутри микросхемы, т.е. эффект помех и наводок минимален, оперировать единичными значениями не особенно удобно.
Уравнение температурной зависимости будет таким:
Проверка нескольких микросхем подтвердила, что константа TS_CAL1 слегка изменяется, STMicroelectronics действительно калибрует чипы. В итоге для моей микросхемы имеем уравнение:
Для повышения точности и экономии памяти в программе целесообразно умножить все величины на 10 (не работать с плавающей точкой) и использовать int32_t. Время измерения аналогового сигнала с внутреннего датчика температуры должно быть больше чем TS_temp = 5 мкс. Также после подключения канала АЦП необходимо выждать время стабилизации сигнала tSTART = 120 мкс.
Выводы по датчику температуры микроконтроллера:
Подходит для задач, где не требуется высокая точность;
Чипы калибруются, но только одним значением. Внутренний датчик температуры достался за бесплатно и это хорошо;
Коэффициент наклона прямой зависит от питающего напряжения, его необходимо учитывать при расчетах;
Термистор MF52
Термистор, т.е. терморезистор – это резистор, сопротивление которого изменяется в зависимости от температуры. NTC термистор (Negative Temperature Coefficient) увеличивает свое сопротивление с уменьшением температуры, ориентировочный вид зависимости показан на рисунке 3. Мало того, что зависимость нелинейная, ещё имеется разброс сопротивлений от Rmin до Rmax для каждой точки кривой.
Однако у термистора есть одно отличительное качество – его крайне низкая цена. Поэтому при массовом производстве ширпотреба термисторы незаменимы. А характеристику можно «записать» в память и получать показания разумной точности. Но сперва разберемся с главной характеристикой – коэффициентом температурной чувствительности B.
Этот коэффициент рассчитывается на основе значений сопротивления при двух конкретных значениях температур. Например, для термистора B57164K0472 NTC 4.7 кОм, имеем значение B25/100 = 3950. Т.е. расчёт коэффициента выполнялся на основе сопротивлений, полученных при 25 °С и 100 °С. Коэффициент B измеряется в Кельвинах и рассчитывается при помощи соотношения:
Данное соотношение называется уравнением Стейнхарта-Харта. «Уравнение позволяет по измеренному сопротивлению терморезистора вычислить его температуру и обратно — по температуре терморезистора вычислить его сопротивление, обеспечивает хорошую точность во всем рабочем диапазона температур [3]»
Вычислим коэффициент B для термистора B57164K0472, необходимые данные по температуре и сопротивлению содержатся в документации.
Как видно, рассчитанное и заявленное значения практически совпали. Терморезистор B57164K0472 выбран в качестве подопытного, т.к. для него имеется таблица сопротивлений для всего диапазона рабочих температур. В противном случае замеры можно выполнить вручную, что влечет дополнительные трудозатраты.
Также можно вычислить значение температуры, зная текущее сопротивление термистора и коэффициент B:
Где R100 - сопротивление термистора при температуре 100 °С (T100), выраженных в Кельвинах. Кстати, формула действительно дает хорошее приближение, свидетельство представлено на графике:
Кривая T(R) построена по точкам документации, Tf(R) по формуле Стейнхарта-Харта. Но мы же понимаем, что вычислять натуральный логарифм внутри микроконтроллера – не самый разумный подход. Намного удобнее воспользоваться табличным методом.
Образуем резистивный делитель напряжения с термистором в качестве нижнего плеча. Изменение температуры ведет к изменению напряжения делителя, за которым наблюдает АЦП контроллера. Все подготовительные работы лучше выполнить в Excel, учесть номинал верхнего плеча и разрядность АЦП. На выходе получаем таблицу значений: зависимость единиц АЦП от температуры.
Таблицу сохраняем в память контроллера и соотносим текущее измеренное значение с тем, что хранится в таблице. Если значение совпало (попало в диапазон), текущий индекс массива пересчитываем в значение температуры. Для повышения точности разумно сделать дополнительную линейную аппроксимацию. В моем случае таблица задана с шагом 5°С, деление диапазона между точками массива на 10, позволяет получить разрешение в 0.5 °С.
Выводы по термистору MF52:
Зависимость сопротивления от температуры для MF52 неизвестна, но зная B = 3950, можно использовать либо таблицу от B57164K0472 либо формулу Стейнхарта-Харта. В программе лучше реализовать расчет температуры табличным методом.
Если мощности контроллера позволяют, то с небольшой помощью вместо логарифмов можно составить полином и вычислять температуру по формуле. Однако потребуется как минимум третья степень полинома.
Термистор включается в схему в верхнее или нижнее плечо делителя напряжения (от этого будет зависеть вид характеристики). Изменение сопротивления термистора приводит к изменению напряжения делителя.
Выбирая номиналы делителя (резистора и термистора), следует учесть, что протекающий через термистор ток вызывает его нагрев и, как следствие, искажение показаний.
Между термисторами MF52 в приобретённой партии наблюдается повторяемость характеристик, замеры сопротивления в комнате показали значения: 3.69 Ом, 3.64 Ом, 3.70 Ом, 3.67 Ом, 3.63 Ом, 3.61 Ом, 3.58 Ом. Значит, единожды откалибровав термистор можно более не возвращаться к этому вопросу.
При должной калибровке с термистором можно получить высокую точность измерений, а стоит он копейки.
Датчик температуры LM335MX
От уравнения для определения коэффициента температурной чувствительности изменяется мое артериальное давление, а от названия «соотношение Стейнхарта-Харта» темнеет в глазах. Последующая калибровка и реализация табличного метода расчёта также не добавляет энтузиазма. Как же хочется увидеть простую линейную зависимость с нормальным угловым коэффициентом. Описание микросхемы LM335 для меня, звучит словно музыка.
«Датчик температуры LM335 работает как стабилитрон с напряжением стабилизации прямо пропорциональным температуре. Датчик имеет линейную зависимость с углом наклона прямой 10mV/°K. С динамическим импедансом менее 1 Ом устройство потребляет от 400 мкА до 5 мА без изменения характеристики. Рабочий диапазон температур LM335 от -40 °С до 150 °С. [4]»
В данном случае используется другой физический процесс – зависимость напряжения пробоя (а не сопротивления) от температуры. Схема подключения датчика показана на рисунке:
При напряжении питания 3.3 В резистор в 150 Ом дает ток в 1 мА. Подстрочным резистором не сложно вывести датчик на нужную температуру, иначе ошибка может достигать нескольких градусов.
Напряжение на выходе микросхемы растёт пропорционально температуре с углом наклона 10 мВ/°С (в документации указано изменение на градус Кельвина, но угол от этого не меняется). Выведем уравнение температурной зависимости. Опорное напряжение 3300 мВ, разрешение АЦП 12 бит. Имеем:
Т.е. напряжение на АЦП изменяются показания на 12,412 единиц при изменении температуры на один градус (сравните с датчиком внутри микроконтроллера). Также из документации становится ясно, что при 25 °С напряжение на выходе микросхемы составляет 2980 мВ. Уравнение температурной зависимости:
Заявленная точность измерения температуры после калибровки составляет менее 1 °С практически во всем рабочем диапазоне, соответствующая кривая приводится в документации. Как и в случае с термистором, важно ограничить протекающий через микросхему ток, не потворствовать самонагреву, следить за стабильностью питающего напряжения. Дополнительное внимание следует уделить выбору корпуса микросхемы и трассировке печатной платы. Общая идея проста – трассировать плату так, чтобы обеспечить температуру микросхемы равной температуре измеряемого объекта.
Выводы по датчику температуры LM335:
Микросхема имеет линейную характеристику, что облегчает снятие показаний;
Для достижения точности менее 1 °С требуется калибровка подстроечным резистором;
Имеется исполнение в нескольких типах корпуса;
Преобразователь термопары MAX6675
На любой зависимости некоторого процесса от температуры можно сделать термодатчик. Но не каждый датчик получится сделать простым, компактным и надежным. Термопара представляет интересный случай, когда малый размер датчика, простота, хорошая точность показаний и очень широкий рабочий диапазон соединяются в одном устройстве.
В основу принципа работы термопары положен термоэлектрический эффект, называемый также эффектом Зеебека. Оказывается, что если соединить последовательно два разнородных металлических проводника, и затем нагреть место соединения, то возникнет некоторая разность потенциалов. Далее делаем два спая, один «рабочий», другой «холодный» и соединяем их между собой. Рабочий спай помещаем в измеряемую среду, а холодный держим при температуре 0 °С. При разных температурах спаев по термоэлектродам протекает ЭДС, прямо пропорциональная разности этих температур. Хорошую демонстрацию эффекта Зеебека можно посмотреть по ссылке.
В качестве материалов термоэлектродов применяются различные сплавы, что определяет характеристики термопар и возможности их применения. Согласно ГОСТ Р 8.585-2001 термопары разделяются на типы: E (хромель-константан), J (железо-константан), K (хромель-алюмель), M (медь-копель), N (нихросил-нисил) и другие. Дело остается за малым, точно измерить возникающую в результате нагрева или охлаждения спая разность потенциалов. На помощь приходит микросхема MAX6675, блок-диаграмма которой показана на рисунке 6.
Для точности измерений холодный спай должен всегда иметь неизменную температуру. Поскольку этого довольно сложно добиться, применяются компенсационные схемы. MAX6675 высчитывает температуру относительно виртуального нуля, учитывая температуру окружающей среды. Последняя определяется при помощи термочувствительного диода. Для термопары типа K напряжение в цепи изменяется на 41 мкВ/°C, напряжение на электродах определяется соотношением:
Зная характеристику термопары и температуру окружающей среды Tamb из данного соотношения не трудно найти температуру рабочего спая Tr.
В документации на MAX6675 приводится ряд рекомендаций по трассировке микросхемы. Часть требований относится к толщинам дорожек и полигонам, но встречаются и более необычные. Например, производитель рекомендует избегать механического напряжения на плате и вибраций, рекомендуется периодически проверять и записывать сопротивление термопары. Все это говорит о том, что процесс измерений намного сложнее, чем кажется с первого взгляда. Когда речь идет о величинах порядка десятков микровольт, измерительной схеме нужно уделить особое внимание.
Выводы по конвертеру термопары MAX6675:
Работать с термопарой намного сложнее чем с термистором, нужна более сложная схема измерения напряжения. MAX6675 освобождает нас от лишней работы, представляя готовое решение с цифровым интерфейсом SPI.
В ряде случаев термопара незаменима, т.к. позволяет измерять температуры от -200 до 1250 ⁰ С (нихросил-нисил, тип N).
Для снятия показаний термопары вместо MAX6675 можно использовать схему, собранную на дискретных компонентах. Часто применят каскад на операционному усилителе.
Аналоговые датчики незаменимы
В старых утюгах в качестве датчика температуры использовалась биметаллическая пластина, разрывающая электрическую цепь в случае сильного нагрева. Аналогично работала защита от гашения пламени в старых газовых котлах. Нагрев «фитилька» приводил к изгибу пластины, конец которой удерживал газовый клапан в открытом положении. Это примеры механических датчиков температуры, рассчитанных на одно пороговое значение. Такие датчики, в отличие от термистора, трудно разместить в компактном корпусе и превратить в цифровые. Очевидно, что любой цифровой датчик – это аналоговый датчик + цифровой интерфейс. Именно о них пойдет речь во второй части публикации: "Сравнение датчиков температуры. Часть 2, цифровые".