HS1101程序及应用原理.doc_第1页
HS1101程序及应用原理.doc_第2页
HS1101程序及应用原理.doc_第3页
HS1101程序及应用原理.doc_第4页
HS1101程序及应用原理.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HS1101 程序及应用原理 HSll01是法国Humirel公司推出的一款电容式相对湿度传感器。该传感器可广泛应用于办公室、家庭、汽车驾驶室、和工业过程控制系统等,对空气湿度进行检测。与其他产品相比,有着显著的优点:无需校准的完全互换性:长期饱和状态,瞬间脱湿:适应自动装配过程,包括波峰焊接、回流焊接等;具有高可靠性和长期稳定性:特有的固态聚合物结构:适用于线性电压输出和线性频率输出两种电路;响应时间快。11基本参数 基本参数如表l所示。默认测量温度rct=25C,测量时HSll01工作频率为10Khzo12特性曲线 如图1。测量温度T=25。C,测量时HSll01工作频率为10Khzo 从特性曲线曲线图上我们可以看出,HSll01具有极好的线性输出。可以近似看成相对湿度值与电容值成比例。因此在测量过程中,采集电容值即可。2测量电路21湿度定义 湿度指的是相对湿度。用RH表示。即气体中(通常为空气中)所含水蒸气量(水蒸气压)与其空气在相同情况下饱和水蒸气量(饱和水蒸气压)的百分比。22测量原理 HSll00湿度传感器是一种基于电容原理的湿度传感器,相对湿度的变化和电容值呈线性规律。在自动测试系统中,电容值随着空气湿度的变化而变化,因此将电容值的变化转换成电压或频率的变化,才能进行有效地数据采集。用555集成电路组成振荡电路,HSl 100湿度传感器充当振荡电容,从而完成湿度到频率的转换。23测量方法 HSll01湿敏传感器是采用侧面开放式封装,只有两个引脚,有线性电压输出和线性频率输出两种电路。在使用时,将2脚接地,这里选用频率输出电路。该传感器采用电容构成材料,不允许直流方式供电。所以我们使用555定时器电路组成单稳态电路。具体电路分析如下。 电源电压工作范围是UCC=+35+12V。利用一片CMOS定时器TLC555配上HSll01和电阻R2、R4构成单稳态电路,将相对湿度值变化转换成频率信号输出。输出频率范围是7351-6033Hz,所对应的相对湿度为0100。当RH=55时,f=6660Hz。输出的频率信号可送至数字频率计或控制系统,经整理后送显示。R3为输出端的限流电阻,起保护作用。通电后电源沿着UcR4R2C对HSl 101充电。经过t1时间后湿敏电容的压降Uc就被充电到TIC555的高触发电平(Uh=067Ucc),使内部比较器翻转,OUT的输出变成低电平。然后C开始放电,放电回路为CR2D内部放电管地。经过t2时间后,Uc降到低触发电平(Ul=033Ucc),内部比较器再次翻转,使OUT端的输出变成高电平。这样周而复始的进行充、放电,形成了振荡。充电、放电时间计算公式分别为:tl=C(R2+R4)ln2;t2=CR21n2;输出波形的频率(f)和占空比(D)的计算公式如下:f=1T=1(t1+t2)=1C(2R2+R4)ln2;D=tlT=t1t1+t2=R2+R4(2R2+R4);通常取R4R2,使D50,输出接近于方波。例如,取人R2=567kQ,R4=499k。湿度传感器只是保证传感探头的精度,在实际使用中,综合精度除了与湿度传感器本身元件有关,还与外围电路的器件选择相关。为了与HSll01温度系数相匹配,Rl数值应取为1精度,且最大温漂不超过100ppm(ppm:百万分之一,表示当温度变化1,所对应的电阻相对变化量)。为了保证达到6660Hz55,R2与555电路选取参照如下表: 当RH=55、TA=+25时,典型输出方波频率与相对湿度的数据对照见表3。24与微处理器IPC2132接口 LPC2132是一种支持实时仿真和跟踪的1632位基于ARM7TDMI-S内核的CPU,并带有64KB嵌入的高速FLASH存储器。LPC2132的实时仿真和跟踪功能方便了代码调试,降低了开发成本。并且IO口能够接受5V容限。整个湿度传感器由于采用频率输出电路,接口简单,可直接与LPC2132普通I0对接,这里选用PO6脚做为频率测量接口。3软件设计 软件设计主要完成对HSl 101在单位时间内的频率测量。软件设计采用端口扫描方式,间隔8S开始测量,测量时间为1S。统计单位时间内脉冲的个数,与表3对照,确定湿度值的范围,并将湿度值通过LCD显示。为了保证测量精度,可以取3次以上测量数据,求平均值后,作为最终送显示数据。微处理器工作晶体选用12000MHz。程序代码采用嵌入式C语言编写,经在ADSl2编译环境中进行编译后,移植到微处理器内执行。参考软件代码之一:DoIODIR0=10DIROIROOXOfffffbf:p06设置成输入d0 读IO口寄存器 if(IOPIN0&(10x06)=0x00000000)break: 检测0电平 while(1);Do if(IOPIN0&(16033)&(fdat6186)&(fdat6330)&(fdat6468)&(fdat6600)&(fdat6728)&(fdat6853)&(fdat6976)&(fdat7100)&(fdat7224)rhb=00:lhb=fdat100: 对测量数值取低两位time(1); 处理需要等待一段时间,否则lhb=0if(rhb=60)(rhb=70)(rhb=90)lhb=lhb13: 对低两位数值取个位,else if(rhb=80)lhb=lhb1 4;else lhb=lhb12;time(1);rhb=rhb+lhb; 将数据合成一起,送显示fdat=Ox00000000;清0,为下次准备参考软件代码之二:#include reg51.h#define uchar unsigned char#define uint unsigned intuchar tem0 , tem1; uchar temp0 , temp1; uint f=0; /初值 /* 名称: timer0() * 功能: 定时器1,每50000us中断一次。* 入口参数:*/void timer0() interrupt 1 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输出的频率,以计数相对湿度。* 入口参数:*/void timer1() interrupt 3 /T1中断,表示计数的频率溢出,超出了可测量的频率范围,显然在这里不可能。所以重新启动。 EA =0; TR0=0; TR1=0; TL0=0x00; /重装值 定时50000us TH0=0x4C; TL1=0x00; /定时器1清零 TH1=0x00; TR0=1; TR1=1; EA=1;void Init_timer() TMOD=0x51; /0101 0001 定时器0在模式1下工作16位定时器,定时方式 定时器1在模式1下工作16位计数器,T1负跳变加1 TL0=0x00; /定时器0初值 定时50000us TH0=0x4C; TL1=0x00; /定时器1清零 TH1=0x00; ET0=1; /使能定时器0中断 ET1=1; /使能定时器1中断 EA=1; /使能总中断 TR0=1; /开始计时 TR1=1;void tran() f = tem1; f = ( f8 ) | tem0; f = f * 20; /这里f的值是最终读到的频率,不同频率对于不同相对湿度。if( 5623 = f) & ( f= 6852) ) /相对湿度在有效范围内(0100%) if( 6734 f) & ( f = 6852) ) temp0 = 0; temp1 =(6852 - f)*10/118; if( (6618 f) & ( f = 6734) ) temp0 = 1; temp1 =(6734 - f)*10/116; if( (6503 f) & ( f = 6618 ) ) temp0 = 2; temp1 =(6618 - f)*10/115; if( (6388 f) & ( f = 6503 ) ) temp0 = 3; temp1 =(6503 - f)*10/115; if( (6271 f) & ( f = 6388 ) ) temp0 = 4; temp1 =(6388 - f)*10/117; if( (6152 f) & ( f = 6271 ) ) temp0 = 5; temp1 =(6271 - f)*10/119; if( (6029 f) & ( f = 6152 ) ) temp0 = 6; temp1 =(6152 - f)*10/123; if( (5901 f) & ( f = 6029 ) ) temp0 = 7;temp1 =(6029 - f)*10/128; if( (5766 f) & ( f = 5901 ) temp0 = 8; temp1 =(5901 - f)*10/135; if( (5623 f) & (f = 5766) temp0 = 9; temp1 =(5766 - f)*10/143; else temp0 = 0; temp1 = 0; void main() uchar i,k; uchar count; Init_timer(); count = 0; while(1) for (i=0;i200;i+) for (k=0;k200;k+); /延时 tran(); temp0 &= 0x0F; temp1 &= 0x0F; 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时的频率值,在25C 下F55(Hz)6660 Hz。因此,根据测得的脉冲频率即可求出湿度值。从上式可以看出,F与RH之间是一种比较复杂的曲线关系,为了简化计算,必须寻求更为简单的求解方法。在25C 下,如果以F55(Hz) 6660 Hz 为参考点,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定时中断发生,主程序直接往下执行,扫描“测湿”键和“清除”键,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论