При использовании популярного цифрового датчика температуры DS18B20 в различных устройствах я обнаружил, что при определенных условиях использования датчика по прошествии некоторого времени (около 1 минуты ) после включения устройства показания температуры немного повышаются. Так почему же это происходит? Очевидно, что если электронный компонент потребляет определенный ток, значит должна выделятся некоторая мощность, которая будет приводить к нагреву. Я задался вопросом насколько может влиять собственный нагрев датчика на точность его показаний и какова зависимость температуры самопрогрева от режима работы датчика. Дело в том, что датчик потребляет ощутимый ток (который может приводить к видимому нагреву) только в момент выполнения некоторых операций. Это операции преобразования температуры и сохранения данных в энергонезависимую память. Нас в большей степени интересует операция преобразования температуры, так как это основная операция, которую периодически выполняет датчик. Чем больше время преобразования, тем больше успеет нагреться датчик. Время преобразования зависит от установленной разрешающей способности датчика и приведено ниже в таблице.
Разрешение преобразования устанавливается пользователем при помощи установки битов конфигурации в регистре конфигурации. Ниже я покажу как это сделать программно в среде Arduino IDE. По умолчанию в новых датчиках установлено максимальное разрешение в 12 бит, что соответствует «измерению» температуры с шагом 0,0625 oC. Другими словами, преобразование аналогового сигнала, несущего информацию о температуре, в цифровой вид в микросхеме DS18B20 происходит с дискретностью 0,0625 oC. Подробно прочитать о принципах работы датчика температуры DS18B20 можно здесь, поэтому я не буду подробно останавливаться на описании устройства датчика — цель данной статьи разобраться с самопрогревом датчика DS18B20.
Подключение датчика DS18B20
Для проведения экспериментов с датчиком DS18B20 я использовал платформу Arduino, а именно, плату Arduino UNO. В первую очередь меня интересовало как прогревается датчик при измерении температуры окружающего воздуха, т.е. когда датчик «висит» в воздухе. Для этого датчик был установлен на макетную плату на некотором удалении от других элементов и самой платы Arduino UNO. На макетной плате установлен светодиод, который сигнализирует о подаче напряжения питания на датчик. Вся эта конструкция размещалась в коробке из гофрокартона (размер коробки примерно 50х50х50 см). Это было сделано для того, чтобы минимизировать изменение температуры датчика за счет движения воздуха в помещении. Питание на датчик подается с вывода 6 платы по определенной команде из монитора порта Arduino IDE. После этого начинается работа датчика и отслеживается изменение температуры.
Датчик DS18B20 на макетной плате и подключенный модуль Arduino UNO
Скетч для управления датчиком DS18B20
Для реализации необходимого алгоритма работы с датчиком написан небольшой скетч, в котором можно задавать период обращения к датчику и изменять разрешение (точность) преобразования температуры. Скетч подробно закомментирован. Скажу только, что изменение регистра конфигурации (программирование датчика DS18B20) для установки нужного нам разрешения преобразования температуры и сохранения установок в энергонезависимую память (EEPROM) датчика выполняется в строках 24-30.
Самопрогрев датчика DS18B20 при измерении температуры воздуха
Ниже представлены графики изменения температуры датчика DS18B20 в результате его самопрогрева в течение шести минут. Как показали эксперименты, в течение шести минут температура датчика в результате его самопрогрева принимала установившееся значение. Для каждого разрешения представлена своя группа графиков. Начальная (стартовая) температура измерения для всех графиков приведена к 23,25 oC для более удобного восприятия.
Датчик не может предоставить нам новое значение температуры пока не завершится температурное преобразование. Поэтому период опроса датчика не должен быть меньше времени преобразования температуры. Как видно из графиков если задавать значение периода опроса датчика близкое ко времени преобразования то наблюдается максимальный самопрогрев датчика, который составляет около 0,5 oC не зависимо от разрешения преобразования температуры. Если температура датчика не изменяется или колеблется в пределах дискретности преобразования, то можно считать, что явление самомпргрева отсутствует. Отсутствие эффекта самопрогрева наблюдается если период опроса примерно на порядок превышает время преобразования температуры. Если разрешение преобразования температуры датчика DS18B20 задано в 9 бит, то достаточно период обращения к датчику установить в 4 раза больше времени преобразования и самопрогрев датчика уже не наблюдается. Но тут надо понимать, что датчик при этом все равно прогревается, но на величину, которая меньше дискретности преобразования и поэтому для нас не заметна.
Самопрогрев датчика DS18B20 при измерении температуры металлической поверхности
Проведем еще один эксперимент и выясним будет ли наблюдаться эффект самопрогрева если датчик будет измерять температуру поверхности алюминиевой пластины. Для этого закрепим датчик температуры на небольшой алюминиевый радиатор как показано ниже на фото и запустим наш скетч измерения температуры.
Далее представлены группы графиков при разрешении преобразования 10, 11 и 12 бит. При разрешении преобразования 9 бит (0,5oC) уверенный самопрогрев датчика зафиксировать не удалось, так как он меньше дискретности преобразования и не превышает 0,25 oC (определено при разрешении преобразования 10, 11 и 12 бит).
Как видно из графиков кристалл датчика при установке датчика на металлической поверхности может уверенно прогреваться на 0,125 oC, видимо сказывается тепловое сопротивление кристалл-корпус-радиатор.
При разрешении в 10 бит и минимально возможном периоде опроса наблюдаются скачки показаний температуры в пределах шага преобразования, но уверенного самопргрева с увеличением показаний температуры не происходит. Если период обращения к датчику в два раза превышает время преобразования, то эффекта самопрогрева не наблюдается. Оно и понятно — шаг преобразования больше температуры самопрогрева.
Для разрешения в 12 бит явление самопрогрева не наблюдается при увеличении периода опроса датчика в 4 раза относительно времени преобразования.
Самопрогрев датчика DS18B20, размещенного в термоизоляционном материале
Поместим датчик между двумя кусками пенопласта, как показано на фото. Как известно, пенопласт является одним из лучших теплоизоляторов. Таким образом, влияние окружающего воздуха на температуру датчика будет минимизировано.
Посмотрим на графиках ниже насколько смог разогреть себя датчик.
Теоретически, если бы датчик был помещен в идеальный теплоизолятор с «нулевой» теплоемкостью, то он мог бы разогреться до очень высокой температуры. Но, видимо, мой пенопласт не настолько хорош для этих целей, и выполнял в моем случае еще и функцию теплоотвода, поэтому датчик разогрелся только на 0,8 oC при минимально возможном периоде опроса. После установки периода опроса в 7 секунд устойчивого разогрева датчика не наблюдалось. Это еще раз доказывает, что эффект самопрогрева датчика DS18B20 не наблюдается при периоде опроса, превышающем на порядок время преобразования температуры.
Выводы
Потребляемый датчиком ток во время операции преобразования температуры приводит к выделению определенной мощности на кристалле датчика, что вызывает его нагрев. Если период обращения к датчику сопоставим со временем преобразования, то датчик может прогреваться на 0,5 oC на открытом воздухе. Чтобы этого избежать, необходимо период обращения к датчику задавать на порядок больше времени преобразования температуры.
За счет теплового сопротивления кристалл-корпус-радиатор датчик может прогреваться даже будучи закрепленным на алюминиевом радиаторе. При этом самопрогрев может составлять 0,125 oC. Считаю, что для большинства приложений это не существенно, тем не менее такой эффект наблюдается.
Статья полезная, но чего-то не хватает. Практического применения что ли. Может расчета неких поправочных коэффициентов, если все таки нужно часто опрашивать. Некого алгоритма калибровки. Плюс не понятно как этот эффект проявляется в диапазоне температур. Нужно сравнение с эталонным датчиком, желательно без мозгов с линейной характеристикой и известной температурной стабильностью. И еще корпус датчика не маленький, нужно учитывать инерционность. Был у меня датчик, аналоговый, размером корпуса 1.5 мм, так он через выводы нагревался.
Не хватает пожалуй одного. А именно упоминания о том, что сам датчик имеет довольно приличную погрешность измерения. И вряд ли может похвастать точностью измерения больше чем в пол градуса. И на круг выходит, что саморазогрев датчика вполне укладывается в его погрешность
Для себя нашел эту статью очень полезной. Получил исчерпывающие ответы на интересовавшие вопросы о саморазогреве и желательной частоте опроса датчика. Весьма благодарен автору!
Спасибо за такой комментарий ))
Просто , доступно, актуальною Спасибо.
Здравствуйте, Дмитрий. Нашёл ваше исследование случайно (искал другую информацию по DS18B20), но было очень интересно прочитать, спасибо!
Спасибо, что оставили комментарий.
Видимо уже вдогонку, о самопрогреве…
Здравия всем живущим! Да, замечен такой эффект. При включении с «холодного» состояния, показывает 19,4. Но, уже через пять минут — 23,5. А это уже ни в какие рамки погрешности не влезает. Как побороть эту проблему — пока не знаю… Тем более, что прошивка уже в уже скомпилированном виде.