| 位 | 類型 | 說(shuō) 明 | 缺 省 | |
| 7 | 保留 | 0 | ||
| 6 | 讀 | 工檢限(低電壓檢查) | X | |
| 5 | 保留 | 0 | ||
| 4 | 保留 | 0 | ||
| 3 | 只用于試驗(yàn),不可以使用 | 0 | ||
| 2 | 讀/寫 | 加熱 | 0 | 關(guān) |
| 1 | 讀/寫 | 不從OTP重下載 | 0 | 重下載 |
| 0 | 讀/寫 | '1'=8位相對(duì)濕度,12位溫度分辨率。'0'=12位相對(duì)濕度,14位濕度分辨率 | 0 | 12位相對(duì)濕度,14位濕度 |
(3)溫濕度測(cè)量時(shí)序
當(dāng)發(fā)出了溫(濕)度測(cè)量命令后,控制器就要等到測(cè)量完成。使用8/12/14位的分辨率測(cè)量分別需要大約11/55/210ms的時(shí)間。為表明測(cè)量完成,SHT11會(huì)使數(shù)據(jù)線為低,此時(shí)控制器必須重新啟動(dòng)SCK,然后傳送兩字節(jié)的測(cè)量數(shù)據(jù)與1字節(jié)CRC校驗(yàn)和。控制器必須通過使DATA為低來(lái)確認(rèn)每一個(gè)字節(jié),所有的量均從右算,MSB列于第一位。通訊在確認(rèn)CRC數(shù)據(jù)位后停止。如果沒有用CRC-8校驗(yàn)和,則控制器就會(huì)在測(cè)量數(shù)據(jù)LSB后保持ack為高來(lái)停止通訊,SHT11在測(cè)量和通訊完成后會(huì)自動(dòng)返回睡眠模式。需要注意的是:為使SHT11的溫升低于0.1℃此時(shí)的工作頻率不能大于標(biāo)定值的15%(如:12位精確度時(shí),每秒最多進(jìn)行3次測(cè)量)。測(cè)量溫度和濕度命令所對(duì)應(yīng)的時(shí)序如圖4所示。
圖4
3.3 寄存器配置
SHT11傳感器中的一些高級(jí)功能是通過狀態(tài)寄存器來(lái)實(shí)現(xiàn)的,寄存器各位的類型及說(shuō)明見表2所列。下面對(duì)寄存器相關(guān)位的功能說(shuō)明:
(1)加熱
使芯片中的加熱開關(guān)接通后,傳感器溫度大約增加5℃,從而使功耗增加至8mA@5V。加熱用途如下:
●通過對(duì)啟動(dòng)加熱器前后的溫、濕度進(jìn)行比較,可以正確地區(qū)別傳感器的功能;
●在相對(duì)濕度較高的環(huán)境下,傳感器可通過加熱來(lái)避免冷凝。
(2)低電壓檢測(cè)
SHT11工作時(shí)可以自行檢測(cè)VDD電壓是否低于2.45V,準(zhǔn)確度為±0.1V。
(3)下載校準(zhǔn)系數(shù)
為了節(jié)省能量并提高速度,OTP在每次測(cè)量前都要重新下載校準(zhǔn)系數(shù),從而使每一次測(cè)量節(jié)。福玻恚蟮臅r(shí)間。
(4)測(cè)量分辨率設(shè)定
將測(cè)量分辨率從14位(溫度)和12位(濕度)分別減到12位和8位可應(yīng)用于高速或低功耗場(chǎng)合。
4 應(yīng)用說(shuō)明
4.1 運(yùn)行條件
測(cè)量量程以外的溫度會(huì)使?jié)穸刃盘?hào)暫時(shí)地偏移+3%。然后傳感器會(huì)慢慢返回到校準(zhǔn)條件。若將芯片在濕度小于5%環(huán)境下加熱24小時(shí)到90℃,芯片就會(huì)迅速恢復(fù)高相對(duì)濕度、高溫度環(huán)境的影響,但是,延長(zhǎng)強(qiáng)度條件會(huì)加速芯片的老化。
4.2 安裝注意事項(xiàng)
由于大氣的相對(duì)濕度與溫度的關(guān)系比較密切,因此,測(cè)量大氣溫度時(shí)的要點(diǎn)是將傳感器與大氣保持同一溫度,如果傳感器線路板上有發(fā)熱元件,SHT11應(yīng)與熱源保持良好的通風(fēng),為減少SHT11和PCB之間的熱傳導(dǎo),應(yīng)使銅導(dǎo)線最細(xì)并在其中加上窄縫,同時(shí)應(yīng)避免使傳感器在強(qiáng)光或UV下曝曬。
傳感器在布線時(shí),SCK和DATA信號(hào)平行且相互接近,或信號(hào)線長(zhǎng)于10cm時(shí),均會(huì)產(chǎn)生干擾信息,此時(shí)應(yīng)在兩組信號(hào)之間放置VDD或GND。
5 具體應(yīng)用
圖5是AT89C2051單片機(jī)與SHT11的接口電路。由于AT89C2051不具備I2C總線接口,故使用單片機(jī)通用I/O口線來(lái)虛擬I2C總線,并利用P1.0來(lái)虛擬數(shù)據(jù)線DATA,利用P1.1口線來(lái)虛擬時(shí)鐘線,并在DATA端接入一只4.7kΩ的上拉電阻,同時(shí),在VDD及GND端接入一只0.1μF的去耦電容。下面給出與上述硬件電路配套的C51應(yīng)用程序。
#define DATA P1_1
#define SCK P1_0
#define ACK 1
#define noACK 0
#define MEASURE_(tái)TEMP 0x03 //測(cè)量溫度命令
#define MEASURE_(tái)HUMI 0x05 //測(cè)量濕度命令
//讀溫濕度數(shù)據(jù)
char s-measure(unsigned char *p- value, un-signed char *p_checksum, unsigned char mode)
{
unsigned char error=0;
unsigned int i;
s_transstart(); //傳輸開始
switch(mode){
case
TEMP:error+=s_write_byte(measure_temp);
break;
case
HUMI: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);
return error;
}
//溫濕度值標(biāo)度變換及溫度補(bǔ)償
void calc_sth15(float *p_humidity,float *p_tempera-ture)
{
const float c1=-4.0;
const float c2=0.0405;
const float c3=-0.0000028;
const float t1=-0.01;
const float t2=0.00008;
float rh=×p_humidity;
float t=×p_temperature;
float rh_lin;
float th_ture;
float t_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;
}
//從相對(duì)溫度和濕度計(jì)算露點(diǎn)
char calc_dewpoint(float h,float t)
{float logex,dew_point;
logex=0.66077+7.5×t/(237.3+t)+[log10(h)-2];
dew_point=(logex-0.66077)×237.3/(0.66077+7.5-logex);
return dew_point;
}
限于篇幅,上述程序中未給出傳輸開始、寫字節(jié)數(shù)據(jù)、讀字節(jié)數(shù)據(jù)函數(shù)。
6 結(jié)束語(yǔ)
SHT11數(shù)字式溫濕度傳感器由于將溫度傳感器、濕度傳感器、信號(hào)調(diào)理、模/數(shù)轉(zhuǎn)換器、標(biāo)定參數(shù)及I2C總線接口全部集成到傳感器內(nèi)部,因此,既提高了傳感器的性能,又降低了成本、減少了體積,同時(shí)也非常便于和微控制器接口,由此可見,該傳感器是嵌入式系統(tǒng)溫濕度測(cè)試的理想選擇。





