嶺南師范學院網絡與信息技術中心 葉小樂
基于DS 1 8 B 2 0的多點溫度采集系統設計
嶺南師范學院網絡與信息技術中心 葉小樂
以DS18B20數字溫度傳感器和AT89C52單片機為核心,設計了一種多點溫度采集系統。系統由DS18B20溫度采集模塊、RS-232串口通信模塊、LCD1602液晶顯示模塊和聲光報警等模塊組成。給出了系統的具體硬件電路與程序設計,實現了對多點溫度的采集、顯示、傳輸和異常報警。系統可以廣泛應用于糧倉、溫室大棚等農業生產領域,具有廣闊的應用前景。
溫度采集;DS18B20;單片機
溫度是農業生產中的一個重要參數,在眾多農業生產領域中需要對溫度進行監測,大型糧倉需要對上百個點的溫度進行監測,掌握各個點在不同時刻的溫度變化,以提高倉儲量,同時有效地避免發生霉變現象。針對這種需要多點溫度采集的情況,本文設計提出了一種基于AT89C52單片機和DS18B20數字溫度傳感器的多點溫度采集系統。系統可以實時獲取多點溫度數據,并將溫度值與報警設定值進行比較,判斷是否發出聲光報警,同時將溫度值送LCD1602進行實時顯示,并把溫度數據通過串口通訊傳輸給上位PC機,由PC機處理后通過網絡傳輸到控制中心。
系統的控制核心選用8位單片機AT89C52,由DS18B20溫度采集模塊、RS-232串口通信模塊、LCD1602液晶顯示模塊和聲光報警模塊組成,如圖1所示。

圖1 系統結構圖
根據系統結構設計出包含AT89C52單片機與DS18B20數字溫度傳感器、串口、LCD以及聲光報警電路的整體電路圖,如圖2所示。
這里AT89C52單片機采用DIP-40封裝,包括4組8位的輸入/輸出口;LCD1602的D0~D7引腳連接單片機的P0.0~P0.7口,RS引腳連接單片機的P3.5口,E引腳連接單片機的P3.4口;聲光報警電路連接單片機的P2.3口;DS18B20數字溫度傳感器采用單總線技術(1-WireBus),即在單片機接口中只用一根導線(I/O信號線)就可以連接多個數字溫度傳感器,并能夠直接把被測溫度值轉化為串行信號在單總線上傳輸,這里選用單片機的P2.1口通過單總線與兩個DS18B20的數據線引腳DQ相連,單總線通過10K的上拉電阻R6連接+5V電源,DS18B20傳感器可位于離單片機150m以內的任何地方;并且為了能夠和上位PC機進行長距離數據傳輸,系統選用RS-232串行接口,通信距離能夠達到15米,上位PC機通過VC程序控制串口來接收單片機發送的溫度數據,所以系統能夠滿足在需要較大范圍溫度測控的場合布置使用。

圖2 系統電路圖
系統使用的是美國DALLAS半導體公司推出的系列單總線溫度傳感器芯片DS18B20[1],該芯片具有以下優點:(1)體積小,只有電源、接地、數據線共3個引腳,極大地節約了系統資源[2];(2)功耗低、成本低、性能高;(3)測溫范圍廣,可測范圍在-55℃到+125℃之間;(4)可組網,每個DS18B20都有唯一的序列號,可用于多點測溫;(5)線路簡單,DS18B20作為1-wire單總線數字溫度傳感器,采用一根信號線實現信號的雙向傳輸,接口簡單,便于擴展和維護[3],只需要占用單片機的一個端口即可通信,本設計采用AT89C52單片機的P2.1端口與DS18B20進行通信,詳見圖2所示;(6)適用電壓寬,從3V一直到5.5V;(7)用戶可以在9位到12位之間選擇數字溫度的分辨率,傳感器直接輸出溫度值的數字信號,抗干擾能力好;(8)可在內部設置溫度的上、下限告警。
系統選用美國ATMEL公司制造的8位單片機AT89C52做主控制器。這種單片機采用ATMEL公司的高密度非易失存儲器技術生產,兼容工業標準的MCS-51指令系統和8052的產品引腳,片內含有8k字節可擦寫Flash只讀程序存儲器(PEROM)與256字節隨機數據存儲器(RAM)。該單片機擁有1個8位CPU,1個片內振蕩器及時鐘電路,3個16位定時/計數器,21個特殊功能寄存器,4個8位并行I/O口,共32條可編程I/O端線,1個可編程全雙工串行口,8個中斷源[4,5]。AT89C52單片機可以為嵌入式系統行業提供高性價比、高靈活度的解決方案。
這里采用LCD1602液晶顯示模塊來實時顯示所測溫度。該款液晶顯示模塊以其功耗低、顯示內容豐富、超薄輕巧、體積小的優勢,被廣泛應用于低功耗的應用系統和袖珍式儀表當中。這種工業字符型的液晶顯示模塊能夠同時顯示2行,每行16個字符,共計32個字符,本設計每行顯示一個采集點的溫度值。該液晶模塊自帶標準字庫,有160個不同的點陣字符圖形被存儲于其內部字符發生存儲器(CGROM)中,這些字符包括英文字母的大小寫、阿拉伯數字、常用的符號等,每一個字符均對應有一個固定的代碼??梢酝ㄟ^指令編程來實現對液晶顯示模塊的讀寫、屏幕和光標的操作等。
系統實時測量各點溫度,如果溫度達到告警設置,則由單片機的系統軟件控制P2.3引腳交替輸出高低電平,使三極管驅動聲光設備發出報警。
AT89C52單片機的串行接口與RS-232標準串口通信連接的接口電路詳見圖2所示。因為AT89C52單片機的串行接口采用TTL電平,從而和采用RS-232電平的PC機串口在接口規范上不一致,所以需要在單片機的串行接口和PC機的標準串行接口之間進行電平轉換,這里采用的是MAX232接口芯片來實現TTL電平到RS-232接口電平的轉換的。
系統軟件使用Keil C51開發,采取模塊化的設計方法,使程序的結構清晰,提高了開發調試的效率,利于以后軟件的升級和系統功能的擴展。程序設計模塊主要包括主程序、溫度轉換子程序、DS18B20時序子程序等。
主程序的主要功能是負責溫度數據的實時處理:調用溫度轉換子程序獲取實時溫度數據,將實時溫度值與報警設定值進行比較,判斷是否發出聲光報警,同時將溫度值送LCD1602進行實時顯示,并同時把溫度數據由串口通訊實時發送給上位PC機。主程序流程圖如圖3所示。

圖3 主程序流程圖
主程序相關代碼程序如下:
void main() {
uint i;
fl oat tempr;
init();//初始化函數
while (1) {
for (i = 0;i < 2;i++) {
tempr = get_temp(get_serial + i * 8);//調用溫度轉換程序獲取實時溫度數據
if (i == 0) { //第一個溫度傳感器
if (tempr > warn1) {warn(1);} //判斷溫度是否超標報警
write_com(0x80);//在LCD的第一行顯示
sprintf(table1 + 6,” %0.1f”,tempr);//精確到小數點后一位
Display_LCD_String(table1);//送往LCD顯示Send_COM_String(table1);//由串口發送給上位PC機
}
if (i == 1) { //第二個溫度傳感器
if (tempr > warn2) {warn(2);} //判斷溫度是否超標報警
write_com(0x80 + 0x40);//在LCD的第二行顯示sprintf(table2 + 6,” %0.1f”,tempr);//精確到小數點后一位
Display_LCD_String(table2);//送往LCD顯示
Send_COM_String(table2);//由串口發送給上位PC機
} } } }
DS18B20在上電后是處于空閑狀態的,依據其單總線協議,每次溫度轉換都需要單片機通過以下4個步驟器發送命令控制傳感器來完成:(1)對DS18B20進行初始化即復位操作;(2)初始化成功后發送ROM指令用于識別器件;(3)發送一條RAM指令控制DS18B20完成相應操作;(4)收發數據。由此設計溫度轉換子程序的程序流程圖如圖4所示。

圖4 溫度轉換子程序流程圖
DS18B20完成溫度轉換后得到的12位數據存儲于兩個8位的RAM中,如果溫度小于0,需要把測得的數值取反加1再乘以0.0625便是實際溫度,如果溫度大于0,把測得的數值乘以0.0625就是實際溫度。編寫設計溫度轉換子程序如下:
f
l oat get_temp(uchar *rom) ∥DS18B20溫度轉換函數
{
uchar a,b;
uint temp;
fl oat f_temp;
dsreset();//對DS18B20進行初始化即復位操作
delay(1);
tempwritebyte(0x55);// 匹配ROM指令,用來選定與所給ROM編碼相匹配的傳感器
tempwriteromcode(rom);//發送一個ROM編碼
tempwritebyte(0x44);// 發送溫度轉換指令
dsreset();//對DS18B20進行初始化即復位操作
delay(1);
tempwritebyte(0x55);// 匹配ROM指令,用來選定與所給ROM編碼相匹配的傳感器
tempwriteromcode(rom);//發送一個ROM編碼
tempwritebyte(0xbe);// 發送讀出暫存器指令
a = tempreadbyte();//讀低8位
b = tempreadbyte();//讀高8位
temp = b;
temp <<= 8;//兩個字節組合為1個字
temp = temp | a;
if ((temp & 0xf800) == 0xf800) { //判斷溫度正負值
f_temp = (~temp + 1) * 0.0625*-1;
} else {
f_temp = temp * 0.0625;//溫度在寄存器中為12位 分辨率位0.0625度
}
return f_temp;//返回實際溫度值
}
由于DS18B20是采用單總線協議方式在一根I/O線上進行數據的讀寫,這要求對數據位的讀寫有著嚴格的時序來保證各位數據得到正確完整地傳輸,并且所有的數據讀寫均由最低位開始。本系統單片機使用的晶振頻率是11.0592MHz,根據DS18B20的初始化時序、寫時序和讀時序要求,分別設計編寫了3個子程序。
(1)初始化時序:它是單總線上所有傳輸過程的開始。整個初始化過程由主機發出的復位脈沖和DS18B20發出的響應脈沖組成。初始化時序子程序如下:
void dsreset(void) { ∥初始化時序函數
uint i;
ds = 0; ∥拉低總線
i = 103;
while (i > 0) ∥延時
i--;
ds = 1;∥釋放總線
i = 4;
while (i > 0) ∥延時
i--;
}
(2)讀時序:DS18B20只有在檢測到主機啟動讀時序后才向主機傳輸數據。因此在主機發送了讀數據命令后,必須馬上產生讀時序,以便DS18B20能夠傳輸數據。讀時序子程序如下:
bit tempreadbit(void) { ∥讀1位數據時序函數
uint i;
bit dat;
ds = 0; ∥拉低總線
i++;∥i++ 起延時作用
ds = 1;∥釋放總線
i++;∥i++ 起延時作用
i++;
dat = ds;∥讀1位數據
i = 8;
while (i > 0) ∥延時
i--;
return (dat);
}
uchar tempreadbyte(void) //讀1個字節數據時序函數{
uchar i,j,dat;
dat = 0;
for (i = 1;i <= 8;i++) {
j = tempreadbit();
dat = (j << 7) | (dat >> 1);//剛好一個字節在dat里
}
return (dat);
}
(3)寫時序:對于DS18B20的寫時序分為寫0時序與寫1時序兩個過程。寫“0”時序用于主機向DS18B20寫入0,寫“1”時序用于主機向DS18B20寫入1。寫時序子程序如下:void tempwritebit(bit dat) { ∥寫1位數據時序函數
uint i;
if (dat) ∥寫 1
{ ds = 0; ∥拉低總線
i++;∥i++ 起延時作用
i++;
ds = 1;∥釋放總線,由上拉電阻將單總線拉至高電平
i = 8;
while (i > 0) ∥延時
i--;
} else { ∥寫 0
ds = 0; ∥拉低總線
i = 8;
while (i > 0) ∥延時
i--;
ds = 1;∥釋放總線
i++;∥i++ 起延時作用
i++;
} }
void tempwritebyte(uchar dat) //寫一個字節數據時序函數
{
uchar j;
bit testb;
for (j = 1;j <= 8;j++) {
testb = dat & 0x01;
dat = dat >> 1;
tempwritebit(testb);
} }
在通過模塊化的電路調試、軟件測試和整體集成后,系統各方面性能都滿足設計要求,測溫準確,數據顯示、傳輸和聲光報警都工作正常。隨著科學技術的發展,尤其是計算機技術的發展與普及,數據采集技術將有更為廣闊的發展前景[6],本文設計的遠距離多點數字式溫度采集系統作為一種數據采集技術可以廣泛應用于糧倉、溫室大棚等農業生產領域。
[1]DALLAS公司.DS18B20使用手冊[Z].2003.
[2]宋丹.多路溫度巡檢系統的設計與應用[J].自動化與儀表,2008, 23(9):13-15.
[3]張彥兵,劉永前,李義強.1-wire總線驅動電路設計[J].傳感技術學報,2006,19(4):1020-1028.
[4]李文娟,海霞,葉諶雯.一種基于超聲波的檢測防撞系統的設計[J].自動化博覽,2007(6):80-81.
[5]王安敏,張凱.基于AT89C52單片機的超聲波測距系統[J].儀表技術與傳感器,2006(6):45-46.
[6]朱曉榮,周東輝.一種實用的分布式數據采集和控制系統[J].電子產品世界,2003(8):34-36.
Design of Multi-point Temperature Acquisition System Based on DS18B20
YE Xiao-le
(Information and Educational Technique Center,Zhanjiang Normal University,Zhanjiang 524048,China)
A multi-point temperature acquisition system is designed based on DS18b20 digital thermometer and AT89C52 MCU.The system consists of temperature acquisition module,RS-232 serial communication module,LCD1602 module,voice and light alarm module.The design method of concrete hardware and software of the system is given,and the system realizes the acquisition,indication,transmission and abnormal alarm of multipoint temperature.The system can be widely applie in agriculture domain such as granary,green house and so on,it has wide application prospects.
Temperature Acquisition;DS18B20;MCU
嶺南師范學院自然科學基金項目(L1211)。
葉小樂(1979—),男,江西大余人,碩士研究生,計算機科學與技術實驗師,研究方向:嵌入式系統、計算機網絡。