采用湿敏电阻HR202L来采集湿度,进行实时显示。
硬件电路设计-(参照湿敏电阻手册):
1、 RC 阻容充放电法 -MCU必须为双向IO
湿敏电阻参数:
定额电压:1.5V AC (Max,正弦波)
定额功率:0.2mW (Max,正弦波)
工作频率:500Hz~2kHz
使用温度:0~60℃
使用湿度:95%RH 以下(非结露)
湿滞回差:≤2%RH
响应时间:吸湿, ≤20S;脱湿≤40S
稳定性:≤1%RH/年
湿度检测精度:≤±5%RH
相对湿度
条件:at25℃ 1kHz 1V AC (正弦波)
湿度: 60%RH
中心值:31 KΩ
阻抗值范围:19.8~50.2 KΩ
湿度检测精度:±5%RH
1khz的波形:
在单片机对湿度传感器的阻抗进行测量时,由于传感器必须通过双向电流(即交流电流)来实现,以避免极化及电解的现象发生
/*********************************************************************************************************
*函数名称:void Charg_Hum(void)
*函数功能:输出正弦波--1khz 1ms周期 ----JI
*入口参数:void
*出口参数:void
*定时中调用
*********************************************************************************************************/
void Charg_Hum(void)
{
if(en_tnSRHCharge && (!BitChargefinish))//进入条件
{
WihtchIOCharge++;
//
if(BitIOCharge) //湿敏电阻 充电 128
{
if(WihtchIOCharge < 4)
{
CHARGE_HSR_HIGH();
}
else
{
CHARGE_HSR_LOW();
WihtchIOCharge = 0;
}
if(P43)
{
ChargeTimeHumi = ChargeTimeCnt;//保存充电计数值
ChargeTimeCnt = 0;
BitChargefinish = 1; //完成标志置1
}
else
{
ChargeTimeCnt++; //计时加1
}
}
else //参考电阻10k
{
if(WihtchIOCharge == 0x01) //标准 充电
{
CHARGE_HSRVRF_HIGH();
}
else if(WihtchIOCharge == 0x04) //高低脉冲比例 3:1
{
CHARGE_HSRVRF_LOW();
WihtchIOCharge = 0x00;
}
if(P43)//在这判断是否充饱,把计数值传给变量保存起来。
{
ChargeTimeIo = ChargeTimeCnt;
ChargeTimeCnt = 0;
BitChargefinish = 1;
}
else
{
ChargeTimeCnt++; //计时加1
}
}
}
}
注意点1:电容的选择既要考虑到测量的灵敏度,又要考虑不使计数时间太长,具体考虑单片机的时钟频率等因素。
常温25度下湿敏表现出来最大阻抗是5.0M 。湿度越低。充电时间就越长。湿度50%RH下对0.47uf的电容充电时间是2s。
HSR波形
HSR_VREF波形
HSR_AD波形--0.47uf
HSR_AD波形--0.22uf
注意2.:计数时,判断是否充饱的状态,一定不要死等while(!HSR_AD)。
注意3:充放电函数处理。我这里是100ms进入一次,采集10次做平均滤波处理。总时间就是1S变化一次湿度值。
先标准电阻10k,然后在放电。 再来就是湿敏电阻。在放电。保存数据用做处理。
放电等待delay_us(40);//延时等待电容放电.
最后计算电阻, 获得实际湿敏电阻阻抗值 10K电阻
公式: Rhum = T2 *R1 /T1
查表得到湿度值,显示。
如果湿度精度要求不是特别严格的情况,(从数据处理简易的法则来
说),可以推算湿度传感器温度系数为-0.4%RH/℃,公式为:
H(t)=H (25℃) - 0.4*(t – 25)
例如,以实测阻抗按 25℃的数据表读数,例如在 35℃时读到的阻抗为
30K,按 25℃表格,相对湿度为 60%RH,此时按公式计算的实际湿度应为
56%RH
在使用中查阅到的资料链接如下:
1:文档西博臣科技有限公司的应用手册。
2:阿莫论坛的帖子也可以看下,有具体实现。https://www.amobbs.com/thread-5561786-1-1.html?_dsign=d5a64904