10-точечный регистратор температуры

Работает с датчиками DS2438 (которые в действительности являются Smart Battery Monitor).
Отображает текущие значения температуры и ведет их запись во FLASH микроконтроллера (CY8C27443).

Необходимость в таком регистраторе у меня возникла после спора с женой относительно того, как сильно надо укутывать малыша в коляске. Стояла зима, но мне казалось, что те «сто одежек», в которые она наряжала ребенка, излишне парят его. Хотелось обоснованно доказать сей факт, для чего решено было из подручных средств собрать простейшее устройство, которое позволило бы не только автономно контролировать температуру, но и вести журнал измерений на протяжении всей прогулки.

Для скорейшего решения задачи выход у меня был такой – имелась плата с микропроцессором CY8C27443 и LCD-индикатором на борту, которую я использовал для отладки различных устройств. В дополнение к этому, на работе валялся пакетик с микросхемами DS2438, представляющими из себя узел контроля за состоянием батарей питания. Из всей функциональности этой микросхемы мне нужен был только канал измерения температуры, который отличался хорошими параметрами – точность без калибровки 2 оС, разрядность 13 бит (шаг измерения температуры 0.03125 оC), максимальное время преобразования 10 мс. Каждый такой прибор имеет уникальный 64-битный идентификационный номер, позволяющий «вешать» множество микросхем на единую шину 1-Wire® (разработка фирмы Dallas Semiconductor).

Никогда не работая до этого с интерфейсом 1-Wire®, я знал, что для микросхем PSoC® (представителем которых и является чип CY8C27443) существует специальный модуль пользователя OneWire. Этот модуль использует аппаратные ресурсы микроконтроллера и предоставляет разработчику удобный интерфейс/набор функций для взаимодействия из программы (что существенно облегчает программирование). Воспользовавшись примером, который идет в комплекте с модулем, я переделал его под свой тип датчика, а затем расширил функциональность для решения поставленной задачи.

Схема подключения датчиков к плате «Psoctronic» показана на рисунке.


Подключение датчиков к многофункциональной плате «Psoctronic»

На плате «Psoctronic» установлен ЖК индикатор (типа ITM-1602A, который совместим с индикаторами Hitachi HD44780, являющимися стандартом де-факто), кнопки управления и канал для связи с COM-портом компьютера. Для тех, кто будет разрабатывать свою конструкцию устройства, приведу полную схему регистратора:


Полная электрическая схема регистратора. Датчики DS2438 подключаются к разъему J1. Индикатор LCD1 типа ITM-1602A.

ЖК индикатор LCD1 подключен к порту 2 микроконтроллера. Обмен данными производится в полубайтовом режиме, в котором задействованы только четыре линии данных D4...D7. Резистор R1 задает контрастность изображения. Подсветка не использована, так как потребляет значительный ток, а это критично при питании от батареи.

К линии P2[3] подключена кнопка Start, ее опрос производится в момент отсутствия передачи данных на LCD1. Если кнопка не нажата, уровень на этой линии с помощью резистора R2 «подтягивается» к лог.0. Резисторы R3 и R4 ограничивают токи для реализации возможности прямого подключения микросхемы PSoC к COM-порту компьютера. Если компьютер не приспособлен для работы c пониженными уровнями напряжений (что редкость), то придется применить схему преобразователей уровня (например, на основе MAX232), а в конфигурацию микросхемы – внести соответствующие изменения.

Кварцевая стабилизация частоты в схеме не используется, поэтому погрешность отсчетов времени может составлять 2,5 %, а при экстремальных температурах эксплуатации – и более того. Кварц может подключаться к выводам P1[0] и P1[1], но тогда не забудьте откорректировать внутреннюю конфигурацию микросхемы.

Все датчики подключаются к разъему J1. Для нормального функционирования модуля OneWire выводы P0[5] и P0[7] надо объединить. В качестве нагрузки линии Data используется внутренний резистор микросхемы 5,6к. Питание для датчиков берется с вывода P0[3], уровень на котором предварительно устанавливается в лог.1.

Разъем J2 служит для программирования микросхемы и для подачи питания. Потребление устройства от источника 5 В («поляроидная» батарейка, либо 3 элемента питания «AA») составляет около 10 мА, из них около 0,5 мА уходит на датчики. При старте происходит очистка памяти FLASH, при этом потребляемый ток в течение около 0,5 сек подскакивает до 15 мА.

Для упрощения написания программного обеспечения, внутренний датчик температуры кристалла (необходим для оптимизации записи во FLASH) не задействован. Фиксированное значение температуры приводит к сокращению количества циклов записи во FLASH при высоких температурах и к ненадежности записи – при низких.


Дополнительные материалы:
1-wire_logger.zip (119 кБ) – архив пректа (в папке /output находится готовый файл прошивки *.hex).
Текст программы – «С». Среда разработки – PSoC Designer 4.3. Если вы будете вносить изменения в проект, не забудьте в PSoC Designer установить модуль пользователя OneWire (о том, как включить его в библиотеку PSoC Designer-а, читай здесь).
1-wire_logger_soft.zip (v1.1) (150 кБ) – программа для оперативного контроля температуры с записью результатов в журнал, плюс функция извлечения данных из FLASH-памяти.
Работает под Windows, писалась на скорую руку, использование – на ваш страх и риск. Извлечение данных из FLASH (команда с десятичным значением 33) занимает некоторое время (около 12 с).


Регистратор функционирует следующим образом:

1. После подачи питания запускается процедура идентификации датчиков. Если ни одного датчика обнаружено не было, то бесконечно долго ожидается подключение хотя бы одного.

2. Если на шине имеется хотя бы один датчик, то появится надпись «Press Start key» и будет ожидаться нажатие на клавишу Start.

В этом состоянии в устройство можно подать специальную команду (байт с десятичным значением 33) и считать данные предыдущего сеанса. Ответный пакет представляют собой 11520 байтов. Формат данных двухбайтовый: первым идет целая часть значения температуры, вторым – дробная, всего передается 1152 групп по 10 значений. Параметры интерфейса такие: 9600, N, 8, 1 (скорость передачи, нет проверки на четность, 8 значащих бит, 1 стоповый бит).

3. Как только будет нажата клавиша Start, производится циклический опрос датчиков и инициируется запись результатов измерений. На LCD при этом будет отображаться температура всех десяти датчиков (но только целые части чисел – на примененном дисплее не хватает места для вывода всех значащих цифр).

Несколько значений от одного и того же датчика усредняются, и результат записывается во FLASH память микроконтроллера до ее полного исчерпания. Для микросхемы CY8C2744 (с ее 16 К), это составляет около 96 минут (интервал между записями выбран 10 сек, всего помещается 1152 записи по 10 значений). Одновременно данные посылаются на COM-порт компьютера для возможности оперативного контроля и ведения неограниченного журнала измерений (формат данных символьный: передается группа из 10 чисел, причем каждое – без точки-разделителя, результат надо интерпретировать как количество сотых долей градуса).

4. Запись производится либо до полного исчерпания памяти, либо до момента выключения питания.

Запись во внутреннюю FLASH память производится порциями – по получении очередных 32 значений (у микросхем PSoC элементарной единицей записи во FLASH является блок длиной 64 байта). Это приводит к тому, что запись происходит не по окончании опроса всех 10 датчиков, а где-нибудь посредине. Если при этом было снято питание, то оставшиеся данные (т.е. недобранные до 32) теряются.

5. Для считывания данных надо выключить питание и далее повторить п.1. Учтите, что после нажатия на клавишу Start содержимое памяти теряется, поэтому считывание данных предыдущего сеанса должно быть произведено ДО этого момента!


Внешний вид регистратора и датчиков.

Конструкция устройства показана на фото слева. К разъему J1 у меня подходят две косички, каждая из которых объединяет 5 датчиков.

В качестве кабеля использован 3-жильный шлейф. Его концы подпаяны непосредственно к выводам микросхем DS2438. Для защиты выводов от касания с металлическими предметами и друг с другом использован скотч. Перед защитой желательно пронумеровать датчики и загнать под скотч бирку с номером.

Датчики нумеруют при первом пробном включении. Касаясь теплой рукой очередного датчика, наблюдают за показаниями индикатора и отмечают позицию на индикаторе, где температура начала меняться. В первой строке индикатора отображаются первые пять датчиков (с №1 по №5), во второй – с №6 по №10.

Программа сама упорядочивает датчики – по возрастанию их индивидуальных уникальных номеров. При замене и добавлении новых датчиков процедуру нумерации придется повторить (с заменой бирок).

В зависимости от поставленной цели (определяется точностью измерений) может потребоваться (или нет) процедура калибровки датчиков. Если измерения будут проводиться в узком диапазоне температур, то достаточно одной точки (в середине диапазона), если в широком – понадобятся две или более точки. Калибровка заключается в сравнении температуры датчиков с показаниями эталонного термометра и определении величины поправок, которые будут использоваться при серийных измерениях. В качестве эталонной точки 0 оС удобно использовать температуру плавления льда (с некоторыми оговорками). Здесь необходимо соблюсти несколько важных условий:

1. Среду, в которую погружают датчики, надо максимально теплоизолировать.
2. В качестве среды следует использовать однородную кашицу из снега и воды (так называемую «шугу»).
3. Среду надо постоянно помешивать.

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

При соблюдении же вышеперечисленных условий нулевую температуру можно выдержать с точностью до сотых долей градуса (правый график). Здесь датчики несколько раз доставались из шуги и после некоторой паузы погружались в нее обратно. Сделано это было для оценки повторяемости эксперимента. Результаты сами говорят за себя – «шумы» датчиков в несколько раз (!) превосходят точность задания температуры 0 оС.



Установка для калибровки датчиков.


Процесс таяния снега.


Данные калибровки при 0 С.

Ну и напоследок приведу результаты самого эксперимента. Ребенок укутывался следующим образом: надевалось белье (нижнее и верхнее), затем обматывался пуховый платок, далее шел шерстяной комбинензон, потом – короб (люлька) от коляски, а затем – сама коляска. Точки расположения датчиков перечисляется снизу от графика результатов измерений. Конечно, хотелось бы иметь датчик, контактирующий непосредственно с телом, но жена воспротивилась этому: электричество и все такое, и никакие уговоры относительно напряжений и токов утечки не прошли. Пришлось довольствоваться разрешенным.

На 300-й секунде видны резкие колебания температуры у лица и снаружи коляски – это связано с манипуляциями по укладке короба в коляску, фиксированию датчиков и заключительными действиями по снаряжению ребенка на прогулку. Наиболее резкие изменения температуры на протяжении всей прогулки зафиксировал датчик в непосредственной близости от лица – дыхание во время сна может меняться, меняться могут и расстояние от лица до датчика (малыш поменял положение головы), либо условия воздухообмена из-за смены направления ветра.


Подготовка к измерениям.

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

Большинство датчиков располагалось симметрично между одноименными слоями, но с противоположных сторон – снизу и сверху.

Сравнение их температур позволяет сделать один неопровержимый вывод: снизу температура получается выше, чем сверху, особенно в слое между комбинензоном и коробом (здесь отличие достигает 9 оС). Но ближе к телу эта разница сглаживается, и в точке, где мне позволили максимально приблизиться к телу (на границе одежда-пуховый платок), она составляет всего 2,5 оС. Для выравнивания температуры следовало бы сверху класть дополнительный утеплитель, но это, в общем-то, – спорный вопрос: всем нам нравится лежать на чем-нибудь теплом, вроде печи.

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


Результаты измерений.


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