HS1101程序及应用原理Word格式.docx

上传人:b****3 文档编号:17672859 上传时间:2022-12-08 格式:DOCX 页数:10 大小:58.29KB
下载 相关 举报
HS1101程序及应用原理Word格式.docx_第1页
第1页 / 共10页
HS1101程序及应用原理Word格式.docx_第2页
第2页 / 共10页
HS1101程序及应用原理Word格式.docx_第3页
第3页 / 共10页
HS1101程序及应用原理Word格式.docx_第4页
第4页 / 共10页
HS1101程序及应用原理Word格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

HS1101程序及应用原理Word格式.docx

《HS1101程序及应用原理Word格式.docx》由会员分享,可在线阅读,更多相关《HS1101程序及应用原理Word格式.docx(10页珍藏版)》请在冰豆网上搜索。

HS1101程序及应用原理Word格式.docx

在自动测试系统中,电容值随着空气湿度的变化而变化,因此将电容值的变化转换成电压或频率的变化,才能进行有效地数据采集。

用555集成电路组成振荡电路,HSl100湿度传感器充当振荡电容,从而完成湿度到频率的转换。

2.3测量方法

HSll01湿敏传感器是采用侧面开放式封装,只有两个引脚,有线性电压输出和线性频率输出两种电路。

在使用时,将2脚接地,这里选用频率输出电路。

该传感器采用电容构成材料,不允许直流方式供电。

所以我们使用555定时器电路组成单稳态电路。

具体电路分析如下。

电源电压工作范围是UCC=+3.5~+12V。

利用一片CMOS定时器TLC555.配上HSll01和电阻R2、R4构成单稳态电路,将相对湿度值变化转换成频率信号输出。

输出频率范围是7351-6033Hz,所对应的相对湿度为0~100%。

当RH=55%时,f=6660Hz。

输出的频率信号可送至数字频率计或控制系统,经整理后送显示。

R3为输出端的限流电阻,起保护作用。

通电后.电源沿着Uc→R4→R2→C对HSl101充电。

经过t1时间后湿敏电容的压降Uc就被充电到TI~C555的高触发电平(Uh=0.67Ucc),使内部比较器翻转,OUT的输出变成低电平。

然后C开始放电,放电回路为C→R2→D→内部放电管地。

经过t2时间后,Uc降到低触发电平(Ul=0.33Ucc),内部比较器再次翻转,使OUT端的输出变成高电平。

这样周而复始的进行充、放电,形成了振荡。

充电、放电时间计算公式分别为:

tl=C(R2+R4)ln2;

t2=CR21n2;

输出波形的频率(f)和占空比(D)的计算公式如下:

f=1/T=1/(t1+t2)=1/C(2R2+R4)ln2;

D=tl/T=t1/t1+t2=R2+R4/(2R2+R4);

通常取R4《R2,使D≈50%,输出接近于方波。

例如,取人R2=567kQ,R4=49.9kΩ。

湿度传感器只是保证传感探头的精度,在实际使用中,综合精度除了与湿度传感器本身元件有关,还与外围电路的器件选择相关。

为了与HSll01温度系数相匹配,Rl数值应取为1%精度,且最大温漂不超过100ppm(ppm:

百万分之一,表示当温度变化1℃,所对应的电阻相对变化量)。

为了保证达到6660Hz/55%,R2与555电路选取参照如下表:

当RH=55%、TA=+25℃时,典型输出方波频率与相对湿度的数据对照见表3。

2.4与微处理器IPC2132接口

LPC2132是一种支持实时仿真和跟踪的16/32位基于ARM7TDMI-S内核的CPU,并带有64KB嵌入的高速FLASH存储器。

LPC2132的实时仿真和跟踪功能方便了代码调试,降低了开发成本。

并且I/O口能够接受5V容限。

整个湿度传感器由于采用频率输出电路,接口简单,可直接与LPC2132普通I/0对接,这里选用PO.6脚做为频率测量接口。

3软件设计

软件设计主要完成对HSl101在单位时间内的频率测量。

软件设计采用端口扫描方式,间隔8S开始测量,测量时间为1S。

统计单位时间内脉冲的个数,与表3对照,确定湿度值的范围,并将湿度值通过LCD显示。

为了保证测量精度,可以取3次以上测量数据,求平均值后,作为最终送显示数据。

微处理器工作晶体选用12.000MHz。

程序代码采用嵌入式C语言编写,经在ADSl.2编译环境中进行编译后,移植到微处理器内执行。

参考软件代码之一:

Do

{

IODIR0=10DIROIRO&OXOfffffbf:

//p0.6设置成输入

d0//读IO口寄存器

{if((IOPIN0&

(1<

<

0x06))==0x00000000)

break:

//检测0电平

}while

(1);

0x06))!

=Ox00000000)

//检测l电平

}while

(1);

fdat++:

//累积1S时间内脉冲个数

}while(pt8s%8==0);

//间隔8S测量一次

fdat--;

time

(1);

//延时必须保留

if((fdat>

6033)&

(fdat<

6187))rhb=90;

//将测量数值转换为对应百分比,1%一100%

6186)&

6331))rhb=80;

6330)&

6469))rhb=70;

6468)&

6601))rhb=60;

6600)&

6729))rhb=50;

6728)&

6854))rhb=40;

6853)&

6977))rhb=30;

6976)&

7101))rhb=20;

7100)&

7225))rhb=10;

if(fdat>

7224)rhb=00:

lhb=fdat%100:

//对测量数值取低两位

//处理需要等待一段时间,否则lhb=0

if((rhb==60)\(rhb==70)\(rhb==90))lhb=lhb/

13:

//对低两位数值取个位,

elseif(rhb==80)lhb=lhb/14;

elselhb=lhb/12;

rhb=rhb+lhb;

//将数据合成一起,送显示

fdat=Ox00000000;

//清0,为下次准备

}

参考软件代码之二:

#include"

reg51.h"

#defineucharunsignedchar

#defineuint 

unsignedint

uchar 

tem0,tem1;

 

temp0,temp1;

uint 

f=0;

//初值

/****************************************************************************

*名称:

timer0()

*功能:

定时器1,每50000us中断一次。

*入口参数:

****************************************************************************/

voidtimer0()interrupt1

EA=0;

TR0=0;

TR1=0;

TL0=0xFF;

//重装值 

定时50000us 

OX4BFFH

TH0=0x4B;

tem0=TL1;

//读数

tem1=TH1;

TL1=0x00;

//定时器1清零

TH1=0x00;

f=1;

//作标注位

TR0=1;

TR1=1;

EA=1;

timer1()

计数器,用于计数将555输出的频率,以计数相对湿度。

voidtimer1()interrupt3 

//T1中断,表示计数的频率溢出,超出了可测量的频率范围,显然在这里不可能。

所以重新启动。

TL0=0x00;

定时50000us

TH0=0x4C;

voidInit_timer()

TMOD=0x51;

//01010001定时器0在模式1下工作16位定时器,定时方式 

定时器1在模式1下工作16位计数器,T1负跳变加1

//定时器0初值定时50000us

ET0=1;

//使能定时器0中断

ET1=1;

//使能定时器1中断

//使能总中断

//开始计时

voidtran()

f=tem1;

f=(f<

8)|tem0;

f=f*20;

//这里f的值是最终读到的频率,不同频率对于不同相对湿度。

if((5623<

=f)&

&

(f<

=6852)) 

//相对湿度在有效范围内(0%--100%)

{

if((6734<

f)&

(f<

=6852))

{temp0=0;

temp1=(6852-f)*10/118;

}

if((6618<

=6734))

{temp0=1;

temp1=(6734-f)*10/116;

}

if((6503<

=6618))

{temp0=2;

temp1=(6618-f)*10/115;

if((6388<

=6503))

{temp0=3;

temp1=(6503-f)*10/115;

if((6271<

=6388))

{temp0=4;

temp1=(6388-f)*10/117;

if((6152<

=6271))

{temp0=5;

temp1=(6271-f)*10/119;

if((6029<

=6152))

{temp0=6;

temp1=(6152-f)*10/123;

if((5901<

=6029))

{temp0=7;

temp1=(6029-f)*10/128;

if((5766<

=5901))

{temp0=8;

temp1=(5901-f)*10/135;

if((5623<

(f<

=5766))

{temp0=9;

temp1=(5766-f)*10/143;

else

temp0=0;

temp1=0;

voidmain()

uchar 

i,k;

count;

Init_timer();

count=0;

while

(1)

for(i=0;

i<

200;

i++)

for(k=0;

k<

k++);

//延时

tran();

temp0&

=0x0F;

temp1&

temp0=temp0<

4;

count=temp0|temp1;

Ddisp(count);

说明:

将555定时器的输出引脚与单片机AT89C2051的定时输入引脚相连,计数出1秒钟内输入的脉冲个数,此脉冲个数即为555定时器的振荡频率。

对于CMOS工艺的555定时器,其测得的相对湿度与输出的脉冲频率具有如下关系式:

Fmes(Hz)=F55(Hz)(1.1038-1.936810-3*RH+3.011410-6*RH2-3.440310-8*RH3),其中的F55(Hz)表示相对湿度为55%时的频率值,在25°

C下F55(Hz)=6660Hz。

因此,根据测得的脉冲频率即可求出湿度值。

从上式可以看出,F与RH之间是一种比较复杂的曲线关系,为了简化计算,必须寻求更为简单的求解方法。

在25°

C下,如果以F55(Hz)=6660Hz为参考点,555定时器频率输出电路具有如下对应关系表。

测湿电路为了使计算简单,可以将频率与湿度之间的非线性关系按照上表分为10段进行处理,每一小段内按线性关系处理,从而大大简化了计算过程。

系统程序分为两大部分:

系统主程序和T0中断服务程序。

T0的中断服务程序主要是实现555定时器输出频率的计算,而由频率计算湿度则是在主程序中实现的。

对于555定时器输出频率的计算,采用单片机AT89C2051的定时器中断的方式实现:

单片机AT89C2051内部集成了两个16位的定时器T0和T1,设置单片机定时器T0定时20ms,并允许T0中断;

定时器T1则用来对555的输出脉冲进行计数。

每当T0发生20ms定时中断时,就读取T1中的计数脉冲个数,T1×

50即为此时555定时器的输出频率,并设置T0的中断标志变量flagT0为1。

初始化主要包括定时器T0和T1的初始化、中断逻辑初始化等。

然后判断“FlagT0=1?

”,当FlagT0=1时,表示又发生了一次新的T0定时中断,并且在T0的中断服务程序中已经求出了此时555定时器的输出频率;

然后主程序执行求湿度子程序,根据频率求出此时湿度。

如果FlagT0=0,则表示没有新的T0定时中断发生,主程序直接往下执行,扫描“测湿”键和“清除”键,当“测湿”键按下时,就将测得的湿度在数码管上显示出来;

当“清除”键按下时,就执行清除显示子程序,将数码管的显示全部变为0。

然后再判断“FlagT0=1?

”,如此往复循环。

4结语

由于HSll01采用独特的电容式单元设计,具有响应速度快、体积小、线性度好、较稳定等优点,我们将HSll01用在智能家居控制系统中,完成对空气湿度的测量,经长期应用,性能达到了稳定可靠,同时也实现了对低成本的要求。

本文来源:

《电子测试》

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1