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 в системе Ардуино.

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

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

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

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

  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
    Зарание спасибо

    • Нет. Физический порядок соединения датчиков с линией связи определить не возможно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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