Надежность датчиков температуры DS18x20

11

Я использую Maxim DS18x20 (у меня на самом деле более одного варианта) 1-проводные датчики температуры, чтобы регистрировать температуру в разных комнатах моего дома раз в минуту. Около одного чтения из тысячи я получаю что-то полностью поддельное. В середине последовательности, которая постепенно повышается с 65F до 70F, я получаю что-то вроде -32.1F или 15.64F.

У кого-нибудь еще была такая проблема, или это что-то не так с моей настройкой? Если это просто известная проблема с этими вещами, мне придется сделать что-то вроде трех чтений и выброса выброса.

Несколько слов о моей настройке:

  • Я бегу на 3.3В
  • Я проверяю контрольную сумму чтения, когда оно возвращается к arduino, и оно совпадает (или я думаю, что оно совпадает - в этом коде всегда может быть ошибка).
  • Они убегают от нормальной силы, а не от паразитирующей.
  • У меня есть подтягивающий резистор 4.7K.
  • Я использую только один датчик на каждой сенсорной платформе.
  • Датчик находится на печатной плате, подключенной к Arduino, который читает его.
  • Я вижу ту же проблему чтения с разных ардуино (diecimilla, pro-mini, самодельный кастом)
edebill
источник

Ответы:

5

Я видел это время от времени с DS18B20. Для моего приложения это было достаточно просто, чтобы отфильтровать ложные результаты с помощью кода.

user274
источник
Приятно слышать, что кто-то похож на это. Каким был ваш алгоритм фильтрации?
edebill
Я бы посоветовал вам сделать то, что вы сказали, взять 3 чтения, 5 будет лучше, 7 лучше, чем это, но если есть ошибка что-то около 1/1000, то вам просто нужно 3. Возьмите медиану. Проблема будет решена. если вы возьмете 5, у вас возникнет странная проблема.
Кортук
Я делаю 5 сейчас. Я попытался просто взять более высокое значение 2, но вчера вечером все еще появлялась ошибка (у меня 3 датчика, считывающие каждую минуту, поэтому я получаю тысячи точек данных в день).
edebill
3

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

stevenvh
источник
3

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

Внимательно посмотрите лист данных здесь http://www.rentron.com/Files/ds18b20.pdf

На странице 5 показано, что точная двоичная последовательность для 85C:

+85°C 0000 0101 0101 0000

Аналогично, для 25C это:

+25.0625°C 0000 0001 1001 0001

В некоторых случаях, если контроллер пропускает бит, вы получите значение, которое является фактической температурой, выраженной в двоичном и сдвинутом битах. Часто это в 1/2 раза превышает целевое значение в C.

Иногда вы можете получить электрические помехи в линии, и контроллер читает целый клочок 1 с. В этом случае вы получите некоторое число, например 15,64, которое в двоичном виде на самом деле очень близко к числам между 65 и 70F, за исключением куча 1 с в начале.

gbronner
источник
2

Что бы это ни стоило, я немного поработал с DS18B20 несколько месяцев назад. Я снял короткое видео и сделал запись в своем блоге, где есть ссылки на примеры и пример кода. Надеюсь, это может немного помочь! http://dailyduino.com/archives/552

Morgellon
источник
2

У меня 13 из них работает в моем доме уже около четырех лет. С базой данных сложно работать (я отслеживал все образцы). Но я не видел такого рода поведение. Вместо этого, каждый раз, когда один датчик замораживает и блокирует все остальные, единственным выходом из этого (который я обнаружил) было отключение напряжения питания на несколько секунд. Поэтому я добавил к своей плате крошечное реле, и всякий раз, когда микроконтроллер чувствует это, он сбрасывает всю цепочку датчиков. Это происходит несколько раз в неделю.


источник
Хм. Может быть, я должен включить их, только когда собираюсь читать.
edebill