几种数字传感器介绍(一)————温湿度传感器(HDC1080)
一、温湿度采集传感器(HDC1080)
1.简要概述
HDC1080是一种集成温度传感器的数字湿度传感器,具有出色的测量精度和超低的功耗。其具有14位测量分辨率,相对湿度精度为±2%,温度精度为±0.2°C,工作时平均电流在0.7-1.3uA级。
传感器供电电压为2.7V至5.5V,具有较高的电压兼容性,通过单片机读取数据一般不再需要额外设置电平转换控制芯片,其可以应用在温度监测控制系统、医疗设备、大型家用电器和手测计量表等领域。
TI官网数据手册:HDC1080 具有温度传感器的低功耗、高精度数字湿度传感器 数据表 (Rev. A)
图为传感器功能框图和典型应用,采用3.3V电源供电,数据线(SDA)和时钟线(SCL)可接10kΩ上拉电阻。
HDC1080传感器管脚图:
HDC1080的管脚较为简单,为3*3mm小型器件封装,总共有6个管脚:
SDA,SCL为IIC通信管脚,与单片机IIC接口相连,一般要求接上拉电阻,兼容5V和3.3V;
VDD,GND为电源和地管脚,VCC可接5V或3.3V电源;
NC为闲置管脚,一般悬浮或接地。
2.编程应用
IIC时序图:
HDC1080作为从设备通过IIC总线与主机通信,由于HDC1080的地址固定为1000000(7位地址),IIC总线上不允许搭载多个HDC1080设备。芯片上电后至多15ms传感器便可进入工作状态,SCL时钟频率最小为10KHz,最大为400KHz。
读写传感器寄存器要将所需的寄存器地址值写入指针寄存器(指针值是从地址字节之后传输的第一个字节),即主机在发送从机寻址地址后,再发送需要具体操作的寄存器地址。对HDC1080的每次写入操作都需要指针寄存器的值,寄存器字节首先发送MSB,然后是LSB。HDC固定地址为七位二进制编码(1000000x),最后一位为读写标志位,10000000为写地址,10000001为读地址。
如图为写命令时序图:
1.主机发出起始信号,发送7位从设备地址和写寄存器命令,从机接收后发出应答信号
2.主机发送8位寄存器地址,从机接收并发出应答信号
3.主机发送高八位数据,从机接收并发出应答信号
4.主机发送低八位数据,从机接收并发出应答信号,主机发出停止信号。
根据上述写寄存器时序,可以编写HDC1080写函数:
void HDC1080_WriteReg(u8 Addr,u16 Data)
{unsigned char data[2];data[0] = (uint8_t)((Data& 0xFF00) >> 8); //高八位数据data[1] = (uint8_t)(Data & 0x00FF); //低八位数据IIC_Start(); IIC_Send_Byte(0x80); //地址为10000000,写寄存器IIC_Wait_Ack(); //等待从机应答信号IIC_Send_Byte(Addr); //写寄存器地址IIC_Wait_Ack();IIC_Send_Byte(data[0]); //发送高八位数据IIC_Wait_Ack();IIC_Send_Byte(data[1]); //发送低八位数据IIC_Wait_Ack();IIC_Stop(); //停止信号
}
如图为读命令时序图:
1.主机发出起始信号,发送7位从设备地址和写寄存器命令,从机接收后发出应答信号
2.主机发送需要读取的寄存器地址,从机接收后返回应答信号
3.主机发出起始信号,发送7位从设备地址和读寄存器命令,从机接收发出应答信号
4.从机发送,主机接收高八位数据并发出应答信号
5.从机发送,主机接收低八位数据并发出应答信号,主机发出停止传输信号
根据上述读寄存器时序,可以编写HDC1080读函数:
u16 HDC1080_ReadReg(u8 Addr)
{ unsigned char bytes[2];u16 data; //需要接收的16位数(2字节) IIC_Start(); IIC_Send_Byte(0x80); //地址为10000000,写地址IIC_Wait_Ack(); IIC_Send_Byte(Addr); //需要读取的寄存器地址IIC_Wait_Ack();IIC_Start(); IIC_Send_Byte(0x81); //地址为10000001,读地址IIC_Wait_Ack(); bytes[1]=IIC_Read_Byte(1); //读取高八位数据bytes[0]=IIC_Read_Byte(1); //读取低八位数据IIC_NAck(); IIC_Stop(); data=(bytes[1]<<8)+bytes[0];return data; //返回16位数据
}
HDC1080测量配置:
使用以下步骤测量温度和湿度,然后检索结果
- 在寄存器地址0x02中配置采集参数:
(a)通过将位[12]设置为1,将采集模式设置为测量温度和湿度。
(b) 设置所需的温度测量分辨率:–对于14位分辨率,将位[10]设置为0。–对于11位分辨率,将位[10]设置为1。
(c) 设置所需的湿度测量分辨率:–对于14位分辨率,将位[9:8]设置为00。–对于11位分辨率,将位[9:8]设置为01。–将位[9:8]设置为10,以获得8位分辨率。 - 通过执行地址指针设置为0x00的指针写入转换来触发测量。
- 根据转换时间等待测量完成。
- 读取输出数据:在单个转换中,从寄存器地址0x00读取温度数据,然后从寄存器地址0x01读取湿度数据。
使用以下步骤只测量温度或只测量湿度,然后检索结果
- 在寄存器地址0x02中配置采集参数:
(a)通过将位[12]设置为0,将采集模式设置为只测量温度或只测量湿度。
(b) 设置所需的温度测量分辨率:–对于14位分辨率,将位[10]设置为0。–对于11位分辨率,将位[10]设置为1。
(c) 设置所需的湿度测量分辨率:–对于14位分辨率,将位[9:8]设置为00。–对于11位分辨率,将位[9:8]设置为01。–将位[9:8]设置为10,以获得8位分辨率。 - 通过执行地址指针设置来触发测量。
(a)地址指针设置为0x00转换来触发温度测量。
(b)地址指针设置为0x01转换来触发湿度测量。 - 根据转换时间等待测量完成。
- 读取输出数据:在单个转换中,从寄存器地址0x00读取温度数据,从寄存器地址0x01读取湿度数据。
HDC寄存器地址:
根据上述HDC测量配置,我们只需要定义;
# define HDC1080_TEMPERATURE 0x00
# define HDC1080_HUMIDITY 0x01
# define HDC1080_CONFIGURATION 0x02
使用到的配置寄存器描述(上述HDC1080测量配置中已有具体描述):
温度寄存器为二进制格式的16位结果寄存器(2个LSB D1和D0始终为0)。采集结果始终为高14位值。结果的准确性与选择的转换时间有关,温度计算公式如下:
湿度寄存器同样为二进制格式的16位结果寄存器(2个LSB D1和D0始终为0)。采集结果始终为高14位值。结果的准确性与选择的转换时间有关,相对湿度计算公式如下:
根据HDC1080测量配置,可写HDC1080读取温湿度函数:
void HDC1080_ReadTempHumidity(void)
{uint16_t temp_data;uint16_t humidity_data;HDC1080_WriteReg(HDC1080_CONFIGURATION,0x3000); //写配置寄存器为0x3000,测量温度和湿度,精度均为14位HDC1080_ReadReg(HDC1080_TEMPERATURE); //配置指针地址为00,触发温度湿度测量delay_ms(20); //延时20ms,等待转换完成temp_data=HDC1080_ReadReg(HDC1080_TEMPERATURE); //获取温度数据humidity_data=HDC1080_ReadReg(HDC1080_HUMIDITY); //获取湿度数据temperature=(float)165*temp_data/65536-40; //温度转换humidity=(float)100*humidity_data/65536; //湿度转换,这里温湿度定义为全局变量
}
(使用STM F1系列单片机)
HDC1080.h文件可定义为:
#ifndef __HDC1080_H
#define __HDC1080_H
#include "iic.h"
#include "delay.h"//寄存器地址
# define HDC1080_TEMPERATURE 0x00
# define HDC1080_HUMIDITY 0x01
# define HDC1080_CONFIGURATION 0x02extern float temperature,humidity; //定义温湿度全局变量void HDC1080_WriteReg(u8 Addr,u16 Data); //HDC1080写函数
u16 HDC1080_ReadReg(u8 Addr); //HDC1080读函数
void HDC1080_ReadTempHumidity(void); //HDC1080获取温湿度#endif
HDC1080.c文件可定义为:
#include "HDC1080.h"float temperature,humidity;void HDC1080_WriteReg(u8 Addr,u16 Data)
{unsigned char data[2];data[0] = (uint8_t)((Data& 0xFF00) >> 8); //高八位数据data[1] = (uint8_t)(Data & 0x00FF); //低八位数据IIC_Start(); IIC_Send_Byte(0x80); //地址为10000000,写寄存器IIC_Wait_Ack(); //等待从机应答信号IIC_Send_Byte(Addr); //写寄存器地址IIC_Wait_Ack();IIC_Send_Byte(data[0]); //发送高八位数据IIC_Wait_Ack();IIC_Send_Byte(data[1]); //发送低八位数据IIC_Wait_Ack();IIC_Stop(); //停止信号
}u16 HDC1080_ReadReg(u8 Addr)
{ unsigned char bytes[2];u16 data; //需要接收的16位数(2字节) IIC_Start(); IIC_Send_Byte(0x80); //地址为10000000,写地址IIC_Wait_Ack(); IIC_Send_Byte(Addr); //需要读取的寄存器地址IIC_Wait_Ack();IIC_Start(); IIC_Send_Byte(0x81); //地址为10000001,读地址IIC_Wait_Ack(); bytes[1]=IIC_Read_Byte(1); //读取高八位数据bytes[0]=IIC_Read_Byte(1); //读取低八位数据IIC_NAck(); IIC_Stop(); data=(bytes[1]<<8)+bytes[0];return data; //返回16位数据
}void HDC1080_ReadTempHumidity(void)
{uint16_t temp_data;uint16_t humidity_data;HDC1080_WriteReg(HDC1080_CONFIGURATION,0x3000); //写配置寄存器为0x3000,测量温度和湿度,精度均为14位HDC1080_ReadReg(HDC1080_TEMPERATURE); //配置指针地址为00,触发温度湿度测量delay_ms(20); //延时20ms,等待转换完成temp_data=HDC1080_ReadReg(HDC1080_TEMPERATURE); //获取温度数据humidity_data=HDC1080_ReadReg(HDC1080_HUMIDITY); //获取湿度数据temperature=(float)165*temp_data/65536-40; //温度转换humidity=(float)100*humidity_data/65536; //湿度转换,这里温湿度定义为全局变量
}
其他更详尽的资料请自行参考数据手册。
参考资料:
1.HDC1080数据手册(文中插图均来自数据手册),代码为本人编写。
2.参看AnthonyYMH的博客可能对理解有所帮助:HDC1080温湿度驱动 IIC I2C STM32
几种数字传感器介绍(一)————温湿度传感器(HDC1080)相关推荐
- dht22温湿度传感器特点及使用介绍
dht22温湿度传感器特点及使用介绍 前言 一.dht22温湿度传感器外观 二.连接图 三.相关参数讲解 1.引脚 2.温湿度测量范围 3.通讯方式(单总线数字信号) 4.优点 5.产品特性(根据官方 ...
- dht11温湿度传感器特点及使用介绍
dht11温湿度传感器特点及使用介绍 前言 一.dht11温湿度传感器外观 二.原理图 三.相关参数讲解 1.引脚 2.温湿度测量范围 3.通讯方式(单总线数字信号) 4.优点 5.产品特性(根据官方 ...
- 几种通信方式介绍(二)————总线通信介绍(SPI、I2C、单总线)
一.SPI总线 SPI (Serial Peripheral Interface,串行外围设备接口)是一种全双工同步串行外设接口总线,主要用于MCU与外围设备的串口通信.它由四根线构成:串行时钟线(S ...
- 湿度检测仪输入示数计算机编程,温湿度传感器DHT11驱动程序 - 全文
温湿度传感器DHT11驱动程序 - 全文 来源:网络整理 作者:2018年01月22日 16:52 [导读] 本文开始介绍了驱动程序的定义与驱动程序的作用,其次介绍了DHT11温湿度传感器特性.引脚说 ...
- 【正点原子STM32连载】第四十章 DHT11数字温湿度传感器 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 【正点原子MP157连载】第二十七章 DHT11数字温湿度传感器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 防爆温湿度传感器:保障工业安全环境的关键设备
在现代工业生产过程中,安全是一项至关重要的考虑因素.特别是在危险和爆炸性环境中,保障人员和设备的安全更是至关重要.为了解决这一问题,防爆温湿度传感器应运而生.本文将详细介绍防爆温湿度传感器的工作原理. ...
- 玩转传感器——DHT11温湿度传感器(STM32版)
玩转传感器--DHT11温湿度传感器(STM32版) 文章目录 玩转传感器--DHT11温湿度传感器(STM32版) 前言 一.接口说明 1 接线图 2 电源引脚 3 串行接口(单线双向) 二.通信过 ...
- STM32应用(八)数字温度传感器DS18B20、数字温湿度传感器DHT11(软件模拟I2C)
文章目录 1.DS18B20 数字温度传感器实验 1.1 DS18B20简介 1.2 硬件与IO口配置 1.3 实物图与接线 1.4 工程配置 1.5 驱动和检测代码编写 1.5.1 ds18b20. ...
最新文章
- iOS之使用CoreImage进行人脸识别
- 【Python】12、字典的实现
- sqlserver之定位死锁(经验分享)
- 使用ASP.NET实现Model View Presenter(MVP)
- Linux安装配置Java1.8开发环境
- Python学习:集合
- java string blob_java String类型转换为Blob类型
- SharePoint网站集备份与恢复
- random_state的值如何选_DC轴流散热风扇如何选择更合理?
- 深度学习(二十二)Dropout浅层理解与实现
- 大数据学习系列----大数据项目的思考
- Windows安装镜像下载
- 中高端洪流已至,酒店企业如何趁势突围
- 《微习惯:简单到不可能失败的自我管理法则》读书小结
- PDF页面删除怎么操作
- 微信小程序显示html内容
- 永恒之蓝ms17_010漏洞复现
- python画风景图_风景侠
- 区块链骇客第一讲:重入攻击
- 中兴OLT ZXA10 C200 V1.1.3P2T6固件