DS18B20 – датчик температуры с интерфейсом 1-Wire. Описание на русском языке.

Датчик температуры DS18B20В статье приводится подробное описание интегрального датчика температуры  DS18B20 на русском языке. Информация переведена на русский из официальной документации (datasheet) DS18B20.pdf производителя датчика – компании Dallas Semiconductor.


 

Назначение выводов DS18B20

Общее описание.

DS18B20 это цифровой измеритель температуры, с  разрешением преобразования 9 - 12 разрядов и функцией тревожного сигнала контроля за температурой. Параметры контроля могут быть заданы пользователем и сохранены в энергонезависимой памяти датчика.

DS18B20 обменивается данными с микроконтроллером по однопроводной линии связи, используя протокол интерфейса 1-Wire.

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

Диапазон измерения температуры составляет от -55 до +125 °C. Для диапазона от -10 до +85 °C погрешность не превышает 0,5 °C.

У каждой микросхемы DS18B20 есть уникальный серийный код длиной 64 разряда, который позволяет нескольким датчикам подключаться на одну общую линию связи. Т.е. через один порт микроконтроллера можно обмениваться данными с несколькими датчиками, распределенными на значительном расстоянии. Режим крайне удобен для использования в системах экологического контроля, мониторинга температуры в зданиях, узлах оборудования.

Коротко об особенностях DS18B20.

  • Для однопроводного интерфейса 1-Wire достаточно одного порта связи с контроллером.
  • Каждое устройство имеет  уникальный серийный код длиной 64 разряда.
  • Возможность подключения нескольких датчиков через одну линию связи.
  • Нет необходимости во внешних компонентах.
  • Возможность получать питание непосредственно от линии связи. Напряжение питания в пределах 3,0 В … 5,5 В.
  • Диапазон измерения температуры -55 ... +125 °C.
  • Погрешность не превышает 0,5 °C в диапазоне -10 ... +85 °C.
  • Разрешение преобразования 9 … 12 бит. Задается пользователем.
  • Время измерения, не превышает 750 мс, при максимально возможном разрешении 12 бит.
  •  Возможность программирования параметров тревожного сигнала.
  • Тревожный сигнал передает данные об адресе датчика, у которого температуры вышла за заданные пределы.
  • Совместимость программного обеспечения с DS1822.
  • Крайне широкие области применения.

 

Назначение выводов.

8-PIN SOIC TO-92 СИГНАЛ ОПИСАНИЕ
5 1 GND Земля
4 2 DQ Вывод сигнала данных (входа/выход). Выход типа открытый коллектор интерфейса 1-Wire. Также через него происходит питание в режиме ”паразитное питание”.
3 3 VDD Вывод внешнего питания. В режиме ”паразитного питания" должен быть подключен к земле.

 

Обзор датчика DS18B20.

На рисунке 1 блок-схема датчика DS18B20. 64-битное ПЗУ (ROM) хранит уникальный серийный код устройства. Оперативная память содержит:

  • значение измеренной температуры (2 байта);
  • верхний и нижний пороговые значения срабатывания тревожного сигнала (Th, Tl);
  •  регистр конфигурации (1 байт).

Через регистр конфигурации можно установить разрешение преобразования термодатчика. Разрешение может быть задано 9, 10, 11 или 12 бит. Регистр конфигурации и пороги тревожного сигнала содержатся в энергонезависимой памяти (EEPROM).

В микросхеме DS18B20 для обмена данными использует специализированный протокол 1-Wire корпорации Dallas. Для линии связи требуется слабый подтягивающий резистор т.к. все устройства физически подключены к одной общей шине и используют выход с тремя состояниями или выход типа открытый сток.  В этой системе с одной шиной, микроконтроллер (мастер) определяет наличие устройств на шине и обменивается с ними, используя уникальный адрес для каждого устройства - 64-разрядный код. Т.к. каждый термодатчик имеет уникальный код, то число устройств, подключенных к шине, практически ни чем не ограничено. Протокол интерфейса 1-Wire подробно описан в разделе ИНТЕРФЕЙС 1-Wire.

Другая особенность DS18B20 – работать без внешнего источника питания. Питание происходит через подтягивающий резистор шины и вывод DQ, во время высокого уровня шины. Сигнал высокого уровня заряжает через вывод DQ  внутренний конденсатор (Cpp), энергией которого и питается микросхема при низком уровне линии связи. Этот метод в спецификации протокола 1-Wire называется ”паразитное питание”. Ничего не мешает использовать и внешнее питание для DS18B20. Подается оно на вывод Vdd.

Схема

Режим – измерение температуры.

Основная функция DS18B20 – преобразование температуры датчика в цифровой код. Разрешение преобразования задается 9, 10, 11 или 12 бит. Это соответствует разрешающей способность - 0,5 (1/2) °C, 0,25 (1/4) °C, 0,125 (1/8) °C и 0,0625 (1/16) °C. При включении питания, состояние регистра конфигурации устанавливается на разрешение 12 бит.

После включения питания DS18B20 находится в низко-потребляющем состоянии покоя.  Чтобы инициировать измерение температуры мастер (микроконтроллер) должен выполнить команду ПРЕОБРАЗОВАНИЯ ТЕМПЕРАТУРЫ [44h]. После завершения преобразования, результат измерения температуры будет находиться в 2 байтах регистра температуры, и датчик опять перейдет в состояние покоя.

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

При питании от заряда паразитной емкости, такой способ не допустим, т.к. во время  операции преобразования на шине необходимо удерживать высокий уровень сигнала для питания датчика. Технология “паразитного питания” подробно описывается в разделе ПИТАНИЕ DS18B20.

DS18B20 измеряет температуру в градусах по шкале Цельсия.  Результат измерения представляется как 16-разрядное, знаковое число в дополнительном коде (рис. 2.) . Бит знака (S) равен 0 для положительных чисел и равен 1 для отрицательных. При разрешении 12 бит, у регистра температуры все биты значащие, т.е. имеют достоверные значения. Для разрешения 11 бит, не определен бит 0. Для 10-битного разрешения не определены биты 0, 1. При разрешении 9 бит, не достоверное значение имеют биты 0, 1 и 2. В таблице 2 показаны примеры соответствия цифровых кодов значению температуры.

Формат

Коды

Для людей не искушенных в двоичной математике, напишу, что для вычисления температуры надо:

  • При положительном значении ( S=0 ) код перевести в десятичный и умножить на 0,0625 °C.
  • При отрицательном значении ( S=1 ) сначала необходимо перевести дополнительный код в прямой. Для этого надо инвертировать каждый разряд двоичного кода и прибавить 1. А затем перевести в десятичный и умножить на 0,0625 °C.

Режим – передача тревожного сигнала.

После выполнения команды преобразования температуры, измеренное значение сравнивается с верхним и нижним порогами из регистров Th, Tl (формат на рисунке 3). Это байтовые значения, знаковые, в дополнительном коде, S =0 означает, что число положительное, а S=1 – отрицательное.  Хранятся пороговые значения в энергонезависимой памяти (EEPROM). Th и Tl доступны для чтения и записи через байты 2, 3 оперативной памяти. Подробно об этом в разделе ПАМЯТЬ.

ФорматИз-за разной длины регистров TH, TL и температуры, они сравниваются только с битами  11 по 4 регистра температуры. Если значение измеренной температуры превышает TH или ниже, чем TL, то формируется признак аварии в DS18B20. Признак перезаписывается с каждым измерением температуры, и если температура возвращается в заданные пределы, то он сбрасывается.

Ведущее устройство может проверить состояние признака аварии с помощью команды ПОИСК ТРЕВОЖНОГО СИГНАЛА [ECh]. Любой датчик с активным признаком ответит на команду поиска. Таким образом, мастер точно определит, какой DS18B20 вырабатывает сигнал тревоги. После изменения значений регистров TH и TL, только следующее преобразование температуры сформирует достоверный признак тревоги.

 

Питание термодатчика DS18B20.

DS18B20 может быть подключен к внешнему источнику питания через вывод Vdd или работать по схеме ”паразитного питания”, без дополнительного источника. Режим ”паразитного питания” крайне удобен для приложений с удаленными датчиками температуры. На рисунке 4 приведена  схема, использующая ”паразитное питание”. При высоком уровне напряжения шины, энергия накапливается на ”паразитном” конденсаторе Cpp через вывод DQ. При низком уровне шины,  энергия конденсатора обеспечивает питание датчика. В режиме ”паразитного питания” вывод Vdd обязательно  должен быть соединен с общим проводом схемы (землей).

Схема подключения DS18B20

В режиме паразитного питания, сигнал шины и заряд Cpp способны обеспечить необходимый ток для работы DS18B20, при условии, что временные параметры и требования к уровням сигналов будут соответствовать разделу ЭЛЕКТРИЧЕСКИЕ ХАРАКТЕРИСТИКИ.

Однако когда DS18B20 выполняет операцию преобразования температуры или копирования  данных памяти в EEPROM, потребляемый ток может достигать величины 1,5 мА. Такой ток может вызвать снижение напряжения питания устройства до недопустимого значения. Тока  подтягивающего резистора и энергии, запасенной на Cpp, не достаточно для питания в этих двух режимах. Для того чтобы гарантировать достаточное питание устройства, необходимо обеспечить мощную подтяжку шины к высокому уровню в то время, когда происходит преобразование температуры или копирование данных памяти в EEPROM. Это можно сделать с помощью MOSFET транзистора, как показано на схеме (рисунок 4). Шина данных должна быть подключена к мощному питанию:

  • в течение 10 мкс после команд КОНВЕРТИРОВАНИЯ [44h] и КОПИРОВАНИЯ ПАМЯТИ [48h];
  • в течение времени преобразования (tconv) и передачи данных (не менее tWR=10мс).

Никаких других операций в это время на шине допускать нельзя.

Как правило, у современных микроконтроллеров выходного тока высокого уровня вполне достаточно для питания  DS18B20. Тогда в MOSFET транзисторе необходимости нет.

Для питания DS18B20 может быть использован обычный метод – подключение внешнего питания через вывод VDD (рисунок 5). Очевидные преимущества этого метода в отсутствии необходимости в MOSFET транзисторе и в том, что во время преобразования шина остается свободной и может использоваться в других целях.

Схема подключения

Использование ”паразитного питания” настоятельно не рекомендуется при температуре более 100 °C, из-за большого тока утечки. Энергии запасенной на Cpp может не хватить для нормальной работы. При  измерении такой температуры следует использовать внешнее питание.

Я, в таких случаях, использую следующую схему подключения DS18B20.

Схема

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

В некоторых случаях мастер не может знать, какой режим питания используется. Эта информация может понадобиться, чтобы правильно управлять транзистором мощной подтяжки уровня. Для определения режима питания, ведущее устройство может выполнить команду ПРОПУСТИТЬ ROM (CCh] , затем команду ЧТЕНИЕ ЭЛЕКТРОПИТАНИЯ [B4h], а затем выполнить слот чтения. Во время чтения термодатчик с ”паразитным питанием” ответит состоянием 0. А датчик с внешним питанием сообщит об этом высоким уровнем.

64-разрядный серийный код устройства.

Каждый датчик DS18B20 содержит в ROM уникальный код, 64 бита длиной (рис. 6). Младшие  восемь бит содержат код семейства микросхем DS18B20 28h. Средний блок из  48 бит это уникальный серийный номер устройства. Старшие восемь бит это циклический код (CRC) для всех предыдущих 56 битов. Подробно про циклический код в разделе ЦИКЛИЧЕСКИЙ КОД.

Формат

Память датчика.

Организация памяти DS18B20 показана на рисунке 7. Вся память включает в себя оперативную (SRAM) и энергонезависимую (EEPROM) память. В EEPROM хранятся регистры TH, TL и регистр конфигурации. Если функция тревожного сигнала не используется, то регистры TH и TL могут использоваться как регистры общего назначения. Все команды управления памятью подробно описаны в разделе ФУНКЦИИ КОМАНД.

Формат памяти

В байтах с адресами 0 и 1 хранятся младший и старший байты регистра измеренной температуры. Эти байты доступны только для чтения. 2й и 3й байты – TH и TL регистры. Байт 4 – регистр конфигурации. Подробно об этом регистре в разделе РЕГИСТР КОНФИГУРАЦИИ. Байты 5, 6, 7 зарезервированы, не могут быть записаны и, при чтении, всегда возвращают 1.

Байт 8 доступен только для чтения. Он содержит циклический код (CRC) для первых восьми байтов. DS18B20 формирует этот код по способу, описанному в части ГЕНЕРАЦИЯ ЦИКЛИЧЕСКОГО КОДА.

Запись данных в байты 2, 3 и 4 происходит командой ЗАПИСЬ ПАМЯТИ [4Eh]. Данные должны передаваться, начиная с младшего бита байта 2.  Для проверки записи данных можно прочитать память командой ЧТЕНИЕ ПАМЯТИ [код BEh]. При чтении данные передаются по шине, в последовательности начиная с младшего бита байта 0. Запись данных TH, TL и регистра конфигурации в EEPROM происходит по команде КОПИРОВАНИЕ ПАМЯТИ [48h].

При включении питания, данные из энергонезависимой памяти EEPROM перегружаются в оперативную память (SRAM). Перезагрузку данных из EEPROM можно также сделать командой ПЕРЕЗАГРУЗКА E2 [B8h]. Мастер должен контролировать состояние шины, чтобы определить завершение перезагрузки. Слот чтения низкого уровня означает, что перезагрузка еще не закончилась. По завершению перезагрузки  DS18B20 передает слот чтения 1.

Регистр конфигурации термодатчика.

Байт 4 памяти это регистр конфигурации (формат на рисунке 8). Битами R0, R1 можно установить разрешение преобразования (коды в таблице 3). При включении питания состояние битов R0, R1 = 11, что соответствует разрешению 12 бит. Надо помнить, что существует прямая зависимость времени преобразования от разрешающей способности. Биты 7 и 0…4 зарезервированы, не могут использоваться, при чтении возвращают 1.

Формат

Коды

Генерация циклического кода (CRC)

Байты циклического кода (CRC) расположены в 64-битовом ROM коде  и в девятом байте памяти SRAM. Циклический код из ROM вычисляется для 56ти битов кода ROM и располагается в старшем байте ROM. Циклический код из SRAM вычисляется из байтов 0…7 SRAM. Циклический код позволяет контролировать правильность чтения данных из DS18B20. Мастер вычисляет циклический код  для полученных данных и сравнивает с принятым кодом. На основании этого принимается решение о корректности данных.

Образующий полином циклического кода выглядит так:

C R C = X8 + X5 + X4 + 1

Мастер может вычислить циклический код  используя генератор полинома , по схеме на рисунке  9. Он состоит из регистра сдвига и логических элементов типа “исключающее ИЛИ”. Регистр сдвига изначально находится в состоянии 0. Биты поступают в регистр сдвига, начиная с младшего бита, кода из ROM или из SRAM, один бит в один такт сдвига. После сдвига 56го бита ROM или старшего бита 7го байта SRAM, в регистре сдвига будет вычисленный циклический код.  Если сдвинуть в генератор 8 бит ROM или SRAM, принятые из  DS18B20, то в случае правильных данных, регистр сдвига будет содержать все 0.

Образующий полином циклического кода

Однопроводной интерфейс 1-Wire

Система с шиной 1-Wire состоит из одного ведущего устройства (МАСТЕР), которое управляет одним или несколькими ведомыми устройствами (СЛЕЙВ). DS18B20 может быть только ведомым. Система, в которой одно ведомое устройство, называется одноточечной. Система с несколькими ведомыми – многоточечной. Все команды и данные обмена передаются по шине младшим битом вперед. В дальнейшей информации об интерфейсе 1-Wire выделены три раздела: аппаратная конфигурация, последовательность операций и сигналы (типы и временные требования).

 

Аппаратная конфигурация.

Интерфейс  1-Wire имеет одну линию связи. Каждое устройство (ведущее или ведомое) подключено к шине данных портом с выходом типа открытый коллектор или с тремя состояниями. Такая конфигурация позволяет каждому устройству системы не занимать линию связи, когда оно не активно, и держать шину свободной для других устройств. В  микросхеме DS18B20 выход (DQ) – открытый сток. Его эквивалентная схема приведена на рисунке 10. Шина 1-Wire требует применения внешнего подтягивающего резистора сопротивлением приблизительно 5 кОм, для обеспечения высокого уровня сигнала при неактивном состоянии устройств. Если операция должна быть приостановлена, шина должна быть установлена в неактивное состояние до следующей операции. Шина может находиться в состоянии высокого уровня сколь угодно долгое  время. Перевод шины в состояние низкого уровня на время более чем 480 мкс приведет к тому, что все компоненты системы будут сброшены.

Схема

Последовательность операций.

Очередность операций для доступа к термодатчику DS18B20 выглядит так.

  • Инициализация.
  • Команда ROM (необходима для любого обмена данными).
  • Функциональная команда (необходима для любого обмена данными).

Такая последовательность должна строго соблюдаться. В противном случае DS18B20 не будет реагировать на команды. Исключением являются команды ПОИСК ПЗУ  [код F0h] и ПОИСК АВАРИИ [код ECh]. После формирования этих двух команд , ведущее устройство (мастер) должно вернуться к первому шагу (инициализация).

Инициализация.

Обмен по шине всегда начинается с операции ИНИЦИАЛИЗАЦИИ. Для инициализации ведущее устройство вырабатывает импульс сброса, за ним должен последовать импульс присутствия от ведомого устройства. Импульс присутствия сообщает ведущему устройству, что ведомое устройство присутствует в системе и готово к выполнению операции. Временные параметры импульсов сброса и присутствия описаны в разделе СИГНАЛЫ 1-Wire.

 Команды ROM кодов.

После того как ведущее устройство получит импульс присутствия, оно может оперировать командами ROM. Это команды для операций с 64-битными индивидуальными кодами каждого ведомого устройства. Они позволяют ведущему устройству выбрать конкретное ведомое устройство среди многих других.  Также, используя эти команды, можно узнать, сколько ведомых устройств подключено к  шине, их типы, выделить устройства в состоянии тревоги. Существует 5 команд ROM, длиной 8 бит каждая. Ведущее устройство должно послать команду ROM перед выполнением функциональных команд  DS18B20. Блок-схема выполнения ROM команд изображена на рисунке 11.

Поиск ROM [F0h]

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

Чтение ROM [33h]

Команда применяется в одноточечных системах, с одним ведомым устройством. Она дает возможность ведущему устройству прочитать 64-битный ROM код, без использования команды ПОИСК ROM. Применение команды ЧТЕНИЕ ROM в многоточечной системе приведет к конфликтам данных между ведомыми устройствами.

Совпадение ROM [55h]

Команда СОВПАДЕНИЕ ROM, после которой должен следовать 64-битный код ROM, позволяет мастеру обращаться к конкретному  ведомому устройству. Только одно ведомое устройство, код которого совпадает с переданным кодом, прореагирует на функциональные команды. Другие ведомые устройства будут неактивными до следующего импульса сброса.

Пропуск ROM [CCh]

Команда позволяет ведущему устройству обращаться ко всем устройствам шины одновременно, без использования ROM кодов. Например, можно запустить на всех устройствах операцию преобразования температуры, выполнив команду ПРОПУСК ROM, а затем КОНВЕРТАЦИЯ ТЕМПЕРАТУРЫ. Команда ЧТЕНИЕ ПАМЯТИ [BEh] может следовать за командой ПРОПУСК ROM только при одном ведомом устройстве, подключенным к линии связи. Такая последовательность команд значительно экономит время обмена с датчиками. Особенно она эффективна при использовании в системе одного ведомого устройства.

Поиск тревожного сигнала [ECh]

Команда действует идентично команде ПОИСК ROM. Отличается тем, что на нее ответят только ведомые устройства в состоянии тревоги. Команда позволяет ведомому устройству определить, какие термодатчики находятся в состоянии тревоги после последнего преобразования температуры. После каждого ПОИСКА ТРЕВОГИ необходимо возвращаться на ИНИЦИАЛИЗАЦИЮ.

 Группа функциональных команд

После выполнения ROM команды для выбора DS18B20 с нужным кодом, ведущее устройство может посылать функциональные команды датчика. Они позволяют записать и прочитать данные из оперативной памяти DS18B20, инициировать преобразование температуры и определить режим питания. Функциональные команды DS18B20 описываются ниже, собраны в таблице 4, алгоритм работы с ними приведен на рисунке 12.

Преобразование температуры [44h]

Команда инициализирует одно преобразование температуры. После нее значение температуры оказывается в 2-байтном регистре температуры оперативной памяти и датчик переходит в неактивное, низкопотребляющее состояние. Для режима  ”паразитного питания” необходимо выполнить требования по подключению шины к источнику питания на время преобразования из раздела ПИТАНИЕ DS18B20. В режиме внешнего питания ведущее устройство может определить состояние операции преобразования с помощью слота чтения. При не законченной операции состояние шины будет низкого уровня, по завершению преобразования на шине будет высокий уровень. При ”паразитном питании” такой способ отслеживания процесса  преобразования не возможен.

Запись памяти [4Eh]

Команда позволяет загрузить 3 байта в оперативную память датчика. Первый байт записывается в регистр Th (2 байт памяти), второй байт в Th (байт 3 памяти) и третий байт в регистр конфигурации (байт 4). Ведущее устройство передает данные, начиная с младшего бита. Все три байта необходимо записать до того как ведущее устройство сформирует сигнал сброс.

Чтение памяти [BEh]

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

Копирование памяти [48h]

Команда копирует из оперативной памяти в EEPROM три байта: TH, Tl и регистр конфигурации. Для режима  ”паразитного питания” необходимо выполнить требования по подключению шины к источнику питания на время выполнения команды  из раздела ПИТАНИЕ DS18B20.

Перезагрузка EEPROM [B8h]

Команда перезагружает значения регистров Th, Tl и регистра конфигурации из EEPROM в оперативную память. После посылки команды ПЕРЕЗАГРУЗКА, ведущее устройство может выполнить слот чтения, и DS18B20 сообщит состояние перезагрузки. Передача 0 будет означать, что операция еще выполняется, 1 – операция завершена. Операция перезагрузки автоматически происходит при включении питания. Поэтому в оперативной памяти содержатся достоверные данные сразу после подачи питания.

Чтение режима питания [B4]

Команда позволяет определить режим питания любого датчика. После передачи команды, ведущее устройство выполняет тайм-слот чтения. Термодатчик с ”паразитным питанием” установит выход в низкое состояние, в то время как, датчик с внешним питанием будет держать шину в высоком состоянии. Подробнее в разделе ПИТАНИЕ DS18B20.

Таблица 4. Функциональные команды DS18B20.

КОМАНДА ОПИСАНИЕ КОД ОПЕРАЦИИ НА ШИНЕ ПРИМЕЧАН.
КОМАНДА КОНВЕРТИРОВАНИЯ ТЕМПЕРАТУРЫ
Измерение температуры Инициализирует измерение температуры 44h DS18B20 передает мастеру состояние операции преобразования температуры 1
КОМАНДЫ РАБОТЫ С ПАМЯТЬЮ
Чтение памяти Читает всю оперативную память, включая  циклический код CRC BEh DS18B20 передает мастеру  до 9 байт 2
Запись памяти Записывает в оперативную память байты 2, 3 и 4
(TH, TL и регистр конфигурации)
4Eh Мастер передает 3 байта на DS18B20. 3
Копирование памяти Копирует TH, TL, и регистр конфигурации из оперативной памяти в EEPROM 48h 1
Перезагрузка Перегружает TH, TL, и регистр конфигурации из EEPROM в оперативную память. B8h DS18B20 передает состояние перезагрузки мастеру
Чтение режима питания Информирует мастера о режиме питания DS18B20. B4h DS18B20 передает мастеру режим питания

Примечания.

  1. Для режима ”паразитного питания”, ведущее устройство должно иметь возможность подключать шину 1-Wire к шине питания, во время выполнения преобразования температуры и копирования памяти.
  2. Ведущее устройство может прервать передачу, выполнив сброс системы.
  3. Все три байты необходимо записать до команды сброса.

Блок схема

Блок схема

Интерфейс  1-Wire

Для обмена данными DS18B20 использует протокол интерфейса 1-Wire, обеспечивающий контроль целостности данных. Этот протокол определяет сигналы:

  • импульс сброса,
  • импульс присутствия,
  • запись бита со значением 0,
  • запись бита со значением 1,
  • чтения бита со значением  0,
  • чтения бита со значением  1.

Все эти сигналы, кроме импульса присутствия, формирует ведущее устройство.

 

Инициализация – импульсы сброса и присутствия

Любые коммуникационные операции DS18B20 начинаются с последовательности инициализации, которая состоит из импульса сброса от ведущего устройства ведомому, и ответного импульса присутствия из DS18B20. Этот процесс показан на рисунке 13. Термодатчик посылает импульс присутствия в ответ на импульс сброса, чтобы сообщить ведущему устройству, что он подключен к шине и готов к использованию.

Диаграмма

Во время последовательности инициализации ведущее устройство передает импульс сброса (Tx), формируя на шине сигнал низкого уровня в течение времени не менее 480 мкс. Далее, ведущее устройство освобождает шину и переходит в режим приема (Rx). Когда шина освобождается, она подтягивается к высокому логическому уровню резистором 5 кОм. Датчик выделяет положительный фронт, ждет 15-60 мкс и передает импульс присутствия, удерживая низкий уровень линии на время 60-240 мкс.

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

Обмен данными по шине 1-Wire происходит временными слотами (тайм-слотами). Один временной слот передает один бит информации.

Временные слоты записи.

Протокол определяет два типа тайм-слотов записи данных в DS18B20: для записи значения 1 и записи значения 0. Длительность слота записи - не менее 60 мкс с паузой на восстановление между слотами 1,0 мкс, как минимум. Инициируется любой слот записи отрицательным фронтом сигнала шины (рис. 14).

Для формирования слота записи 1, после перевода шины в низкое состояние, ведущее устройство должно освободить шину на время 15 мкс. Подтягивающий резистор 5 кОм создаст на шине напряжение высокого уровня.

Для формирования слота записи 0, после перевода шины в низкое состояние, ведущее устройство должно продолжать удерживать шину в низком состоянии  в продолжение всего времени слота (как минимум 60 мкс).

DS18B20 проверяет состояние сигнала в отрезке времени между 15 и 60 мкс, отсчитывая его от начала слота записи. Состояние шины на этом отрезке соответствует значению бита для записи в датчик.

Диаграмма

Временные слоты чтения.

Термодатчик DS18B20 не только принимает, но и передает данные. Ведущему устройству необходимо получать данные сразу после формирования команд ЧТЕНИЯ ПАМЯТИ код [BEh] или ЧТЕНИЕ РЕЖИМА ПИТАНИЯ [код B4h]. Кроме того, ведущее устройство формирует слоты чтения после посылки команд ПРЕОБРАЗОВАНИЕ ТЕМПЕРАТУРЫ [44h] и ПЕРЕЗАГРУЗКА [B8h], для того чтобы определить состояние операции. Подробно в разделе ФУНКЦИОНАЛЬНЫЕ КОМАНДЫ DS18B20.

Длительность слота чтения, как и слота записи, должна быть не менее 60 мкс с паузой на восстановление между слотами 1 мкс, как минимум. Инициируется любой слот чтения отрицательным фронтом сигнала шины (рисунок 14).

После того как ведущее устройство инициализировало слот чтения, DS18B20 передает бит данных.  Для передачи 1 датчик оставляет шину свободной (в высоком состоянии), а для передачи 0 – формирует на шине низкий уровень.

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

На рис. 15 показано, что общая сумма временных интервалов слота чтения Tinit , TRC и TSAMPLE должна быть не более 15 мкс.

Рис. 16 показано, что для максимальной надежности приема данных необходимо уменьшить Tinit и TRC и читать состояние шины в конце отрезка 15 мкс.

Диаграмма

Пример 1 работы с DS18B20.

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

РЕЖИМ МАСТЕРА

ДАННЫЕ ШИНЫ

ПОЯСНЕНИЯ

TX Reset Мастер формирует импульс сброса.
RX Presence DS18B20 отвечают импульсом присутствия.
TX 55h Мастер выполняет команду соответствия ROM кода.
TX 64-бит ROM код Мастер посылает ROM код DS18B20.
TX 44h Мастер посылает команду конвертирования температуры.
TX DQ линия подключена к шине питания Мастер подключает DQ к шине питания на время преобразования.
TX Reset Мастер формирует импульс сброса.
RX Presence DS18B20 отвечают импульсом присутствия.
TX 55h Мастер выполняет команду соответствия ROM кода.
TX 64-бит ROM код Мастер посылает ROM код DS18B20.
TX BEh Мастер посылает команду чтения памяти.
RX 9 байтов данных Мастер читает всю оперативную память, включая циклический код CRC. Затем вычисляет CRC для первых восьми байтов и сравнивает с принятым кодом. Если коды не равны, мастер повторяет операцию чтения.

 

Пример 2 работы с DS18B20.

В этом примере используется только один датчик DS18B20 с “паразитным питанием”. Ведущее устройство записывает Th, Tl и регистр конфигурации в оперативную память. Затем читает память и вычисляет циклический код для контроля данных. Следующим шагом, ведущее устройство копирует данные из оперативной памяти в EEPROM.

РЕЖИМ МАСТЕРА

ДАННЫЕ ШИНЫ

ПОЯСНЕНИЯ

TX Reset Мастер формирует импульс сброса.
RX Presence DS18B20 отвечает импульсом присутствия.
TX CCh Мастер выполняет команду пропустить ROM.
TX 4Eh Мастер выполняет команду записи памяти.
TX 9 байта данных Мастер посылает три байта (TH, TL, и регистр конфигурации).
TX Reset Мастер формирует импульс сброса.
RX Presence DS18B20 отвечает импульсом присутствия.
TX CCh Мастер выполняет команду пропустить ROM.
TX BEh Мастер посылает команду чтения памяти.
RX 9 байтов данных Мастер читает всю оперативную память, включая циклический код CRC. Затем вычисляет CRC для первых восьми байтов и сравнивает с принятым кодом. Если коды не равны, мастер повторяет операцию чтения.
TX Reset Мастер формирует импульс сброса.
RX Presence DS18B20 отвечает импульсом присутствия.
TX CCh Мастер выполняет команду пропустить ROM.
TX 48h Мастер выполняет команду копирования памяти.
TX DQ линия подключена к шине питания Мастер подключает DQ к шине питания на время преобразования.

 

Предельно-допустимые параметры DS18B20

Напряжение на любом выводе датчика относительно земли  - 0,5 ... 6 В
Рабочая температура  - 55 … + 125 °C
Температура хранения Электрические характеристики постоянного тока (DC характеристики).
Температура пайки  See J-STD-020A

Указаны предельные величины параметров. Превышение этих параметров недопустимо. Эксплуатация длительное время с предельными значениями параметров может уменьшить надежность устройства.

Электрические характеристики постоянного тока (- 55 … + 125 °C, VDD = 3,0 ... 5,5 В).

ПАРАМЕТР ОБОЗНАЧЕНИЕ УСЛОВИЯ МИН. ТИП. МАКС. ЕД. ИЗМ. ПРИМЕ
ЧАНИЕ
Напряжение питания VDD Внешнее питание +3.0 +5.5 В 1
Подтягивающее напряжение VPU Паразитное питание +3.0 +5.5 В 1,2
Внешнее питание +3.0 VDD
Погрешность измерения температуры tERR -10°C - +85°C ±0.5 °C 3
-55°C - +125°C ±2
Входной
логический
низкий уровень
VIL -0.3 +0.8 В 1,4,5
Входной логический
высокий уровень
VIH Внешнее питание +2.2 Ниже
5.5
или
VDD + 0.3
В 1, 6
Паразитное питание +3.0
Втекающий ток IL VI/O=0.4В 4.0 мА 1
Ток покоя IDDS 750 1000 нА 7,8
Рабочий ток IDD VDD=5В 1 1.5 мА 9
Ток утечки IDQ 5 мкА 10
Дрейф температуры ±0.2 °C 11

Примечания:

  1. Значения всех напряжений указаны относительно земли.
  2. Предполагается, что устройство, подтягивающее напряжение, идеальное, поэтому напряжения подтяжки равно Vpu.
  3. Смотри типовые рабочие характеристики (рис. 17).
  4. Напряжение низкого уровня указано для втекающего тока выхода 4 мА.
  5. Чтобы гарантировать напряжение импульса присутствия не выше напряжения “паразитного питания”, Vilmax может быть понижено на 0,5 В.
  6. Напряжение высокого уровня указано для вытекающего тока выхода 1 мА.
  7. Ток покоя определен для 70 °C.
  8. Чтобы минимизировать IDDS, напряжение на выводе DQ должно быть в пределах GND ≤ DQ ≤ GND + 0,3 В или VDD – 0,3 В ≤ DQ ≤VDD.
  9. Рабочий ток измеряется во время операции преобразования температуры.
  10. DQ вывод в высоком состоянии.
  11. Дрейф данных определен испытаниями в течение 1000 часов при 125 °C, VDD= 5,5 В.

Электрические характеристики EEPROM переменного тока (- 55 … + 125 °C, VDD = 3,0 ... 5,5 В).

ПАРАМЕТР ОБОЗНАЧЕНИЕ УСЛОВИЯ МИН. ТИП. МАКС. ЕД. ИЗМ.
Время цикла записи twr 2 10 мс
Число записей NEEWR -55°C - +55°C 50000 цикл
Время хранения tEEDR -55°C - +55°C 10 лет

Электрические характеристики переменного тока (- 55 … + 125 °C, VDD = 3,0 ... 5,5 В).

ПАРАМЕТР ОБОЗНАЧЕНИЕ УСЛОВИЯ МИН. ТИП. МАКС. ЕД. ИЗМ. ПРИМЕ
ЧАНИЕ
Время преобразования температуры tCONV разрешение 9 бит 93.75 мс 1
разрешение
10 бит
187.5 мс 1
разрешение
11 бит
375 мс 1
разрешение
12 бит
750 мс 1
Время подключения к мощному питанию tSPON Посылка команды конвертации температуры 10 мкс
Время слота tSLOT 60 120 мкс 1
Время восстановления tREC 1 мкс 1
Время записи 0 rLOW0 60 120 мкс 1
Время записи 1 tLOW1 1 15 мкс 1
Время чтения данных tRDV 15 мкс 1
Время высокого уровня сброса tRSTH 480 мкс 1
Время низкого уровня сброса tRSTL 480 мкс 1,2
Время высокого уровня присутствия tPDHIGH 15 60 мкс 1
Время низкого уровня присутствия tPDLOW 60 240 мкс 1
Емкость CIN/OUT 25 пкФ

Примечания:

  1. Временные диаграммы указаны согласно рис. 18.
  2. При ”паразитном питании”, при tRSL > 960 мкс может произойти сброс термодатчика.

Характеристики DS18B20

Рисунок 18. Временные диаграммы.

Диаграмма

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

 

Как пример использования термодатчиков DS18B20, могу привести мою разработку - контроллер для холодильника на элементе Пельтье. Используются два термодатчика. Один измеряет температуру воздуха в холодильнике, второй - температуру радиатора элемента Пельтье.

Появилась еще публикация о применении DS18B20 в системе Ардуино.

 

 

3

Автор публикации

не в сети 3 дня

Эдуард

279
Комментарии: 1936Публикации: 197Регистрация: 13-12-2015

84 комментария на «DS18B20 – датчик температуры с интерфейсом 1-Wire. Описание на русском языке.»

  1. Добрый день. Я не могу понять как поймать тревожный сигнал?
    После команды( EC )при тревожном сигнале появляется импульс присутствия или как?

    0
    • Здравствуйте. Если честно, я уже не помню. Я стараюсь обойтись без этой функции. Проще в цикле опрашивать датчик. И надежнее, и проще. Процессы очень инерционные.

      0
  2. Привет! У Вас кажется ошибка в описании временных слотов записи. Второй абзац описывает запись единицы, а третий — нуля.

    0
      • Но всё еще не исправили рис. 14, просто тупо передрали из даташит. Время записи нуля обозначено меньше 120 (?суток), но это будет сброс. Время отпускания шины при записи 1 больше 1 мкс,например, 70 мкс, но это запись нуля!

        0
  3. есть термоподвеска с 10 датчиками DS18B20 вычитал их адреса но как определить их порядок в линии? существуют ли какой нибудь метод, канешно без разбора подвески. Вот пример адресов:
    ROM = 28 FF 18 1D 3C 04 00 F1
    ROM = 28 FF 04 17 3E 04 00 F8
    ROM = 28 FF 02 09 3D 04 00 AD
    ROM = 28 FF 22 05 3E 04 00 A3
    ROM = 28 FF 4A 17 3E 04 00 B3
    ROM = 28 FF 06 09 3D 04 00 B2
    ROM = 28 FF 06 05 3E 04 00 44
    ROM = 28 FF 21 08 3D 04 00 94
    ROM = 28 FF 25 1D 3C 04 00 99
    ROM = 28 FF 4D 09 3D 04 00 2B
    Зарание спасибо

    0
    • Можно нагревать датчики по одному и смотреть какой из них покажет повышенную температуру.

      0
    • 1. Опрашиваешь датчики
      2. нагреваешь 1-й татчик
      3. Опрашиваешь датчики
      температура 1-го подымется, записываешь ROM-код
      4. повторяешь шаги 2-3 с остальными 8-ю датчиками.
      5. последний тачик методом исключения.
      Пока только так.

      0
  4. Здравствуйте я как понимаю передача 0 или 1 постоянно с опускание шины в 0 если идёт ппередача 0 то дополнительно с временной задержкой 60мкс а если 1 то шину опускаем на 1мкс и передаем 1 и задержка 60мкс и тоже самое с приемом данных ?

    0
  5. Здравствуйте. Вы пишете, что при вычислении отрицательных температур:
    «При отрицательном значении ( S=1 ) сначала необходимо перевести дополнительный код в прямой. Для этого надо инвертировать каждый разряд двоичного кода и прибавить 1. А затем перевести в десятичный и умножить на 0,0625 °C.»
    Как это все реализуется данной формуле:
    temperature= (float)((int)bufData[0] | (((int)bufData[1]) << 8)) * 0.0625 + 0.03125
    Есть сдвиг старшего байта, побитовое сложение младшего и старшего. А где здесь перевод дополнительного кода в прямой и сложение с 1?

    0
    • Перевод дополнительного кода в прямой нужен для вычислений на ассемблере. В C любая целочисленная знаковая переменная (например int) автоматически воспринимает дополнительный код как отрицательное число и учитывает это при математических операциях. Если вы напишете
      int x = -1; то в x будет лежать двоичный код 11111111111111.

      0
  6. int x = -1; то в x будет лежать двоичный код 11111111111111.
    говорят int два байта!Единичек надо добавить?.

    0
  7. Долго матерился на автора статьи. Сгорел датчик и плата. Вы хоть бы проверили. Перепутали в своем ……… + и -.

    0
    • Распиновка датчика показана на одном рисунке и в таблице. В обоих случаях она правильная.
      И еще мне непонятно, как можно сжечь плату даже попутав выводы датчика.

      0
  8. Эдуард , а когда есть неизвестное количество невычитаных датчиков на линии и нужно снять с них показания — какой алгоритм ? Если можно ткните в пример , я уже себе мозг сломал протоколом 1-Wire (

    0
    • Я предпочитаю по отдельным линиям датчики подключать. Так намного надежнее и проще. Посмотрите в описании библиотеки Ардуино OneWire. В комментариях к уроку 26 что-то по этому поводу пишут.

      0
  9. Здравствуйте! А Вы не подскажете, есть ли возможность отличить оригинальный датчик от китайского? И что обозначают цифры ниже названия? Встречаю уже 4-ю комбинацию. Хочу докупить к своему термометру и растерялась. На моих датчиках этих цифр не видно под термоусадкой. А расковыривать не хочется.
    Спасибо.

    0
    • Здравствуйте!
      Они сейчас все китайские. Как правило, отлично работают. У меня ни одного неисправного не попалось.

      0
      • Здравствуйте!
        Купил на АЛИ 50 датчиков, маркированы нормально, но не работают при замене работающего датчика. Не работают ни в каком режиме питания и ни на 3В, ни на 5В — резистор 1-2к. Старый датчик работает во всех режимах. Это брак? Сейчас пытаюсь вернуть продавцу.

        0
        • Здравствуйте!
          Наверное, брак. Когда-то давно было такое понятие перемаркированные компоненты. На Митинском рынке скупались радиоэлементы, названия стирались и ставилась другая маркировка. Может новое — забытое старое.

          0
        • При замене датчика необходимо изменить данные в опрашиваемом контроллере. Вы меняете на датчик с другим идентификатором, а контроллер пытается опросить с прошлым.

          0
  10. Не соглашусь с выводом о невозможности определения физического порядка подключения датчика к линии связи.
    Предварительно прошиваем регистр Tl или Th — указываем порядковый номер физического подключения. При опросе температуры считываем все 9 байт — там уже будет нужная нам информация)

    0
  11. В охранной системе КСИТАЛ используются датчики DS18B20, которые часто выходят из-за молнии. Замена ничего не дает, почему?

    0
  12. Здравствуйте!
    Столкнулись с такой проблемой. К контроллеру подключено 6 датчиков. Каждый датчик подключен к отдельному входу на контроллере. Длинна кабели между контроллером и каждым датчиком 10 м. Подключение по двум проводам. Опрос каждого датчика — каждые 10 секунд. Кабель проложен в помещение где есть наводки от ЧП к которому подключен мощный вентилятор, в помещении есть также дроссельные лампы. Если ЧП и лампы не включены, все работает отлично, как только что-то из них включается, датчик зависает и перестает работать, требуется перезагрузка контроллера. Явная проблема с помехами, что можно сделать в такой ситуации?

    0
    • Здравствуйте!
      Прежде всего, соединение датчиков с контроллером должны быть выполнены отдельными витыми парами. Датчики гальванически развязаны, поэтому сигналы наводок в проводах будут вычитаться. Как идеальный вариант — соединение экранированными витыми парами.
      В какой-то мере помехоустойчивость увеличиться, если уменьшить сопротивление подтягивающего резистора до 2 кОм.
      Остальные меры касаются изменения программного обеспечения, чтобы контроллер чаще опрашивал датчики и при каждом опросе снимал напряжение с датчиков (сбрасывал).

      0
  13. Нарисуйте более подробно для новичка, как подключить с Mosfet транзистором

    0
    • Здравствуйте!
      В транзисторе нет необходимости. Нагрузочная способность выводов практически всех микроконтроллеров позволяет подключать датчик непосредственно к выводу. Собственно MOSFET транзисторы находятся внутри микроконтроллера. Посмотрите, как подключается датчик к Ардуино в уроке 26.

      0
      • Здравствуйте !)

        Но вот на этой схеме — http://mypractic.ru/wp-content/uploads/2016/02/p4-1.jpg

        есть транзистор… самое непонятное — что управляет затвором на нём ?

        0
        • Здравствуйте!
          Эта схема взята из официальной документации на датчик. На ней показана цепь питания датчика при выполнении команды. В этом случае датчик потребляет ток до 1,5 мА. Если нагрузочная способность выхода микроконтроллера не позволяет формировать такой ток, то добавляется цепь питания на MOSFET транзисторе. Транзистор открывается в моменты выполнения команды. Но все современные микроконтроллеры способны формировать на выходе ток 1,5 мА. И практического значения эта схема не имеет. Это и написано в статье, ниже схемы.

          0
  14. И еще подскажите, пожалуйста, какие сюда номиналы кондера и диода — http://mypractic.ru/wp-content/uploads/2016/02/p20-1.jpg

    0
    • Диод я использовал обыкновенный кремниевый, например, LL4148. Но лучше использовать с барьером Шоттки, например, BAT54. Конденсатор 0,1 — 1 мкФ. Но, вы решите, нужна ли вам такая схема. Целесообразно ее применять если температура измерения выше 100 C и необходимо для связи с датчиком использовать 2 провода.

      0
    • Здравствуйте!
      Может быть все что угодно. Может вы неправильно считаете контрольный код, может аппаратная ошибка.

      0
  15. Добрый день! На рис. 5 есть схема подключения датчика температуры с использованием диода и конденсатора, а какой номинал этих элементов? Спасибо!

    0
    • Здравствуйте!
      Диод обыкновенный кремниевый, например, LL4148, КД522 и т.п. Но лучше с барьером Шоттки, например, BAT54.
      Конденсатор чем больше, тем лучше. Керамический 0.1 — 1 мкФ.

      0
  16. Я так и не понял: если подключить несколько датчиков на одну шину можно им всем последовательно раздать команду Convert, а потом, допустим через секунду, также последовательно считать измеренную температуру? Или надо работать с каждым датчиком отдельно: дал сброс, адресовал ус-во, отправил Convert, подождал 750мс, адресовал ус-во, считал показание. И так для всех датчиков.

    0
      • Даёте команду пропуск ROM и запуск преобразования. По ней все датчики начнут преобразование. Ожидаем тайм-аут.
        Затем поочередно с каждого датчика (с адресацией) считываете значение температуры.

        0
  17. Добрый день.
    Есть три датчика (один измерят температуру на улице (длина провода 4 м. , второй на трубе подачи (длинна провода 2 м) и третий температуру комнаты (длинна 14 м.). Провод — обыкновенный телефонный 4-х жильный ). Данные снимаются (купленным USB модулем контроля VTDS180) и записываются в базу на компьютере. Если не подключать провод (14 м, даже просто провод, без припаянного датчика)), то все работает, если же подключаю провод, все датчики выдают -257, отключаю провод, все нормализуется. Провод прозванивал, замыканий нет. ) Это контроллер виноват?, слишком длинный провод? поможет ли витая пара, стоит перетягивать провод? Может быть еще что то можно придумать?

    0
    • Здравствуйте!
      Если виноваты электромагнитные помехи, то витые пары могут помочь. Датчики гальванически развязаны, поэтому сигналы наводок в проводах будут вычитаться. Как идеальный вариант — соединение экранированными витыми парами.
      В какой-то мере помехоустойчивость увеличиться, если уменьшить сопротивление подтягивающего резистора до 2 кОм. Уменьшение сопротивления также поможет, если виновата значительная емкость кабеля.

      0
      • Понял, спасибо! И еще такой вопрос. Мне нужно из одного помещения снять показания температуры на 3 контроллера. существуют какие то варианты с одного датчика снимать показания и раздавать на несколько контроллеров или ставить cвой датчик на каждый контроллер?

        0
  18. Имеется данное устройство MCX http://www.fractal.com.ru/index.php?p=device&sp=mcx52-3&ssp=MCX52-3.1%20DIN,не очень понятно как считывать температуры,показанные датчиком DS1820 ,подключенные по двум проводам

    0
  19. Объясните, пожалуйста кто-нибудь:
    » Если DS18B20 включен по схеме с внешним питанием, то мастер может контролировать состояние команды конвертации. Для этого он должен читать состояние линии (выполнять временной слот чтения), по завершению команды, линия перейдет в высокое состояние. Во время выполнения команды конвертации линия удерживается в низком состоянии.»

    То есть датчик во время конвертации удерживает на линии низкий уровень?

    0
    • Здравствуйте!
      Да, все так. С паразитным питанием это невозможно, т.к. неоткуда получать питание, когда линия в низком уровне.

      0
  20. Много написано кроме одного. как укрепить датчик к точке контроля. Приобрел терморегулятор с этими датчиками. На датчики одета термоусадка , т.е. между датчиком и точкой контроля ухудшенный тепловой контакт. Как это отразится на точности измерения

    0
    • Здравствуйте!
      Да, конечно, плохой тепловой контакт может отразиться на точности измерения. Требования к монтажу датчика DS18B20 типичны для подобных устройств. Об этом можно посмотреть, например, в описании датчика LM135 http://mypractic.ru/datchiki-temperatury-lm135-lm235-lm335-opisanie-na-russkom-yazyke-xarakteristiki-primenenie.html в одноименном разделе.

      0
  21. как подключить датчик TLE4998p4 , можно ли использовать подключение ds1820 как пример

    0
  22. Вопрос по питанию:
    А вам, уважаемый автор, не кажется, что та схема питания, что вы предложили и уверяете, что она прекрасно работает — это тоже самое, а скорей всего вы на подсознании интуитивно, потому как много раз всматривались в даташит этого термодатчика, просто повторили то, что и так есть уже схемно внутри этого DS18B20
    Вы посмотрите внимательно на блок-схему в даташит.

    Хорошо что у вас только один датчик, вы удачно подобрали ёмкость и всё работает.
    Я бы не советовал этого делать на каждом датчике при большом их количестве, не то чай и всю сеть просадите или спалите контроллер- а что, чем чёрт не шутит 😉

    0
    • Здравствуйте!
      Да, такая же схема внутри. Только внутренняя паразитная емкость недостаточна, чтобы держать питание на время передачи данных в режиме внешнего питания. Я рекомендую эту схему для измерения температур выше 100 градусов.

      0
  23. Здравствуйте. А если подключен датчик по двум проводам. Его можно поосто заменять.на новый или может понадобится в контроллер внесение какихто изменений.

    0
    • Здравствуйте!
      Да, скорее всего. Изменения в программе придется вносить только если в ней задан конкретный адрес датчика. Такое случается редко. Как правило, происходит обращение к датчику без адресации или адрес определяется автоматически.

      0
  24. Здравствуйте. собрали схему написали скетч , для подогрева двигателя. При -22 ‘С датчик не сработал. при -18 ‘С еще работает. Подключение трех-проводное.
    Скажите это подделка попалась.( с китая все такое 🙂 )

    0
  25. Подскажите пожалуйста принципы и алгоритмы работы при горячем подключении/отключении датчиков и горячей замене вышедших из строя датчиков. Кто и как должен выполнять сканирование шины? Или при любом физическом изменении датчиков на шине нужно перезагружать контроллер?

    0
      • Ок, поставим вопрос по другому. Чтобы знать реальное текущее количество подключённых датчиков, нужно время от времени (например, раз в минуту) осуществлять сканирование всей сети (как при старте контроллера). Правильно? Или вся эта система не рассчитана на горячее подключение/отключение датчиков?

        0
  26. Приобрел такие на Али. Не могу заставить их работать по 2-проводке. С внешним питанием все работает стабильно.

    0
      • это большая проблема «Китайских датчиков», они не работают по 2х проводной схеме,
        датчики в металической гильзе с скругленным донышком гарантированно не будут работать, проверил несколько партий.
        1 партия была с тупым донышком, они работали.
        по 3х проводной работают все.

        0
  27. Ув. Эдуард! Можно ли утверждать по косвенным признакам: времени «преобразования», избыточному размеру регистра температуры и его незначащих младших битах, от том что в DS18b20 установлен не выше 9-ти разрядный АЦП и применяется оверсемплинг для измерений с большей «точностью». Спасибо!

    0
    • Здравствуйте!
      Я бы не делал таких выводов. Избыточность кода, скорее всего, связана с привязкой к байтам. А время преобразования АЦП часто влияет на число значащих разрядов. Разработчики гарантируют 11 разрядов и я склонен им верить.

      0
  28. Здравствуйте!
    Помогите записать регистры Tl; Th и Configuration Register. Устройство работает по своим адресам, а запрограммировать сам датчик не получается, наверное не хватает знаний.
    В наличии есть ОТЛАДОЧНАЯ ПЛАТА Arduino.
    нужен пример скетча для записи Th=0 Tl=172 Configuration Register=127
    Спасибо!

    0
  29. Спасибо за статью. Эти датчики юзаю пару лет. Но на «минималках». По одному на линию и только чтение 2 байтов температуры без crc. Иногда из-за скачков напряжения датчик сбоит и дает температуру 85 градусов.
    Поэтому 2 вопроса:
    — Если читать все 9 байт и проверять crc, исключит ли это ложные 85? Просто программно выкинуть это значение нельзя. Реальный диапазон -15…+110.
    — Если использовать несколько датчиков на одной линии, и послать команду «Поиск ROM [F0h]», как они все ответят?

    0
    • Здравствуйте!
      Проверка импульса ответа и CRC говорит о том, что данные переданы правильно. А ошибка измерения может возникнуть внутри датчика из-за нестабильного питания.
      Я уже не помню в деталях, но примерно определение адресов датчиков на шине происходит так.
      После команды ПОИСК каждый датчик передает первый бит своего адреса и его же инверсное состояние. Датчики объединены на шине монтажным ИЛИ. 0 с любого датчика даст 0, независимо от других датчиков. Получается:
      Если бит и дополнение = 1, то датчиков нет вообще;
      Если биты не равны, то у всех датчиков бит адреса совпадает.
      Если бит и дополнение = 0, то биты адреса датчиков не совпадают.
      Последний случай – единственный неопределенный. Позиции такие битов запоминаются и ищутся дальше посылкой кодов.

      0
    • нет никаких скачков напряжения( электроснабжение по первой категории, прибор подключал через стабилизатор,85 градусов это программный дефект,около этой температуры прибор начинает медленней работать( пример- реальная температура 100 градусов, а после 80 градусов еле ползет) .кабель от датчика не помехо защищен (д.б.- витая пара или экран)

      0
  30. Кто подскажет как правильно измерять отрицательное напряжение и вывод на экран пример можно показать.

    0
  31. Добрый день!
    Работаю с датчиком через пребразователь интерфейсов I2C — OW DS2482-100
    Выполняю следующую последовательность действий для опроса одного датчика.
    1) Сбрасываю датчик, после чего от него приходит подтверждение
    2) Так как не знаю его ID, то отправляю команду CCh (на осциллографе вижу, что передается данные от младшего к старшему биту, то есть 0x33)
    3) Отправляю команду на начало преобразования 44h (на осциллографе вижу, что передается данные от младшего к старшему биту, то есть 0x22)
    4) Жду 1 секунду
    5) повторяю п.1
    6) повторяю п.2
    7) Отправляю команду на считывание результата преобразования BEh (на осциллографе вижу, что передается данные от младшего к старшему биту, то есть 0x7D)

    После пункта 7 осциллографом не вижу, что по линии OW идет 9-ти байтовый ответ от датчика температуры, вернее не вижу ничего.

    Подскажите, пожалуйста, в чем может быть проблема?

    0
    • Здравствуйте!
      Я не работал с таким датчиком. Посмотрите на форумах. На одном из них пишут, что есть варианты ds2482-100 с багами. И даже есть документация производителя на эту тему.

      0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".