張明,劉岑俐
(貴州大學(xué)電氣工程學(xué)院,貴州 貴陽 550003)
DS18B20是美國DALLAS公司生產(chǎn)的一線式線數(shù)字溫度傳感器。它具有微型化、低功耗、高性能、抗干擾能力強(qiáng)、易配處理器等優(yōu)點(diǎn),可直接將溫度轉(zhuǎn)換成串行數(shù)字信號(hào)(提供9位二進(jìn)制數(shù))給單片機(jī)處理,且在同一總線上可以掛接多個(gè)傳感器芯片[1]。本文以PIC單片機(jī)18F452為核心,采用數(shù)字溫度傳感設(shè)計(jì)一種最簡(jiǎn)溫度測(cè)量系統(tǒng)。
系統(tǒng)采用美國微芯公司的PIC單片機(jī)18F452為控制芯片,微芯公司還專門為PIC18FX系列單片機(jī)設(shè)計(jì)了一套小巧廉價(jià)的在線調(diào)試工具套件MPLAB2ICD[2]。借助于這套在線調(diào)試工具, 不需要購買其它昂貴的仿真器和燒寫器, 就能使用戶實(shí)現(xiàn)實(shí)時(shí)仿真和程序燒寫[3]。傳感器采用一線式數(shù)字溫度傳感器DS18B20,溫度測(cè)量范圍為-55~+125℃,測(cè)溫分辨率可達(dá)0.0625℃,CPU只需一根端口線就能與多個(gè)DS18B20通信,占用微處理器的端口少,可節(jié)省大量的引線和邏輯電路。
本設(shè)計(jì)軟件分為初始化、數(shù)據(jù)處理、溫度讀取和溫度顯示等。通過MPLAB2ICD在線調(diào)試成功,部分主要程序如下,流程圖如圖1。
圖1 程序流程圖
DS18B20采用單總線工作方式,由于所有信號(hào)(控制和數(shù)據(jù))都通過單總線傳輸,因此總線的時(shí)序邏輯必須非常嚴(yán)格。單片機(jī)和DS18B20的通訊是由一個(gè)單片機(jī)的復(fù)位脈沖和一個(gè)DS18B20的應(yīng)答脈沖開始的。單片機(jī)先發(fā)一個(gè)復(fù)位脈沖,保持低電平至少480μs , 最多不能超過960μs。之后單片機(jī)釋放總線,等待DS18B20應(yīng)答。DS18B20接受到復(fù)位脈沖后等待15~60μs發(fā)出應(yīng)答脈沖。應(yīng)答脈沖能保持60~240μs。單片機(jī)從發(fā)送完復(fù)位脈沖到再次控制總線至少要等待480μs[4]。
/*******ds18b20初始化函數(shù)************/
void Init_DS18B20(void)
{ unsigned char presence=1;
while(presence)
{ DQ_LOW() ;
//主機(jī)拉至低電平
delay_18B20(500);
delay_18B20(78);
DQ_HIGH();
//釋放總線等電阻拉高總線,并保持15~60us
delay_18B20(38);
//稍做延時(shí)
if(DQ==1) presence=1;
//沒有接收到應(yīng)答信號(hào),繼續(xù)復(fù)位
else presence=0;
//接收到應(yīng)答信號(hào)
delay_18B20(500);
delay_18B20(38); }}
根據(jù)DS18B20讀時(shí)序,讀間隙需要15~60μs,并且在2 次獨(dú)立的讀間隙至少需要1μs的恢復(fù)時(shí)間。讀間隙起始于單片機(jī)拉低總線至少1μs。DS18B20在讀時(shí)序開始15μs后開始采樣總線電平。
/********ds18b20讀一個(gè)字節(jié)********/
ReadOneChar(void)
{ unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{ dat>>=1;
DQ_LOW();
delay_18B20(1);
DQ_HIGH();
delay_18B20(5);
if(DQ)
dat|=0x80;
delay_18B20(48);
} return(dat); }
寫時(shí)序間隙則需要15~75μs,并且在2 次獨(dú)立的寫間隙之間也至少需要1μs的恢復(fù)時(shí)間。寫時(shí)序起始于單片機(jī)拉低總線。
/*************ds18b20寫 一 個(gè) 字 節(jié)****************/
WriteOneChar(unsigned char dat)
{ unsigned char i=0;
unsigned char temp;
for (i=8; i>0; i--)
{ temp=dat&0x01;
DQ_LOW();
delay_18B20(3);
if(temp==1) DQ_HIGH();
delay_18B20(58);
DQ_HIGH();
delay_18B20(1);
dat>>=1; }}
/**************讀取ds18b20當(dāng)前溫度************/
ReadTemperature(void)
{ int i;
DQ_HIGH();
Init_DS18B20();
WriteOneChar(0xCC);
// 跳過讀序號(hào)列號(hào)的操作
WriteOneChar(0x44);
// 啟動(dòng)溫度轉(zhuǎn)換
for(i=0;i<8;i++)
{ delay_18B20(98); }
//確保溫度轉(zhuǎn)換完成所需要的時(shí)間
Init_DS18B20();
WriteOneChar(0xCC);
//跳過讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE);
//讀取溫度寄存器等(共可讀9個(gè)寄存器)前兩個(gè)就是溫度
tempL=ReadOneChar();
//讀取溫度值低位
tempH=ReadOneChar();
//讀取溫度值高位
DQ_HIGH();
temperature=((tempH*256)+tempL)*0.0625;
delay_18B20(200);
return(temperature); }
在PROTEUS7軟件中搭建該最簡(jiǎn)測(cè)溫系統(tǒng)的硬件部分,導(dǎo)入編譯好的程序進(jìn)行仿真。當(dāng)改變仿真系統(tǒng)中的溫度時(shí),DS18B20能準(zhǔn)確測(cè)試,并且能夠在數(shù)碼管中正確顯示溫度值,如圖2顯示的為測(cè)試溫度為35℃時(shí)的情況。最后在面包板上搭建實(shí)物,經(jīng)上電運(yùn)行,證明該基于PIC單片機(jī)和DS18B20的最簡(jiǎn)溫度測(cè)量系統(tǒng)能夠準(zhǔn)確測(cè)量待測(cè)溫度,并能將該測(cè)量溫度正確顯示,尤其是系統(tǒng)所需的電子原器件簡(jiǎn)單而且較少,滿足了最簡(jiǎn)的要求,圖3為硬件電路圖。若需要用在高精度測(cè)試環(huán)境中,只需通過軟件稍加修改即可提高測(cè)試精確度。
圖2 系統(tǒng)仿真圖
圖3 硬件電路圖
本文實(shí)現(xiàn)了采用PIC18F452控制器和DS18B20數(shù)字溫度傳感器構(gòu)成的溫度控制系統(tǒng),經(jīng)軟件仿真和實(shí)物仿真,都能實(shí)現(xiàn)準(zhǔn)確測(cè)量和正確顯示溫度。所采用的數(shù)字式溫度傳感器DS18B20,無需外加A/D 轉(zhuǎn)換器,轉(zhuǎn)換速度快,降低了成本,簡(jiǎn)化了電路,提高了系統(tǒng)的集成度,使其滿足了最簡(jiǎn)的要求,具有整體性能可靠、硬件結(jié)構(gòu)簡(jiǎn)單、精度高、易于擴(kuò)展和系統(tǒng)穩(wěn)定性好等優(yōu)點(diǎn)。
[1]DS18B20 DataSheet.pdf.DALLAS Inc.http://www.dalsemi.com.
[2]PIC18FXX2數(shù)據(jù)手冊(cè).pdf.Microchip Technology Inc.http://support.microchip.com
[3]約翰,B.皮特曼.PIC18F452微控制器嵌入式設(shè)計(jì)[M].北京:科學(xué)出版社,2005.
[4]劉和平.PIC18Fxxx單片機(jī)原理及接口程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2004.
[5]張明峰.PIC單片機(jī)入門與實(shí)戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2004.
[6]劉和平.PIC18Fxxx單片機(jī)程序設(shè)計(jì)及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2005.
[7]王宇.PIC單片機(jī)入門與提高[M].北京:機(jī)械工業(yè)出版社,2006.
[8]彭樹生.PIC單片機(jī)實(shí)踐與系統(tǒng)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2007.