Измерение относительной влажности. Использование аналоговых датчиков фирмы honeywell (HIH-36xx, HIH-40xx)  (проект использует для программирования Serial Bootloader AN1310).  большая корпорация, одним из направления деятельности — есть производство разнообразных сенсоров. Одни из которых, это аналоговые датчики относительной влажности. Аналоговый — говорит, что датчик преобразует измеряемую относительную влажность в напряжение.

HIH-4000_150x130

Получить полную техническую информацию по датчикам влажности можно на сайте http://sensing.honeywell.com. Остановимся на основных параметрах датчика. Для проекта мы будем использовать Датчик HIH-4000 (хотя с успехом подойдут любые датчики из серий HIH-36xx или HIH-40xx).

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

honeywell_illissi_01

На рисунки приведены габаритные размеры датчиков. Обратите внимание на назначение выводов. Левая ножка, -ve — это минус питания, права, +ve — это плюс питания, по центру OUT — аналоговый выход датчика. Величина напряжения питания 5 вольт (если датчики поставляются с калибровочной ведомостью, то именно под это напряжение они калибруются). Хотя можно использовать и при более низком напряжении питания.

Диапазон измеряемой относительной влажности составляет от 0 до 100%.

Обратите внимание на диапазон рабочих температур.

honeywell_illissi_02

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

Основные электрические параметры датчика.

honeywell_illissi_03

Зависимость напряжения от относительной влажности имеет практически линейную характеристику. Для нас как для разработчика измерителя влажности будет интересовать два параметра датчика, это величина напряжения на выходе датчика при 0% влажности и наклон (крутизна) характеристики. Если вы приобретаете датчик с калибровочной ведомостью, то эти параметры мы берем из нее. Обозначаются они так: Vout @0%RH (или Zero Offset) — напряжение 0% влажности и Slope — наклон характеристики. Если вам попался датчик без калибровки, то данные можно взять с нашего проекта, при этом точность будет не хуже 4-5%, что для бытовых применений вполне приемлемо.


Схема подключения датчика с использованием PIC-контроллера.

honeywell_illissi_04

Для подключения датчика нам потребуется всего один нагрузочный резистор. Нагрузочная способность датчика не менее 80 кОм. Мы выберем сопротивление из стандартного ряда 100 кОм.

Для реализации проекта мы будем использовать плату ILLISSI-4B-09-primum и плату индикации ILLISSI-4С-02-secundo.

Для того чтобы подключить датчик влажности к нашей платы на плате необходимо запаять два резистора R30 — 100 кОм и R26 — 0 Ом (перемычка). Сам датчик подключается к выводам платы (верхнего дополнительного соединителя).

honeywell_illissi_05honeywell_illissi_06

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

Во первых  — у нас аналоговый сигнал. А в зависимости от удаления датчика, на кабель соединяющий датчик и контроллер, будут влиять электромагнитные помехи которыми богато наша окружающая среда современной эпохи. Также надо учитывать, что чувствительный элемент датчика постоянно «бомбардируют» молекулы воды находящиеся в воздухе. Все это выльется, что напряжение на выходе датчика и т.е. значит и на входе АЦП контроллера будет иметь некоторую шумовую составляющею, которая при обработке сигнала приобретет в «дрожание показаний». Это будет иметь вид когда на индикаторе одновременно будет пытаться индицироваться несколько значений. И сама цифровая индикация будет смазана.

Какие в этом случае могут быть методы борьбы, чтобы отфильтровать помеху и «сгладить» сигнал датчика. Если у нас был простой АЦП (без контроллера), то мы пошлибы по следующему пути:

1. Применили экранирование датчика.

2. Применили бы экранированный кабель соединяющий датчик и контроллер.

3. Поставили в цепи данных датчика фильтрующие конденсаторы.

Что мы имеем? Первое — все эти пункты это удорожание конструкции и при том без каких либо гарантий. Второе — фильтрующие конденсаторы значительно замедлили реакцию самого датчика на изменение влаги в воздухе.

Если бы и эти методы не дали результатов, то единственное решение это выполнять измерение через длительные промежутки времени (например 1 раз в секунду) и реже, и также реже выводить данные измерение на индикацию.

Но при использовании PIC-контроллера мы имеем не просто АЦП, мы имеем микроЭВМ для выполнения нашей поставленной задачи.


Программирование.

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

Для включения в работу АЦП необходимо в модуле инициализации контроллера «прописать» следующие строки:

Мы подключивший датчик к аналоговому порту AN1 контроллера. Это вход RA1. Настроим вход на ввод информации.

Настроим, что этот вход будет аналоговый.

Настроим и включить АЦП.

Кратко по последним строкам,

Выравнивание данных — вправо, количество тактов для измерения 20 (хотя можно и 12), источник тактовой частоты внутренний RC генератор, диапазон опорных напряжений — напряжение питания контроллера, АЦП подключен к аналоговому входу AN1.

Далее сам процесс измерение влажности заключается в следующем, мы должны «запустить» АЦП на измерение, по окончанию измерения сосчитать с регистров АЦП данные. Произвести над данными вычисление и вывести на дисплей значение полученной относительной влажности.

Для измерение влажности мы будем использовать так называемый «прозрачный цикл». Что это значит? Мы не будем делать цикл ожидания окончания преобразования АЦП — это бы создало бы потерю рабочего времени контроллера, мы будем просто в основном цикле программы проверять окончание и если данные готовы, считывать их для обработки, запускать конвертирование с начала и заниматься обработкой данных. Потом весь процесс повторяется. Такое построение не дает потери машинного времени, которое может потребоваться для выполнение работы в более сложных проектах.

Основная структура измерения:

Обработку (преобразование данных АЦП во значение влажности) данных, по преобразованию значения АЦП в значение влажности, выполним используя целочисленную математику это даснам значительную экономию памяти программ.

Добавим немного комментарий к данному фрагменту. Полученное значение АЦП ADCIZ мы должны преобразовать в измеряемое напряжение. Мы знаем, что у нас 10 разрядный АЦП это значит, то весь диапазон опорного напряжения (для нас 5,0 вольт, напряжение питания контроллера) — 1024. Т.е. значение на выходе АЦП будет иметь диапазон значение от 0 до 1023. Разделив диапазон опорного напряжения на разрядность АЦП получим число ~0,004887585532… Для целочисленной математики вы возьмем первые 5 значащих цифр 48875. А далее чтобы полученное число имело «вменяемый вид» разделим его на 100000.

Из полученного значения нам необходимо отнять напряжения нуля датчика. Значение тоже будем брать только значащие цифры. Например, если в пасторте Zero Offset = 0,827260 берем только 83 (округляем). Далее опять приводим в нормальный вид умножая на 100. И следующее вычисляем влажность используя коэффициент наклона Slope, только целое значение.

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

Как программно, нам из «шума», выделить полезный сигнал.

Первое будем находить среднее из 10 измерений, но делать это будем немножно по новому. Мы не будем делать 10 измерений, а потом суммировать и делить на 10. Мы будем, Брать 1/10 от измеренного сигнала и прибавлять его к значению регистра индикации, предварительно из него (регистра индикации) отняв 1/10 его хранящегося значения. Это значительно сэкономит на память ОЗУ.

И последнее если нам необходимо получить, только целые значения процентов, разделим еще наши данные на 10.

Вычисляя среднее значение нам поможет на 90% избавиться от помех, но нас еще будут беспокоить условие когда будет переход значения, т.е. изменение показаний влажности, например, было 40%, влажность увеличивается и будет видно как начнет «блымать» на индикаторе 40/41 процент, пока значение будет находиться на границе измерений. Для решения этой проблемы применим «накапливающий интегратор». Суть его заключается в том, когда новое значение превышает (подразумевается чаще предоставляется для индикации) старое (индицируемое) значение (по измерениям) в N раз, то только тогда происходит смена индикации. Все очень просто.

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

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

Весь процесс измерения выглядит так:

 P.s. Все эти программные навороты нам дают «стабильную» индикацию и быстроту слежения за измеряемым параметром. Эти методы можно применить для измерения и индикации в других приложениях.


Загрузка демонстрационного проекта.

Версия — 1.1

Icon

Измерение относительной влажности - v1.1 15.88 KB 634 downloads

Измерение относительной влажности. Использование...
Версия — 1.2
Icon

Измерение относительной влажности - v1.2 16.05 KB 645 downloads

Измерение относительной влажности - v1.2 ...

обновлено 04/09/12  v1.1 honeywell_illissi_07 


 

 

Translate »

Copyright © Catcatcat 2013-2017. Все права защищены.
Копирование разрешается только с указанием активной ссылки на правообладателя.

e-mail: catcatcat.electronics@gmail.com