搜索
bottom↓
回复: 101

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

  [复制链接]

出0入0汤圆

发表于 2013-12-5 21:07:08 | 显示全部楼层 |阅读模式
本帖最后由 365mcu 于 2013-12-5 21:14 编辑

最近用到HR202湿敏电阻传感器。
之前的设计电路在这里http://www.amobbs.com/thread-5561567-1-1.html(原始资料里面都有就不再重复上传了)
按照手册上给的推荐电路设计好了(采用所谓RC充电方式),标定电阻能冲上电,但是通过HR202始终充不上。自己折腾了两天,也在论坛求助了,可能是使用的人少,没什么回应。
上面帖子都是我自己一个人自问自答,也算是记录了问题解决的过程吧。
原理图:(这个原理图是不正确的,但是后面找到了问题修改一下就可以了)

问题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输出接口。
模块图片如下

但是手册上明明写的要求提供交流电啊!这货能对吗?自己搭了个电路,我去毛输出没有啊。。。疑惑别人买回去还写好评的是怎么用的!
方法:
没办法了找供应商,搞了半天找到了一份资料,看着很有到里就将原来错误的电路修改了一下:
将充电电容去掉,湿敏电阻(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%。
      还有对我有帮助的参考文件也在附件中,但是里面也有一点小错误,需要的仔细看看哦。

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

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

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

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

  13. _HR202_ADC HR202_ADCTbl;

  14. //求u16型数组[num]平均值,去掉最大最小值
  15. u16 AdcConvertAverage(u16 *p,u8 num)
  16. {
  17.     u8 i;
  18.     u16 ret=0;
  19.     u16 max_id,min_id,max_value,min_value;   
  20.     for(i=0;i<num;i++)
  21.     {
  22.       ret+=(*(p+i));
  23.     }
  24.    //找到最大和最小值索引  
  25.    ret/=num;
  26.    max_id=min_id=1;
  27.    max_value=min_value=0;
  28.    for(i=0;i<num;i++)
  29.    {
  30.       if((*(p+i)) > ret)
  31.       {
  32.           if((*(p+i)) - ret > max_value)
  33.          {
  34.               max_value=(*(p+i)) - ret;
  35.               max_id=i;
  36.          }
  37.       }
  38.       else
  39.      {
  40.           if(ret - (*(p+i)) > min_value)
  41.          {
  42.              min_value=ret - (*(p+i));
  43.              min_id=i;
  44.          }
  45.      }
  46.   }
  47.   
  48. //去掉第一个和最大最小值后的平均值
  49.    ret=0;
  50.    for(i=0;i<num;i++)
  51.   {
  52.      if((i!=min_id)&&(i!=max_id))
  53.      ret+=(*(p+i));      
  54.   }   
  55.   if(min_id!=max_id)
  56.      ret = (ret+(num/2))/(num-2);
  57.   else   
  58.      ret = (ret+(num/2))/(num-1);  
  59.   return ret;
  60. }

  61. /***************************************************************************
  62. *** 函数名称 : HR202Dect_Init                                      
  63. *** 创建人   : xx                                                
  64. *** 创建日期 : xxxx                                          
  65. *** 修改人者 :                                                           
  66. *** 修改日期 :                                                           
  67. *** 输入     :
  68. *** 返回     :
  69. *** 函数功能 : AI 初始化
  70. ***************************************************************************/
  71. void HR202Dect_Init(void)
  72. {
  73.   //Param 参数初始化
  74.   for(INT8U i=0;i<10;i++)
  75.   {
  76.   HR202_ADCTbl.AITbl[i] = 0;//采集AD数据 10个
  77.   }
  78.   HR202_ADCTbl.AIEnable = OS_FALSE;//采集是否完成
  79.   HR202_ADCTbl.AICnt = 0;//采集数量
  80.   //Pin 初始化IO模拟输入
  81.   HR202_DECT_IN;
  82.   //ADC2 初始化
  83.   ADC_InitTypeDef ADC_InitStructure;
  84.   
  85.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);
  86.                            
  87.   ADC_DeInit(ADC2);

  88.   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  89.   ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  90.   ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  91.   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  92.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  93.   ADC_InitStructure.ADC_NbrOfChannel = 1;
  94.   ADC_Init(ADC2, &ADC_InitStructure);

  95.   ADC_RegularChannelConfig(ADC2, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5);   //RH
  96.   
  97.   ADC_DMACmd(ADC2, ENABLE);   

  98.   ADC_Cmd(ADC2, ENABLE);
  99.   ADC_ResetCalibration(ADC2);
  100.   while(ADC_GetResetCalibrationStatus(ADC2) == SET);
  101.   ADC_StartCalibration(ADC2);
  102.   while(ADC_GetCalibrationStatus(ADC2) == SET);
  103.   
  104.   ADC_SoftwareStartConvCmd(ADC2, ENABLE);  
  105. }
  106. ///ADC2 GetValue
  107. INT16U HR202Dect_GetADValue(void)
  108. {
  109.   INT16U GetValue = 0;
  110.   ADC_SoftwareStartConvCmd(ADC2, ENABLE);  
  111.   GetValue = ADC_GetConversionValue(ADC2);
  112.   return GetValue;
  113. }
  114. /*****************************************
  115. //湿敏电阻采集数据 返回湿敏阻值R_Humideal_int
  116. *****************************************/
  117. void  dataHM_colleck(void)
  118. {
  119.   INT16U ADValueTemp = 0;
  120.   if(HR202_ADCTbl.AIEnable == OS_FALSE)
  121.   {
  122.     ADValueTemp = AdcConvertAverage(&HR202_ADCTbl.AITbl[0],10);
  123.     HR202_ADCTbl.AIEnable = OS_TRUE;
  124.   }
  125.   //获得实际湿敏电阻阻抗值(单位Ω)
  126.   R_Humideal_int = (51000*4096)/ADValueTemp-51000;//Rf = 51K (Rh+Rf)/Rf=Vcc/Vh;
  127. }

  128. /*****************************************
  129. //31K湿敏电阻获取湿度值
  130. *****************************************/
  131. void get_31HUMI_vule(void)
  132. {
  133.   //分段计算湿度值
  134.   if((R_Humideal_int/1000)>=2600)    HUMI_vule=(146000-10*(R_Humideal_int/1000))*10/4800; //20-25
  135.   else if(1300<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<2600)  HUMI_vule=(91000-10*(R_Humideal_int/1000))*10/2600; //25-30
  136.   else if(630<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<1300)  HUMI_vule=(53200-10*(R_Humideal_int/1000))*10/1340; //30-35
  137.   else if(310<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<630)   HUMI_vule=(28700-10*(R_Humideal_int/1000))*10/640; //35-40  
  138.   else if(160<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<310)  HUMI_vule=(15100-10*(R_Humideal_int/1000))*10/300; //40-45
  139.   else if(87<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<160)  HUMI_vule=(8170-10*(R_Humideal_int/1000))*10/146; //45-50
  140.   else if(49<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<87)  HUMI_vule=(4670-10*(R_Humideal_int/1000))*10/76; //50-55
  141.   else if(31<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<49)  HUMI_vule=(2470-10*(R_Humideal_int/1000))*10/36; //55-60     
  142.   else if(20<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<31)  HUMI_vule=(1630-10*(R_Humideal_int/1000))*10/22; //60-65  
  143.   else if(13<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<20)  HUMI_vule=(1110-10*(R_Humideal_int/1000))*10/14; //65-70
  144.   else if(8<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<13)   HUMI_vule=(7740-100*(R_Humideal_int/1000))*10/92;//70-75
  145.   else if(6<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<8)   HUMI_vule=(4890-100*(R_Humideal_int/1000))*10/54;//75-80
  146.   //else if(5<=(R_Humideal_int/1000)&(R_Humideal_int/1000)<6)  HUMI_vule=(2010-100*(R_Humideal_int/1000))*10/18;//80-85
  147.   else if((R_Humideal_int/1000)<6)  HUMI_vule=(388-10*(R_Humideal_int/1000))*10/4;//85-90
  148.   
  149.   //温度补偿0-60℃
  150.   if(temp_vule<=25)  HUMI_vule= HUMI_vule+((25-temp_vule)*2);   //小于25一度加0.2
  151.   if((25<temp_vule)&(temp_vule<=40))  HUMI_vule= HUMI_vule-((temp_vule-25)*2);   //大于25一度减0.2
  152.   if(HUMI_vule>=999)  HUMI_vule=999;  //大于99  
  153. }
  154. static INT8U HR202_Step = 0;
  155. static INT8U HR202_Flag = 0;
  156. void HR202_TMR2_ISR(void)//100us定时器中断调用函数
  157. {
  158. if(HR202_Step == 0x00)
  159. {
  160.    if(HR202_Flag == 0x00)
  161.    {
  162.      HR202_CONTR1_OUT;//
  163.      HR202_CONTR2_OUT;//
  164.      HR202_Flag = 0x10;//
  165.    }
  166.    else if(HR202_Flag == 0x10)
  167.    {
  168.      //PWM输出
  169.      if(PwmTimeCnt > 0)
  170.      {
  171.       PwmTimeCnt--;
  172.      }
  173.      else
  174.      {
  175.       PwmTimeCnt = 9;
  176.      }     
  177.      if(PwmTimeCnt>=5)//1Khz 方波
  178.      {
  179.       HR202_CONTR1_SET;//Rh 1
  180.       HR202_CONTR2_CLR;//Rf 0
  181.      }
  182.      else
  183.      {
  184.       HR202_CONTR1_CLR;//Rh 0
  185.       HR202_CONTR2_SET;//Rf 1
  186.      }
  187.      if(PwmTimeCnt == 2)//在Rh 为高电平时的200us 进行AD采集
  188.      {
  189.        if(HR202_ADCTbl.AIEnable == OS_TRUE)//是否可以采集
  190.        {
  191.           HR202_ADCTbl.AITbl[HR202_ADCTbl.AICnt++] = HR202Dect_GetADValue();//采集当前AD值
  192.           if(HR202_ADCTbl.AICnt == 10)//采集10次 取平均
  193.           {
  194.             HR202_ADCTbl.AIEnable = OS_FALSE;//完成一组数据采集
  195.             HR202_ADCTbl.AICnt = 0;
  196.           }
  197.        }
  198.      }
  199.    }
  200. }
  201. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2013-12-5 21:11:30 | 显示全部楼层
真没人需要吗!不会又是自己和自己发帖玩吧我!

出0入0汤圆

发表于 2013-12-5 21:27:29 | 显示全部楼层
谢谢楼主分享!不知道楼主要做什么需要用湿敏电阻。我做一个东西需要测温度和湿度,直接选用SHT11,手册上说分辨率能到0.03%,东西买回来了,板子也做了,就是还没编写程序哦,还不知道性能如何。

出0入0汤圆

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

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

出0入4汤圆

发表于 2013-12-5 21:41:44 | 显示全部楼层
这可是好东西啊,最近也刚开始搞湿度,还没测过精度。

出0入0汤圆

发表于 2013-12-5 23:57:09 | 显示全部楼层
支持原创,感谢楼主

出0入4汤圆

发表于 2013-12-6 00:03:13 | 显示全部楼层
支持原创。。。。。

出0入0汤圆

发表于 2013-12-6 08:19:24 | 显示全部楼层
谢谢楼主

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

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

出0入0汤圆

 楼主| 发表于 2013-12-6 08:44:27 | 显示全部楼层
STM32_Study 发表于 2013-12-6 08:19
谢谢楼主

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

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-12-6 08:46:13 | 显示全部楼层
支持原创。

出0入0汤圆

发表于 2013-12-7 09:20:41 | 显示全部楼层
必须赞一个,这个过程很重要

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2013-12-10 19:55:06 | 显示全部楼层
你好!我现在也在做HR202,按照你的方法我在STM8上实验了下,结果测出来的HR202的阻值很大,有几十M,能否请教下这是什么原因造成的?谢谢!

出0入0汤圆

发表于 2013-12-10 20:02:28 | 显示全部楼层
麻烦楼主能帮我回答下,非常感谢!

出0入0汤圆

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

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

出0入0汤圆

 楼主| 发表于 2013-12-10 20:11:59 | 显示全部楼层
shaqsmao2012 发表于 2013-12-10 20:02
麻烦楼主能帮我回答下,非常感谢!

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

发表于 2013-12-10 21:02:59 | 显示全部楼层
365mcu 发表于 2013-12-10 20:05
多少湿度环境啊?应该是多少的,是不是你计算的问题啊!

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

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2013-12-11 01:08:51 来自手机 | 显示全部楼层
以前用过,但忘记型号了。两个IO输出方波,然后用AD口读取。需要配合环境温度求出湿度。高湿或低湿时误差较大

出0入0汤圆

 楼主| 发表于 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的时间是不是对的了。

出0入0汤圆

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

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

出0入4汤圆

发表于 2013-12-11 12:57:28 | 显示全部楼层
收藏了,有用!!!!!!!

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-3-7 19:18:24 | 显示全部楼层
楼主,能给一下qq吗,我想请教你一下

出0入0汤圆

 楼主| 发表于 2014-3-10 08:25:56 | 显示全部楼层
散吧散吧 发表于 2014-3-7 19:18
楼主,能给一下qq吗,我想请教你一下

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

出0入0汤圆

发表于 2014-3-24 11:40:08 | 显示全部楼层
嘿嘿,谢谢,真好也要用这个!

出0入0汤圆

发表于 2014-5-23 10:22:13 | 显示全部楼层
最近刚好在用这个,刚好也遇到这个问题。先试试。谢谢LZ啊

出0入0汤圆

发表于 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,是好几千啊
谢谢

出0入97汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-5-23 13:29:21 | 显示全部楼层
365mcu 发表于 2014-5-23 12:27
好好看一下数据手册吧,Rf不能那么大的。

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

出0入0汤圆

发表于 2014-5-24 20:54:01 | 显示全部楼层
我用8位AD,参考电阻Rf=27K(手头没有31K)。
1KHz  PWM,占空比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的时候数据波动也是这么大?
这样算出来的偏差好大。

出0入0汤圆

发表于 2014-5-26 10:46:17 | 显示全部楼层
按照这方法算出来,误差跟实际差10

出0入0汤圆

发表于 2014-5-26 10:55:37 | 显示全部楼层
然后在Rh接的IO口置位1的时候检测AI输入



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-5-26 11:17:29 | 显示全部楼层
tianzhiying 发表于 2014-5-26 10:55
然后在Rh接的IO口置位1的时候检测AI输入

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

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2014-5-26 16:23:27 | 显示全部楼层
qxwan250 发表于 2014-5-26 14:37
我就是做这个的,温湿度控制器,MARK,感谢楼主无私奉献

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

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-6-25 15:46:58 | 显示全部楼层
请教楼主一个问题,我也是按照你的方式去做的,现在测量出来的误差大概是在5%左右,有什么办法减少这个误差吗?

出0入0汤圆

发表于 2014-7-5 18:25:01 | 显示全部楼层
本帖最后由 weiwst 于 2014-7-5 18:35 编辑
365mcu 发表于 2014-5-26 16:23
为什么我做之前没有人遇到这些问题呢!奇怪


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


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

相关的温敏电阻的资料:


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-7-5 18:48:45 | 显示全部楼层
365mcu 发表于 2013-12-5 21:11
真没人需要吗!不会又是自己和自己发帖玩吧我!

另一个帖子不忍心回复啊。。。

出0入0汤圆

发表于 2014-7-5 19:20:58 | 显示全部楼层
mark非常有用。

出0入0汤圆

发表于 2014-7-9 18:11:46 | 显示全部楼层
谢谢了。今天就设计这个,验证过,很好用

出0入0汤圆

发表于 2014-8-22 23:24:33 | 显示全部楼层
mark HR202

出0入0汤圆

发表于 2014-8-25 15:57:17 | 显示全部楼层
我看着HR202的湿度表,在20%湿度的时候电阻值都是兆级的了,这个时候单片机的AD还能测的出来吗?请问你当时使用时的湿度范围是多少啊?谢谢

出0入13汤圆

发表于 2014-8-26 09:31:24 | 显示全部楼层
支持原创。

出0入0汤圆

发表于 2014-8-26 14:04:04 | 显示全部楼层
正好有个项目用到这个。谢谢分享!

出0入0汤圆

发表于 2014-9-16 21:20:31 | 显示全部楼层
365mcu 发表于 2013-12-5 21:11
真没人需要吗!不会又是自己和自己发帖玩吧我!

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


出0入0汤圆

发表于 2014-11-26 18:46:56 | 显示全部楼层
mark,最近也开始试用下,好帖先给个赞!

出0入0汤圆

发表于 2014-11-27 08:24:11 | 显示全部楼层
先收藏,用到的时候学习。

出0入0汤圆

发表于 2014-11-27 08:47:25 | 显示全部楼层
谢谢提供的资料,留着以后用

出0入0汤圆

发表于 2014-11-27 08:50:47 | 显示全部楼层
谢谢分享,mark

出0入0汤圆

发表于 2014-11-28 07:06:55 | 显示全部楼层
好东西,谢谢楼主分享

出0入53汤圆

发表于 2014-12-9 16:25:55 | 显示全部楼层
365mcu 发表于 2013-12-6 08:44
最终电路图和附件的PDF电路图一样的

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

出0入53汤圆

发表于 2014-12-22 14:08:03 | 显示全部楼层
lz你的思路很好,可是stm32f 是12bit的adc啊 湿敏电阻的阻值从10M-1.3K不等,这么大的变化范围用12bit的ADC我个人认为分辨率肯定不够

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

出0入0汤圆

发表于 2014-12-25 08:25:18 | 显示全部楼层
好资料,谢谢分享

出0入0汤圆

发表于 2015-3-13 11:38:12 | 显示全部楼层
谢谢楼主的经验分享 学习中

出0入0汤圆

发表于 2015-4-17 10:43:26 | 显示全部楼层
@ LZ 楼主的程序中, RH为高电平200us 的时候程序有问题,if(PwmTimeCnt == 2) 应修改为if(PwmTimeCnt == 7),其他没有问题了。

出0入0汤圆

发表于 2015-4-17 10:47:12 | 显示全部楼层
好东西,正需要这个,谢谢了

出0入0汤圆

发表于 2015-4-17 10:58:30 | 显示全部楼层
温度分段计算,会不会结果有跳变

出0入0汤圆

发表于 2015-4-20 17:13:52 | 显示全部楼层
LZ,求教,你程序里_HR202_ADC HR202_ADCTbl;
是什么意思,我找不到_HR202_ADC这个数据类型。

出0入0汤圆

发表于 2015-4-21 09:52:30 | 显示全部楼层
正在做湿度测量参考一下,谢谢楼主

出0入0汤圆

发表于 2015-7-15 15:17:27 | 显示全部楼层
楼主,你分段计算湿度值的公式是怎样得来的。

出0入0汤圆

发表于 2016-2-25 18:08:35 | 显示全部楼层
正在做DHT11,对我帮助很大,谢谢楼主的无私奉献。

出0入0汤圆

发表于 2016-4-28 10:37:04 | 显示全部楼层
赞一个!!!

出5入10汤圆

发表于 2016-4-28 13:39:42 | 显示全部楼层
mark,收藏下,以后用得着。

出0入0汤圆

发表于 2016-5-7 15:48:52 | 显示全部楼层
湿敏电阻精度可以达到多少

出0入0汤圆

发表于 2016-5-28 20:50:05 | 显示全部楼层
得出电阻范围,然后用公式算出湿度。如if((R_Humideal_int/1000)>=2600)    HUMI_vule=(146000-10*(R_Humideal_int/1000))*10/4800; //20-25   , 后面的公式哪里来的?

出0入0汤圆

发表于 2016-5-28 22:54:33 | 显示全部楼层
在用SI7021

出0入0汤圆

发表于 2016-5-29 09:06:38 | 显示全部楼层
这个可是好东西啊,不过看网上有一个公式计算,比查表看起来方便多了.

出0入0汤圆

发表于 2016-5-29 09:39:01 | 显示全部楼层
顶你,【什么事都得自己想办法解决】  

出0入0汤圆

发表于 2016-5-31 14:59:29 | 显示全部楼层
谢谢,楼主哇

出0入0汤圆

发表于 2016-5-31 15:41:55 | 显示全部楼层
多谢分享 用的少的 资料也少

出0入0汤圆

发表于 2016-11-15 10:44:25 | 显示全部楼层
mark,相当实用!

出0入0汤圆

发表于 2017-3-1 15:00:37 | 显示全部楼层
本帖最后由 fangjikun 于 2017-3-1 15:06 编辑
weiwst 发表于 2014-7-5 18:25
因为好多人都直接用湿度传感器,没有深究到底是用交流还是直流。只是当用直流供电时候,湿度 ...


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

出0入0汤圆

发表于 2017-3-1 16:46:22 | 显示全部楼层
谢谢楼主分享,多些楼主这类人,论坛才能更好

出0入0汤圆

发表于 2017-12-12 16:15:04 | 显示全部楼层

支持原创。正在做这个!

出0入0汤圆

发表于 2017-12-27 12:58:36 | 显示全部楼层
dazelong2018 发表于 2017-12-12 16:15
支持原创。正在做这个!

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

出0入0汤圆

发表于 2018-9-5 11:00:47 | 显示全部楼层
gdoujiajia 发表于 2013-12-5 21:41
这可是好东西啊,最近也刚开始搞湿度,还没测过精度。

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

出0入0汤圆

发表于 2018-9-7 15:49:10 | 显示全部楼层
看看,还不错

出0入0汤圆

发表于 2019-6-17 14:24:28 | 显示全部楼层
了解了,谢谢扫盲

出0入0汤圆

发表于 2019-11-23 07:29:18 | 显示全部楼层
感谢被扫盲了!

出0入0汤圆

发表于 2020-3-25 14:39:48 | 显示全部楼层
一定需要单片机的ADC口吗?看数据手册,没要求是ADC口

出0入0汤圆

发表于 2020-3-25 17:50:23 | 显示全部楼层
谢谢楼主无私分享

出0入0汤圆

发表于 2020-3-25 18:17:19 | 显示全部楼层

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

出0入0汤圆

发表于 2020-8-18 14:21:27 | 显示全部楼层

_HR202_ADC HR202_ADCTbl;这个是什么意思呢

出0入0汤圆

发表于 2021-3-19 17:22:37 | 显示全部楼层
楼主能发下整个工程文件吗,为了这篇文章狠心开了个VIP

出0入0汤圆

发表于 2021-3-19 18:34:13 | 显示全部楼层
有人知道_HR202_ADC这个结构体怎么写吗,还有OS_FALSE、OS_TRUE啥含义呢重谢!

出0入4汤圆

发表于 2021-3-19 23:56:46 来自手机 | 显示全部楼层
mark  马上要用了

出0入0汤圆

发表于 2021-3-22 17:13:25 | 显示全部楼层
Mark46楼,谢谢你的资料。

出0入0汤圆

发表于 2021-4-11 11:08:43 | 显示全部楼层
感谢楼主,刚好要用到。学习学习

出0入0汤圆

发表于 2021-6-3 13:46:18 | 显示全部楼层
你好,采用电容充放电的方式不能测量吗?手册说是交流的,但是电容重放的方式是交流电吗?

出0入0汤圆

发表于 2021-6-4 14:19:46 | 显示全部楼层
感谢分享!

出0入0汤圆

发表于 2021-11-24 17:49:33 来自手机 | 显示全部楼层
借鉴了,感谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 10:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表