Відповідальний підхід до вимірювання відносної вологості

Цією статтею ми продовжуємо розповідати про датчиках від швейцарської компанії IST. Не так давно були опубліковані пости про датчиках електричної провідності води і датчики швидкості потоку рідин і газів, сьогодні черга дійшла до відносної вологості.



Стаття присвячена високоточних датчиків серії HYT. Наводиться опис пристрою датчика і чутливого елемента, докладно розбирається порядок сполучення датчика з мікроконтролером, наводиться приклад розробки.


1. Огляд



Стандартні моделі HYT — це три датчика для вимірювання температури і відносної вологості, побудовані на базі одного і того ж чутливого елемента, але виконані в різних корпусах.



Про інших варіантах корпусировки поговоримо нижче, а поки наведемо основні характеристики датчиків HYT.









  Відносна вологість Температура  Діапазон вимірювань від 0 до 100 % RH  від -40 до +125 °C Точність (максимальна похибка) ± 1.8 % RH (у діапазоні 0… 80 % RH) ± 0.2 °C (у діапазоні 0… 60 °C)  Час відгуку HYT 271 < 4 сек
HYT 221 < 12 сек
HYT 939 < 10 сек
HYT 271 < 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, тобто спочатку йдуть старші біти.

Не бачу сенсу наводити опис порядку роботи самої шини I2C. Також втрачаю опис типової схеми включення, вимог модуля 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 поширює для роботи з SiLabs помаранчевими ж контролерами.

При створенні програми використовуються готові бібліотеки від 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.0 F / 16383.0 F) - 40.0 F;
HYT_humidity = (float)humidity_raw_value * 100.0 F / 16383.0 F;
}
else
{
// всі 14 розрядів температури або відн. вологості = "1", значить щось йде не так
}
}
else
{
// нових даних не отримано (Stale bit = 0)
}
}



При роботі з готовими бібліотечними функціями для 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_*** не виникало.




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

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


Результат

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



Але вимірювати з прийнятною якістю постійні температуру і вологість в приміщенні може будь-датчик. Якісні характеристики серії HYT краще ілюструються в динаміці: на відео з допомогою чашки гарячого чаю показується швидкодію датчика HYT-221.



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

6. Висновок



У висновку традиційно дякую за увагу читача і нагадую, що питання щодо застосування продукції, про яку ми пишемо на хабре, можна також задавати на email, вказаний в моєму профілі.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.