Администрирование Железо DS18B20: цифровой термометр с интерфейсом 1-Wire Sat, July 20 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

DS18B20: цифровой термометр с интерфейсом 1-Wire Печать
Добавил(а) microsin   

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

DS18B20 обменивается данными с хостом по шине 1-Wire (мастером шины 1-Wire обычно является внешний микроконтроллер, MCU). Шина и протокол 1-Wire устроены таким образом, что при использовании паразитного питания (об этом подробнее далее) для подключения и обмена данными с MCU достаточно только двух проводов - сигнала данных и общего провода (GND). Таким образом, DS18B20 может получать питание либо от специального вывода, либо через нагрузочный резистор сигнала данных (паразитное питание), во втором случае устраняется необходимость в применении дополнительного источника питания.

В каждый DS18B20 прошит уникальный 64-разрядный серийный номер, использование которого в протоколе позволяет нескольким DS18B20 функционировать на одной и той же шине 1-Wire. При этом все DS18B20 подключаются к MCU параллельно, и один MCU может снимать данные с многих микросхем DS18B20, распределенных по большому пространству. Подключение датчиков температуры упрощается, что очень важно для систем контроля температуры, вентиляции и кондиционирования помещений (HVAC) или промышленного оборудования.

Основные особенности DS18B20:

● Уникальный 1-Wire интерфейс, который требует для подключения только одной ножки порта MCU.
● Уменьшается количество необходимых компонентов в системе, потому что в одном DS18B20 интегрированы сразу и серийный номер, и температурный датчик, и память EEPROM.
● Диапазон измеряемых температур -55°C .. +125°C (-67°F .. +257°F).
● Точность измерения температуры ±0.5°C в диапазоне -10°C .. +85°C.
● Программируемая разрешающая способность от 9 до 12 бит (по умолчанию 12 бит).
● Из внешних компонентов требуется только верхний подтягивающий резистор (типовой номинал 4.7 кОм).
● Режим паразитного питания требует только 2 проводов для подключения (DQ и GND).
● Упрощается построение многоточечных систем температурного контроля.
● В каждом устройстве записан уникальный 64-разрядный серийный номер (сохраненный во внутреннем ПЗУ).
● Гибкая настройка пользователем энергонезависимых параметров для функции оповещения о превышении нижнего и верхнего порогов температуры (Alarm Settings). Специальная команда Alarm Search идентифицирует устройства, у которых температура превысила установленные пределы.
● Датчики DS18B20 поставляются в 8-выводных корпусах SO (с шириной корпуса 150 mil), 8-выводных корпусах μSOP, и 3-выводных корпусах TO-92.

DS18B20 packages

[Предельные допустимые значения]

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

Параметр Значения
Напряжение на любом выводе относительно GND -0.5V .. +6.0V
Рабочий диапазон температур -55°C .. +125°C
Диапазон температур хранения -55°C .. +125°C
Температура пайки См. спецификацию IPC/JEDEC J-STD-020

[DC-характеристики]

В следующей таблице приведены характеристики по постоянному (DC) току для условий -55°C .. +125°C, VDD = 3.0V .. 5.5V.

Симв. Параметр Условия min Typ MAX Ед.
VDD Напряжение питания Локальное питание(1) +3.0   +5.5 V
VPU Напряжение подтяжки Паразитное питание(1,2) +3.0   +5.5
Локальное питание(1,2) +3.0   VDD
tERR Температурная ошибка -10°C .. +85°C(3)     ±0.5 °C
-30°C .. +100°C(3)     ±1
-55°C .. +125°C(3)     ±2
VIL Входной лог. 0(1,4,5)   -0.3   +0.8 V
VIH Входная лог. 1(1,6) Локальное питание +2.2   Меньше 5.5
или
VDD+0.3
Паразитное питание +3.0  
IL Втекающий ток (Sink Current) VI/O = 0.4V 4.0     mA
IDDS Ток режима приостановки (standby)(7,8)     750 1000 nA
IDD Ток при активности(9) VDD = 5V   1 1.5 mA
IDQ Входной ток DQ(10)     5   μA
  Дрейф(11)     ±0.2   °C

Примечания:

(1) Все напряжения указаны относительно общего провода GND.
(2) Спецификация напряжения питания, подаваемого через резистор подтяжки (Pullup Supply Voltage) подразумевает идеальный компонент pullup, и по этой причине уровень лог. 1 подтяжки равен VPU. Чтобы удовлетворять параметру VIH микросхемы DS18B20, реальное напряжение шины питания для транзистора strong pullup должно включать падение напряжения на этом транзисторе, когда он открыт. Поэтому VPU_ACTUAL = VPU_IDEAL + VTRANSISTOR.
(3) См. типовую кривую производительности на рис. 1. Пределы погрешности термометра составляют 3-sigma значения.
(4) Напряжения лог. 0 указаны для втекающего тока (Sink Current) 4 mA.
(5) Для гарантии формирования presence pulse в условиях пониженного напряжения от паразитного питания, VILMAX возможно придется уменьшить до 0.5V.
(6) Напряжения лог. 1 указаны при вытекающем токе (source current) 1 mA.
(7) Ток standby указан для температур до +70°C. Ток standby при +125°C обычно составляет 3μA.
(8) Для минимизации IDDS, уровень DQ должен быть в следующих диапазонах: GND ≤ DQ ≤ GND + 0.3V или VDD – 0.3V ≤ DQ ≤ VDD.
(9) Ток активности соответствует току потребления во время температурных преобразований или записей в EEPROM.
(10) DQ в лог. 1 (состояние отключено, high-Z).
(11) Данные дрейфа основаны на 1000-часовом тесте при +125°C и VDD = 5.5V.

[AC-характеристики энергонезависимой памяти]

Данные характеристик переменного (AC) тока указаны для условий -55°C .. +125°C, VDD = 3.0V .. 5.5V.

Симв. Параметр Условия min Typ MAX Ед.
tWR Время цикла записи     2 10 мс
NEEWR Количество записей в EEPROM -55°C .. +55°C 50k      
tEEDR Время сохранности записанных данных 10     лет

[AC-характеристики]

Данные характеристик переменного (AC) тока указаны для условий -55°C .. +125°C, VDD = 3.0V .. 5.5V.

Симв. Параметр Условия min Typ MAX Ед.
tCONV Время преобразования температуры(12) Разрешение 9 бит     93.75 мс
Разрешение 10 бит     187.5
Разрешение 11 бит     375
Разрешение 12 бит     750
tSPON Время включения strong pullup Выдана команда Convert T     10 мкс
tSLOT Время таймслота(12)   60   120
tREC Время восстановления(12)   1    
tLOW0 Время лог. 0 операции Write 0(12)   60   120
tLOW1 Время лог. 0 операции Write 1(12)   1   15
tRDV Время достоверности данных для чтения(12)       15
tRSTH Время лог. 1 импульса сброса(12)   480    
tRSTL Время лог. 0 импульса сброса(12,13)   480    
tPDHIGH Время лог. 1 определения импульса присутствия(12)   15   60
tPDLOW Время лог. 0 определения импульса присутствия(12)   60   240
CIN/OUT Емкость       25 пФ

Примечания:

(12) См. диаграммы времени на рис. 2.
(13) В режиме паразитного питания, если tRSTL > 960 мкс, то может произойти сброс по питанию (power-on reset).

DS18B20 typical error curve fig01

Рис. 1. Типовая зависимость ошибки в зависимости от температуры.

DS18B20 timing diagram fig02

Рис. 2. Диаграммы времени.

[Общее функциональное описание DS18B20]

На рис. 3 показана блок-схема DS18B20. В 64-bit ROM хранится уникальный серийный номер. Память scratchpad содержит 2-байтный регистр температуры, который хранит цифровой результат оцифровки температуры. Дополнительно scratchpad предоставляет доступ к однобайтным регистрам верхнего и нижнего порога тревоги (alarm trigger registers TH и TL) и однобайтному регистру конфигурации. Регистр конфигурации позволяет настроить разрешающую способность преобразования температуры в цифровой вид, доступны варианты 9, 10, 11 или 12 бит (по умолчанию используется настройка 12 бит). Регистры TH, TL и регистр конфигурации энергонезависимые (хранятся в памяти EEPROM), так что они сохранят свои данные, когда питание устройства было отключено.

DS18B20 block diagram fig03

Рис. 3. Блок-схема DS18B20.

DS18B20 использует протокол 1-Wire, для реализации которого нужен внешний верхний подтягивающий резистор (pullup) и один порт MCU, который может работать в режиме 3 логических состояний с открытым стоком (этот порт соединяется с ножкой DQ микросхемы DS18B20). В системе с такой шиной MCU идентифицирует и адресует отдельные устройства на шине по их уникальному 64-битному коду (серийный номер). Из-за того, что каждое устройство на шине имеет свой уникальный серийный номер, количество адресуемых устройств на шине виртуально не ограничено ("виртуально" означает, что на самом деле накладываются другие физические ограничения). Протокол шины 1-Wire, включая подробное описание команд и таймслотов, рассматривается далее в секции "Система шины 1-Wire".

Другая функциональная возможность DS18B20 - работа без отдельного внешнего источника питания. Это так называемое "паразитное питание", когда энергия подается через сигнал данных DQ, когда он находится в состоянии лог. 1. Уровень лог. 1 заряжает внутренний конденсатор микросхемы 1-Wire (CPP), и его заряд предоставляет питание для микросхемы, когда сигнал на шине находится в уровне лог. 0. Альтернативно можно подавать питание на DS18B20 от внешнего источника питания через отдельный вывод VDD.

Измерение температуры. Разрешающая способность сенсора DS18B20 составляет 0.5°C (9 бит), 0.25°C (10 бит), 0.125°C (11 бит) или 0.0625°C (12 бит, по умолчанию). При подаче питания на микросхему DS18B20 она находится в режиме ожидания с пониженным энергопотреблением (low power idle state, ток потребления в этом состоянии менее 1 мкА, см. [1]). Чтобы начать преобразование температуры в цифру, мастер должен выдать команду Convert T [44h]. После преобразования данные температуры сохраняются в 2-байтном регистре памяти scratchpad, и DS18B20 возвращается в idle state. Если DS18B20 получает питание от внешнего источника питания, то мастер может выдать таймслот чтения (см. секции "Система шины 1-Wire" и "Таймслоты чтения/записи") после команды Convert T, и тогда DS18B20 будет отвечать передачей 0 во время прогресса преобразования, и ответит 1, когда преобразование завершится. Если DS18B20 получает "паразитное" питание, то эта техника оповещения об окончании преобразования неприменима, поскольку для успешного преобразования требуется питание от уровня лог. 1, подаваемого через pullup-резистор. Требования к паразитному питанию подробнее рассматривается в секции "Питание DS18B20".

Выходные данные температуры DS18B20 откалиброваны в градусах Цельсия. Для приложений, где используются градусы Фаренгейта, должна использоваться функция преобразования либо на основе формулы, либо на основе таблицы. Данные температуры сохраняются в регистре температуры как 16-разрядное число со знаком в формате двоичного дополнения (sign-extended two’s complement number), см. рис. 4. Биты знака (S) показывают, положительная или отрицательная температура: для положительных значений S = 0, и для отрицательных значений S = 1. Если DS18B20 сконфигурирована в режиме 12-разрядной разрешающей способности (состояние по умолчанию), то все биты в регистре температуры будут содержать достоверные данные. Для 11-разрядной разрешающей способности бит 0 не определен. Соответственно для 10 бит не определены биты 1 и 0, и для 9 бит не определены биты 2, 1 и 0.

Примечание: реальные эксперименты с датчиками DS18B20 показывают, что "не определенные" младшие биты (когда настроена разрядность от 9 до 11) на самом деле всегда сброшены в 0. Таким образом, для любой выбранной разрядности всегда будет корректен один и тот же алгоритм получения температуры в градусах Цельсия из байт регистра температуры.

Таблица 1 дает примеры цифровых выходных данных и соответствующе значения температуры для преобразований с разрядностью 12 бит.

Младший байт
бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
23 22 21 20 2-1 2-2 2-3 2-4
Старший байт
бит 15 бит 14 бит 13 бит 12 бит 11 бит 10 бит 9 бит 8
S S S S S 26 25 24

Рис. 4. Формат данных в регистре температуры (S бит знака, 2n вес соответствующего разряда).

Таблица 1. Взаимосвязь между температурой и данными.

Температура, °C Цифровой результат (в двоичном виде) Цифровой результат (HEX-формат)
+125 0000 0111 1101 0000 07D0h
+85(*) 0000 0101 0101 0000 0550h
+25.0625 0000 0001 1001 0001 0191h
+10.125 0000 0000 1010 0010 00A2h
+0.5 0000 0000 0000 1000 0008h
0 0000 0000 0000 0000 0000h
-0.5 1111 1111 1111 1000 FFF8h
-10.125 1111 1111 0101 1110 FF5Eh
-25.0625 1111 1110 0110 1111 FE6Fh
-55 1111 1100 1001 0000 FC90h

Примечание *: значение по умолчанию после включения питания для регистра температуры.

Сигнализация тревоги. После того, как DS18B20 выполнит температурное преобразование, значение температуры сравнивается с определяемые пользователем величинами порога (complement alarm trigger values), которые хранятся в однобайтных регистрах TH и TL (см. рис. 5). Бит знака (S) показывает отрицательное значение, если S = 1. Регистры TH и TL энергонезависимые (хранятся в EEPROM), так что информация в них сохраняется, когда питание устройства будет отключено. К TH и TL можно получить доступ через байты 2 и 3 памяти scratchpad, как описано в секции "Память DS18B20". Для сравнения с TH и TL в регистре температуры используются только биты 11 .. 4, потому что регистры TH и TL 8-разрядные. Если измеренная температура меньше или равна TL, или больше или равна TH, то в DS18B20 установится флаг тревоги Alarm. Этот флаг обновляется после каждого измерения температуры; таким образом, если условия тревоги пропадут, то флаг очистится на следующем измерении температуры. Устройство мастер может проверить состояния флага alarm всех устройств DS18B20 на шине путем выдачи команды Alarm Search [ECh]. Любая из DS18B20, у которой установлен флаг alarm ответит на эту команду, так что у мастера есть возможность точно определить, на какой из DS18B20 присутствуют условия тревоги. Если имеется условие тревоги, и изменяются настройки TH или TL, другое преобразование температуры должно быть выполнено для обновления достоверного состояния тревоги.

бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
S 26 25 24 23 22 21 20

Рис. 5. Формат содержимого регистров TH и TL (S бит знака, 2n вес соответствующего разряда).

[Питание DS18B20]

Микросхема DS18B20 может получать питание от внешнего источника через ножку VDD, или она может работать в режиме "паразитного питания", что позволяет DS18B20 работать без локального внешнего источника питания. Паразитное питание очень полезно для приложений, которые требуют дистанционного контроля температуры, или измерения производятся в очень ограниченном пространстве. Рис. 3 показывает схему паразитного питания DS18B20, которая "ворует" питание от сигнала данных шины 1-Wire (ножка DQ), когда на шине уровень лог. 1. Паразитное питание заряжает внутренний конденсатор CPP микросхемы DS18B20, и это напряжение используется для питания внутренних схем, когда уровень шины на короткие интервалы времени переходят в лог. 0. Когда DS18B20 используется в режиме паразитного питания, ножка VDD должна быть соединена с землей GND.

В режиме паразитного питания шина 1-Wire и CPP может предоставлять достаточно тока для большинства операций DS18B20, пока удовлетворяются указанные требования по интервалам времени и напряжению (см. "DC Electrical Characteristics" и "AC Electrical Characteristics"). Однако, когда DS18B20 выполняет преобразования температуры или копирование данных из памяти scratchpad в EEPROM, рабочий ток может повыситься до 1.5 mA. Этот ток может привести к недопустимому падению напряжения на pullup-резисторе подтяжки шины 1-Wire и потреблению тока большего, чем может предоставить CPP. Для гарантии, что DS18B20 получит достаточный ток по шине 1-Wire во время операций преобразования температуры и копирования данных, необходимо организовать мощную подтяжку (strong pullup). Это может быть осуществлено с помощью транзистора MOSFET, который на время этих операций будет соединять сигнал данных напрямую с шиной питания, как показано на рис. 6. Шина 1-Wire должна быть подключена к strong pullup на время 10 мкс (max) после выдачи команды Convert T [44h] или Copy Scratchpad [48h], и шина должна удерживаться в лог. 1 pullup-резистром на все время преобразования температуры (tCONV) или передачи данных (tWR = 10 мс). Пока разрешена подтяжка, на шине 1-Wire не может быть никакой активности.

DS18B20 Parasite Power during temperature conversions fig06

Рис. 6. Усиленное паразитное питание (strong pullup) DS18B20 во время температурных преобразований.

Микросхема DS18B20 может быть также запитана традиционным методом, когда внешний источник питания подключен к ножке VDD, как показано на рис. 7. Достоинство этого метода в том, что MOSFET pullup не требуется, и шина 1-Wire освобождается для другого трафика во время температурного преобразования.

DS18B20 External Supply fig07

Рис. 7. Питание DS18B20 от внешнего источника (VDD).

Использование паразитного питания не рекомендуется при измерении температур свыше +100°C, поскольку есть шанс, что DS18B20 не сможет поддержать устойчивый обмен данными из-за больших токов утечки при таких температурах. Для приложений, где нужно измерение таких температур, настоятельно рекомендуется запитывать DS18B20 от внешнего источника питания (через вывод VDD).

В некоторых ситуациях мастер шины может не знать, как получает питание DS18B20 на шине - в режиме паразитного питания или от внешнего источника питания. Мастеру нужна информация для определения, нужно ли использовать strong pullup во время преобразований температуры. Чтобы получить эту информацию, мастер может выдать команду Skip ROM [CCh], за которой идет команда Read Power Supply [B4h], а затем таймслот чтения. Во время таймслота чтения получающие паразитное питание DS18B20 подтянут шину к лог. 0, а получающие внешнее питание DS18B20 оставят состояние шины в лог. 1. Если шина подтянута к лог. 0, то мастер узнает необходимости подключать strong pullup на шине 1-Wire во время преобразований температуры.

[64-разрядный ROM-код]

В памяти ROM каждой микросхемы DS18B20 содержится уникальный 64–битный код (см. рис. 8). Самые младшие 8 бит этого кода содержат код 1-Wire семейства DS18B20: 28h. Следующие 48 бит содержат уникальный серийный номер. Самые старшие 8 бит содержат контрольную сумму (CRC), вычисленную от первых 56 бит кода ROM. Подробное описание бит CRC предоставлено в секции "Генерация CRC". 64-разрядный ROM-код и связанные с ним функции логики управления позволяют устройству DS18B20 работать на одной шине вместе с другими 1-Wire устройствами по протоколу, описанному в секции "Система шины 1-Wire".

DS18B20 64 bit Lasered ROM code fig08

Рис. 8. 64-бит Lasered ROM Code. MSB обозначает старший бит, LSB младший бит.

[Память DS18B20]

Организация памяти DS18B20 показана на рис. 9. Память основана на ячейках SRAM scratchpad с энергонезависимым хранилищем EEPROM для регистров старшего и нижнего порогов тревоги (TH и TL) и регистра конфигурации. Обратите внимание, что если alarm-функция DS18B20 не используется, то регистры TH и TL могут использоваться как память общего назначения. Все команды памяти подробно описаны в секции "Команды функций DS18B20".

DS18B20 Memory Map fig09

Рис. 9. Карта памяти DS18B20.

Примечание *: состояние при включении питания зависит от значений, сохраненных в EEPROM.

Байты 0 и 1 памяти scratchpad содержат соответственно младший (LSB) и старший (MSB) байты регистра температуры. Эти байты работают только на чтение. Байты 2 и 3 предоставляют доступ к регистрам TH и TL. Байт 4 содержит данные регистра конфигурации, что подробно рассмотрено далее в секции "Регистр конфигурации". Байты 5, 6 и 7 зарезервированы для внутреннего использования устройства и не могут быть перезаписаны.

Байт 8 памяти scratchpad предназначен только для чтения, и он содержит контрольную сумму (CRC) от байт 0 .. 7 памяти scratchpad. DS18B20 генерирует эту CRC, как описано в секции "Генерация CRC".

Данные в байты 2, 3 и 4 памяти scratchpad записываются командой Write Scratchpad [4Eh], данные должны посылаться начиная с младшего бита байта 2. Для проверки целостности данных память scratchpad после записи может быть прочитана (с помощью команды Read Scratchpad [BEh]). При чтении scratchpad данные передаются по шине 1-Wire начиная с самого младшего бита байта 0. Для передачи TH, TL и данных конфигурации в EEPROM мастер должен выдать команду Copy Scratchpad [48h].

Данные в регистрах EEPROM сохраняются, когда питание устройства выключено. При включении питания данные EEPROM перезагружаются в соответствующие ячейки scratchpad. Эти данные также могут в любой момент быть перезагружены из EEPROM в scratchpad командой Recall E2 [B8h]. Мастер может выдать таймслоты чтения вслед за командой Recall E2, и DS18B20 покажет статус recall передачей 0, когда процесс recall выполняется, и 1 когда recall завершился.

[Регистр конфигурации]

Байт 4 памяти scratchpad содержит регистр конфигурации, организация которого показана на рис. 10. Пользователь может установить разрядность преобразования температуры DS18B20 с помощью бит R0 и R1 этого регистра, как показано в таблице 2. Состояние по умолчанию при включении питания этих бит R0 = 1 и R1 = 1 (12-разрядная разрешающая способность). Обратите внимание на взаимосвязь между разрешающей способностью и временем преобразования - чем выше разрядность, тем больше время преобразования и выше ток потребления. Бит 7 и биты от 4 до 0 регистра конфигурации зарезервированы для внутреннего использования устройства, и они не могут быть перезаписаны.

бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0
0 R1 R0 1 1 1 1 1

Рис. 10. Регистр конфигурации.

Таблица 2. Конфигурация разрешающей способности измерения температуры.

R1 R0 Разр. способность (бит) MAX время преобразования
0 0 9 93.75 мс (tCONV/8)
0
1 10 187.5 мс (tCONV/4)
1 0 11 375 мс (tCONV/2)
1 1 12 750 мс (tCONV)

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

DS18B20 AMP X145

Команда Write Scratchpad нормально меняет байты TH и TL, но регистр конфигурации не меняется, его значение всегда 7Fh. Причина именно в датчике AMP-X145, потому что если подключить обычную микросхему DS18B20, то с ней такой проблемы нет.

[Генерация CRC]

Байты CRC предоставлены как часть ROM-кода DS18B20 и в 9-ом байте памяти scratchpad. CRC от ROM-кода вычислена от первых 56 бит ROM-кода и содержится в последнем самом значащем байте ROM. CRC от памяти scratchpad вычисляется от данных, сохраненных в scratchpad, и поэтому эта CRC меняется, когда меняются данные в scratchpad. CRC предоставляет мастеру шины метод проверки целостности данных, когда данные считываются из DS18B20. Для проверки, что данные были корректно прочитаны, мастер шины должен вычислить CRC от принятых данных и сравнить вычисленную CRC с соответствующей CRC (либо CRC от ROM-кода, когда считывается ROM, либо со scratchpad CRC, когда считывается scratchpad). Если вычисленная CRC совпадает с прочитанной CRC, то чтение было без ошибок. Сравнение значений CRC и принятие решений о дальнейших действиях полностью в зоне ответственности мастера шины. Внутри DS18B20 нет схем, которые препятствуют выполнению команд, если DS18B20 CRC (ROM или scratchpad) не совпадает со значением, сгенерированным мастером.

Эквивалентная функция используемого полинома CRC (ROM или scratchpad) следующая:

CRC = X8 + X5 + X4 + 1

Мастер шины может вычислить CRC и сравнить её со значениями CRC из DS18B20, используя полиномный генератор, показанный на рис. 11. Эта схема состоит из регистра сдвига и логических элементов ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR), и биты регистра сдвига инициализируются нулями 0. Начиная с самого младшего значащего бита ROM-кода или самого младшего значащего бита scratchpad, данные побитно вдвигаются в регистр сдвига. После того, как 56-й бит из ROM был вдвинутROM (или бит 7 из самого старшего байта scratchpad), в генераторе будет содержаться CRC. Далее 8 бит CRC от ROM-кода или CRC от scratchpad из DS18B20 должны быть вдвинуты в схему. В этот момент, если вычисленная CRC была корректна, то регистр сдвига будет содержать все нули. Дополнительная информация по вычислению контрольной циклической суммы Maxim 1-Wire доступна в апноуте [2].

DS18B20 CRC Generator fig11

Рис. 11. Генератор CRC.

[Система шины 1-Wire]

Система шины 1-Wire использует одного мастера шины для управления одним или большим количеством подчиненных (slave) устройств, подключенных к шине 1-Wire параллельно. Микросхема DS18B20 всегда выступает как slave-устройство. Когда на шине присутствует только одно slave-устройство, обмен данными значительно упрощается, этот случай называется системой "single-drop"; система, в которой на шине несколько slave-устройств, называется "multidrop".

Все данные и команды передаются по шине 1-Wire самым младшим значащим битом вперед.

Аппаратная конфигурация. Шина 1-Wire по определению содержит только один сигнал данных. Каждое устройство на шине (master или slave) обмениваются информацией по этому сигналу данных с помощью порта с открытым стоком. Это дает возможность каждому из устройств "освободить" сигнал данных, когда устройство не передает данные по шине, чтобы шина стала доступна для другого устройства. Порт 1-Wire микросхемы DS18B20 (ножка DQ) имеет открытый сток с внутренней схемой, эквивалентной показанной на рис. 12.

DS18B20 hardware configuration fig12

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

Шина 1-Wire требует внешнего pullup-резистора номиналом приблизительно 5 кОм; таким образом в состоянии ожидания шина 1-Wire (idle state) получает лог. 1. Если по какой-либо причине транзакция должна быть приостановлена, шина ДОЛЖНА БЫТЬ оставлена в состоянии idle, если транзакция должна быть продолжена. Бесконечное время восстановления может происходить между битами до тех пор, пока шина 1-Wire находится в неактивном (в лог. 1) состоянии во время периода восстановления. Если шина удерживается в лог. 0 на время большее, чем 480 мкс, то все компоненты на шине будут сброшены.

Последовательность транзакции. Транзакция для доступа к DS18B20 состоит из следующих действий:

Шаг 1. Инициализация.
Шаг 2. Команда ROM (за которой идет любой требуемый обмен данными).
Шаг 3. Функциональная команда DS18B20 (за которой идет любой требуемый обмен данными).

Очень важно соблюдать такую последовательность каждый раз при доступе к DS18B20, поскольку DS18B20 не ответит, если любой из шагов в этой последовательности пропущен, или следует не в том порядке. Исключение из этого правила - команды Search ROM [F0h] и Alarm Search [ECh]. После выдачи любой из этих команд мастер должен вернуться к шагу 1 показанной выше последовательности транзакции.

Инициализация. Все транзакции на шине 1-Wire начинаются с последовательности инициализации. Она начинается с импульса сброса, переданного мастером, за которым идет импульс (импульсы) присутствия, переданные slave-устройством (устройствами). Импульс присутствия (presence pulse) позволяет мастеру узнать, что slave-устройства (наподобие DS18B20) подключены к шине и готовы к работе. Интервалы времени импульса сброса и импульса присутствия описаны в секции "Сигналы 1-Wire".

[Команды ROM]

После того, как мастер определил появление presence pulse, он может выдать команды ROM. Эти команды работают с уникальными 64-битными ROM-идентификаторами каждого slave-устройства, и позволяют мастеру выделить на шине 1-Wire определенное устройство, если к шине подключена несколько устройств. Эти команды также позволяют мастеру определить, сколько устройств присутствует на шине и какие у них типы, и присутствует ли в каком-нибудь устройстве состояние тревоги (alarm). Существует 5 команд ROM, каждая из них длиной 8 бит. Мастер должен выдать соответствующую команду ROM перед выдачей команды функции DS18B20. Алгоритм работы команд ROM показан на рис. 13.

Когда на систему подано питание, мастер должен идентифицировать ROM-коды (уникальные идентификаторы) всех slave-устройств на шине, что позволяет мастеру определить количество slave-устройств и их типы. Мастер распознает ROM-коды посредством процесса исключения, который требует, чтобы мастер выполнил цикл Search ROM (т. е. команду Search ROM, за которой следует обмен данными) столько раз, сколько необходимо для идентификации всех slave-устройств. Если на шине присутствует только одно slave-устройство, то вместо процесса Search ROM может быть использована более простая команда Read ROM [33h]. Для подробного описания процедуры Search ROM см. апноут AN937 [3]. После каждого цикла Search ROM мастер должен вернуться к шагу 1 (инициализация) в последовательности транзакции.

Эта команда может использоваться только если на шине присутствует только одно slave-устройство. Это позволяет мастеру шины прочитать 64-разрядный ROM-код без использования процедуры Search ROM. Если команда Read Rom используется, когда на шине присутствует больше одного slave-устройства, то произойдет коллизия данных, потому что все устройства на шине одновременно попытаются ответить на эту команду.

Команда Match ROM, за которой идет 64-разрядный ROM-код, позволяет мастеру в любом случае адресовать определенное slave-устройство на шине - и в конфигурации multidrop (когда на шине несколько slave-устройств), и в конфигурации single-drop (когда на шине только одно slave-устройство). Только то slave-устройство, у которого полностью совпадет 64-битный ROM-код, ответит на функциональную команду, которую выдаст мастер; все другие slave-устройства на шине будут ожидать импульса сброса.

Мастер может использовать эту команду для адресации всех устройств на шине одновременно, без отправки какой-либо информации ROM-кода. Например, мастер может дать команду всем микросхемам DS18B20 на шине одновременно выполнить преобразование температуры, если сначала пошлет команду Skip ROM, а затем команду Convert T [44h].

Обратите внимание, что команда Read Scratchpad [BEh] может следовать за командой Skip ROM только если на шине присутствует одно slave-устройство. В этом случае может экономиться время чтения scratchpad, потому что slave-устройство будет прочитано без отправки 64-битного ROM-кода (это может быть важным фактором для переносных автономных устройств, когда экономия энергии является критичным фактором). Если же на шине присутствует несколько slave-устройств, то команда Skip ROM, за которой идет команда Read Scratchpad, приведет к коллизии данных на шине, потому что несколько slave-устройств попытаются одновременно передать свои данные.

Принцип работы этой команды идентичен работе команды Search ROM, за исключением того, что ответят только те slave-устройства, у которых установлен флаг тревоги (alarm flag). Эта команда позволяет мастеру определить, присутствует ли на каком-либо из устройств DS18B20 состояние тревоги, которое может произойти после самого последнего преобразования температуры (если измеренное значение температуры превысило установленные пороги TL и TH). После каждого цикла Alarm Search (т. е. выдачи команды Alarm Search, после которой идет обмен данными), мастер шины должен вернуться к шагу 1 (инициализация) в последовательности транзакции. См. выше секцию "Сигнализация тревоги" для описания работы флага тревоги.

DS18B20 ROM Commands Flowchart fig13

Рис. 13. Выполнение ROM-команд.

[Команды функций DS18B20]

После того, как мастер использовал команду ROM для адресации того устройства, с которым хотел бы организовать обмен данными, мастер может выдать одну из команд функций DS18B20. Эти команды позволяют мастеру записать или прочитать память scratchpad микросхемы DS18B20, инициировать преобразования температуры и определить режим подачи питания. Команды функций DS18B20, описанные далее, суммарно представлены в таблице 3, и их работа проиллюстрирована алгоритмом на рис. 14.

Таблица 3. Набор функциональных команд DS18B20.

Команда Описание Протокол Активность шины после выдачи команды
Команды преобразования температуры
Convert T Инициирует преобразование температуры(1). 44h Если используется внешний источник питания, то DS18B20 передает статус преобразования в ответ на таймслоты чтения (этот функционал недоступен для паразитного питания).
Команды памяти
Read Scratchpad Чтение всего содержимого scratchpad, включая байт CRC. BEh DS18B20 передает до 9 байт данных мастеру шины(2).
Write Scratchpad Записывает данные в байты 2, 3 и 4 памяти scratchpad (регистры TH, TL и регистр конфигурации). 4Eh Мастер передает 3 байта данных в DS18B20(3).
Copy Scratchpad Копирует данные регистров TH, TL и регистра конфигурации из памяти scratchpad в EEPROM(1). 48h Нет активности.
Recall E2 Вспоминает TH, TL и регистр конфигурации, копируя данные из EEPROM в scratchpad. B8h При использовании внешнего источника питания DS1820 передает статус операции в ответ на таймауты чтения.
Read Power Supply Сигнализирует мастеру шины о текущем режиме питания DS18B20. B4h

Примечания:

(1) Для микросхем DS18B20, для которых используется паразитное питание, мастер должен обеспечить strong pullup на шине 1-Wire во время температурных преобразований, и копировать данные из scratchpad в EEPROM. В это время никакая другая активность на шине не допускается.
(2) Мастер может прервать передачу данных в любой момент путем выдачи импульса сброса.
(3) Все 3 байта должны быть записаны перед выдачей импульса сброса.

Эта команда инициирует одиночное преобразование температуры. После преобразования данные результата измерения температуры сохраняются в 2-байтном регистре температуры, который находится в памяти scratchpad, и DS18B20 вернется в свое состояние ожидания с пониженным энергопотреблением (low-power idle state). Если устройство используется в режиме паразитного питания, то в течение 10 мкс (максимум) после выдачи мастером этой команды на шине должна быть обеспечена мощная подтяжка (strong pullup) в течение интервала преобразования (tCONV), как было описано выше в секции "Питание DS18B20". Если паразитное питание не используется, т. е. DS18B20 получает питание не от сигнала шины, а от внешнего источника (подключенного к ножке VDD), то мастер может выдать таймслоты чтения после команды Convert T, и DS18B20 будет отвечать передачей 0, когда преобразование температуры еще не окончено, и передачей 1, когда преобразование температуры завершено. В режиме паразитного питания эта техника оповещения о завершении преобразования неприменима, поскольку шина должна быть подтянута к лог. 1 через ключ strong pullup в течение всего ожидаемого времени преобразования.

Эта команда позволяет мастеру записать 3 байта данных в память scratchpad микросхемы DS18B20. Первый байт данных записывается в регистр TH (байт 2 памяти scratchpad), второй байт в регистр TL (байт 3 памяти scratchpad), и третий байт в регистр конфигурации (байт 4 памяти scratchpad). Данные должны быть переданы самым младшим значащим битом вперед. Все 3 байта должны быть записаны перед выдачей мастером импульса сброса, иначе данные могут быть повреждены.

Эта команда позволяет мастеру прочитать содержимое памяти scratchpad. Передача данных начинается с самого младшего бита байта 0, и продолжается по всей памяти scratchpad, пока не будет прочитан 9-й байт (байт 8, где находится CRC). Мастер может выдать импульс сброса для того, чтобы прервать чтение в любой момент, если нужно прочитать только часть данных scratchpad.

Эта команда копирует содержимое регистров TH, TL и регистра конфигурации (байты 2, 3 и 4 памяти scratchpad) в EEPROM. Если устройство используется в режиме паразитного питания, то в течение 10 мкс (максимум) после выдачи этой команды должна быть обеспечена мощная подтяжка (strong pullup) на время как минимум 10 мс, как это было описано выше в секции "Питание DS18B20".

Эта команда восстанавливает значения порогов тревоги (TH и TL) и данные конфигурации, переписывая их из EEPROM в байты 2, 3 и 4 памяти scratchpad соответственно. Мастер может выдать таймслоты чтения за командой Recall E2, и DS18B20 будет отвечать на это статусом процесса восстановления путем передачи 0, когда восстановление еще не завершено, и передачей 1, когда процедура восстановления завершена. Операция восстановления выполняется автоматически после включения питания, так что достоверные данные доступны в scratchpad, как только питание подано на микросхему DS18B20.

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

DS18B20 Function Commands Flowchart fig14

Рис. 14. Выполнение функциональных команд.

[Сигналы 1-Wire]

Для обеспечения целостности данных микросхема DS18B20 использует протокол обмена 1-Wire со строгими ограничениями для интервалов времени сигналов. Протоколом 1-Wire определены несколько типов сигналов: reset pulse (импульс сброса), presence pulse (импульс присутствия на шине), write 0 (запись 0), write 1 (запись 1), read 0 (чтение 0) и read 1 (чтение 1). Мастер шины инициирует все эти сигналы, за исключением presence pulse.

Процедура инициализации - импульс сброса и импульс присутствия. Любая коммуникация с микросхемой DS18B20 начинается с последовательности инициализации, которая состоит из reset pulse от мастер, за которым идет presence pulse от DS18B20. Это иллюстрируется на рис. 15. Когда DS18B20 посылает presence pulse в ответ на reset pulse, это показывает мастеру, что устройство DS18B20 присутствует на шине и готово к работе.

DS18B20 initialization timing fig15

Рис. 15. Интервалы процедуры инициализации.

Во время процедуры инициализации мастер передает (Tx) reset pulse путем подтяжки сигнала шины 1-Wire к лог. 0 на время как минимум 480 мкс. Затем мастер освобождает шину и переходит в режим приема (Rx). Когда шина освобождена, pullup-резистор подтягивает уровень шины к лог. 1. Когда DS18B20 увидит фронт нарастания уровня, она подождет интервал времени от 15 мкс до 60 мкс, и затем передаст presence pulse, подтягивая уровень шины 1-Wire к лог. 0 на время от 60 мкс до 240 мкс.

[Таймслоты чтения/записи]

Мастер шины записывает данные в DS18B20 во время таймслотов записи (write time slots) и считывает данные из DS18B20 во время таймслотов чтения (read time slots). За один таймслот по шине 1-Wire передается 1 бит.

Write Time Slots. Существует 2 типа таймслотов записи (Write Time Slots): Write 1 таймслот и Write 0 таймслот. Мастер шины использует таймслот Write 1 для записи логической 1 в микросхему DS18B20, и таймслот Write 0 для записи логического 0. Все таймслоты записи должны быть по длительности как минимум 60 мкс, с минимальным интервалом восстановления 1 мкс между отдельными таймслотами записи. Оба типа таймслота записи инициируются мастером путем подтяжки уровня шины 1-Wire к лог. 0.

Для генерации таймслота Write 1 после подтяжки шины к лог. 0 мастер должен освободить шина в течение 15 мкс. Когда шина освобождена, pullup-резистор подтянет уровень шины к лог. 1. Для генерации таймслота Write 0 после подтяжки шины к уровню лог. 0 мастер должен удерживать этот уровень в течение всей длительности таймслота (как минимум 60 мкс).

DS18B20 анализирует уровень шины во время окна времени между 15 мкс и 60 мкс после того, как мастер инициировал таймслот. Если шина была в лог. 1 во время этого окна, то в микросхему DS18B20 запишется 1. Если шина была в лог. 0 во время этого окна, то в микросхему DS18B20 запишется 0.

DS18B20 ReadWrite timeslot diagram fig16

Рис. 16. Интервалы времени таймслотов чтения/записи.

Read Time Slots. DS18B20 может передавать данные мастеру только когда он выдает таймслоты чтения (read time slots). Таким образом, мастер должен генерировать таймслоты чтения сразу после выдачи команд Read Scratchpad [BEh] или Read Power Supply [B4h], чтобы DS18B20 могла предоставить запрашиваемые данные. Дополнительно мастер может выдавать таймслоты чтения после выдачи команд Convert T [44h] или Recall E2 [B8h], чтобы определить статус выполнения операции, как было описано выше в секции "Команды функций DS18B20".

Все таймслоты чтения должны быть по длительности как минимум 60 мкс, с минимальным временем восстановления между таймслотами 1 мкс. Таймслот чтения должен быть инициирован мастером путем подтяжки шины к лог. 0 на время как минимум 1 мкс, после этого шина должна быть освобождена (см. рис. 16). После того, как мастер инициировал таймслот чтения, микросхема DS18B20 будет передавать на шину 1 (в этом случае DS18B20 не подтягивает шину к 0) или 0 (в этом случае DS18B20 подтягивает шину к 0). После истечения времени таймслота DS18B20 освободит шину, и она вернется на уровень лог. 1 подтяжкой от pullup-резистора. Выходные данные DS18B20 достоверны через 15 мкс после спада уровня в момент начала таймслота чтения, и до времени окончания таймслота чтения. Таким образом, мастер должен освободить шину, и затем анализировать её уровень после истечения 15 мкс от начала таймслота чтения.

На рис. 17 показано, что сумма интервалов TINIT, TRC и TSAMPLE для таймслота чтения должна быть меньше 15 мкс. Рис. 18 показывает, что запас тайминга системы становится максимальным путем удерживания как можно более коротких интервалов TINIT и TR, и путем размещения времени выборки уровня мастером как можно ближе к окончанию периода 15 мкс.

DS18B20 detailed master Read1 timing fig17

Рис. 17. Подробное описание интервалов таймслота чтения лог. 1.

DS18B20 recommended master Read1 timing fig18

Рис. 18. Рекомендуемые интервалы таймслота чтения лог. 1.

Примечание: толстой линией осциллограммы показана подтяжка к лог. 0 мастером. Обычная линия соответствует времени, когда сигнал возвращается к уровню лог. 1 током от pullup-резистора.

Следующие апноуты, относящиеся к использованию DS18B20, могут быть получены на сайте компании Maxim www.maximintegrated.com.

Application Note 27: Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products.

Application Note 122: Using Dallas’ 1-Wire ICs in 1-Cell Li-Ion Battery Packs with Low-Side N-Channel Safety FETs Master.

Application Note 126: 1-Wire Communication Through Software.

Application Note 162: Interfacing the DS18x20/DS1822 1-Wire Temperature Sensor in a Microcontroller Environment.

Application Note 208: Curve Fitting the Error of a Bandgap-Based Digital Temperature Sensor.

Application Note 2420: 1-Wire Communication with a Microchip PICmicro Microcontroller.

Application Note 3754: Single-Wire Serial Bus Carries Isolated Power and Data.

Пример подпрограмм 1-Wire может использоваться вместе с Application Note 74: Reading and Writing iButtons via Serial Interfaces, этот пример можно загрузить с сайта компании Maxim. См. также статью [4].

[Информация для закупки]

PART
Диапазон температур
Количество выводов и тип корпуса Маркировка
DS18B20 -55°C .. +125°C 3 TO-92 18B20
DS18B20+ -55°C .. +125°C
DS18B20/T&R -55°C .. +125°C 3 TO-92 (2000 шт.)
DS18B20+T&R -55°C .. +125°C
DS18B20-SL/T&R -55°C .. +125°C 3 TO-92 (2000 шт.)*
DS18B20-SL+T&R -55°C .. +125°C
DS18B20U -55°C .. +125°C 8 FSOP
DS18B20U+ -55°C .. +125°C
DS18B20U/T&R -55°C .. +125°C 8 FSOP (3000 шт.)
DS18B20U+T&R -55°C .. +125°C
DS18B20Z -55°C .. +125°C 8 SO DS18B20
DS18B20Z+ -55°C .. +125°C
DS18B20Z/T&R -55°C .. +125°C 8 SO (2500 шт.)
DS18B20Z+T&R -55°C .. +125°C

Примечания:

(+) Обозначает корпус без использования свинца (lead-free). Символ + появляется в верхней части маркировки lead-free корпусов.
(T&R) Обозначает упаковку Tape and reel.
(*) Корпуса TO-92 в упаковке tape and reel могут поставляться как с прямыми, так и с формованными выводами. Выбирайте вариант SL для прямых выводов (SL это сокращение от straight leads). Bulk-заказы на TO-92 поставляются только с прямыми выводами.

[Ссылки]

1. DS18B20 Programmable Resolution 1-Wire Digital Thermometer site:datasheets.maximintegrated.com.
2. Application Note 27 Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products site:maximintegrated.com.
3. Application Note 937 Book of iButton Standards site:maximintegrated.com.
4. iButton: описание протокола, электронный замок на ключах-таблетках.
5. 220215DS18B20.zip - документация, примеры использования.
6Примеры чтения датчика температуры DS18B20.
7Отличия DS1820, DS18S20 и DS18B20.

 

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


Защитный код
Обновить

Top of Page