数字式温湿度传感器SHT11在51单片机系统的应用
测量温度 | 00011 | 温度测量 |
测量湿度 | 00101 | 湿度测量 |
读寄存器状态 | 00111 | “读”状态寄存器 |
写寄存器状态 | 00110 | “写”状态寄存器 |
软启动 | 11110 | 重启芯片,清除状态记录器的错误记录11毫秒后进入下一个命令 |
(1)传输开始
初始化传输时,应首先发出“传输开始”命令,该命令可在SCK为高时使DATA由高电平变为低电平,并在下一个SCK为高时将DATA升高。
接下来的命令顺序包含三个地址位(目前只支持“000”)和5个命令位,当DATA脚的ack位处于低电位时,表示SHT11正确收到命令。
(2)连接复位顺序
如果与SHT11传感器的通讯中断,下列信号顺序会使串口复位:即当DATA线处于高电平时,触发SCK 9次以上(含9次),此后应接着发一个“传输开始”命令。
表2 SHT11状态寄存器类型及说明
位 | 类型 | 说 明 | 缺 省 | |
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次测量)。测量温度和湿度命令所对应的时序如图4所示。
3.3 寄存器配置
SHT11传感器中的一些高级功能是通过状态寄存器来实现的,寄存器各位的类型及说明见表2所列。下面对寄存器相关位的功能说明:
(1)加热
使芯片中的加热开关接通后,传感器温度大约增加5℃,从而使功耗增加至8mA@5V。加热用途如下:
●通过对启动加热器前后的温、湿度进行比较,可以正确地区别传感器的功能;
●在相对湿度较高的环境下,传感器可通过加热来避免冷凝。
(2)低电压检测
SHT11工作时可以自行检测VDD电压是否低于2.45V,准确度为±0.1V。
(3)下载校准系数
为了节省能量并提高速度,OTP在每次测量前都要重新下载校准系数,从而使每一次测量节省8.2ms的时间。
(4)测量分辨率设定
将测量分辨率从14位(温度)和12位(湿度)分别减到12位和8位可应用于高速或低功耗场合。
4 应用说明
4.1 运行条件
测量量程以外的温度会使湿度信号暂时地偏移+3%。然后传感器会慢慢返回到校准条件。若将芯片在湿度小于5%环境下加热24小时到90℃,芯片就会迅速恢复高相对湿度、高温度环境的影响,但是,延长强度条件会加速芯片的老化。
4.2 安装注意事项
由于大气的相对湿度与温度的关系比较密切,因此,测量大气温度时的要点是将传感器与大气保持同一温度,如果传感器线路板上有发热元件,SHT11应与热源保持良好的通风,为减少SHT11和PCB之间的热传导,应使铜导线最细并在其中加上窄缝,同时应避免使传感器在强光或UV下曝晒。
传感器在布线时,SCK和DATA信号平行且相互接近,或信号线长于10cm时,均会产生干扰信息,此时应在两组信号之间放置VDD或GND。
5 具体应用
图5是AT89C2051单片机与SHT11的接口电路。由于AT89C2051不具备I2C总线接口,故使用单片机通用I/O口线来虚拟I2C总线,并利用P1.0来虚拟数据线DATA,利用P1.1口线来虚拟时钟线,并在DATA端接入一只4.7kΩ的上拉电阻,同时,在VDD及GND端接入一只0.1μF的去耦电容。下面给出与上述硬件电路配套的C51应用程序。
#define DATA P1_1
#define SCK P1_0
#define ACK 1
#define noACK 0
#define MEASURE_TEMP 0x03 //测量温度命令
#define MEASURE_HUMI 0x05 //测量湿度命令
//读温湿度数据
char s-measure(unsigned cha
- 一种基于DSP的张力、深度、速度测量系统(04-15)
- I2C总线及EEPROM的Linux驱动程序的设计(01-05)
- 基于C语言的I2C总线软件模块设计(01-09)
- 基于MSP430单片机的智能IC卡水表控制器(07-08)
- 实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序(07-25)
- 基于FPGA的嵌入式图像采集系统设计(06-05)