1、总体特性
- 湿度范围0%-100%,误差2%;温度范围-40℃-85℃,误差0.2℃
- 睡眠功耗50nA
- 平均功耗(1s采样1次):仅测量湿度,11位输出,300nA;测量温度和湿度,550nA
- 供电范围1.62V-3.6V
- 采样速率:5Hz、2Hz、1Hz、0.2Hz、0.1Hz、1/60Hz、1/120Hz可设置
- 湿度输出可配置为9bit、11bit、14bit;温度输出可配置为11bit、14bit
- I2C接口
2、引脚以及封装
DSBGA (6-bump) 1.5 mm x 1.5 mm x 0.675 mm
I2C地址,根据设计可选,ADDR接到地为0x40,接VCC为0x41。
3、设备工作模式
睡眠模式和测量模式
上电后,设备处于睡眠模式,在这个模式下设置设备的转换时间、触发测量、设置ODR并读取测量值等。一旦接收到触发测量命令后进入测量模式,在测量模式下,HDC2010获取配置的测量值并设置DRDY/INT引脚。完成测量后进入睡眠模式。
4、寄存器列表
5、寄存器以及设置参数定义
#define HDC2010_TEMPERATURE_LOW 0x00 //0
#define HDC2010_TEMPERATURE_HIGH 0x01
#define HDC2010_HUMIDITY_LOW 0x02
#define HDC2010_HUMIDITY_HIGH 0x03
#define HDC2010_INTERRUPT_DRDY 0x04
//bit[7]:DataReady bit status
#define DRDY_STATUS_NOT_READAY 0x00
#define DRDY_STATUS_READAY 0x80
//bit[6]:Temperature threshold HIGH Interrupt status
#define HH_STATUS_NO_INT 0x00
#define HH_STATUS_INT 0x40
//bit[5]:Temperature threshold LOW Interrupt status
#define HL_STATUS_NO_INT 0x00
#define HL_STATUS_INT 0x20
//bit[4]:Humidity threshold HIGH Interrupt status
#define TH_STATUS_NO_INT 0x00
#define TH_STATUS_INT 0x10
//bit[3]:Humidity threshold LOW Interrupt status
#define TL_STATUS_NO_INT 0x00
#define TL_STATUS_INT 0x08
#define HDC2010_TEMPERATURE_MAX 0x05
#define HDC2010_HUMIDITY_MAX 0x06
#define HDC2010_INTERRUPT_MASK 0x07
//bit[7]:DataReady Interrupt mask
#define DRDY_MASK_ENABLE 0x80
#define DRDY_MASK_DISABLE 0x00
//bit[6]:Temperature threshold HIGH Interrupt mask
#define TH_MASK_ENABLE 0x00
#define TH_MASK_DISABLE 0x40
//bit[5]:Temperature threshold LOW Interrupt mask
#define TL_MASK_ENABLE 0x00
#define TL_MASK_DISABLE 0x20
//bit[4]:Humidity threshold HIGH Interrupt mask
#define HH_MASK_ENABLE 0x00
#define HH_MASK_DISABLE 0x10
//bit[3]:Humidity threshold HIGH Interrupt mask
#define HL_MASK_ENABLE 0x00
#define HL_MASK_DISABLE 0x08
#define HDC2010_TEMP_OFFSET_ADJUST 0x08
#define HDC2010_HUM_OFFSET_ADJUST 0x09
#define HDC2010_TEMP_THR_L 0x0A //0xFF
#define HDC2010_TEMP_THR_H 0x0B
#define HDC2010_RH_THR_L 0x0C //0xFF
#define HDC2010_RH_THR_H 0x0D
#define HDC2010_RESET_DRDY_INT_CONF 0x0E
//bit[7]:
#define SOFT_RES_NORMAL 0x00
#define SOFT_RES_SOFT 0x80
//bit[6:4]:Output Data Rate
#define ODR_NO 0x00 //000
#define ODR_1_120HZ 0x10 //001
#define ODR_1_60HZ 0x20 //010
#define ODR_0_1HZ 0x30 //011
#define ODR_0_2HZ 0x40 //100
#define ODR_1HZ 0x50 //101
#define ODR_2HZ 0x60 //110
#define ODR_5HZ 0x70 //111
//bit[3]:
#define HEAT_EN_ON 0x08
#define HEAT_EN_OFF 0x00
//bit[2]:DRDY/INT_EN pin configuration
#define DRDY_OR_INT_EN_ENABLE 0x04
#define DRDY_OR_INT_EN_HIGH_Z 0x00
//bit[1]:Interrupt polarity
#define INT_POL_LOW 0x00
#define INT_POL_HIGH 0x02
//bit[0]:Interrupt mode
#define INT_MODE_LEVEL 0x00
#define INT_MODE_COMPARAM 0x01
#define HDC2010_MEASUREMENT_CONF 0x0F
//bit[7:6]:Temperature resolution
#define TEM_RES_14BIT 0x00 //00
#define TEM_RES_11BIT 0x40 //01
#define TEM_RES_9BIT 0x80 //10
//bit[5:4]:Humidity resolution
#define HUM_RES_14BIT 0x00 //00
#define HUM_RES_11BIT 0x10 //01
#define HUM_RES_9BIT 0x20 //10
//bit[3]:res
//bit[2:1]:Measurement configuration
#define MEAS_CONF_TEM_HUM 0x00 //00
#define MEAS_CONF_TEM_ONLY 0x02 //01
#define MEAS_CONF_HUM_ONLY 0x04 //10
//bit[0]:Measurement trigger
#define MEAS_TRIG_START 0x01
#define MEAS_TRIG_NO_ACTION 0x00
#define HDC2010_MANUFACTURER_ID_LOW 0xFC //0x49
#define HDC2010_MANUFACTURER_ID_HIGH 0xFD //0x54
#define HDC2010_DEVICE_ID_LOW 0xFE //0xD0
#define HDC2010_DEVICE_ID_HIGH 0xFF //0x07
6、读取ID
分厂商ID和设备ID,都是固化在芯片里面的,均是16bit,其中厂商ID是0x5449,设备ID是0x07D0,随便读取一个就行,可以判断I2C通信的异常,也可以用于检测芯片是否存在。
bool CheckHDC2010Chip()
{
Uint16_t device_id=0;
device_id = HDC2010_ReadRegU16(HDC2010_DEVICE_ID_LOW);
if(device_id==0x07D0)
{
return true;
}
else
{
return false;
}
}
7、设置芯片的工作参数
void HDC2010Init(void)
{
HDC2010_WriteRegU8(HDC2010_RESET_DRDY_INT_CONF,SOFT_RES_NORMAL|ODR_1_120HZ|HEAT_EN_OFF|DRDY_OR_INT_EN_HIGH_Z);
//正常复位、1/120输出速率、DRDY/INT_EN 引脚输出为高阻,不中断
HDC2010_WriteRegU8(HDC2010_INTERRUPT_MASK,DRDY_MASK_DISABLE|TH_MASK_DISABLE|TL_MASK_DISABLE|HH_MASK_DISABLE|HL_MASK_DISABLE);
//中断掩码寄存器设置,所有的中断关
HDC2010_WriteRegU8(HDC2010_MEASUREMENT_CONF,TEM_RES_14BIT|HUM_RES_14BIT|MEAS_CONF_TEM_HUM|MEAS_TRIG_START);
//测量寄存器设置,温度14bit、湿度14bit、温度湿度均使用、并且启动测量
}
8、读取数据
void HDC2010Read(void)
{
uint16 temperture,humidity;
while(HDC2010_ReadRegU8(HDC2010_INTERRUPT_DRDY)&DRDY_STATUS_READAY!=DRDY_STATUS_READAY);
//等待测量完成
temperture=HDC2010_ReadRegU16(HDC2010_TEMPERATURE_LOW);
humidity=HDC2010_ReadRegU16(HDC2010_HUMIDITY_LOW);
//temperture、humidity读出来是16bit的数字值,需要转化为实际值
}
注:通过以上发现HDC2010读寄存器的时候,可以自动移动到下一个地址。