Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Как узнать валжность?


Автор: Ofer 21.7.2008, 10:38
Добрый день! К АЦП ATmege 8 подключен датчик влажности HIH-4000-001. Как мне вычислить влажность воздуха в процентах? В приложении архив с описаниями датчика.

Автор: xvr 21.7.2008, 12:34
Цитата(Ofer @ 21.7.2008,  10:38)
Добрый день! К АЦП ATmege 8 подключен датчик влажности HIH-4000-001. Как мне вычислить влажность воздуха в процентах? В приложении архив с описаниями датчика.

А почитать, то что приатачил?

Цитата

Vout=Vsupply(0.0062(sensor RH)+0.16)


Vout - выходное напряжение
Vsupply - напряжение питания
sensor RH - влажность (в %)

Автор: Ofer 21.7.2008, 13:05
xvr, читать то я читал. Но. Чем отличаются формулы 
TrueRH = SensorRH/(1.0305+0.000044T-0.0000011T^2) T in C
TrueRH = SensorRH/(0.92537-0.0041T+0.000040T^2) T in C

Как получить Vout? Vsupply - это напряжежние +5V, которыми запитуется датчик?

Автор: Specialist 21.7.2008, 21:07
Привет.
Цитата

Как получить Vout?

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

Например TrueRH = SensorRH/(1.0305+0.000044T-0.0000011T^2) T in C
TrueRH - Действительное значение влажности.
SensorRH - Полученное значение влажности с датчика.
По идее можно поправку не считать, но тогда полученный результат будет не совсем точный. smile 
З.Ы В даташите написано, что нужно закрывать от яркого света  smile 

Автор: Ofer 21.7.2008, 21:50
Specialist, в принципе, я это знал. Только убедится надо было. Еще только не ясно как преобразовывать с ADC в Vout. Я так думаю, что Vout = (ADC*5)/1024;  А вот за яркий свет не знал. Спасибо smile

Автор: Specialist 21.7.2008, 23:26
Цитата

Я так думаю, что Vout = (ADC*5)/1024

Если 10 битный АЦП то 1024 деления. И если опорное напряжение 0 и 5в то все правильно.

З.Ы Кстати че за зверь такой "валжность" ?  smile 

Автор: Ofer 21.7.2008, 23:41
Цитата(Specialist @  21.7.2008,  23:26 Найти цитируемый пост)
Если 10 битный АЦП то 1024 деления. И если опорное напряжение 0 и 5в то все правильно.

Да. 10битный и опорное 5.


Цитата(Specialist @  21.7.2008,  23:26 Найти цитируемый пост)
З.Ы Кстати че за зверь такой "валжность" ?   

Не знаю, но в при первом расчете у меня получилась влажность в помещении 230%

Автор: cardinal 22.7.2008, 00:13
Цитата(Ofer @  21.7.2008,  20:50 Найти цитируемый пост)
Еще только не ясно как преобразовывать с ADC в Vout.

Что, куда преобразовывать? Тебе датчик выдает DC сигнал. Его ты пропускаешь через ADC и имеешь значение в твоем мк.
Цитата(Ofer @  21.7.2008,  12:05 Найти цитируемый пост)
Чем отличаются формулы 
TrueRH = SensorRH/(1.0305+0.000044T-0.0000011T^2) T in C
TrueRH = SensorRH/(0.92537-0.0041T+0.000040T^2) T in C

Прошу заметить, что в даташите есть одна формула, а ты из нее две сделал  smile 

Автор: Ofer 22.7.2008, 08:46
Цитата(cardinal @  22.7.2008,  00:13 Найти цитируемый пост)
Прошу заметить, что в даташите есть одна формула, а ты из нее две сделал  smile  


Это обе формулы из Honeywell__HIH-4000-001.pdf

Автор: cardinal 22.7.2008, 10:39
Это одна формула (просто на две строки растянута)!

Автор: xvr 22.7.2008, 10:51
Цитата(Ofer @ 21.7.2008,  13:05)
xvr, читать то я читал. Но. Чем отличаются формулы 
TrueRH = SensorRH/(1.0305+0.000044T-0.0000011T^2) T in C
TrueRH = SensorRH/(0.92537-0.0041T+0.000040T^2) T in C

Как получить Vout? Vsupply - это напряжежние +5V, которыми запитуется датчик?

Вообще то формул там аж 3 разных (см DOC000... datasheet):
Vout=Vsupply(0.0062(sensor RH)+0.16) - линейная (просто, но не точно)
Vout=Vsupply(0.00003(sensor RH)^2+0.0281(sensor RH)+0.820) - квадратичная (сложнее и более точно)
Vout=(0.0305+0.000044T-0.0000011T^2)(Sensor RH)+(0.9237- 0.0041T+0.000040T^2), T=Temperature in ºC - компенсация по температуре
Vsupply - напряжение питания, должно совпадать (или быть пропорциональным) опорному напряжению АЦП (при этом оно не обязанно быть супер точным)

Автор: cardinal 22.7.2008, 11:17
Именно, но таких что указаны Ofer'ом нет. А эти три вроде понятны и без объяснений. Пока вообще ничего не получается я бы взял линейную и добился нормальных результатов.

Автор: Ofer 23.7.2008, 01:31
Итак..... как понимаю я должен использовать в программе следующие формулы

Код

 Vin = (ADC*5)/1024; //напряжение на АЦП
 SensorRH = ((Vin/5)-0.16)/0.0062;     //показание HIH
 TrueRH = SensorRH/(1.0305+0.000044T-0.0000011T^2) 


Правильно?

Автор: cardinal 23.7.2008, 02:57
Цитата(Ofer @  23.7.2008,  00:31 Найти цитируемый пост)
Правильно? 

Нет.

У тебя есть одна формула (простая и не очень точная), и вторая (более точная но без учета температуры). Не надо одну в другую вставлять. Точнее не просто не надо, а это неправильно.

Первый вариант

 Vin = (ADC*5)/1024; //напряжение на АЦП
 SensorRH = ((Vin/5)-0.16)/0.0062;     //показание HIH

Второй

 Vin = (ADC*5)/1024; //напряжение на АЦП
и потом решение квадратного уравнения, Voltage output (2nd order curve fit)

Третий

 Vin = (ADC*5)/1024; //напряжение на АЦП
и потом формула Temperature compensation

Автор: Ofer 23.7.2008, 11:22
Цитата(cardinal @  23.7.2008,  02:57 Найти цитируемый пост)
Третий

 Vin = (ADC*5)/1024; //напряжение на АЦП
и потом формула Temperature compensation


Но ведь для нахождения температурной компенсации необходимо знать SensorRH. А для этого его нужно найти по 

SensorRH = ((Vin/5)-0.16)/0.0062;     //показание HIH

То есть в итоге мы имеем первый вариант + формулу температурной коррекции 

Автор: xvr 23.7.2008, 11:34
Цитата(Ofer @ 23.7.2008,  11:22)
Цитата(cardinal @  23.7.2008,  02:57 Найти цитируемый пост)
Третий

 Vin = (ADC*5)/1024; //напряжение на АЦП
и потом формула Temperature compensation


Но ведь для нахождения температурной компенсации необходимо знать SensorRH. А для этого его нужно найти по 

SensorRH = ((Vin/5)-0.16)/0.0062;     //показание HIH

То есть в итоге мы имеем первый вариант + формулу температурной коррекции

Нет, все 3 формулы записанны в виде зависимости Vout от SensorRH, так что в любом случае используется одна формула, (точнее обратная к ней, что бы получить зависимость SensorRH от Vout)

Автор: cardinal 23.7.2008, 12:37
И вообще там лажа какая-то в даташите
Помоему первая формула должна скорее так выглядеть

 ((Vin/5)-0.1916)/0.0062 (допустим, что 0.0062 верно и лучше округлить вниз)

а во второй и третей не хватает V_supply.

Иначе их Calculated values at 5 V вообще не получить...

Автор: Ofer 4.8.2008, 09:19
Прошу прощения, что так долго не описывался по теме. Общими стараниями, я наконец понял, что формулы

TrueRH = SensorRH/(1.0305+0.000044T-0.0000011T^2) T in C
TrueRH = SensorRH/(0.92537-0.0041T+0.000040T^2) T in C

это одно целое. Т.е. равносильно такой записи

SensorRH/(0.92537-0.0041T+0.000040T^2) = SensorRH/(1.0305+0.000044T-0.0000011T^2)

А значит, что нужно всего лиш найти напряжение показание датчика 

Vin = (ADC*5)/1024;

и через формулу с температурной компенсацией находим искомое.

cardinal, а что привело вас к такому выводу? Пожалуйста, изложите ход своих мыслей.

Автор: cardinal 4.8.2008, 14:08
Цитата(Ofer @  4.8.2008,  08:19 Найти цитируемый пост)
cardinal, а что привело вас к такому выводу? Пожалуйста, изложите ход своих мыслей. 

На странице 2 (документа DOC000179697.pdf) есть Example Data Printout, а в нем Calculated Values для двух влажностей. Они должны получится по одной из формул, а не особо получаются...

Вообще я бы исходил из более новых данных, то есть только DOC000179697.pdf.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)