徐錦鋼鄢 妍/.江西師范大學(xué)科學(xué)技術(shù)學(xué)院 .江西機(jī)電職業(yè)技術(shù)學(xué)院
DS18B20溫度傳感器的工作原理探析
徐錦鋼1鄢 妍2/1.江西師范大學(xué)科學(xué)技術(shù)學(xué)院 2.江西機(jī)電職業(yè)技術(shù)學(xué)院
本文圍繞DS18B20溫度傳感器的工作原理展開論述,使用proteus仿真軟件設(shè)計(jì)和繪制了DS18B20的測(cè)溫電路圖,并通過1602液晶顯示器觀察DS18B20測(cè)得的溫度值,驗(yàn)證了DS18B20測(cè)溫電路及程序設(shè)計(jì)的正確性,并給出了部分C程序代碼。
DS18B20;測(cè)溫;仿真
DS18B20是DALLAS公司生產(chǎn)的一種溫度傳感器,具有體積小、先進(jìn)的單總線數(shù)據(jù)通信方式、全數(shù)字溫度轉(zhuǎn)換及輸出、測(cè)量精度可達(dá)土0.5℃、檢測(cè)溫度范圍寬(可達(dá)-55℃~+125℃)等優(yōu)點(diǎn),因此使得DS18B20應(yīng)用非常廣泛[1]。
電路連接如上圖1所示,主要包括AT89S52單片機(jī)、DS18B20和1個(gè)1602型液晶顯示器。DS18B20組成的溫度測(cè)量系統(tǒng)線路非常簡單,只要求1個(gè)接口就可實(shí)現(xiàn)通信,圖中DS18B20的第2腳(DQ)即為數(shù)據(jù)通信端,接至單片機(jī)的P3.3口,傳輸命令字和溫度信號(hào)。DS18B20的第3腳(VCC)接5V電源,第1腳(GND)接地。1602液晶數(shù)據(jù)端(D0-D7)接至單片機(jī)P0口,控制端(RS、RW、EN)分別接至單片機(jī)P2.0、P2.1、P2.2口。
圖1 電路連接圖
圖2 DS18B20單總線開漏等效電路
單總線系統(tǒng)只有1根數(shù)據(jù)線,主機(jī)或者從機(jī)設(shè)備通過1個(gè)漏極開路或三態(tài)接口連接至該數(shù)據(jù)線,這樣使得主機(jī)或者從機(jī)設(shè)備在不發(fā)送數(shù)據(jù)時(shí)可釋放數(shù)據(jù)總線,以便總線可被其他設(shè)備使用。圖2給出了DS18B20單總線開漏等效電路,單總線要求外接1個(gè)約為5K歐姆的上拉電阻,以保證總線閑置時(shí)為高電平,如圖1中的電阻R1所示[2]。
單總線器件要求嚴(yán)格遵守相應(yīng)的通信協(xié)議,如此才能保證數(shù)據(jù)傳輸?shù)耐暾?,這種協(xié)議一般定義了若干種類型的信號(hào),包括器件復(fù)位、讀數(shù)據(jù)、寫數(shù)據(jù),均由主機(jī)(即單片機(jī))發(fā)出同步信號(hào),所有的命令字和數(shù)據(jù)字都是低位在前,高位在后。
本文編寫了一個(gè)完整的DS18B20測(cè)量顯示程序,主要包括DS18b20初始化函數(shù)、主機(jī)寫字節(jié)數(shù)據(jù)函數(shù)、主機(jī)讀字節(jié)數(shù)據(jù)函數(shù)、開始溫度轉(zhuǎn)換、溫度獲取及數(shù)據(jù)修正函數(shù)。下面以其中的前4個(gè)函數(shù)示例,并給出注解。
4.1 DS18b20初始化函數(shù)
單總線的所有操作均是從1個(gè)初始化序列開始的,初始化序列包括1個(gè)由總線控制器發(fā)出的復(fù)位脈沖和隨后由從機(jī)回發(fā)的應(yīng)答脈沖,函數(shù)程序代碼如下:
void Init_DS18B20()
{
uint i;
DQ=0;//拉低總線開始復(fù)位
i=103;
while(i>0)i--;//短暫延時(shí)
ds=1;//主機(jī)寫1,釋放總線
i=4;
while(i>0)i--;//短暫延時(shí)
}
4.2 主機(jī)寫字節(jié)數(shù)據(jù)函數(shù)
void write_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;//主機(jī)拉低DQ
dat>>=1;//待輸出位通過移位操作先進(jìn)入PSW的CY位
DQ=CY;
delay(8);
DQ=1;
}
}
4.3 主機(jī)讀字節(jié)數(shù)據(jù)函數(shù)
void read_byte()
{
uchar i,dat=0;
for(i=0x01;i!=0;i<<=1)
{
DQ=0;_nop_();//主機(jī)拉低DQ,開始讀時(shí)隙
DQ=1;_nop_();//主機(jī)釋放DQ,準(zhǔn)備讀
if(DQ)
{dat|=i;}//1us后主機(jī)開始讀取1位
delay(8);//實(shí)際延時(shí)77us
}
return dat;//將讀到的字節(jié)數(shù)返回
}
4.4 開始溫度轉(zhuǎn)換函數(shù)
void tempchang(void)
{
Init_DS18B20();//初始化
delay(1);
write_byte(0xcc);//寫命令字0xcc,跳過讀取ROM序列號(hào)
write_byte(0x44);//寫命令字0x44,啟動(dòng)溫度轉(zhuǎn)換
}
按照?qǐng)D1搭好電路后,調(diào)節(jié)DS18B20器件上的溫度增減按鍵,模擬外界溫度的變化,單片機(jī)在獲取溫度值后,將溫度值顯示在1602液晶上,如圖中測(cè)得溫度為26℃時(shí),液晶也顯示為26℃,見下圖3所示,說明電路連接及程序編寫均正確無誤。
圖3 測(cè)試結(jié)果
本文采用單片機(jī)作為主控制器,設(shè)計(jì)了基于DS18B20的溫度測(cè)量顯示電路,論述了DS18B20的工作原理,給出了部分測(cè)試程序并注解。通過測(cè)試,DS18B20能夠正常測(cè)溫,電路工作正常。
[1]DS18B20芯片手冊(cè)[DB/OL].百度文庫,2007-03.
[2]彭 偉.單片機(jī)C語言程序設(shè)計(jì)實(shí)訓(xùn)100例[M].北京:電子工業(yè)出版社,2014-03.
徐錦鋼(1983-),男,江西高安人,講師,碩士研究生,研究方向:電子信息工程。