天天看點

幾種數字傳感器介紹(一)————溫濕度傳感器(HDC1080)

一、溫濕度采集傳感器(HDC1080)

1.簡要概述

HDC1080是一種內建溫度傳感器的數字濕度傳感器,具有出色的測量精度和超低的功耗。其具有14位測量分辨率,相對濕度精度為±2%,溫度精度為±0.2°C,工作時平均電流在0.7-1.3uA級。

傳感器供電電壓為2.7V至5.5V,具有較高的電壓相容性,通過單片機讀取資料一般不再需要額外設定電平轉換控制晶片。

圖為傳感器功能框圖和典型應用

幾種數字傳感器介紹(一)————溫濕度傳感器(HDC1080)

圖為HDC1080傳感器管腳圖:

幾種數字傳感器介紹(一)————溫濕度傳感器(HDC1080)

HDC1080的管腳較為簡單,為3*3mm小型器件封裝,總共有6個管腳:

SDA,SCL為IIC通信管腳,與單片機IIC接口相連,一般要求接上拉電阻,相容5V和3.3V;

VDD,GND為電源和地管腳,VCC可接5V或3.3V電源;

NC為閑置管腳,一般懸浮或接地。

2.程式設計應用

HDC1080作為從裝置通過IIC總線與主機通信,上電後至多15ms傳感器便可進入工作狀态。

讀取傳感器的資料需要通路HDC1080上的特定寄存器(寄存器位址為7位二進制數),将所需的寄存器位址值寫入指針寄存器,寄存器位元組首先發送MSB,然後是LSB。

幾種數字傳感器介紹(一)————溫濕度傳感器(HDC1080)

如圖為寫指令時序圖:

1.主機發出起始信号,發送7位從裝置位址和寫寄存器指令,從機接收後發出應答信号

2.主機發送8位寄存器位址,從機接收并發出應答信号

3.主機發送高八位資料,從機接收并發出應答信号

4.主機發送低八位資料,從機接收并發出應答信号,主機發出停止信号。

幾種數字傳感器介紹(一)————溫濕度傳感器(HDC1080)

如圖為讀指令時序圖:

1.主機發出起始信号,發送7位從裝置位址和寫寄存器指令,從機接收後發出應答信号

2.主機發送需要讀取的寄存器位址,從機接收後傳回應答信号

3.主機發出起始信号,發送7位從裝置位址和讀寄存器指令,從機接收發出應答信号

4.從機發送,主機接收高八位資料并發出應答信号

5.從機發送,主機接收低八位資料并發出應答信号,主機發出停止傳輸信号

幾種數字傳感器介紹(一)————溫濕度傳感器(HDC1080)

如圖為HDC1080寄存器位址及各寄存器作用表格,由此我們可以定義;

# define HDC1080_TEMPERATURE	0x00
# define HDC1080_HUMIDITY		0x01
# define HDC1080_CONFIGURATION	0x02
# define HDC1080_MANUFACTURER_ID 0xFE
# define HDC1080_DEVICE_ID		0xFF
# define HDC1080_SERIAL_ID_FIRST	0xFB
# define HDC1080_SERIAL_ID_MID	0xFC
# define HDC1080_SERIAL_ID_LAST	0xFD
           

根據寫寄存器時序可寫:

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 data[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(); 
	data[1]=IIC_Read_Byte(1);   
	data[0]=IIC_Read_Byte(1);   
	IIC_NAck();   
    IIC_Stop();     
	return data;
}
           

溫度和濕度寄存器為二進制格式的16位結果寄存器(2個LSB D1和D0始終為0)。采集結果始終為14位值。結果的準确性與選擇的轉換時間有關,計算公式如下:

幾種數字傳感器介紹(一)————溫濕度傳感器(HDC1080)
幾種數字傳感器介紹(一)————溫濕度傳感器(HDC1080)

其他更詳盡的資料請自行參考資料手冊。

參考資料:

1.HDC1080資料手冊

2.部落格:AnthonyYMH的HDC1080溫濕度驅動 IIC I2C STM32,連結:https://blog.csdn.net/weixin_38075894/article/details/100625752?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163161913016780265415420%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163161913016780265415420&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-100625752.pc_search_es_clickV2&utm_term=hdc1080%E9%A9%B1%E5%8A%A8&spm=1018.2226.3001.4187