HS1101通过555测出频率 然后怎样得到湿度值?
HS1101通过555测出频率 然后怎样得到湿度值? 通过判断频率得出湿度值 回复【1楼】gamekeys-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592476K8I5GY.jpg
(原文件名:未命名.jpg)
是用上面这个式子吗? 回复【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) 回复【3楼】gamekeys
-----------------------------------------------------------------------
是判断频率在上表哪个范围内 然后得到对应的湿度值?这样不是很不准? 还有曲线图
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592480FTGPH0.jpg
(原文件名:
那个本来就有一定的误差…… 回复【5楼】gamekeys
-----------------------------------------------------------------------
多谢 gamekeys呵呵 温度补偿是什么意思?这块我不太懂 温度补偿是怎么实现的?
教教我吧~ ~ 555电路的非平衡电阻R1是做内部温度补偿,目的是为了引入温度效应,使它与HS1101的温度效应相匹配。R1必须象所有的R-C时钟电阻的要求一样,1%的精度,最大的温度效应应该小于100ppm。由于不同型号的555的内部温度补偿有所不同,R1的值必须与特定的芯片相匹配。。为了保证在55%RH的典型湿度值为6660Hz,R2也需要做稍许修正。 我用运放做的震荡电路。没有标准湿度表来校准,郁闷! 回复【8楼】bxzyf
-----------------------------------------------------------------------
要灵活运用,根据5楼图所对应的电容值判断。你是想用运放做RC振荡吗?那样也能判断湿度值。 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;
} 回复【10楼】sunliezhi
-----------------------------------------------------------------------
多谢 标记 mark sunliezhi 发表于 2010-10-25 01:12 static/image/common/back.gif
uchar GetShiDu(uint feq)
{
朋友,我想做个关于湿度传感器的设计,但是我不明白频率值读出来以后怎么转换为湿度值,很多程序是分段来做的,但是看不明白,所以想请教你一下,这个分段里的函数是怎么得到的,谢谢 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,
{:biggrin:} 得到十位上的数据之后,再计算个位上的数据,
Avage = (6186 - 6033) / 10;是算出该湿度区间每1度对应多少个频率值,
ShiDuGe = (6330 - feq ) / Avage; 6330对应湿度80(注意湿度与频率成不严格的反比关系),那我测得的频率与80度的频率相差多少,这个差值除那个平均值(每1度对应多少个频率值)就是湿度的个位了。 多谢{:smile:} 路过.学习一下 学习学习,刚好有个毕设用到
页:
[1]