365mcu 发表于 2013-12-5 21:07:08

HR202湿敏电阻使用总结与程序整理

本帖最后由 365mcu 于 2013-12-5 21:14 编辑

最近用到HR202湿敏电阻传感器。
之前的设计电路在这里http://www.amobbs.com/thread-5561567-1-1.html(原始资料里面都有就不再重复上传了)
按照手册上给的推荐电路设计好了(采用所谓RC充电方式),标定电阻能冲上电,但是通过HR202始终充不上。自己折腾了两天,也在论坛求助了,可能是使用的人少,没什么回应。
上面帖子都是我自己一个人自问自答,也算是记录了问题解决的过程吧。
原理图:(这个原理图是不正确的,但是后面找到了问题修改一下就可以了)
http://cache.amobbs.com/new2012/forum/201312/04/144809v537hcz9vnwqij4g.jpg.thumb.jpg
问题1:
对于HR202手册的理解:有两个要点Power supply: 1.5V AC(Max sine)【1.5V AC】,Operating frequency: 500Hz-2kHz【供电频率】
所以上面的电路图对于这两点是有理解的但是理解的不到位,手册中推荐的输入高电平占空比要大于低电平才能将电容冲满电的方法是不对的,因为对于湿敏电阻来说她不是一个确切的电阻。
而是Central value: 31kΩ(at 25Celsius, 1kHz ,1V AC, 60%RH)在湿度为60%的条件下对湿敏电阻提供频率1Khz 的1VAC时的阻抗。所以单纯的施加高占空比的1Khz不能体现湿敏电阻的阻抗特性。
问题2:
由于上诉方法不成功所以,我就查淘宝有卖相关模块的没有,发现销量貌似都还不错。但是都是电阻分压然后通过比较器LM393输出DO信号,也提供了所谓的AO输出接口。
模块图片如下
http://img02.taobaocdn.com/imgextra/i2/49873130/T2yJmqXhRXXXXXXXXX_!!49873130.jpg
但是手册上明明写的要求提供交流电啊!这货能对吗?自己搭了个电路,我去毛输出没有啊。。。疑惑别人买回去还写好评的是怎么用的!
方法:
没办法了找供应商,搞了半天找到了一份资料,看着很有到里就将原来错误的电路修改了一下:
将充电电容去掉,湿敏电阻(Rh)不变,标定电阻(Rf)换成51K(接近31K即可),检测IO接到AD输入端口(我用的STM32 的PC0即ADC_IN10)。
测量方法是将Rh和Rf接口IO设置为 推挽输出,然后输出频率为1KHz的方波,两个方波相位相反(即Rh高电平时Rf低电平,Rh低电平时Rf高电平)。模拟AC输入。
然后在Rh接的IO口置位1的时候检测AI输入(在高电平中间时间采样比较准确),因为这时候相当于Rh与Rf串联,Rh接在Vcc端,中间采集到的AD对应电压就是Rf分压Vf。
所以Rf/(Rh+Rf) = Vf/Vcc,可以求得此时湿敏电阻的阻抗值然后根据阻值与温度偏移转换为湿度值。
总结:
什么事都得自己想办法解决,希望这篇帖子对以后用到HR202湿敏电阻的童鞋有帮助,节省电工们宝贵的时间啊。
注:对于手册中1.5V AC (Max),现在我使用的相当于3.3V,感觉只要提供这样一个模拟交流信号,湿敏电阻就能够达相应的阻抗特性。不知道是不是额定值误差更小呢?
      对了下面附上在STM32中的相关程序,移植可用。实测精度在2%RH左右,估计软件在优化一下能达到1%。
      还有对我有帮助的参考文件也在附件中,但是里面也有一点小错误,需要的仔细看看哦。

#define HR202_CONTR1_OUT   GPIOC->CRH &= 0xffffff0f;GPIOC->CRH &= 0x00000030;//湿敏电阻 Rh
#define HR202_CONTR1_CLR   GPIOC->BRR = (uint32_t)GPIO_Pin_9
#define HR202_CONTR1_SET   GPIOC->BSRR = (uint32_t)GPIO_Pin_9

#define HR202_CONTR2_OUT   GPIOC->CRH &= 0xfffffff0;GPIOC->CRH &= 0x00000003;//标定电阻 Rf
#define HR202_CONTR2_CLR   GPIOC->BRR = (uint32_t)GPIO_Pin_8
#define HR202_CONTR2_SET   GPIOC->BSRR = (uint32_t)GPIO_Pin_8
#define HR202_CONTR2_RD      GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)

#define HR202_DECT_IN      GPIOC->CRL &= 0xfffffff0;//模拟量输入

//全局变量定义
INT16U HUMI_vule,temp_vule;//湿温值
INT32U R_Humideal_int;//湿温电阻阻值
INT8U PwmTimeCnt = 0;

_HR202_ADC HR202_ADCTbl;

//求u16型数组平均值,去掉最大最小值
u16 AdcConvertAverage(u16 *p,u8 num)
{
    u8 i;
    u16 ret=0;
    u16 max_id,min_id,max_value,min_value;   
    for(i=0;i<num;i++)
    {
      ret+=(*(p+i));
    }
   //找到最大和最小值索引
   ret/=num;
   max_id=min_id=1;
   max_value=min_value=0;
   for(i=0;i<num;i++)
   {
      if((*(p+i)) > ret)
      {
          if((*(p+i)) - ret > max_value)
         {
            max_value=(*(p+i)) - ret;
            max_id=i;
         }
      }
      else
   {
          if(ret - (*(p+i)) > min_value)
         {
             min_value=ret - (*(p+i));
             min_id=i;
         }
   }
}

//去掉第一个和最大最小值后的平均值
   ret=0;
   for(i=0;i<num;i++)
{
   if((i!=min_id)&&(i!=max_id))
   ret+=(*(p+i));      
}   
if(min_id!=max_id)
   ret = (ret+(num/2))/(num-2);
else   
   ret = (ret+(num/2))/(num-1);
return ret;
}

/***************************************************************************
*** 函数名称 : HR202Dect_Init                                    
*** 创建人   : xx                                                
*** 创建日期 : xxxx                                          
*** 修改人者 :                                                         
*** 修改日期 :                                                         
*** 输入   :
*** 返回   :
*** 函数功能 : AI 初始化
***************************************************************************/
void HR202Dect_Init(void)
{
//Param 参数初始化
for(INT8U i=0;i<10;i++)
{
HR202_ADCTbl.AITbl = 0;//采集AD数据 10个
}
HR202_ADCTbl.AIEnable = OS_FALSE;//采集是否完成
HR202_ADCTbl.AICnt = 0;//采集数量
//Pin 初始化IO模拟输入
HR202_DECT_IN;
//ADC2 初始化
ADC_InitTypeDef ADC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);
                           
ADC_DeInit(ADC2);

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC2, &ADC_InitStructure);

ADC_RegularChannelConfig(ADC2, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5);   //RH

ADC_DMACmd(ADC2, ENABLE);   

ADC_Cmd(ADC2, ENABLE);
ADC_ResetCalibration(ADC2);
while(ADC_GetResetCalibrationStatus(ADC2) == SET);
ADC_StartCalibration(ADC2);
while(ADC_GetCalibrationStatus(ADC2) == SET);

ADC_SoftwareStartConvCmd(ADC2, ENABLE);
}
///ADC2 GetValue
INT16U HR202Dect_GetADValue(void)
{
INT16U GetValue = 0;
ADC_SoftwareStartConvCmd(ADC2, ENABLE);
GetValue = ADC_GetConversionValue(ADC2);
return GetValue;
}
/*****************************************
//湿敏电阻采集数据 返回湿敏阻值R_Humideal_int
*****************************************/
voiddataHM_colleck(void)
{
INT16U ADValueTemp = 0;
if(HR202_ADCTbl.AIEnable == OS_FALSE)
{
    ADValueTemp = AdcConvertAverage(&HR202_ADCTbl.AITbl,10);
    HR202_ADCTbl.AIEnable = OS_TRUE;
}
//获得实际湿敏电阻阻抗值(单位Ω)
R_Humideal_int = (51000*4096)/ADValueTemp-51000;//Rf = 51K (Rh+Rf)/Rf=Vcc/Vh;
}

/*****************************************
//31K湿敏电阻获取湿度值
*****************************************/
void get_31HUMI_vule(void)
{
//分段计算湿度值
if((R_Humideal_int/1000)>=2600)    HUMI_vule=(146000-10*(R_Humideal_int/1000))*10/4800; //20-25
else if(1300<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<2600)HUMI_vule=(91000-10*(R_Humideal_int/1000))*10/2600; //25-30
else if(630<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<1300)HUMI_vule=(53200-10*(R_Humideal_int/1000))*10/1340; //30-35
else if(310<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<630)   HUMI_vule=(28700-10*(R_Humideal_int/1000))*10/640; //35-40
else if(160<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<310)HUMI_vule=(15100-10*(R_Humideal_int/1000))*10/300; //40-45
else if(87<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<160)HUMI_vule=(8170-10*(R_Humideal_int/1000))*10/146; //45-50
else if(49<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<87)HUMI_vule=(4670-10*(R_Humideal_int/1000))*10/76; //50-55
else if(31<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<49)HUMI_vule=(2470-10*(R_Humideal_int/1000))*10/36; //55-60   
else if(20<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<31)HUMI_vule=(1630-10*(R_Humideal_int/1000))*10/22; //60-65
else if(13<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<20)HUMI_vule=(1110-10*(R_Humideal_int/1000))*10/14; //65-70
else if(8<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<13)   HUMI_vule=(7740-100*(R_Humideal_int/1000))*10/92;//70-75
else if(6<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<8)   HUMI_vule=(4890-100*(R_Humideal_int/1000))*10/54;//75-80
//else if(5<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<6)HUMI_vule=(2010-100*(R_Humideal_int/1000))*10/18;//80-85
else if((R_Humideal_int/1000)<6)HUMI_vule=(388-10*(R_Humideal_int/1000))*10/4;//85-90

//温度补偿0-60℃
if(temp_vule<=25)HUMI_vule= HUMI_vule+((25-temp_vule)*2);   //小于25一度加0.2
if((25<temp_vule)&(temp_vule<=40))HUMI_vule= HUMI_vule-((temp_vule-25)*2);   //大于25一度减0.2
if(HUMI_vule>=999)HUMI_vule=999;//大于99
}
static INT8U HR202_Step = 0;
static INT8U HR202_Flag = 0;
void HR202_TMR2_ISR(void)//100us定时器中断调用函数
{
if(HR202_Step == 0x00)
{
   if(HR202_Flag == 0x00)
   {
   HR202_CONTR1_OUT;//
   HR202_CONTR2_OUT;//
   HR202_Flag = 0x10;//
   }
   else if(HR202_Flag == 0x10)
   {
   //PWM输出
   if(PwmTimeCnt > 0)
   {
      PwmTimeCnt--;
   }
   else
   {
      PwmTimeCnt = 9;
   }   
   if(PwmTimeCnt>=5)//1Khz 方波
   {
      HR202_CONTR1_SET;//Rh 1
      HR202_CONTR2_CLR;//Rf 0
   }
   else
   {
      HR202_CONTR1_CLR;//Rh 0
      HR202_CONTR2_SET;//Rf 1
   }
   if(PwmTimeCnt == 2)//在Rh 为高电平时的200us 进行AD采集
   {
       if(HR202_ADCTbl.AIEnable == OS_TRUE)//是否可以采集
       {
          HR202_ADCTbl.AITbl = HR202Dect_GetADValue();//采集当前AD值
          if(HR202_ADCTbl.AICnt == 10)//采集10次 取平均
          {
            HR202_ADCTbl.AIEnable = OS_FALSE;//完成一组数据采集
            HR202_ADCTbl.AICnt = 0;
          }
       }
   }
   }
}
}

365mcu 发表于 2013-12-5 21:11:30

真没人需要吗!不会又是自己和自己发帖玩吧我!

yayasoso 发表于 2013-12-5 21:27:29

{:lol:}谢谢楼主分享!不知道楼主要做什么需要用湿敏电阻。我做一个东西需要测温度和湿度,直接选用SHT11,手册上说分辨率能到0.03%,东西买回来了,板子也做了,就是还没编写程序哦,还不知道性能如何。

365mcu 发表于 2013-12-5 21:31:14

yayasoso 发表于 2013-12-5 21:27
谢谢楼主分享!不知道楼主要做什么需要用湿敏电阻。我做一个东西需要测温度和湿度,直接选用SHT11, ...

除湿用的,SHT11没用过,不过数字式的总体好搞点。。。

gdoujiajia 发表于 2013-12-5 21:41:44

这可是好东西啊,最近也刚开始搞湿度,还没测过精度。

ch2003_23 发表于 2013-12-5 23:57:09

支持原创,感谢楼主

yangpeng012 发表于 2013-12-6 00:03:13

支持原创。。。。。

STM32_Study 发表于 2013-12-6 08:19:24

谢谢楼主

网上关于湿敏电阻的资料确实非常少。我之前也一直困惑,怎么交流驱动。你的这个帖子将解决我的疑问。非常感谢

另外,能否发一份你最终正确的驱动电路图?你文字部分的描述,没有完全看明白

365mcu 发表于 2013-12-6 08:44:27

STM32_Study 发表于 2013-12-6 08:19
谢谢楼主

网上关于湿敏电阻的资料确实非常少。我之前也一直困惑,怎么交流驱动。你的这个帖子将解决我的疑 ...

最终电路图和附件的PDF电路图一样的


czdavid 发表于 2013-12-6 08:46:13

支持原创。

自信面对 发表于 2013-12-7 09:20:41

必须赞一个,这个过程很重要

wxty 发表于 2013-12-7 10:25:35

MARK 湿敏电阻 HR202 , 楼主提到的精度2%是全湿度范围吗?

365mcu 发表于 2013-12-8 19:16:12

wxty 发表于 2013-12-7 10:25
MARK 湿敏电阻 HR202 , 楼主提到的精度2%是全湿度范围吗?

我测的是40%至80%之间的

shaqsmao2012 发表于 2013-12-10 19:55:06

你好!我现在也在做HR202,按照你的方法我在STM8上实验了下,结果测出来的HR202的阻值很大,有几十M,能否请教下这是什么原因造成的?谢谢!

shaqsmao2012 发表于 2013-12-10 20:02:28

麻烦楼主能帮我回答下,非常感谢!

365mcu 发表于 2013-12-10 20:05:29

shaqsmao2012 发表于 2013-12-10 19:55
你好!我现在也在做HR202,按照你的方法我在STM8上实验了下,结果测出来的HR202的阻值很大,有几十M,能否 ...

多少湿度环境啊?应该是多少的,是不是你计算的问题啊!

365mcu 发表于 2013-12-10 20:11:59

shaqsmao2012 发表于 2013-12-10 20:02
麻烦楼主能帮我回答下,非常感谢!

我不清楚你产生问题的原因,但是可以试试检查有没有以下问题:
1.测量温度范围是否是在0~60摄氏度。
2.输出波形是否符合要求(有条件用示波器量一下两个方波)。
3.是否是在给湿敏电阻高电平的时候采的AD(AD采集是否正确)。
4.是否我的程序在移植过程中有问题(或则我程序本身的问题)。

shaqsmao2012 发表于 2013-12-10 20:57:03

你好!我是按照你在9楼上说的图编程的。
1、我的测量温度范围是0-60度。
2、输出波形我用示波器观察了,是相位相反的两个1KHZ的两个方波
3、我是在RF为高电平,然后RH(即湿敏电阻)为低电平的时候测量AI的值
不知道是否有不正确的地方!

shaqsmao2012 发表于 2013-12-10 20:58:52

还有就是我有疑问:
1、你说的附件中有小错误是什么,能否跟我透露下,谢谢了
2、测量AI端是否需要接一个电容

shaqsmao2012 发表于 2013-12-10 21:02:59

365mcu 发表于 2013-12-10 20:05
多少湿度环境啊?应该是多少的,是不是你计算的问题啊!

我用一个电阻替代RH(湿敏电阻)则是能得出正确的值,我是直接调试看AD采样得到的寄存器值

365mcu 发表于 2013-12-10 22:01:21

shaqsmao2012 发表于 2013-12-10 20:58
还有就是我有疑问:
1、你说的附件中有小错误是什么,能否跟我透露下,谢谢了
2、测量AI端是否需要接一个电 ...

不是在AI端高电平时候测AD,是在给RH充电高电平时候测AD,我程序应该就是这么搞的。
现在天冷,如果超过0~60温度的话不知道HR202电阻会是多少(在这个温度范围内都没事)。
如果测电阻准确的话,那就是HR202的问题,可能是温度影响,可能是HR202质量问题。

365mcu 发表于 2013-12-10 22:02:46

shaqsmao2012 发表于 2013-12-10 21:02
我用一个电阻替代RH(湿敏电阻)则是能得出正确的值,我是直接调试看AD采样得到的寄存器值 ...

最好用示波器量一下波形,看看湿敏电阻输出和输入之间的关系是否正确。

ijlc1314 发表于 2013-12-11 01:08:51

以前用过,但忘记型号了。两个IO输出方波,然后用AD口读取。需要配合环境温度求出湿度。高湿或低湿时误差较大

365mcu 发表于 2013-12-11 11:35:47

本帖最后由 365mcu 于 2013-12-11 11:37 编辑

shaqsmao2012 发表于 2013-12-10 20:57
你好!我是按照你在9楼上说的图编程的。
1、我的测量温度范围是0-60度。
2、输出波形我用示波器观察了,是 ...

是在Rh(即我上面图中PC8端口)高电平中间(200uS左右)采集AI通道的AD值,你的这个应该是采集时间不对的。(不好意思才看到)。
可以顺便量一下AI波形,然后改变湿度值(哈气),看看AI波形变化趋势和稳定状态的电压值,自己估算一下相应电阻值查表找到湿度值,这样就知道自己采集AD的时间是不是对的了。

365mcu 发表于 2013-12-11 11:38:58

ijlc1314 发表于 2013-12-11 01:08
以前用过,但忘记型号了。两个IO输出方波,然后用AD口读取。需要配合环境温度求出湿度。高湿或低湿时误差较 ...

是啊,低成本,高低误差要求不高的情况下采用这个还不错吧(高湿度误差可能在5%左右)。反应时间比较慢

mcu1234mcu 发表于 2013-12-11 12:57:28

收藏了,有用!!!!!!!

shaqsmao2012 发表于 2013-12-11 18:02:56

365mcu 发表于 2013-12-11 11:35
是在Rh(即我上面图中PC8端口)高电平中间(200uS左右)采集AI通道的AD值,你的这个应该是采集时间不对的 ...

谢谢你的回答!我再试试看,有问题再向你请教!!

散吧散吧 发表于 2014-3-7 19:18:24

楼主,能给一下qq吗,我想请教你一下

365mcu 发表于 2014-3-10 08:25:56

散吧散吧 发表于 2014-3-7 19:18
楼主,能给一下qq吗,我想请教你一下

上不了qq白天,有问题直接在这问吧,希望能帮到你。

laohuang868 发表于 2014-3-24 11:40:08

嘿嘿,谢谢,真好也要用这个!

tianzhiying 发表于 2014-5-23 10:22:13

最近刚好在用这个,刚好也遇到这个问题。先试试。谢谢LZ啊

tiantangwuzhe 发表于 2014-5-23 10:50:06

365mcu 发表于 2013-12-10 20:11
我不清楚你产生问题的原因,但是可以试试检查有没有以下问题:
1.测量温度范围是否是在0~60摄氏度。
2.输 ...

您好,我在单片机3.3V供电,Rf=51K的时候,用示波器看到:在Rh高电平时,检测到的电压仅为零点几伏;然后用万用表测了一下湿敏电阻14MΩ多(不知道这样测对不对),最后我把Rf换成了5.1M,这时电压为1.3V左右,
但是,带入到程序中满足这里:if((R_Humideal_int/1000)>=2600)    HUMI_vule=(146000-10*(R_Humideal_int/1000))*10/4800; //20-25,但计算出来的值不是20——25,是好几千啊
谢谢

hero245 发表于 2014-5-23 11:04:31

tiantangwuzhe 发表于 2014-5-23 10:50
您好,我在单片机3.3V供电,Rf=51K的时候,用示波器看到:在Rh高电平时,检测到的电压仅为零点几伏;然后 ...

不能用万表表测试湿敏电阻,必须用电桥来测试。
因为用万用表测试,只通直流会造成湿敏电阻极化,会永久性损坏湿敏电阻。

tiantangwuzhe 发表于 2014-5-23 11:21:41

hero245 发表于 2014-5-23 11:04
不能用万表表测试湿敏电阻,必须用电桥来测试。
因为用万用表测试,只通直流会造成湿敏电阻极化,会永久 ...

请问,为什么我测的ADC值带入到楼主的程序中,算的值很离谱啊

365mcu 发表于 2014-5-23 12:27:31

tiantangwuzhe 发表于 2014-5-23 10:50
您好,我在单片机3.3V供电,Rf=51K的时候,用示波器看到:在Rh高电平时,检测到的电压仅为零点几伏;然后 ...

好好看一下数据手册吧,Rf不能那么大的。

tiantangwuzhe 发表于 2014-5-23 13:29:21

365mcu 发表于 2014-5-23 12:27
好好看一下数据手册吧,Rf不能那么大的。

是的,我先前是从30K开始增加上来的,一开始检测电压上不来啊,5.1M的时候才能检测到1.3V

tianzhiying 发表于 2014-5-24 20:54:01

我用8位AD,参考电阻Rf=27K(手头没有31K)。
1KHzPWM,占空比50%,在Rh接的IO口置位1的时候读取ADC。
测出来是这样子:
5B,B5为包头包尾,连续10次AD值,第11个(B5前面那个)为去掉头尾算出来的平均值。
如下:
5B 07 50 30 3F 47 70 4E 75 53 57 51 B5
5B 50 30 3E 47 4E 53 79 57 7D 5B 54 B5
5B 50 2E 3C 45 4B 50 78 55 7C 58 52 B5
5B 4F 2E 3C 45 4B 50 78 55 58 5A 4D B5
5B 2E 3C 68 45 4B 74 51 54 7C 58 59 B5
5B 50 30 3E 47 4D 52 56 5A 5D 60 4C B5
不知道LZ会不会在连读10次AD的时候数据波动也是这么大?
这样算出来的偏差好大。

tianzhiying 发表于 2014-5-26 10:46:17

按照这方法算出来,误差跟实际差10

tianzhiying 发表于 2014-5-26 10:55:37

然后在Rh接的IO口置位1的时候检测AI输入



发现这份文件里面跟LZ说得有点不一样,这个是LZ说的小错误吗?
还有,去掉R2能行不?

365mcu 发表于 2014-5-26 11:17:29

tianzhiying 发表于 2014-5-26 10:55
然后在Rh接的IO口置位1的时候检测AI输入




需要去掉的,9楼有正确的电路和时序图。至于那个数值,我测试的时候都是正确的,不清楚你问题出在哪边,要是可以的话自己排查一下,应该是个小错误吧。

qxwan250 发表于 2014-5-26 14:37:49

我就是做这个的,温湿度控制器,MARK,感谢楼主无私奉献

365mcu 发表于 2014-5-26 16:23:27

qxwan250 发表于 2014-5-26 14:37
我就是做这个的,温湿度控制器,MARK,感谢楼主无私奉献

为什么我做之前没有人遇到这些问题呢!奇怪{:sweat:}

黄瓜 发表于 2014-5-28 17:31:19

请问下楼主如果将 Rf 与 PC9口相连的一端接地后还能用这种方式吗?
我现在有个项目的电路就是这样的,不知道怎么回事读到数据的几乎为 0, Rf也是 51k 1%的,PC8 口输出 1K Hz的方波(相对于你 9楼的图)

365mcu 发表于 2014-5-29 12:01:45

黄瓜 发表于 2014-5-28 17:31
请问下楼主如果将 Rf 与 PC9口相连的一端接地后还能用这种方式吗?
我现在有个项目的电路就是这样的,不知 ...

这样不行啊,你给RH(湿敏电阻)的电压始终只有正向的和0没有负向电压啊。

vloveLan 发表于 2014-6-25 15:46:58

请教楼主一个问题,我也是按照你的方式去做的,现在测量出来的误差大概是在5%左右,有什么办法减少这个误差吗?

weiwst 发表于 2014-7-5 18:25:01

本帖最后由 weiwst 于 2014-7-5 18:35 编辑

365mcu 发表于 2014-5-26 16:23
为什么我做之前没有人遇到这些问题呢!奇怪

{:titter:} 因为好多人都直接用湿度传感器,没有深究到底是用交流还是直流。只是当用直流供电时候,湿度传感器的阻值也是随湿度变化的。
这就是常说的,电路可以工作。
LZ这么无私,我也贴出来最近逆向的,只是为了学习。{:shy:} 维修时候用的。
很简单的温湿度控制器,用LM324制作。


补充一下,这里面用到的温度传感器。R25值测量在10K左右。B值为:B25/50=3380K    B25/85=3435K
我现在只找到温度传感器的资料:

相关的温敏电阻的资料:


嘿嘿,因为测量湿度传感器感到奇怪,所以也找到这个帖子了。{:titter:}

weiwst 发表于 2014-7-5 18:48:45

365mcu 发表于 2013-12-5 21:11
真没人需要吗!不会又是自己和自己发帖玩吧我!

{:lol:} 另一个帖子不忍心回复啊。。。{:titter:}

tomjark 发表于 2014-7-5 19:20:58

mark非常有用。

jandy 发表于 2014-7-9 18:11:46

谢谢了。今天就设计这个,验证过,很好用{:shocked:}

一夕nandy 发表于 2014-8-22 23:24:33

mark HR202

fxmxn 发表于 2014-8-25 15:57:17

我看着HR202的湿度表,在20%湿度的时候电阻值都是兆级的了,这个时候单片机的AD还能测的出来吗?请问你当时使用时的湿度范围是多少啊?谢谢

mculjf 发表于 2014-8-26 09:31:24

支持原创。

dzdesigned 发表于 2014-8-26 14:04:04

正好有个项目用到这个。谢谢分享!

suxilong 发表于 2014-9-16 21:20:31

365mcu 发表于 2013-12-5 21:11
真没人需要吗!不会又是自己和自己发帖玩吧我!

请问楼主,为什么测量方法是将Rh和Rf接口        IO设置为 推挽输出 ????


kid987 发表于 2014-11-26 18:46:56

mark,最近也开始试用下,好帖先给个赞!

songdalong 发表于 2014-11-27 08:24:11

先收藏,用到的时候学习。

hejunhua 发表于 2014-11-27 08:47:25

谢谢提供的资料,留着以后用

李程宏 发表于 2014-11-27 08:50:47

谢谢分享,mark

xuefen2014 发表于 2014-11-28 07:06:55

好东西,谢谢楼主分享

zhcj66 发表于 2014-12-9 16:25:55

365mcu 发表于 2013-12-6 08:44
最终电路图和附件的PDF电路图一样的

学习了,正想搞这个东西玩玩

zhcj66 发表于 2014-12-22 14:08:03

lz你的思路很好,可是stm32f 是12bit的adc啊 湿敏电阻的阻值从10M-1.3K不等,这么大的变化范围用12bit的ADC我个人认为分辨率肯定不够

我刚刚咨询了他们HR202他们用的是对电容充放电的方法检测的,我现在还没有想明白

chinazhaoyl 发表于 2014-12-25 08:25:18

好资料,谢谢分享

lize91 发表于 2015-3-13 11:38:12

谢谢楼主的经验分享 学习中

liangws201 发表于 2015-4-17 10:43:26

@ LZ 楼主的程序中, RH为高电平200us 的时候程序有问题,if(PwmTimeCnt == 2) 应修改为if(PwmTimeCnt == 7),其他没有问题了。

快乐的小娃 发表于 2015-4-17 10:47:12

好东西,正需要这个,谢谢了

mcu5i51 发表于 2015-4-17 10:58:30

温度分段计算,会不会结果有跳变

大洋哥 发表于 2015-4-20 17:13:52

LZ,求教,你程序里_HR202_ADC HR202_ADCTbl;
是什么意思,我找不到_HR202_ADC这个数据类型。

wtiechen1969 发表于 2015-4-21 09:52:30

正在做湿度测量参考一下,谢谢楼主

sober 发表于 2015-7-15 15:17:27

楼主,你分段计算湿度值的公式是怎样得来的。

yujian1022 发表于 2016-2-25 18:08:35

正在做DHT11,对我帮助很大,谢谢楼主的无私奉献。

beihai326 发表于 2016-4-28 10:37:04

赞一个!!!

chen849928055 发表于 2016-4-28 13:39:42

mark,收藏下,以后用得着。

克里尔白客 发表于 2016-5-7 15:48:52

湿敏电阻精度可以达到多少

zhikunWang 发表于 2016-5-28 20:50:05

得出电阻范围,然后用公式算出湿度。如if((R_Humideal_int/1000)>=2600)    HUMI_vule=(146000-10*(R_Humideal_int/1000))*10/4800; //20-25   , 后面的公式哪里来的?

shandong 发表于 2016-5-28 22:54:33

在用SI7021

astankvai 发表于 2016-5-29 09:06:38

这个可是好东西啊,不过看网上有一个公式计算,比查表看起来方便多了.

duxingkei 发表于 2016-5-29 09:39:01

顶你,【什么事都得自己想办法解决】

lxjmcuahz 发表于 2016-5-31 14:59:29

谢谢,楼主哇{:smile:}

oooios 发表于 2016-5-31 15:41:55

多谢分享 用的少的 资料也少

bh7ijm 发表于 2016-11-15 10:44:25

mark,相当实用!{:smile:}

fangjikun 发表于 2017-3-1 15:00:37

本帖最后由 fangjikun 于 2017-3-1 15:06 编辑

weiwst 发表于 2014-7-5 18:25
因为好多人都直接用湿度传感器,没有深究到底是用交流还是直流。只是当用直流供电时候,湿度 ...

虽然是14年的帖子也要回复一下,
直流供电的叫湿敏开关,这种湿敏电阻在低湿时不敏感而在高湿时敏感,当湿度达到一定值时其阻值变换很大(正向还是负向我忘了)
这样就可以用324或者393之类的做个电压检测然后翻转就可以控制继电器了,
而要比较准确的测量湿度值就不能用湿敏开关了,只能用湿敏电阻,而湿敏电阻必须交流驱动,我现在还死在交流驱动上没有复活{:mad:}
。。。
楼主的电路,io直接驱动后直接送ADC脚,信号都不用处理吗?实际用时湿敏电阻和NTC电阻要是通过2-10米长的线连过来的呢?心里没底。

zjk 发表于 2017-3-1 16:46:22

谢谢楼主分享,多些楼主这类人,论坛才能更好

dazelong2018 发表于 2017-12-12 16:15:04


支持原创。正在做这个!

lzandyc 发表于 2017-12-27 12:58:36

dazelong2018 发表于 2017-12-12 16:15
支持原创。正在做这个!

你好,正在做这个,有点问题不知可否请教一下,QQ,3004807330

小梁子 发表于 2018-9-5 11:00:47

gdoujiajia 发表于 2013-12-5 21:41
这可是好东西啊,最近也刚开始搞湿度,还没测过精度。

可以试试我家生产的耐水型的湿敏电阻

gzhua20088ssj 发表于 2018-9-7 15:49:10

看看,还不错

laojiao 发表于 2019-6-17 14:24:28

了解了,谢谢扫盲

zyw19987 发表于 2019-11-23 07:29:18

感谢被扫盲了!

电子浪\人/ 发表于 2020-3-25 14:39:48

一定需要单片机的ADC口吗?看数据手册,没要求是ADC口

lj0755 发表于 2020-3-25 17:50:23

谢谢楼主无私分享

电子浪\人/ 发表于 2020-3-25 18:17:19


LZ,求教,你程序里_HR202_ADC HR202_ADCTbl;
是什么意思,我找不到_HR202_ADC这个数据类型。

AWEIAAA 发表于 2020-8-18 14:21:27


_HR202_ADC HR202_ADCTbl;这个是什么意思呢

A_Lin 发表于 2021-3-19 17:22:37

楼主能发下整个工程文件吗,为了这篇文章狠心开了个VIP{:cry:}

A_Lin 发表于 2021-3-19 18:34:13

有人知道_HR202_ADC这个结构体怎么写吗,还有OS_FALSE、OS_TRUE啥含义呢重谢!

wqy0410 发表于 2021-3-19 23:56:46

mark马上要用了

zzz123456 发表于 2021-3-22 17:13:25

Mark46楼,谢谢你的资料。

zjhh2013 发表于 2021-4-11 11:08:43

感谢楼主,刚好要用到。学习学习

狼群里的羊 发表于 2021-6-3 13:46:18

你好,采用电容充放电的方式不能测量吗?手册说是交流的,但是电容重放的方式是交流电吗?

kap 发表于 2021-6-4 14:19:46

感谢分享!

liucs 发表于 2021-11-24 17:49:33

借鉴了,感谢
页: [1] 2
查看完整版本: HR202湿敏电阻使用总结与程序整理