SHT11温湿度传感器在单片机中的应用复习进程.docx
《SHT11温湿度传感器在单片机中的应用复习进程.docx》由会员分享,可在线阅读,更多相关《SHT11温湿度传感器在单片机中的应用复习进程.docx(12页珍藏版)》请在冰豆网上搜索。
SHT11温湿度传感器在单片机中的应用复习进程
SHT11温湿度传感器在单片机中的应用
郑州航空工业管理学院
《单片机原理与应用》
课程设计说明书
09级电气工程及其自动化专业72班级
题目I2C总线数字温湿度传感器SHT11及其在单片机系统的应用
姓名李兴田学号090607215
指导教师王义琴职称讲师
二О一二年五月28日
1、SHT11温湿度传感器的基本原理SHT11的湿度检测运用电容式结构,并采用具有不同保护的“微型结构”检测电极系统与聚合物覆盖层来组成传感器芯片的电容,除保持电容式湿敏器件的原有特性外,还可抵御来自外界的影响。
由于它将温度传感器与湿度传感器结合在一起而构成了一个单一的个体,因而测量精度较高且可精确得出露点,同时不会产生由于温度与湿度传感器之间随温度梯度变化引起的误差。
CMOSensTM技术不仅将温湿度传感器结合在一起,而且还将信号放大器、模/数转换器、校准数据存储器、标准I2C总线等电路全部集成在一个芯片内。
SHT11传感器的内部结构框图如图2所示。
SHT11的每一个传感器都是在极为精确的湿度室中校准的。
SHT11传感器的校准系数预先存在OTP内存中。
经校准的相对湿度和温度传感器与一个14位的A/D转换器相连,可将转换后的数字温湿度值送给二线I2C总线器件,从而将数字信号转换为符合I2C总线协议的串行数字信号。
2、由于将传感器与电路部分结合在一起,因此,该传感器具有比其它类型的湿度传感器优越得多的性能。
首先是传感器信号强度的增加增强了传感器的抗干扰性能,保证了传感器的长期稳定性,而A/D转换的同时完成,则降低了传感器对干扰噪声的敏感程度。
其次在传感器芯片内装载的校准数据保证了每一只湿度传感器都具有相同的功能,即具有100%的互换性。
最后,传感器可直接通过I2C总线与任何类型的微处理器、微控制器系统连接,从而减少了接口电路的硬件成本,简化了接口方式。
二、设计方案3.4系统设计流程图
设计SHT11温湿度传感器在单片机中的应用的流程图如下:
三、硬件设计
图5单片机与SHT11接口电路及温湿度显示电路
(1)湿度值输出SHT11可通过I2C总线直接输出数字量湿度值,其相对湿度数字输出特性曲线如图3所示。
由图3可看出,SHT11的输出特性呈一定的非线性,为了补偿湿度传感器的非线性,可按如下公式修正湿度值:
RHlinear=c1+c2SORH+c3SORH2
式中,SORH为传感器相对湿度测量值,系数取值如下:
12位:
SORH:
c1=-4,c2=0.0405,c3=-2.8×10-6
8位:
SORH:
c1=-4,c2=0.648,c3=-7.2×10-4
(2)温度值输出
由于SHT11温度传感器的线性非常好,故可用下列公式将温度数字输出转换成实际温度值:
T=d1+d2SOT
当电源电压为5V,且温度传感器的分辨率为14位时,d1=-40d2=0.01,当温度传感器的分辨率为12位时,d1=-40d2=0.04。
(3)露点计算
空气的露点值可根据相对湿度和温度值来得出,具体的计算公式如下:
LogEW=(0.66077+7.5T/(237.3+T)+[log10(RH)-2]
Dp=[(0.66077-logEW)×237.3]/(logEW-8.16077)3.2命令与接口时序SHT11传感器共有5条用户命令,具体命令格式见表1所列。
下面介绍一下具体的命令顺序及命令时序。
表1SHT11传感器命令列表
命令
编码
说明
测量温度
00011
温度测量
测量湿度
00101
湿度测量
读寄存器状态
00111
“读”状态寄存器
写寄存器状态
00110
“写”状态寄存器
软启动
11110
重启芯片,清除状态记录器的错误记录11毫秒后进入下一个命令
(1)传输开始初始化传输时,应首先发出“传输开始”命令,该命令可在SCK为高时使DATA由高电平变为低电平,并在下一个SCK为高时将DATA升高。
接下来的命令顺序包含三个地址位(目前只支持“000”)和5个命令位,当DATA脚的ack位处于低电位时,表示SHT11正确收到命令。
(2)连接复位顺序如果与SHT11传感器的通讯中断,下列信号顺序会使串口复位:
即当DATA线处于高电平时,触发SCK9次以上(含9次),此后应接着发一个“传输开始”命令。
表2SHT11状态寄存器类型及说明
位
类型
说明
缺省
7
保留
0
6
读
工检限(低电压检查)
X
5
保留
0
4
保留
0
3
只用于试验,不可以使用
0
2
读/写
加热
0
关
1
读/写
不从OTP重下载
0
重下载
0
读/写
'1'=8位相对湿度,12位温度分辨率。
'0'=12位相对湿度,14位湿度分辨率
0
12位相对湿度,14位湿度
(3)温湿度测量时序
当发出了温(湿)度测量命令后,控制器就要等到测量完成。
使用8/12/14位的分辨率测量分别需要大约11/55/210ms的时间。
为表明测量完成,SHT11会使数据线为低,此时控制器必须重新启动SCK,然后传送两字节的测量数据与1字节CRC校验和。
控制器必须通过使DATA为低来确认每一个字节,所有的量均从右算,MSB列于第一位。
通讯在确认CRC数据位后停止。
如果没有用CRC-8校验和,则控制器就会在测量数据LSB后保持ack为高来停止通讯,SHT11在测量和通讯完成后会自动返回睡眠模式。
需要注意的是:
为使SHT11的温升低于0.1℃此时的工作频率不能大于标定值的15%(如:
12位精确度时,每秒最多进行3次测量)。
3.3寄存器配置
SHT11传感器中的一些高级功能是通过状态寄存器来实现的,寄存器各位的类型及说明见表2所列。
4、软件设计
(要求有程序流程框图,源程序清单)图5是AT89C2051单片机与SHT11的接口电路。
由于AT89C2051不具备I2C总线接口,故使用单片机通用I/O口线来虚拟I2C总线,并利用P1.0来虚拟数据线DATA,利用P1.1口线来虚拟时钟线,并在DATA端接入一只4.7kΩ的上拉电阻,同时,在VDD及GND端接入一只0.1μF的去耦电容。
下面给出软件设计流程图:
开始
各变量初始化,赋初值
根据SHT11的写时序编写命令子程序
写“测量温度命令”子程序
写“测量湿度命令”子程序
将传感器传输到单片机中的信息显示出来
编写控制程序,写测温和测湿度的入口地址
写“温湿度值变换及温度补偿”子程序
编写“动态显示接口程序”子程序
结束
下面给出与上述硬件电路配套的C51应用程序:
#definedatap1-1
#definesckp1-0
#defineack1
#definenoack0
#definemeasure_temp0x03//测量温度命令
#definemeasure_humi0x05//测量湿度命令
//读温湿度命令
chars-measure(unsignedchar*p-value,unsignedchar*p-checksum,unsignedcharmode)
{
unsignedcharerror=0;
unsignedinti;
s_transstart();//传输开始
switch(mode)
{
casetemp:
error+=s_write_byte(measure_temp);break;
casehumi:
error+=s_write_byte(measure_humi);break
default:
break;
}
for(i=0;i<65535;i++)if(data==0)break;
if(data)reeor+=1;
*(p_value)=s_read_byte(ack);
*(p_value+1)=s_read_byte(ack);
*p_checksum=s_read_byte(noack);
returnerror;
}
//温湿度值变换及温度补偿
voidcalc_sth15(float*p_humidity,float*p_temperature)
{
constfloatc1=-4.0;
constfloatc2=0.0405;
constfloatc3=-0.0000028;
constfloatt1=-0.01;
constfloatt2=0.00008;
floatrh=*p_humidity;
floatt=*p_temperature;
floatrh_lin;
floatth_ture;
floatt_c;
t_c=t*0.01-40;
rh_lin=c3*rh*rh+c2*rh+c1;
trh_ture=(t_c-25)*(t1+t2*rh)+rh_lin;
*p_temperature=t-c;
*p_humidity=rh_ture;
}
//从相对温度和湿度计算露点
charcalc_dewpoint(floath,floatt)
{
floatlogex,dew_point;
logex=0.66077+7.5*t/(237.3+t)+[log10(h)-2];
dew_point=(logex-0.6607)*237.3/(0.66077+7.5-logex);
returndew_point;
}
//动态显示接口程序
DIR:
MOVR0,#79H
MOVR3,#01H
MOVA,R3
LD0:
MOVDPTR,#0101H
MOVX@DPTR,A
INCDPTR
MOVA,@R0
ADDA,#12H
MOVXA,@A+PC
MOVX@DPTR,A
ACLLDL1
INCR0
MOVA,R3
JBACC.5,LD1
RLA
MOVR3,A
AJMPLD0
LD1:
RET
DSEG:
DB3FH,06H,5BH,4FH,66H,6DH
DSEG1:
DB7DH,07H,7FH,6FH,77H,7CH
DSEG2:
DB39H,5EH,79H,71H,73H,3EH
DSEG3:
DB31H,61H,1CH,23H,40H,03H
DSEG4:
DB18H,00H,00H,00H
DL1:
MOVR7,#02H[DW]
DL:
MOVR6,#0FFH
DL6:
DJNZR6,DL6
DJNZR7,DL
RET
限于篇幅,上述程序中未给出传输开始、写字节数据、读字节数据函数。
5、结论
SHT11数字式温湿度传感器由于将温度传感器、湿度传感器、信号调理、模/数转换器、标定参数及I2C总线接口全部集成到传感器内部,因此,既提高了传感器的性能,又降低了成本、减少了体积,同时也非常便于和微控制器接口,由此可见,该传感器是嵌入式系统温湿度测试的理想选择。
六、参考资料
【1】龚运新,胡长胜.单片机实用技术教程【M】.北京师范大学出版社,2006.
【2】朱善君,孙新亚,吉吟东.单片机接口技术与应用【M】.北京:
清华大学出版社,2005
何立民.MCS-51系列——单片机应用系统设计【M】.北京:
北京航空航天大学出版社,1990
设计总结:
经过进一个星期的设计,这篇单片机结课设计终于告一段落,再这过程中我学到了很多东西,现在我就把它同大家分享。
首先,我掌握了单片机中很多我以前没有掌握的东西,比如说单片机与其它器件接口电路的联接、运用单片机进行控制生活中的一些设备、单片机的编程等等。
其次,让我学会了学习新东西的能力。
比如我的结课设计是“I2C总线式SHT11温湿度传感器及其在单片机中的应用”,其中SHT11温湿度传感器是我以前没有接触过的,老师也没有讲过,为了了解它,我开始了运用网络资源,通过网络搜查SHT11的相关信息,让我了解到网络的重要性,同时也获得了获取信息的方法。
最后,增加了我对于解决未知问题的信心,相信这也是我本次学习获得的最重要的东西。
指导教师评语:
课程设计成绩:
指导教师签名:
年月日