Датчик DS18B20 обладает программируемым разрешением, которое напрямую влияет на дискретность измерений и время преобразования. В вашем коде используется 12-битное разрешение (конфигурационный байт 0x7F), что обеспечивает максимальную детализацию, но требует больше времени на измерение. Разберемся, как это работает:

1. Разрешение и его параметры

DS18B20 поддерживает четыре режима разрешения:

Разрешение (бит) Шаг измерения Время преобразования Конфигурация (R1, R0)
9 0.5°C 93.75 мс 00
10 0.25°C 187.5 мс 01
11 0.125°C 375 мс 10
12 0.0625°C 750 мс 11

В вашем коде используется 12-битный режим (R1=1, R0=1), заданный через конфигурационный байт 0x7F (двоичный: 01111111). Это означает:

  • Шаг измерения: 0.0625°C (значение температуры кодируется с шагом в 1/16 градуса).

  • Время преобразования: до 750 мс (датчик выполняет более точное усреднение сигнала).

2. Точность vs. Разрешение

Важно различать два понятия:

  • Разрешение — минимальный шаг, с которым датчик может различить температуру (0.0625°C для 12 бит).

  • Точность — максимальное отклонение измеренного значения от реальной температуры.

Согласно документации DS18B20:

  • Базовая точность: ±0.5°C в диапазоне -10°C до +85°C.

  • За пределами этого диапазона точность снижается:

    • ±2°C при -55°C до -10°C,

    • ±1°C при +85°C до +125°C.

Таким образом, 12-битное разрешение не улучшает базовую точность, но позволяет детальнее отображать температуру в рамках погрешности датчика. Например:

  • Реальная температура: 25.12°C.

  • Датчик с 12 битами: покажет 25.125°C.

  • Датчик с 9 битами: округлит до 25.0°C или 25.5°C.

3. Почему выбран конфигурационный байт 0x7F?

Конфигурационный байт состоит из 8 бит, но только старшие два бита (R1 и R0) задают разрешение:

  • 0x7F в двоичном виде: 01111111.

  • R1=1, R0=1 → 12-битный режим.

  • Остальные биты (биты 4–0) установлены в 11111 — это резервные биты, которые игнорируются датчиком.

4. Практические рекомендации

Когда использовать 12-битный режим:

  • Если требуется максимальная детализация (например, для построения графиков температуры).

  • Если время измерения не критично (например, датчик опрашивается раз в 5–10 секунд).

Когда снижать разрешение:

  • Для ускорения измерений (например, в системах реального времени).

  • Если шаг в 0.5°C достаточен (например, в термостатах).

Пример изменения разрешения:

Чтобы перейти на 9 бит, замените конфигурационный байт на 0x1F (двоичный: 00011111, R1=0, R0=0):

cpp
 
Copy
 
Download
oneWire.write(0x1F); // Вместо 0x7F

Это сократит время измерения до 93.75 мс, но шаг температуры увеличится до 0.5°C.

5. Калибровка датчика

Точность ±0.5°C — типичное значение, но реальная погрешность зависит от:

  • Индивидуальных особенностей датчика.

  • Напряжения питания (рекомендуется 3.0–5.5 В).

  • Внешних помех на линии данных.

Для повышения точности:

  1. Проведите калибровку датчика, сравнив его показания с эталонным термометром.

  2. Используйте усреднение значений (например, среднее за 10 измерений).

  3. Избегайте перепадов напряжения на шине питания.

6. Ограничения 12-битного режима

  • Задержки измерения: 750 мс могут быть критичны для систем с жесткими временными рамками.

  • Энергопотребление: Датчик дольше находится в активном режиме, что важно для батарейных устройств.

Заключение

Ваш код использует максимальное разрешение DS18B20, что оправдано для проектов, где важна детализация. Однако фактическая точность (±0.5°C) определяется не разрешением, а конструкцией датчика. Если требуется ускорить работу системы или снизить энергопотребление — уменьшите разрешение, пожертвовав дискретностью измерений. Для большинства задач управления (например, термостат) достаточно 9–10 бит.