Термометр на датчиках DS1820 (продолжение)

(начало смотри здесь )

Дополнения к предыдущей статье. Опыт эксплуатации. Версия с датчиками DS18S20.

Любое, даже супер-пупер спроектированное, устройство нуждается в испытаниях, иногда довольно продолжительных. Против законов Мэрфи не попрешь. В любой программе есть, по крайней мере, одна ошибка. Один неучтенный фактор всегда есть и в тщательно спроектированном устройстве. Это нормально, на то они и есть – "полевые испытания". Вот как это связано с "Термометром на терморезисторах".

Во-первых, в программном обеспечении обнаружился небольшой баг – не был активирован сторожевой таймер. На обычную работу он никак не влияет и нужен только для перезапуска устройства при зависании. Зависание чревато тем, что динамическая индикация может остановиться на одном каком-либо разряде индикатора, грозя его "выгоранием". Однако зависаний в течении нескольких лет почти непрерывной работы зафиксировано на было. Один раз вышел из строя блок питания, что было связано, скорее всего, с перенапряжением в сети, обычном для сельской местности. Поэтому в схему блока питания был добавлен варистор на 350В и резистор сопротивлением 47 ом в качестве предохранителя. Как активировать сторожевой таймер показано на рисунке справа (сам код сброса находится в процедуре Timer8_1int.asm). В версии с новыми датчиками все уже поправлено.

Во-вторых, при повышенных температурах и высокой влажности датчики ТКА-5 показали себя не с лучшей стороны. Самым первым из строя вышел датчик, который стоял в баке с водой. Еще несколько лет продержался датчик, расположенный в банном помещении. "Уличный" датчик работает до сих пор. Измерения показали либо обрыв цепи измерительного элемента, либо аномальное уменьшение его сопротивления. При осмотре было замечено помутнение (побеление) масла, в котором "плавает" катушка – сквозь стеклянный корпус это хорошо видно. Скорее всего при термоциклировании внутрь датчика постепенно всасывалась влага (с стороны проводов, залитых компаундом), что привело к межвитковым замыканиям, либо к коррозии и обрыву тонкого провода.

Поскольку таких датчиков у меня больше не было, пришлось искать замену. Подошли катушки от миниатюрных реле РЭС10, которые я поместил в металлические трубки и залил эпоксидной смолой. Аналогично датчикам ТКА-5 – они работали недолго.

Еще при замене датчиков вскрылось эксплуатационное неудобство – необходимость калибровки сразу всех датчиков. Индивидуальная калибровка не была предусмотрена, поскольку предполагалась их "вечная" работа.

Итог эксплуатации таков: дешевые проволочные датчики хороши только для "тепличных" условий работы – для бани они не годятся.

В итоге я решил перейти на датчики фирмы Dallas Semiconductor DS1820 (DS18S20), которые имеют достаточную точность и не требуют калибровки. Переделка измерителя при этом минимальна.

Схема такого варианта показана ниже. Выводы "GND" и "Vdd" соединяются вместе для организации "фантомного" питания (которое поступает через вывод "DQ"), что позволяет использовать привычную двухпроводную линию. Интерфейс обмена 1-Wire нас не должен смущать, поскольку для микросхем PSoC имеется готовый Модуль Пользователя OneWire. Чтобы воспользоваться аппаратной версией этого модуля, требуется запараллелить два вывода микроконтроллера, один из которых конфигурируется на вход, а другой – на выход. В режиме ожидания окончания измерения (около 0,75 с) на выходную линию подается высокий логический уровень, обеспечивая питание датчика. При считывании показаний эта линия подключается к источнику питания через внутренние подтягивающие резисторы микросхемы (4,7 ком).

Вместо микроконтроллера CY8C27443 я поставил CY8C29466 (который совместим по выводам и покрывает его по ресурсам) просто потому, что первый срочно потребовался в другом проекте.

Внутренняя структура микросхемы показана на рисунке ниже. Конечно, можно было бы решить задачу "в лоб", разместив на кристалле три одинаковых модуля OneWire (ресурсы даже CY8C27443 позволяют это сделать). Но гораздо спортивнее обойтись одним модулем, заставив его обслуживать сразу несколько датчиков. Для этой цели модуль последовательно работает с разными линиями ввода-вывода, а переключение осуществляется программно.

Даже в такой реализации возможны несколько вариантов. Чтобы сократить количество переключений, я использую модуль DigBuf_1 (повторитель лог. уровней с возможностью инверсии), который транслирует выход модуля OneWire_1 сразу на несколько промежуточных линий RO0[0]...RO0[3], связанных с выходами. Блоки LUT, через которые осуществляется транслирование, позволяют задавать разные перередаточные функции. Используются две функции – повторение сигнала и выдача постоянной лог. "1". Вход модуля OneWire_1 попеременно подключается к линиям RI0[0], RI0[1] и RI0[2], связанных уже со входами. Рисунок отражает лишь начальное состояние соединений.

Обратите внимание, что тактовый вход модуля OneWire_1 требует подачи частоты 3 МГц, а параметр ParasitePower должен быть выставлен "Enable".

В программе остались некоторые переменные и процедуры от предыдущего проекта, которые я не стал удалять на случай дальнейшего развития. Остался и алгоритм усреднения, который в этой версии фактически не работает, т.к. количество точек для усреднения выбрано равным 1. Датчики фирмы Dallas Semiconductor дают практически стабильные результаты.


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

Наружный и внутренний датчики не защищены ничем, к ним просто припаяны провода МГТФ, а на стыки надеты термоусадочные трубки. Датчик для бака с водой вместе с участком подводящего провода окуклен герметиком "ВГО" и после полимеризации помещен в негерметичную металлическую трубку, задача которой – создать жесткость и защитить датчик от механических воздействий.

После четырех лет эксплуатации работа датчиков нареканий не вызывает.


Новый уличный датчик.


Датчик для бака помещен в трубку.


Четыре года с новыми датчиками – полет нормальный.


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

Thermometer29x_DS.zip (398 кБ) – файлы проекта для PSoC Designer.

Thermometer29x_DS_HEX.zip (5 кБ) – файл прошивки. Может быть загружен и в CY8C27443.


antiradio.narod.ru/psoc/
Дата создания документа: 25.07.2017. Последнее обновление: 08.06.2021.