欢迎访问深圳市源建传感科技有限公司

淘宝店铺    丨

微信公众号    丨

手机官网

版权所有:深圳市源建传感科技有限公司  /  粤ICP备61232666号  /  网站建设:中企动力深二分设备展示    |    联系我们    |    在线留言

友情链接

与源建传感互动

24小时服务热线:

>
>
湿度传感器单片机检测电路原理及说明

服务中心

问题详情

湿度传感器单片机检测电路原理及说明

浏览量

一、 湿度传感器检测需要注意的问题

高分子湿度传感器SJ系列为新一代复合型电阻型湿度敏感部件,其复阻抗与空气相对湿度成指数关系,直流阻抗(普通数字万用表测量)几乎为无穷大,与传统意义上的电阻有空气中水分子参与膜感湿中的离子导电,由于水分子为极性分子,在直流电存在的情况下,会电离,分解,从而影响导电与元件的寿命,所以要求采用交流电路对传感器进行供电。

对湿度传感器而言,频率与阻抗之间存在一定的关系,对于测量30%--80%RH范围,频率的变化对传感器影响并不明显,在单片机软件编程的实际应用时,需要通过将传感器置于湿度发生装置中(例如恒温恒湿箱)进行实测,通过软件对最终的误差进行修正,此项修正基本上可以弥补频率变化所产生的误差以及其他误差。

湿度传感器阻抗变化与温度的关系见规格书中的数据表,先检测温度,然后按查表法对进行湿度检测。如果湿度精度要求不是特别严格的情况,(从数据处理简易的法则来说),可以推算湿度传感器温度系数为-0.5%RH/℃,公式为:

H(t)=H (25℃) - 0.4*(t–25)

例如,以实测阻抗按25℃的数据表读数,例如在35℃时读到的阻抗为30K,按25℃表格,相对湿度为60%RH,此时按公式计算的实际湿度应为56%RH。

最后的问题是在生产过程中,由于湿度传感器的原因或其他原因,总会遇到实际值与测量值之间存在误差的情况,在单片机功能允许的情况下,建议通过软件做最后的修正,主要采用跳线(JUMP)的方法对示值进行修正,安排一个IO,做加/减运算符号定义,其余2-4个IO,用于定义加/减的值,例如1,2,3,可以修正正负6%RH的示值偏差。

 

二、检测电路

单片机采集湿度传感器的方式可以采用RC阻容充放电,直接A/D法,通过模拟电路转换后再通过A/D法进行采集。以下着重讲一下第一,二种方法的原理参数设计

A、 RC阻容充放电,通过计算充电或放电时间进行测量。

使用电容充放电电路如下图示,将测量湿度传感器等效为电阻RX进行充放电,通过测量充放电时间进行反推阻抗可以测量电阻阻抗,通过读表可以检测相对湿度值。

示意图如下:

 

首先,置RB0为输出状态,RB1和RB2为输入状态,RB0输出高电平Vh(≥0.85VDD),通过湿敏电阻对C进行充电,根据电路理论,电容上的电压按一阶指数规律变化,

Uc(t) = Vh[1-exp(t/RxC)]         (1)

在渡越时间Tmr后,Uc(t)由0V上升到RB2的输入高电平门槛电压VT(0.45VDD),RB2的输入状态也由低电平变为高电平,此时再将,RB0,RB2置为低电平,电容C上的电压通过RP,及RX和RB2快速放电。如此重复,进行充放电。

由式(1)知

Tmr = -Ln( 1-VT/Vh ) Rx C     (2)

由(2)知,只要测量Tmr,VT、Vh、C 为已知,可以计算出Rx,由于元件参数及温度漂移,VT、Vh、C的值很难精确计算,为解决此问题,我们可置RB1为高电平,Vh(≥0.85VDD),通过固定电阻R0对C进行充电,同理可知,电容上的电压Uc(t)由0V上升到RB2的输入高电平门槛电压VT的时间为Tcr:

Tcr = -Ln( 1-VT/Vh ) R0 C       (3)

将 (2)/ (3)可得:

Rx= (Tmr/ Tcr) R0              (4)

由(4)可知,只要测量Tmr与Tcr,R0为精密固定电阻,通过运算就可以计算Rx ,与其他因素无关。在RX测量后就可以查表计算相对湿度值

参数设计:

电阻R0与电容C的选择主要取决于需要的分辨率,与单片机周期等有关电阻建议选择精密金属膜电阻,建议为60K---300K(1%)之间(取值与测量范围有关,取与Rxmax的1/2左右)电容的选择既要考虑到测量的灵敏度,又要考虑不使计数时间太长,具体考虑单片机的时钟频率等因素。

C≤-T/[RxmaxLn(1-VT/Vh)]

 T为计数器溢出时间,与分辨率有关

 Rxmax 为最大阻抗值,(取200K--600K左右取值与测量范围有关)

建议电容量在0.1UF到1U间选择,材料为陶瓷或有机电容

 

B、 A/D直接采样法

湿度传感器由于其必须的激励通过交流电来实现,及不同温度特性下阻抗不同的特性,决定了其在AD采样电路中必须采用动态采样的方法,并同时采样温度信号。具体电路示意图如下:

参数设计:

R0采样电阻的阻值通常建议在30-50KΩ,侧重高湿测量,采样电阻阻值可降低到20KΩ,低湿阻值可提高到100KΩ。

在信号的正周期内的中间段进行采样,直接通过分压法采集,注意采样时间,通过电压采样后得到V0,计算如下:

RX=R0*(V-V0)/V0

同时检测当前温度T,通过查阅湿度传感器Z/RH/T数据表,在不同温度下RX的值推算出当前的相对湿度RH%。

不同单片机可能得到的数据会有所不同,建议通过软件进行矫正。

 

三、有关其他问题

1、 湿度传感器一致性问题请与供应厂联系,在送样与生产时务必确定具体型号与阻值大小,范围,以及详细的数据表(Z/RH/T)。

2、 温度检测的准确性相当重要。温度传感器与湿度传感器布线位置尽量靠近

3、 检测时需在焊接后1小时测量为最好,焊接方式与防止污染与高温保护有关,不可直接将传感器本体置于温度大于120℃的环境或污染气氛中

湿敏电阻应用资料

一. 湿敏电阻使用电路:

 

二、 工作原理

2.1 温度测量:

AD0与AD1为AD采样口,RT经R1分压后由AD0口进行采样,进而计算出对应温度。

2.2 湿度测量:

通过IO1与IO2产生1KHZ左右的模拟交流脉冲。下面为对应端口的具体波形。图中t1~t2时间段(设此时RH//R2<39K),IO1为高电平,IO2为低电平,从t1经过Tsmp后对AD1端口的电压进行采样,在整个周期时间内(t1~t3)只对湿敏电阻采样一次。

2.3  下图为AD1端口的具体波形:

 

2.4 下图为IO1端口、IO2端口的具体波形:

三、 采样时序

 

时间参数

含义

数值(us)

Tsck

脉冲周期

1000

TsckH

高电平时间/IO11

500

Tsmp

湿度传感器采样点

250

 

湿敏电阻相对不同环境湿度(20%RH-95%RH)的阻抗跨度很大(1KΩ-1MΩ),而不同型号的单片机IO口内阻存在差异,进而导致测量偏差;为了测量值更加接近于真实交流阻抗,我们将IO1与IO2设为强推挽输出模式,以减小IO端口的输出内阻。

注意:湿敏电阻不能工作在直流状态下,否则会对湿敏电阻本身造成一定程度的损坏。因此在不对湿敏电阻采样时,应避免将IO端口电平置为一高一低,以确保湿敏电阻有更长的使用寿命。

四、C语言程序示例

#include"def.h"

void DelayXus(uchar k);//延时子程序

int GetTemp(uint i);//温度转化子程序

uint Tansfom(uint HumAD,int Tem);//湿度转化子程序

void HumTemTrans(uint *Hum,int *tem)

{

uchar i = 0,k = 0;

uint GETADCT,GETADCH = 0;

uint SumHum,SumTem,AvgHum[5],AvgTem[5],ResultHu;

int ResultTem;//温度

CLK_Init();//对时钟进行初始化

IO_Init();//IO口初始化使IO1IO2置为强推拉模式

//初始化AD0AD1

while(1)

{

CLRIO2();

SETIO1();

DelayXus(250);

GETADCH += GetADCResult(CHRH);//湿度ADC

DelayXus(210);//减去大概的AD采样时间

CLRIO1();

SETIO2();

DelayXus(250);

GETADCT += GetADCResult(CHRT);//温度ADC采样

DelayXus(210);

if((++i)>=30)//一次采样30个周期

{

AvgTem[k] = GETADCT/30;

AvgHum[k] = GETADCH/30;

if((++k)>=5)

{

CLRIO2();//IO1IO2同时置为低电平减小直流时间段

CLRIO1();

//由于开始一次采样误差较大,去掉AvgTem[0]

SumTem = AvgTem[1]+AvgTem[2]+AvgTem[3]+AvgTem[4];

SumTem = SumTem/4;

SumHum = AvgHum[1]+AvgHum[2]+AvgHum[3]+AvgHum[4];

SumHum = SumHum/4;

ResultTem = GetTemp(SumTem);//得到温度

//通过函数查表得到对应湿度值

//可以将阻值全部转化成对应AD通过快速查表省去很大的内存空间

   ResultHu = Tansfom(SumHum,ResultTem);

*Hum = (uint)ResultHu;

*tem = (int)ResultTem;

break;//退出

}

GETADCH = 0;

GETADCT = 0;

i=0;

}             

}

}

说明:湿度转化必须根据温度查表算出对应湿度。如温度在25℃,湿度在60%时对应阻抗为31K,则对应AD1口的AD值为578≈1024*39K/(39K+31K//1M) (假定单片机为10位ADC)。