Высокоточные (±1.8 % RH) датчики относительной влажности

Клон хабры (да ещё и из корпоративного блога) с описанием датчиков серии HYT от швейцарского производителя IST.



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



1. Обзор



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



О других вариантах корпусировки рассказано ниже, а пока приведем основные характеристики датчиков HYT.

Диапазон измерений
Относительная влажность: от 0 до 100 % RH
Температура: от -40 до +125 °C

Точность (максимальная погрешность)
Относительная влажность: ± 1.8 % RH (в диапазоне 0… 80 % RH)
Температура: ± 0.2 °C (в диапазоне 0… 60 °C) 

Время отклика
HYT 271:
< 4 сек (Относительная влажность)
< 5 сек (Температура)
HYT 221:
< 12 сек
HYT 939:
< 10 сек

Повторяемость
Относительная влажность: ± 0.2 % RH
Температура: ± 0.1 °C

Гистерезис
Относительная влажность: < ± 1 % RH

Долговременный дрейф характеристик
Относительная влажность: < ± 0.5 % RH / год
Температура: < ± 0.05 °C / год

Напряжение питания
2,7 – 5,5 В

Потребляемый ток
< 22 мкА при частоте опроса 1 Гц, <1 мкА в режиме сна

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

2. Чувствительный элемент



Как и большинство современных датчиков относительной влажности, датчики HYT имеют емкостный чувствительный элемент. Принципы работы преобразователей «влажность-емкость» и их преимущества описаны в огромном количестве источников, напомню главное.

  • Чувствительный элемент представляет собой конденсатор, емкость которого изменяется пропорционально относительной влажности окружающей среды.
  • В качестве диэлектрика используется слой полимера, диэлектрическая проницаемость которого зависит от количества абсорбированной им влаги.
  • Зависимость влажность-емкость носит линейный характер и позволяет проводить измерения в диапазоне от 0 до 100 % RH.



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



εo — Электрическая постоянная
εr — Диэлектрическая проницаемость полимера, изменяющаяся пропорционально количеству поглощенной влаги
A — Площадь полимера
d — Толщина полимера

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

Например, для метеозондов и некоторых других приложений важным требованием является высокое быстродействие. Сокращение времени отклика чувствительного элемента достигается за счет уменьшения толщины полимера, таким образом у датчика P14 Rapid обеспечивается время отклика менее 1.5 сек. Другой пример — датчики MK33, предназначенные для работы с маслами. Здесь за счет увеличения площади чувствительного элемента увеличивается крутизна выходной характеристики, а значит и разрешение датчика.

IST выпускает около десятка различных емкостных преобразователей. Интересующихся приглашаю пройти по ссылке, а мы возвращаемся к цифровым датчикам HYT.

3. Структура датчиков HYT



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

Цифровые датчики температуры и относительной влажности производятся в разных ценовых сегментах. Датчик, подходящий под описание из предыдущего абзаца, может стоить и 2 доллара, и 150 долларов. Такая разница между дорогими и дешевыми датчиками объясняется тем, что цифровые датчики различаются не только точностью, быстродействием и повторяемостью результатов измерений, но и другими характеристиками, обеспечить которые не так просто. Это долговременная стабильность работы, возможность применения датчика при очень низкой или очень высокой влажности и устойчивость к воздействиям внешней среды. Чтобы понять, почему перечисленные характеристики оказывают большое влияние на стоимость компонента, обратимся к особенностям производства.

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

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



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

4. Калибровка датчиков HYT



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

  • 0% и 85% RH при 5°C
  • 0%, 15%, 30%, 50%, 85% RH при 30 °C
  • 0% и 85% RH при 45°C

После калибровки проводятся контрольные измерения. Стандартные контрольные точки:

  • 85% RH при 5°C
  • 20% и 75% RH при 25°C

Здесь самое время напомнить об одной из главных фишек IST: по запросу заказчика производитель изготавливает самые разные модификации своих датчиков. Поставляются датчики с измененными характеристиками, изделия в нестандартных корпусах и, конечно, датчики с нестандартной калибровкой. Зная специфику условий применения конечного изделия, можно, к примеру, заказать датчик HYT с калибровкой от 0 до 50% RH со сдвигом +2% RH на всем диапазоне.

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

5. Корпус датчиков HYT



Приведем описание датчиков серии HYT.

Самый простой модуль — HYT 271 — имеет размер 5 на 10 мм и состоит из емкостного преобразователя, залитой «кляксой» интегральной схемы и дополнительных конденсаторов. В отсутствии защитного фильтра достигаются максимальное быстродействие и минимальная цена.

Цифровой датчик HYT 221 имеет ту же начинку, что и HYT 271, но покрыт защитным фильтром, который позволяет использовать датчик в том числе при наличии брызг воды.


Датчик HYT 939 также отличается только типом защитного фильтра — компоненты помещаются под круглый металлический корпус, на верхней стороне которого расположено закрытое мембраной отверстие. Для заказа доступен модуль HYT 939, устойчивый к давлению до 16 бар.

В соответствии с требованиями заказчика могут быть изменены и структура, и габаритные размеры датчика. Вместо стандартного интерфейса I2C датчик может быть оснащен 5-выводным SPI, а дополнительно к цифровому интерфейсу могут быть добавлены дополнительные квазианалоговые линии. Выводы датчика могут быть удлинены, оснащены коннектором. Производятся датчики в специализированных корпусах, например как на фото.

Заказ датчиков с модифицированными размерами или нестандартной конфигурацией возможен в том числе для мелкосерийного производства.

4. Порядок сопряжения датчика и управляющего контроллера



Стандартным интерфейсом подключения датчика HYT к управляющему микроконтроллеру является шина I2C. Контроллер является мастером, датчик — ведомым узлом.

В аппаратных характеристиках интерфейса датчика нет ничего примечательного — поддерживаются скорости от 100 до 400 кГц и стандартный 7-битный адрес на шине. Адрес датчика по умолчанию — 0x28, адрес может быть изменен на значение от 0x00 до 0x7F. Данные передаются в режиме MSB, т.е. сначала идут старшие биты.

Я упускаю описание типовой схемы включения, требований модуля HYT по таймированию на I2C, описание процедуры смены адреса датчика. Всё это можно найти в документации.

Остановимся на процедуре сбора данных с датчика HYT — последовательности из двух команд для управления модулем.
В отсутствии запросов от микроконтроллера, датчик находится в режиме сна. По приходу команды ‚Measuring Request‘ (MR) он просыпается, начинает цикл измерений и формирует посылку с данными для управляющего контроллера. Подготовка данных занимает от 60 до 100 мс, после этого на датчик должна поступить команда ‚Data Fetch‘ (DF), по которой данные из выходного регистра датчика передаются на микроконтроллер.

Команда ‚Measuring Request‘ не подразумевает ни чтения, ни записи данных. Команда содержит только из заголовочного пакета — адреса ведомого узла и бита RW, выставленного в «0», т.е. на запись.



Команда ‚Data Fetch‘ (DF) служит для чтения данных. В заголовочном файле содержится адрес датчика и бит RW, установленный в «1», т.е. на чтение.



Максимальное количество байт, которые должны быть приняты на микроконтроллере — четыре. Первые два байта содержат данные об относительной влажности, третий и четвертый — о температуре.

Микроконтроллер может запросить только два первых байта (только данные о влажности) или три первых байта (данные о влажности и старшие биты значения температуры).

И на влажность, и на температуру приходится по 14 бит. Посылка Data Fetch также содержит два бита состояния:

  • CMode Bit. Если установлена «1», то датчик находится в command mode — в служебном режиме, который используется для изменения адреса датчика на I2C
  • Stale bit. Если установлена «1», значит после выполнения очередного цикла измерений получены те же значения температуры и влажности, что и после предыдущего цикла

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

RH [%] = (100 / (214 — 1)) * RHвх
T [°C] = (165 / (214 — 1)) * Tвх — 40

5. Пример включения датчика HYT



От теории к практике. На сайте производителя доступны уже готовые примеры программ для AVR-ок, а мы рассмотрим совместную работу датчика HYT 221 и отладочной платы EFM32ZG-STK3200 от Silicon Labs, подробнейшее описание которой приводилось в одной из предыдущих статей.

В этот раз на отладочной плате нам понадобятся встроенный ЖК-дисплей, механическая кнопка и 20-контактный разъем, на котором доступны сигналы I2C, питание и земля.



Подключение

Подключаем линии в соответствии с распиновкой датчика и разъема платы.



Для работы шины I2C на обеих её линиях должны быть предусмотрены подтягивающие резисторы. В документации на датчик HYT указаны номиналы около 2.2 кОм, и превоначально схема была собрана с использованием двух отдельных сопротивлений.
Однако в процессе отладки выяснилось, что достаточно использовать встроенные подтягивающие резисторы микроконтроллера EFM32. Их номинал значительно больше — 40 кОм, фронты, конечно, довольно сильно завалены, но оно работает. Для демонстрации работы датчика этого достаточно.



В данном случае датчик питается от линии питания МК (3.3 В), но допустимы и пятивольтовые уровни.

Программирование микроконтроллера

Для работы с отладочной платой EFM32ZG-STK3200 используется среда Simplicity Studio — платформа, содержащая IDE, примеры программ, документацию и различные утилиты для разработки приложения.

При создании программы используются готовые библиотеки от SiLabs — драйвер I2C для связи с датчиком и драйвер RTC для его периодического опроса. Также используются библиотеки glib и готовые примеры работы с ЖКИ. Для коммуникации с дисплеем используются интерфейс SPI и часы реального времени. С возможностями встроенного на плате дисплея проще всего познакомиться через демо-примеры для платы EFM32ZG-STK3200.

Программа предусматривает два режима работы:
  • Отображение температуры и относительной влажности на термометрах
  • изменения относительной влажности на графике
Переключение режима происходит по прерыванию от кнопки PB0, порядок взаимодействия контроллера с датчиком остается неизменным.

Неканоничная схема алгоритма программы:



Полные исходники программы доступны здесь. Ниже разберем лишь ту часть программы, которая имеет отношение к опросу датчика, т.е. к коммуникации по I2C.
В основном используются стандартные функции библиотек от Silicon Labs — основной пакет em_i2c и его надстройка i2cspm.

При инициализации интерфейса определяется режим его работы и используемые порты ввода-вывода. Здесь же задается режим
PullUp для линий D6 и D7.

void setupI2C(void)
{
  CMU_ClockEnable(cmuClock_I2C0, true);
  CMU_ClockEnable(cmuClock_CORELE, true);

  I2C_Init_TypeDef i2cInit = {                                                                         
		  true,                   
		  true,                  
		  0,                      
		  I2C_FREQ_STANDARD_MAX,         
		  i2cClockHLRStandard     
		};

  GPIO_PinModeSet(gpioPortE, 13, gpioModeWiredAndPullUpFilter, 1);
  GPIO_PinModeSet(gpioPortE, 12, gpioModeWiredAndPullUpFilter, 1);
  I2C0->ROUTE = (I2C0->ROUTE & ~_I2C_ROUTE_LOCATION_MASK) | I2C_ROUTE_LOCATION_LOC6;
  I2C0->ROUTE |= I2C_ROUTE_SCLPEN | I2C_ROUTE_SDAPEN;

  I2C_Init(I2C0, &i2cInit);
}


Для коммуникации с датчиком, т.е. реализации команд Measuring Request и Data Fetch, служат одноименные функции.

Каждая из них содержит операции по формированию пакета для I2C и команду отправки пакета. Для формирования пакета используется структура типа I2C_TransferSeq_TypeDef, содержащая адрес датчика, значение бита RW, и формат регистров для приема (buf[0]) и передачи (buf[1]) данных по I2C.

static void performMRCommand(void)
	{
		I2C_TransferSeq_TypeDef    seq;

		seq.addr  = HYT_ADDR;
		seq.flags = I2C_FLAG_WRITE;
		seq.buf[0].len = 0;
		seq.buf[1].len = 0;

		I2CSPM_Transfer(I2C0, &seq);
	}


Функция performDFCommand, помимо указания на прием четырехбайтного пакета с записью данных в массив i2c_read_data, содержит алгоритм обработки принятой посылки. В результате преобразования в переменные HYT_temperature и HYT_humidity записываются искомые значения.

static void performDFCommand(void)
	{
		I2C_TransferSeq_TypeDef    seq;
		uint8_t                                i2c_read_data[4];
		unsigned int 			   temp_raw_value;
		unsigned int   			   humidity_raw_value;

		seq.addr  = HYT_ADDR;
		seq.flags = I2C_FLAG_READ;
		seq.buf[0].data = i2c_read_data;
		seq.buf[0].len = 4;
		seq.buf[1].len = 0;

		I2CSPM_Transfer(I2C0, &seq);

		HYT_state_bit = (i2c_read_data[0] & 0x40) >> 6;
		if (HYT_state_bit == 0)
		{
	  		// получены новые данные (Stale bit = 0)
	 		// преобразование первых двух принятых байт, получаем 14-разрядное значение отн. влажности
	  		humidity_raw_value = ((i2c_read_data[0] & 0x3F) << 8) | i2c_read_data[1];
	  		// получены новые данные (Stale bit = 0)
	 		// преобразование третьего и четвертого байта, получаем 14-разрядное значение температуры
	  		temp_raw_value = ((i2c_read_data[2] << 8) | i2c_read_data[3]) >> 2;

	  		if (temp_raw_value < 0x3FFF && humidity_raw_value < 0x3FFF)
				{
					// расчет искомых значений
					HYT_temperature = ((float)(temp_raw_value) * 165.0F / 16383.0F) - 40.0F;
					HYT_humidity = (float)humidity_raw_value * 100.0F / 16383.0F;
		  		}
			else
				{
					// все 14 разрядов температуры или отн. влажности = "1", значит что-то идет не так
		  		}
		}
		else
		{
	  		// новых данных не получено (Stale bit = 0)
	  	}
	}


Функция main состоит из процедур инициализации и цикла опроса датчика, после исполнения которого данные отображаются на дисплее в одном из двух режимов.

// инициализация МК и периферии, настройка режимов работы периферийных устройств
...
	performMRCommand();
	Delay(100);
	performDFCommand();
...
// отображение данных


При работе с готовыми библиотечными функциями для I2C от SiLabs существует два основных способа испортить себе жизнь:

Способ 1: Посчитать, что в HYT_ADDR следует записывать 0x28, т.е. указанный в документации адрес датчика.
Семибитный адрес датчика — это 010 1000. Ставим старшим битом «0» и получаем 0010 1000, т.е. 0x28. Логично.
Однако библиотечная функция считает, что адресом являются не младшие, а старшие 7 бит. Таки образом, вместо
#define 	   HYT_ADDR    0x28

следует указывать
#define 	   HYT_ADDR    0x50

или
#define 	   HYT_ADDR    0x51


Способ 2: Посчитать, что I2C_FLAG_READ — это «0», а I2C_FLAG_WRITE — это «1». То есть на самом деле всё так и есть, в заголовочном байте посылки I2C предусмотрен один-единственный бит RW, который выставляется в «0» для записи данных и в «1» для чтения данных. Однако в недрах библиотеки em_lib прячутся вот такие коварные дефайны:


#define 	I2C_FLAG_WRITE    0x0001
#define 	I2C_FLAG_READ     0x0002

Так что не стоит при формировании структуры I2C_TransferSeq_TypeDef выставлять нули и единицы самостоятельно.

В остальном претензий к em_i2c и другим пакетам em_* не возникало.



Результат

Режим отображения температуры и относительной влажности на термометрах выглядит вот так:



Но измерять с приемлемым качеством постоянные температуру и влажность в помещении может любой датчик. Качественные характеристики серии HYT лучше иллюстрируются в динамике: на видео с помощью чашечки горячего чая показывается быстродействие датчика HYT-221.


(почему-то встроенное видео не отображается, прямая ссылка)

Если вы имели честь когда-нибудь наблюдать с какой скоростью реагирует на изменения влажности условный DHT22, то, конечно, почувствуете разницу. Также стоит учесть, что используется самый медленный из HYT-ов — модель с защитным фильтром.


И да, мы (ЭФО) эти датчики поставляем. Образцы на складе, обращайтесь.

Комментарии (24)

RSS свернуть / развернуть
видео не отображается скорее всего из за https в ссылке, попробуйте через http вставить.
0
да и тегов бы побольше.
0
готово.
впрочем, у меня всегда были сомнения в смысле существования тегов…
0
спасибо, теперь можно отфильтровать например так we.easyelectronics.ru/tag/HYT%20221/, только жаль что нет нормального инструмента для этого, строки с авто завершением например, это да.
0
we.easyelectronics.ru/tag/HYT%20221/ запятая прилипла
0
Фокус не удался(
0
с youtube тоже через https не вставлялись, но через http нормально, может что-то с we.ee не так.
0
А we.ee вообще поддерживает что-то кроме ютуба? Ссылка-то на рутуб.
0
Судя по всему не поддерживает. Как будет возможность, перезалью
0
Вообще, насколько я помню, текст вида "< 10%" можно и так вводить, а не HTML-кодами.
0
lt; 12 сек
Амперсанд не пропечатался.
0
  • avatar
  • Vga
  • 24 июня 2016, 22:39
Спасибо
0
А сколько эти датчики стоят? На сайте инфы о цене не вижу.
0
  • avatar
  • Vga
  • 24 июня 2016, 22:42
Охренеть. Чего ж эти H/T датчики такие дорогие, что тут, что у sensirion?
0
… что и у Honeywell :)
0
Да, только китайцы радуют модулями по 4 бакса…
-2
У китайских по $4 нелинейность такая, что их только в игрушки и ставить.
+1
А вообще есть смысл в особо точном измерении относительной влажности? Меня всегда цифра около 80% напрягает при -50 градусов :-)
0
На минус 50 градусах вообще влажность мало кто сможет измерить с такой точностью и оборудование будет стоить больше миллиона. И даже термогигрометр Rotronic за 100 тысяч на такой температуре похоже врёт и не на 10%. Вообще 80% влажность по воде(обычные гигрометры именно влажность по воде отображают) при -50 вроде не получится. А по поводу датчиков HYT, посмотрел характеристики, это 1,8 процента при нормальных условиях. При изменении температуры уже трудно называть их высокоточными. Tk Residual error (50%rH) 0.05% rH / K (0… 60°C) И при температуре ниже нуля не написана температурная зависимость.
+1
На минус 50 градусах вообще влажность мало кто сможет измерить с такой точностью и оборудование будет стоить больше миллиона.
А меня чисто теоретически вот какой вопрос занимает. Допустим ставится этот датчик на вышеупомянутый метеозонд и запускается метеозонд теплым днем после дождя. Т.е. влажность по максимуму. И начинает этот метеозонд подниматься. И с набором высоты охлажаясь чешет через кучу точек росы. Пока не поднимается в минусовую температуру. Что будет дальше с насыщенным водой датчиком?
0
С тёплого датчика влага достаточно быстро испарится, но показания наверно будут искажены, пока температура не сравняется.
0
Достаточно подобрать скорость подъема аэростата.
0
Жители Петербурга смотрят на влажность 80% с некоторой завистью но и с презрительной усмешкой :)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.