Меню

Arduino dallas паразитное питание



Dallas 18B20 (ds18b20) подключение к Arduino

Опубликовано 03.07.2013 11:37:00

В ассортименте нашего магазина появился датчик температуры DALLAS 18B20 во влагозащищенном корпусе с широким диапазоном измеряемых температур от -55 до +125°С. Данные о влагозащищенности и максимальной температуре в +125 градусов сразу натолкнули на мысли об экстремальном тестировании в кипящей воде. Этим мы и займемся.

Компоненты для повторения (купить в Китае):

Данный датчик работает по шине 1-Wire.

Для устройств, работающих по шине 1-Wire в среде Arduino IDE используется библиотека OneWire.
Последнюю версию библиотеки, а также полную документацию можно найти на странице разработчиков.

Каждое такое устройство содержит уникальный 64-битный ‘ROM’ код, состоящий из 8 битов, определяющих код серии, 48 бит уникального номера и 8 бит помехоустойчивого CRC кода.

Информация об измеренной температуре хранится в оперативной памяти датчика, которая состоит из 9 байт.

1 и 2 байты хранят информацию о температуре.

3 и 4 байты хранят соответственно верхний и нижний пределы температуры.

5 и 6 байты зарезервированы.

7 и 8 байты используются для сверхточного измерения температуры.

9 байт хранит помехоустойчивый CRC код предыдущих 8 байт.

Основные команды, используемые при работе с библиотекой:

search(addressArray)

Выполняет поиск следующего 1-Wire устройства, если устройство найдено, то в 8 байтный массив addressArray записывается его ROM код, иначе возвращает false.

reset_search()

Выполняет новый поиск с первого устройства.

reset()

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

select(addressArray)

Выполняет выбор устройства после сброса, передается ROM Код устройства.

write(byte)

Передает информационный байт на устройство

write(byte, 1)

Передает информационный байт на устройство, работающее в паразитном режиме питания

read()

Считывает информационный байт с устройства

crc8(dataArray, length)

Вычисляет CRC код байтов из массива dataArray, длиной length

При помощи команды write, мы можем передавать управляющие команды на датчик в виде байтов, рассмотрим основные из них:

0x44 – провести измерение температуры и записать данные в оперативную память

0x4E – записать 3 байта в 3й, 4й и 5й байты оперативной памяти

0xBE – считать последовательно 9 байт оперативной памяти

0x48 – скопировать 3й и 4й байты оперативной памяти в EEPROM

0xB8 – скопировать данные из EEPROM В 3й и 4й байты оперативной памяти

0xB4 – вернет тип питания (0 – паразитное, 1 – внешнее)

Подключение к Arduino

Из датчика выходят три провода:

Красный: «+» питания.

Черный: «-» питания

Белый: Вывод выходного сигнала

Подключение датчика:

Красный: на + 5 Вольт Arduino.

Черный на любой из GND пинов­­­ Arduino.

Белый на любый цифровой вход Arduino (в примере D10).

Для работы датчика необходимо соединить сигнальный провод с проводом питания резистором номиналом 4.7 кОм.

Для начала рассмотрим самый полезный пример для работы с датчиком — вывод показаний температуры в монитор порта.

Dallas18B20 экстремальное тестирование

Как уже говорилось, мы решили устроить датчику экстремальное тестирование, но просто опускать датчик в кипяток это не интересно. Поместим датчик в стакан и прокипятим. Для наглядности в монитор порта будут выводиться значения температуры. На прикрепленном ниже видео видно плавное нарастание температуры. Хочется отметить что температура воды при нормальном атмосферном давлении не может быть выше 100 °С. При тестировании датчика в кипящей воде, максимально зафиксированная нами температура составила 99.87°С. Тест можно считать успешным.

В схему было добавлено реле, для автоматического отключения кипятильника при температуре 99.5°С. Чтобы не резать провода на кипятильнике подключим через розетку, внутри которой находится вышеупомянутое реле.

Важно

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

OneWire ds(10); // Подключаем датчик к 10 цифровому пину

void setup(void) <
Serial.begin(9600);
pinMode(3, OUTPUT);
// Включаем кипятильник
digitalWrite(3, LOW);
>

void loop(void) <
byte i;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;

// Ищем алрес датчика
if ( !ds.search(addr)) <
Serial.println(«No more addresses.»);
Serial.println();
ds.reset_search();
delay(250);
return;
>

// Проверяем не было ли помех при передаче
if (OneWire::crc8(addr, 7) != addr[7]) <
Serial.println(«CRC is not valid!»);
return;
>
Serial.println();

// Определяем серию датчика
switch (addr[0]) <
case 0x10:
Serial.println(» Chip = DS18S20″);
type_s = 1;
break;
case 0x28:
Serial.println(» Chip = DS18B20″);
type_s = 0;
break;
case 0x22:
Serial.println(» Chip = DS1822″);
type_s = 0;
break;
default:
Serial.println(«Device is not a DS18x20 family device.»);
return;
>

Читайте также:  Разработать режим питания ребенка

ds.reset();
ds.select(addr); // Выбираем адрес
ds.write(0x44, 1); // Производим замер, в режиме паразитного питания
delay(1000);

ds.reset();
ds.select(addr);
ds.write(0xBE); // Считываем оперативную память датчика

for ( i = 0; i 99.5)
<
digitalWrite(3, HIGH);
>
>

Купить в России Dallas 18B20 во влагозащищенном корпусе

А как же комментарии?

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.

Источник

Урок 10 — Датчик температуры DS18B20, подключаем к Arduino.

В предыдущем уроке мы рассмотрели подключения датчика температуры и влажности DHT11 к Arduino. И выяснили что данный датчик не очень точный. Чем же его можно заменить? Одним из распространенных датчиков для измерения температуры являться DS18B20. Рассмотрим в данном уроке варианты подключения датчика, пару примеров программного решения.

Характеристики датчика DS18B20:

  • Погрешность измерения не больше 0,5 С (для температур от -10С до +85С). Не требуется дополнительная калибровка.
  • Диапазон измерений от -55 С до +125 С.
  • Напряжение питания от 3,3В до 5В.
  • Датчик обладает своим уникальным серийным кодом.
  • Не требуются дополнительные внешние элементы.
  • Можно подключить сразу до 127 датчиков к одной линии связи.
  • Информация передается по протоколу Wire.
  • Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода. Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.

Датчик выпускается в открытом корпусе в виде транзистора для измерения температуры воздуха.

Можно купить датчик в виде модуля DS18B20. Распаренный на плате.

Также датчик DS18B20 продеться в закрытом корпусе для измерения температуры жидкости.

Для урока нам понадобиться:

Подключаем датчик DS18B20 к Arduino NANO вот по такой схеме.

Подключение датчика DS18B20 к Arduino UNO будет вот таким.

Для написания программы нам понадобиться библиотека OneWire.

Данную библиотеку можно установить из менеджера библиотек или скачать отсюда.

Код ниже будет выводить показание температуры в монитор порта каждую секунду.

Но данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature. Данная библиотека ставиться поверх OneWire. Т.е. для ее роботы должна быть установлена библиотека OneWire.

С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.

Мы рассмотрим более простотой пример.

В данном примере температура выводиться 1 раз в секунду. И при этом выводится температура в Цельсиях и фарингитах.

Как видите данный пример намного меньше и более понятен для новичка.


На одну шину можно подключить до 127 датчиков вот по такой схеме.

С библиотекой DallasTemperature идут примеры которые позволяют получать данные с датчиков при током подключении.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

Понравилась статья? Поделитесь ею с друзьями:

Источник

«Почти все» датчики DS18B20, приобретенные не у официальных дистрибьюторов, являются подделками, клонами

Maxim DS18B20

Пробная закупка 1000 датчиков DS18B20 у 70 различных продавцов и их проверка, показала, что большинство из них являются подделками или клонами с чрезвычайно разными техническими характеристиками

Инженер Крис Петрич предупреждает: «Ваш датчик температуры DS18B20, скорее всего, подделка, фальшивка, клон… Если вы не купили микросхемы непосредственно у производителя Maxim Integreted (Dallas Semiconductor в прошлом), у официального дистрибьютора (DigiKey, RS, Farnel, Mouser и т.д.), или у крупного розничного продавца, или же вы приобрели исключительно качественные готовые водонепроницаемые датчики на DS18B20». Мы приобрели более 1000 шт. готовых водонепроницаемых датчиков на DS18B20 или отдельных микросхем у более чем 70 различных поставщиков на широко известных торговых площадках, онлайн-магазинах в 2019 году. Все готовые датчики температуры, купленные на eBay и AliExpress, содержали поддельные микросхемы DS18B20, и почти все микросхемы, купленные на этих торговых площадках, были поддельными.

Как определить?

Если ПЗУ (ROM) микросхемы не соотвествует шаблону 28-xx-xx-xx-xx-00-00-xx, то микросхема DS18B20 является клоном [1].

Также автор предоставляет два скетча Arduino для тестирования датчиков (доступны для скачивания в разделе загрузок):

  • discover_fake_DS18B20.ino – выполняет некоторые безопасные тесты и сообщает, есть ли какие-то отклонения от подлинного DS18B20. Данный скетч не предназначен для работы с датчиком в режиме паразитного питания.
  • classify_fake_DS18B20.ino – это минимальная реализация классификации датчиков по определенным семействам (см. ниже), которая основана на ответах на недокументированные коды функций. Результат работы теста достаточно точный. Автор предупреждает, что работа данного скетча может вывести микросхему DS18B20 из строя, действуете на свой риск!
Читайте также:  Питание 3 группа мороженое

Почему стоит переживать?

Помимо неких эстетических соображений, некоторые из поддельных датчиков фактически не работают в режиме паразитного питания, имеют высокий уровень шума, погрешность измерения вне заявленной полосы ±0.5 °С, не содержат энергонезависимую память (EEPROM), имеют ошибки и несоответствующие нормы отказов, или отличаются по другими параметрам из спецификации производителя. Понятно, что проблемы не настолько велики, чтобы отговаривать людей покупать датчики на eBay, но может быть полезно знать реальные характеристики, когда получаемые данные важны или измерения выполняются в сложных условиях.

С чем мы имеем дело?

Определения понятия «подделка» разнятся, но согласно документу AIR6273 подделка представляет собой умышленное несанкционированное копирование, имитацию, замену или модификацию подлинного предмета от авторизованного производителя [3]. Начиная с 2019 года основной проблемой являются копии (клоны), имеющие определенную маркировку, чтобы ввести в заблуждение ничего не подозревающего покупателя. К счастью, клоны DS18B20 почти легко идентифицировать: маркировка на чипе напечатана, а не нанесена лазером? Нет отметки на заднем отступе? Вероятно, подделка. Содержимое памяти (регистра «блокнота», Scratchpad) не соответствует спецификации? Вероятно, подделка. Систематически ведет себя не так, как подлинный датчик? Вероятно, подделка.

На что они похожи?

На Рисунке 1 приведен пример подлинного датчика DS18B20 производства Maxim в корпусе TO-92.

Рисунок 1. Пример маркировки оригинальных датчиков DS18B20 на корпусе TO-92.

На момент написания статьи (2019) маркировка оригинальных микросхем Maxim наносилась лазером, а не печаталась.

  • Первые две строки, DALLAS 18B20, указывают, что это датчик DS18B20 (Dallas Semiconductor является первоначальным производителем), датчики только с паразитным питанием маркируются DALLAS 18B20P.
  • Знак «+» в четвертой строке означает, что компонент соответствует требованиям RoHS.
  • 3-я строка указывает год выпуска и номер недели в году (в данном случае это 32 неделя 2019 года).
  • Последние два символа в строке 3 указывают ревизию кристалла (на данный момент С4).
  • В строке 4 трехзначное число, за которым следуют два символа, является формой кода партии, которая позволяет Maxim отследить историю производства.
  • В микросхемах, выпущенных в 2016 году или позже, встречалась только комбинация символов AB и AC [1].

Маркировка внутри отступа на задней части:

  • Маркировка P (Филиппины?). На всех последних микросхемах (2016 и моложе) и на большинстве микросхем, выпуск которых уходит, как минимум, в 2009 год.
  • Маркировка THAI (Таиланд?), где — это одна из I, J, K, L, M, N, O, S, T, U, V, W, X, и, возможно, других, по крайней мере, на некоторых микросхемах произведенных в 2011 году [1]. Шрифт отличается от шрифта символов, составляющих слово THAI.

Из того, что было автором замечено на корпусе TO-92, только для микросхем с маркировкой P в отступе на задней части один код партии соответствует коду даты производства. Это не относится к микросхемам с маркировкой THAI в отступе.

Как узнать, что попался поддельный датчик DS18B20?

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

В противном случае автор приводит два варианта:

  1. Можно проверить соответствие паспорту (техническому описанию, даташиту). На самом деле, такая проверка должна быть в любом случае, поскольку даже подлинные приборы могут быть неправильно обработаны, наряду с неавторизованными цепочками распространения. Если датчик не проходит ни один из тестов, то это подделка (если только сама реализация производителя Maxim не содержит ошибок, как в случае кристаллом ревизии B7, в котором выявлено появление ошибок в EEPROM [1]).
  2. Можно сравнить поведение датчика с датчиком DS18B20 производства Maxim. Это основано на предположении, что все датчики DS18B20 производства Maxim ведут себя одинаково. Это справедливо, по крайней мере, для датчиков имеющих общий код ревизии кристалла (который был С4 с 2009 года).

Что касается первого варианта, то должно наблюдаться несоответствие между тем, что говорится в техническом описании, и тем, что реально содержит датчик [1]. Таким образом, автор вывел некоторую условную классификацию поддельных датчиков DS18B20 и разделил их по семействам:

  • Семейство B: зарезервированные байты в регистрах памяти (Scratchpad) могут быть перезаписаны (в соответствии с инструкциями, указанными в техническом описании).
  • Семейство C: датчик работает только в 12-битном режиме – байт 4 регистра памяти датчика (регистр конфигурации) всегда равен 0х7F.
  • Семейство С: количество циклов записи EEPROM очень мало (порядка 10, а не > 50 тыс.)
  • Семейство B1, D1: содержимое ROM может быть изменено программно – не фиксировано лазером в технологическом процессе.
  • Семейство A2, B2, D: значительное количество датчиков с погрешностью измерения вне диапазона ±0.5 °С при 0 °С.
  • Семейство D: датчик не работает в паразитном режиме питания (относится к большинству датчиков семейства D).
  • Семейство D: значение температуры сразу после включения датчика составляет 25 °С, а не 85 °С.
  • Семейство D: датчик не выполняет преобразование температуры с низким разрешением быстрее.
  • Семейство D: зарезервированные байты 5 и 7 регистра памяти не равны 0хFF и 0х10, соответственно.
  • Семейство D1: сохраняет значение температуры во время циклов включения/ выключения питания.
Читайте также:  Рассеянный склероз питание что нельзя есть

Таким образом, на момент написания статьи (2019) каждый доступный поддельный датчик DS18B20 не соответствует спецификации по крайней мере по одному параметру.

Для второго варианта есть один простой тест на различия с датчиками DS18B20 производства Maxim, который, по всей видимости, дает сбой у всех поддельных датчиков:

Это подделка, если его адрес ROM не соответствует шаблону 28-xx-xx-xx-xx-00-00-xx (ROM датчиков Maxim – это по сути 48-разрядный счетик со старшими битами по-прежнему равными 0). Кроме того, за редким исключением в семействе A2, ни один из поддельных датчиков не корректирует значение байта в регистре 6 или не отвечает корректно на коды недокументированных функций, касающихся значений Trim (калибровочные константы).

Помимо очевидных различий в реализации, таких как перечисленные выше в пунктах 1 и 2, существуют еще некоторые характеристики, которые можно использовать для классификации. Например, заявленное время для 12-разрядного преобразования (определяется путем опроса датчика о завершении преобразования после отправки кода функции 0х44 при комнатной температуре) является характеристикой отдельных микросхем и попадает в определенные диапазоны, определяемые внутренней схемой датчика:

  • 11 мс: Семейство D1
  • 28-30 мс: Семейство C
  • 325-505 мс: Семейство A2
  • 460-525 мс: Семейство D2
  • 580-615 мс: Семейство A1
  • 585-730 мс: Семейство B

Следовательно, между семействами A и B будут некоторые пограничные случаи, но простого измерения времени, затраченного на преобразование температуры, часто бывает достаточно, чтобы определить, является ли датчик поддельным.

Важным аспектом работы датчика является его способность подтягивать линию передачи данных к низкому уровню, преодолевая сопротивление фиксированного, подтягивающего к питанию (pull-up) резистора. Оказывается, эта характеристика сильно различается между указанными семействами. Спецификацией гарантируется, что датчик может обеспечить входной ток не менее 4 мА при напряжении 0.4 В в температурном диапазоне до +125 °С [2]. Отдавая ток 4 мА (подтягивающий резистор 1.2 кОм к питанию +5 В), датчики обеспечивали следующие значения низкого уровня напряжения при комнатной температуре (на каждое семейства было измерено от 5 до 10 датчиков):

  • Семейство A1: 0.058 В — 0.062 В
  • Семейство B2: 0.068 В — 0.112 В (все, за исключением одного датчика: 0.068 В — 0.075 В)
  • Семейство C: 0.036 В — 0.040 В
  • Семейство D2: 0.121 В — 0.124 В

Все датчики соответствуют спецификациям при комнатной температуре, но кластеризация данных по семействам очевидна. Это указывает на отличия в разработке аппаратной части. Было бы интересно повторить эти измерения при температуре 100 °С.

С другой стороны, датчик является фальшивкой, если напечатанная на корпусе комбинация дата-партия отсутствует в базе данных производителя Maxim (для выяснения потребуется обратиться в тех. Поддержку Maxim). Стоит знать, что существуют подделки, в которых используется «подлинная» комбинация даты и партии.

Обратите внимание, что ни один из вышеперечиленных пунктов не дает уверенности, что конкретный датчик DS18B20 является подлинным продуктом Maxim, но если какой-либо из приведенных выше тестов показывает «подделку», то это определенно подделка.

Извлечение кристалла DS18B20 из корпуса

В коллаже на Рисунке 2 показаны фотографии крситаллов микросхем DS18B20 всех семейств, с которыми автор столкнулся в 2019 г. Все фотографии имеют одинаковый масштаб, приблизительно 1.4 мм в ширину. Корпус датчика вскрывался с помощью кусачек (пассатижей), матрица извлекалась из пластикового корпуса путем кипячения в канифоли эпоксидной смолы и затем отмывалась ацетоном в ультразвуковой ванне.

Рисунок 2. Кристаллы (матрицы) датчиков DS18B20 по указанным семействам, извлеченные из корпуса.

Семейство A1 – это подлинный датчик DS18B20 производства Maxim Integrated (ревизия кристалла С4). Все остальные семейства – клоны. Обратите внимание на сходство между кристаллами семейств D1 и В1 (в соответствии с их сходством в программной части) и значительные различия между семействами B1 и B2 (в отличие от их сходства в программной части).

В своей статье [1] автор дополнительно приводит множество примеров соответствия приобретенных датчиков DS18B20 указанным семействам.

Дополнительные материалы

Загрузки

Перевод: Vadim по заказу РадиоЛоцман

Источник