Перейти к содержанию

Почему DS18B20 долго измеряет температуру?

Обновлено Редакция GAW

DS18B20 — не аналоговый датчик, а термометр с собственным АЦП, и каждое измерение — это отдельное преобразование. Его длительность tCONV по даташиту зависит от разрешения:

РазрешениеШагНаибольшее время преобразования
9 бит0,5 °C93,75 мс
10 бит0,25 °C187,5 мс
11 бит0,125 °C375 мс
12 бит (по умолчанию)0,0625 °C750 мс

Если программа запускает измерение и ждёт в delay(750) для каждого датчика, пять датчиков займут почти четыре секунды — отсюда ощущение, что DS18B20 «тормозит».

Как ускорить

  1. Снизить разрешение. Для термостата или погоды шага 0,5 °C часто хватает, а время уменьшается в 8 раз. Шаг разрешения не повышает точность: она у DS18B20 ±0,5 °C в диапазоне −10…+85 °C при любом числе бит.
  2. Запускать все датчики разом. Команда Skip ROM [CCh] и за ней Convert T [44h] — все датчики измеряют одновременно, ждать нужно один раз. Потом каждый читается по своему 64-битному адресу. При паразитном питании сильная подтяжка должна дать ток всех датчиков сразу — до 1,5 мА на каждый.
  3. Не ждать вслепую. При внешнем питании после Convert T можно слать слоты чтения: датчик отвечает 0, пока считает, и 1, когда закончил. При паразитном питании так нельзя — шина всё это время удерживается сильной подтяжкой.
  4. Не блокировать программу. Запустить преобразование, заняться другими делами и вернуться за результатом через tCONV — по таймеру, а не через delay().

Наш расчёт: пять датчиков по 12 бит с отдельным ожиданием — 5 · 750 = 3750 мс; с общим запуском — 750 мс плюс время на чтение пяти результатов по шине.

Протокол, команды и временные диаграммы описаны в статье «Интерфейс 1-Wire», кадры и CRC можно разобрать в калькуляторе 1-Wire, схема подключения и регистры — на странице DS18B20.

Похожие вопросы

Как изменить разрешение DS18B20?

Записать регистр конфигурации командой Write Scratchpad [4Eh] — третьим байтом после TH и TL: биты R1 и R0 задают 9–12 бит. Чтобы настройка пережила выключение питания, её сохраняют в EEPROM командой Copy Scratchpad [48h].

Можно ли читать температуру сразу после команды Convert T?

Нет: до конца преобразования в регистрах остаётся прошлое значение, а у только что включённого датчика — значение сброса 85 °C. Нужно дождаться tCONV или, при внешнем питании, опрашивать шину слотами чтения, пока датчик не ответит единицей.

Сколько ждать, если на шине десять датчиков?

Столько же, сколько с одним: команды Skip ROM и Convert T запускают измерение на всех датчиках сразу, и через 750 мс при 12 битах можно по очереди считать результаты каждого по его адресу. Медленно становится, если запускать и ждать каждый датчик отдельно.

Источники

  1. Maxim Integrated (Analog Devices). DS18B20 Programmable Resolution 1-Wire Digital Thermometer (19-7487, Rev 6, 7/19) — AC Electrical Characteristics — tCONV 93,75 / 187,5 / 375 / 750 мс макс. для 9 / 10 / 11 / 12 бит; табл. 2 — биты R1, R0 регистра конфигурации задают разрешение; разрешение после включения — 12 бит, шаг 0,5 / 0,25 / 0,125 / 0,0625 °C; команды Skip ROM [CCh] + Convert T [44h] запускают одновременное измерение всеми датчиками на шине; при внешнем питании ведущий может слать слоты чтения: датчик отвечает 0, пока идёт преобразование, и 1 по окончании, при паразитном питании так нельзя — шина удерживается сильной подтяжкой; Copy Scratchpad [48h] сохраняет конфигурацию в EEPROM
  2. Microchip. AN1199: 1-Wire Communication with PIC Microcontroller (DS01199A, 2008) — временные диаграммы сброса и слотов чтения/записи 1-Wire

Нашли ошибку?