zfzdhz 发表于 2010-10-24 19:43:56

HS1101通过555测出频率 然后怎样得到湿度值?

HS1101通过555测出频率 然后怎样得到湿度值?

gamekeys 发表于 2010-10-24 19:50:02

通过判断频率得出湿度值

zfzdhz 发表于 2010-10-24 19:54:47

回复【1楼】gamekeys
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592476K8I5GY.jpg
(原文件名:未命名.jpg)

是用上面这个式子吗?

gamekeys 发表于 2010-10-24 19:58:00

回复【2楼】zfzdhz
-----------------------------------------------------------------------

数据所对应电路图
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592477LCYS8K.jpg
(原文件名:Q%{KT4%8(G)FI@IPCRW{3LB.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592478D1RIAZ.jpg
(原文件名:FAA_4$JWRL]5IH7T7~UY4PJ.jpg)

zfzdhz 发表于 2010-10-24 20:07:34

回复【3楼】gamekeys
-----------------------------------------------------------------------

是判断频率在上表哪个范围内 然后得到对应的湿度值?这样不是很不准?

gamekeys 发表于 2010-10-24 20:13:15

还有曲线图
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592480FTGPH0.jpg
(原文件名:
那个本来就有一定的误差……

zfzdhz 发表于 2010-10-24 20:14:34

回复【5楼】gamekeys
-----------------------------------------------------------------------

多谢 gamekeys呵呵 温度补偿是什么意思?这块我不太懂 温度补偿是怎么实现的?
教教我吧~ ~

gamekeys 发表于 2010-10-24 20:42:28

555电路的非平衡电阻R1是做内部温度补偿,目的是为了引入温度效应,使它与HS1101的温度效应相匹配。R1必须象所有的R-C时钟电阻的要求一样,1%的精度,最大的温度效应应该小于100ppm。由于不同型号的555的内部温度补偿有所不同,R1的值必须与特定的芯片相匹配。。为了保证在55%RH的典型湿度值为6660Hz,R2也需要做稍许修正。

bxzyf 发表于 2010-10-24 22:49:24

我用运放做的震荡电路。没有标准湿度表来校准,郁闷!

gamekeys 发表于 2010-10-24 23:09:38

回复【8楼】bxzyf
-----------------------------------------------------------------------

要灵活运用,根据5楼图所对应的电容值判断。你是想用运放做RC振荡吗?那样也能判断湿度值。

sunliezhi 发表于 2010-10-25 01:12:45

uchar GetShiDu(uint feq)

{

    uchar SwitchTmp=0, Avage=0, ShiDuGe=0,ShiDu=0;
         // SheDuGe 个位
   if   ((feq > 0 ) && (feq <= 6033))SwitchTmp = 255;



   if   ((feq > 6033)&&(feq <= 6186))SwitchTmp = 9;

   else if((feq > 6186)&&(feq <= 6330))SwitchTmp = 8;

   else if((feq > 6330)&&(feq <= 6468))SwitchTmp = 7;

   else if((feq > 6468)&&(feq <= 6600))SwitchTmp = 6;

   else if((feq > 6600)&&(feq <= 6728))SwitchTmp = 5;

   else if((feq > 6728)&&(feq <= 6853))SwitchTmp = 4;

   else if((feq > 6853)&&(feq <= 6976))SwitchTmp = 3;

   else if((feq > 6976)&&(feq <= 7100))SwitchTmp = 2;

   else if((feq > 7100)&&(feq <= 7224))SwitchTmp = 1;

   else if((feq > 7224)&&(feq <= 7351))SwitchTmp = 0;



   switch(SwitchTmp)

   {

      case 0:

                

                 Avage = (7351 - 7224) / 10;

                       ShiDuGe = (7351-feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 1:

                 Avage = (7224 - 7100) / 10;

                       ShiDuGe = (7224 -feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 2:

                 Avage = (7100 - 6976) / 10;

                       ShiDuGe = (7100 - feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 3:

                 Avage = (6976 - 6853) / 10;

                       ShiDuGe = (6976 - feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 4:

                 Avage = (6853 - 6728) / 10;

                       ShiDuGe = (6853- feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 5:

                 Avage = (6728 - 6600) / 10;

                       ShiDuGe = (6728 - feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 6:

                 Avage = (6600 - 6468) / 10;

                       ShiDuGe = (6600 - feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 7:

                 Avage = (6468 - 6330) / 10;

                       ShiDuGe = (6468- feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 8:

                 Avage = (6330 - 6186) / 10;

                       ShiDuGe = (6330 - feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 9:

                 Avage = (6186 - 6033) / 10;

                       ShiDuGe = (6186- feq ) / Avage;

                       ShiDu= ( SwitchTmp *10 + ShiDuGe);

                       break;

      case 255:

                 ShiDu = 100;

                       break;

   }

   return ShiDu;





}

zfzdhz 发表于 2010-10-25 12:01:52

回复【10楼】sunliezhi
-----------------------------------------------------------------------

多谢

lang1437 发表于 2011-5-11 18:47:32

标记

xtaens 发表于 2011-6-5 17:08:40

mark

yzdxgm 发表于 2012-3-26 16:34:16

sunliezhi 发表于 2010-10-25 01:12 static/image/common/back.gif
uchar GetShiDu(uint feq)

{


朋友,我想做个关于湿度传感器的设计,但是我不明白频率值读出来以后怎么转换为湿度值,很多程序是分段来做的,但是看不明白,所以想请教你一下,这个分段里的函数是怎么得到的,谢谢

sunliezhi 发表于 2012-3-26 16:55:46

yzdxgm 发表于 2012-3-26 16:34 static/image/common/back.gif
朋友,我想做个关于湿度传感器的设计,但是我不明白频率值读出来以后怎么转换为湿度值,很多程序是分段来 ...

if   ((feq > 6033)&&(feq <= 6186))SwitchTmp = 9;

   else if((feq > 6186)&&(feq <= 6330))SwitchTmp = 8;

   else if((feq > 6330)&&(feq <= 6468))SwitchTmp = 7;

   else if((feq > 6468)&&(feq <= 6600))SwitchTmp = 6;

   else if((feq > 6600)&&(feq <= 6728))SwitchTmp = 5;

   else if((feq > 6728)&&(feq <= 6853))SwitchTmp = 4;

   else if((feq > 6853)&&(feq <= 6976))SwitchTmp = 3;

   else if((feq > 6976)&&(feq <= 7100))SwitchTmp = 2;

   else if((feq > 7100)&&(feq <= 7224))SwitchTmp = 1;

   else if((feq > 7224)&&(feq <= 7351))SwitchTmp = 0;

这个测频率的电路是个比较经典的电路,由它测出的频率对应的湿度就在某个固定的范围,比如
         频率在6033~6186之间对应湿度99~90,

xyz2008 发表于 2012-3-26 16:58:12

{:biggrin:}

sunliezhi 发表于 2012-3-26 17:10:56

得到十位上的数据之后,再计算个位上的数据,
Avage = (6186 - 6033) / 10;是算出该湿度区间每1度对应多少个频率值,
ShiDuGe = (6330 - feq ) / Avage;    6330对应湿度80(注意湿度与频率成不严格的反比关系),那我测得的频率与80度的频率相差多少,这个差值除那个平均值(每1度对应多少个频率值)就是湿度的个位了。

chenkaibsw 发表于 2013-4-28 13:02:13

多谢{:smile:}

jz701209李 发表于 2013-4-28 23:17:48

路过.学习一下

skylsk 发表于 2013-4-29 16:15:52

学习学习,刚好有个毕设用到
页: [1]
查看完整版本: HS1101通过555测出频率 然后怎样得到湿度值?