1.1 溫度控制系統設計發展歷史及意義溫度控制系統廣泛應用于社會生活的各個領域 ,如家電、汽車、材料、電力電子等 ,常用的控制電路根據應用場合和所要求的性能指標有所不同 , 在工業企業中,如何提高溫度控制對象的運行性能一直以來都是控制人員和現場技術人員努力解決的問題。這類控制對象慣性大,滯后現象嚴重,存在很多不確定的因素,難以建立精確的數學模型,從而導致控制系統性能不佳,甚至出現控制不穩定、失控現象。傳統的繼電器調溫電路簡單實用 ,但由于繼電器動作頻繁 ,可能會因觸點不良而影響正常工作。控制領域還大量采用傳統的PID控制方式,但PID控制對象的模型難以建立,并且當擾動因素不明確時,參數調整不便仍是普遍存在的問題。而采用數字溫度傳感器DS18B20,因其內部集成了A/D轉換器,使得電路結構更加簡單,而且減少了溫度測量轉換時的精度損失,使得測量溫度更加精確。數字溫度傳感器DS18B20只用一個引腳即可與單片機進行通信,大大減少了接線的麻煩,使得單片機更加具有擴展性。由于DS18B20芯片的小型化,更加可以通過單跳數據線就可以和主電路連接,故可以把數字溫度傳感器DS18B20做成探頭,探入到狹小的地方,增加了實用性。更能串接多個數字溫度傳感器DS18B20進行范圍的溫度檢測。
1.2 溫度控制系統的目的溫度控制在日常生活及工業領域應用相當廣泛,比如溫室、水池、發酵缸、電源等場所的溫度控制。而以往溫度控制是由人工完成的而且不夠重視,其實在很多場所溫度都需要監控以防止發生意外。針對此問題,本系統設計的目的是實現一種可連續高精度調溫的溫度監測和控制系統,實現對溫度的實時檢測,具有提醒和控制的功能,本設計的內容是溫度測試控制系統,控制對象是溫度。它的特點在于應用廣泛,功能強大,小巧美觀,便于攜帶,是一款既實用又廉價的控制系統。
1.3 溫度控制系統完成的功能本設計是對溫度進行實時監測與控制,設計的溫度控制系統實現了基本的溫度控制功能:此設計中溫度恒定值設置為60℃,上下跳轉溫度為1℃,設計精度值為0.1。當溫度低于設定下限溫度即59℃時,綠燈亮,報警提醒需要外界的加熱措施。當溫度上升到上限溫度時,停止加溫,紅燈亮保持溫度。當溫度高于設定上限溫度即61℃時,紅燈亮,需要外界采取降溫措施(本設計中沒有附加外界的加熱和降溫措施)。當溫度下降到恒溫度時,停止降溫。溫度在上下限溫度之間時,執行機構不執行。
第二章 總體設計方案2.1 方案一利用溫度傳感器將溫度測出,通過某種電信號傳給外部電路產生一種變化,然后由外部電路控制裝置的開啟。測溫電路的設計,可以使用熱敏電阻之類的傳感器件利用其感溫效應,(如電阻隨溫度的變化有一個變化的曲線,即利用它的變化特性曲線)溫度的變化使得電阻發生了變化根據歐姆定律,電阻的變化會帶來電流或這電壓的變化。再將隨被測溫度變化的電壓或電流采集過來,然后進行模擬信號換成數字信號(A/D)轉換,將數字信號送入單片機,用單片機進行數據的處理,將溫度顯示在電路上,這樣就可以將被測溫度顯示出來。最后還有外圍的控制電路,采取一定的措施來控制產生溫度的電路,如加溫、降溫、保持不動、或者報警。這種設計需要用到A/D轉換電路,感溫電路比較麻煩。
設計流程圖如圖2.1

圖2.1 設計流程圖
2.2 方案二利用溫度傳感器芯片直接將溫度數據測出,之后通過單片機程序控制溫度的上、下限值,用外部電路產生顯示和控制加熱和降,來達到設計的要求。
考慮使用溫度傳感器,結合單片機電路設計,采用一只DS18B20溫度傳感器,直接讀取被測溫度值,之后進行轉換,依次完成設計要求。
比較以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設計容易實現,故實際設計中擬采用方案二。
在設計中的控制流程如圖2.2所示。

圖2.2 溫度控制整體流程
在本系統的總體電路設計方框圖如圖2.3所示,它由五部分組成:單片機STC89C52控制部分; DS18B20溫度傳感器采集部分;AT24C16數據掉電存儲部分;3位LED數碼管顯示部分;按鍵調節部分;二極管報警部分;繼電器驅動部分。
圖2.3 溫度計電路總體設計方案
整個設計總體分為以下幾個部分:控制部分、顯示部分、溫度采集部分、按鍵控制部分,輸出部分。
1、控制部分
由單片機STC89C52芯片在程序控制和外圍簡單組合電路作用下運行,和控制溫度的上、下限,和 LED的溫度顯示。控制發光二級管的亮滅和繼電器動作或復位,起到提醒報警功能。
2、顯示部分
顯示電路采用3位7斷共陽LED數碼管,從P3口送數,P0口掃描。有兩部分顯示電路,第一是顯示DS18B20溫度傳感器所檢測的當前溫度,第二是設定恒定的溫度值。
3、溫度采集部分
由DS18B20智能溫度傳感器直接采集被測溫度。
4、按鍵控制部分
由三個按鍵控制調節,用來調節溫度的恒定限值,起到預設調節作用。
第三章 溫度傳感器DS18B20
3.1 DS18B20簡介3.1.1 DS18B20封裝與引腳 DS18B20封裝與引腳如圖3.1

圖3.1 DS18B20的封裝與引腳
3.1.2 DS18B20的簡單性能1、 獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。
2、 測溫范圍 -55℃~+125℃,固有測溫分辨率0.5℃。
3、 支持多點組網功能,多個DS18B20可以并聯在唯一的三線上,實現多點測溫。
4、 工作電源: 3~5V/DC。
5、 在使用中不需要任何外圍元件。
6、 測量結果以9~12位數字量方式串行傳送。
7、 不銹鋼保護管直徑 Φ6 。
8、 適用于DN15~25, DN40~DN250各種介質工業管道和狹小空間設備測溫。
9、 標準安裝螺紋 M10X1, M12X1.5, G1/2”任選。
10、 PVC電纜直接出線或德式球型接線盒出線,便于與其它電器設備連接。
3.2 DS18B20的工作原理DS18B20內部的低溫度系數振蕩器是一個振蕩頻率隨溫度變化很小的振蕩器,為計數器1提供一頻率穩定的計數脈沖。
高溫度系數振蕩器是一個振蕩頻率對溫度很敏感的振蕩器,為計數器2提供一個頻率隨溫度變化的計數脈沖。
初始時,溫度寄存器被預置成-55℃,每當計數器1從預置數開始減計數到0時,溫度寄存器中寄存的溫度值就增加1℃,這個過程重復進行,直到計數器2計數到0時便停止。
初始時,計數器1預置的是與-55℃相對應的一個預置值。以后計數器1每一個循環的預置數都由斜率累加器提供。為了補償振蕩器溫度特性的非線性性,斜率累加器提供的預置數也隨溫度相應變化。計數器1的預置數也就是在給定溫度處使溫度寄存器寄存值增加1℃計數器所需要的計數個數。
DS18B20內部的比較器以四舍五入的量化方式確定溫度寄存器的最低有效位。在計數器2停止計數后,比較器將計數器1中的計數剩余值轉換為溫度值后與0.25℃進行比較,若低于0.25℃,溫度寄存器的最低位就置0;若高于0.25℃,最低位就置1;若高于0.75℃時,溫度寄存器的最低位就進位然后置0。這樣,經過比較后所得的溫度寄存器的值就是最終讀取的溫度值了,其最后位代表0.5℃,四舍五入最大量化誤差為±1/2LSB,即0.25℃。
溫度寄存器中的溫度值以9位數據格式表示,最高位為符號位,其余8位以二進制補碼形式表示溫度值。測溫結束時,這9位數據轉存到暫存存儲器的前兩個字節中,符號位占用第一字節,8位溫度數據占據第二字節。
DS18B20測量溫度時使用特有的溫度測量技術。DS18B20內部的低溫度系數振蕩器能產生穩定的頻率信號;同樣的,高溫度系數振蕩器則將被測溫度轉換成頻率信號。當計數門打開時,DS18B20進行計數,計數門開通時間由高溫度系數振蕩器決定。芯片內部還有斜率累加器,可對頻率的非線性度加以補償,測量結果存入溫度寄存器中。一般情況下的溫度值應該為9位,但因符號位擴展成高8位,所以最后以16位補碼形式讀出。
DS18B20工作過程一般遵循以下協議:初始化——ROM操作命令——存儲器操作命令——處理數據。
3.3 DS18B20的測溫原理3.3.1 測溫原理每一片DSl8B20在其ROM中都存有其唯一的48位序列號,在出廠前已寫入片內ROM 中。主機在進入操作程序前必須用讀ROM(33H)命令將該DSl8B20的序列號讀出。ROM命令代碼見表3.1。
程序可以先跳過ROM,啟動所有DSl8B20進行溫度變換,之后通過匹配ROM,再逐一地讀回每個DSl8B20的溫度數據。
DS18B20的測溫原理,低溫度系數晶振的振蕩頻率受溫度的影響很小,用于產生固定頻率的脈沖信號送給減法計數器1,高溫度系數晶振隨溫度變化其震蕩頻率明顯改變,所產生的信號作為減法計數器2的脈沖輸入,還隱含著計數門,當計數門打開時,DS18B20就對低溫度系數振蕩器產生的時鐘脈沖后進行計數,進而完成溫度測量。計數門的開啟時間由高溫度系數振蕩器來決定,每次測量前,首先將-55 ℃所對應的基數分別置入減法計數器1和溫度寄存器中,減法計數器1和溫度寄存器被預置在-55 ℃所對應的一個基數值。減法計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當減法計數器1的預置值減到0時溫度寄存器的值將加1,減法計數器1的預置將重新被裝入,減法計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環直到減法計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度。圖3.2中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正減法計數器的預置值,只要計數門仍未關閉就重復上述過程,直至溫度寄存器值達到被測溫度值。
表3.1 ROM操作命令
| | |
| | |
| | 發出此命令之后,接著發出64位ROM編碼,訪問單線總線上與該編碼相對應的DS18B20 使之作出響應,為下一步對該DS18B20的讀寫作準備 |
| | 用于確定掛接在同一總線上DS18B20的個數和識別64位ROM地址,為操作各器件作好準備 |
| | 忽略64位ROM地址,直接向DS18B20發溫度變換命令,適用于單片工作。 |
| | 執行后,只有溫度超過設定值上限或者下限的片子才做出響應 |
| | 啟動DS18B20進行溫度轉換,轉換時間最長為500MS,結果存入內部9字節RAM中 |
| | |
| | 發出向內部RAM的第3,4字節寫上、下限溫度數據命令,緊跟讀命令之后,是傳送兩字節的數據 |
| | 將E2PRAM中第3,4字節內容復制到E2PRAM中 |
| | |
| | 讀DS18B20的供電模式,寄生供電時DS18B20發送“0”,外接電源供電DS18B20發送“1” |
圖3.2測溫原理內部裝置
3.3.2 DS18B20的溫度采集過程由于DS18B20單線通信功能是分時完成的,他有嚴格的時隙概念,因此讀寫時序很重要,系統對DS18B20的各種操作必須按協議進行。操作協議為:初始化DS18B20(發復位脈沖)→發ROM功能命令→發存儲器操作命令→處理數據。溫度的采集流程如圖3.3所示。
圖3.3 DS18B20測溫流程
為防止斷電后密碼丟失,特在此項目設計中加入了以AT24C16為核心的存儲模塊。其電路原理圖如下所示:

AT24c16,是IIc總線協議的通信方式。單片機本身不具有IIc通行的硬件設備,因此采用軟件模擬的方式完成與單片機的通信。
摘抄文獻:
IIC總線工作原理
I2C總線進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩定,只有在時鐘線上的信號為低電平期間,數據線上的高電平或低電平狀態才允許變化。
起始和終止信號 :SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。
數據傳送格式(1)字節傳送與應答
每一個字節必須保證是8位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的字節后面都必須跟隨一位應答位(即一幀共有9位)。如果一段時間內沒有收到從機的應答信號,則自動認為從機已正確接收到數據。
AT24C16的芯片地址如下圖,1010為固定,A0,A1,A2正好與芯片的1,2,3引角對應,為當前電路中的地址選擇線,三根線可選擇8個芯片同時連接在電路中,當要與哪個芯片通信時傳送相應的地址即可與該芯片建立連接,TX-1B實驗板上三根地址線都為0。最后一位R/W為告訴從機下一字節數據是要讀還是寫,0為寫入,1為讀出。
AT24C016芯片地址(0xa0為寫,0xa1為讀)
任一地址寫入數據格式
操作時序圖如下:

下面是本項目的源程序:
//*************************************************
//功能:發送非應答信號
void nack_24c16()
{
sda_24c16=1;
delay_3us();
delay_3us();
scl_24c16=1;
delay_3us();
delay_3us();
scl_24c16=0;
sda_24c16=0;
}
//*************************************************
//功能:發送IIC停止信號
void stop_24c16()
{
sda_24c16=0;
scl_24c16=1;
delay_3us();
delay_3us();
sda_24c16=1;
delay_3us();
delay_3us();
scl_24c16=0;
}
//*************************************************
//功能:發送啟動通訊的信號
void star_24c16()
{
sda_24c16=1;
scl_24c16=1;
delay_3us();
delay_3us();
sda_24c16=0;
delay_3us();
delay_3us();
scl_24c16=0;
}
//****************************************************
//功能:判斷應答或非應答
//說明:通訊出錯時標志為1,否則為0
void cack_24c16()
{
scl_24c16=0;
sda_24c16=1;
delay_3us();
scl_24c16=1;
flag12=0;//清除錯誤標志
if(sda_24c16)flag12=1;
scl_24c16=0;
}
//****************************************************
//功能:發送應答信號
void mack_24c16()
{
sda_24c16=0;
scl_24c16=1;
delay_3us();
delay_3us();
scl_24c16=0;
sda_24c16=1;
}
//*************************************************
//功能:向24C16寫入一字節的數據
void w1byte_24c16(uchar byte1)
{
uchar i=8;
while(i--)
{
delay_3us();
delay_3us();
delay_3us();
if(byte1 & 0x80)
{sda_24c16=1;}
else
{sda_24c16=0;}
delay_3us();
delay_3us();
delay_3us();
scl_24c16=1;
delay_3us();
delay_3us();
delay_3us();
scl_24c16=0;
byte1<<=1;
}
}
//****************************************************
//功能:從24C16中讀出一字節的數據
uchar rd1byte_24c16(void)//;讀1字節子程序(通用)讀出的數據存放在30H中
{
uchar i;
uchar ddata=0;
sda_24c16=1;//置IO口為1,準備讀入數據
for(i=0;i<8;i++)
{
ddata<<=1;
delay_3us();
delay_3us();
delay_3us();
scl_24c16=1;
if(sda_24c16) ddata++;
delay_3us();
delay_3us();
delay_3us();
scl_24c16=0;
}
return ddata;
}
1
第四章 單片機接口設計4.1 設計原則DS18B20有2種供電方式,一種是直流電源,還有一種是寄生蟲方式供電。采用電源供電方式,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。電源是利用直流穩壓電源。當DS18B20處于寫存儲器操作和溫度A/D變換操作時,總線上必須有強的上拉,上拉開啟時間最大為10 μs。采用寄生電源供電方式是VDD和GND端均接地。由于單線制只有一根線,因此發送接收口必須是三狀態的。主機控制DS18B20完成溫度轉換必須經過3個步驟:
4.2 單片機引腳連接4.2.1 單片機引腳圖單片機引腳如圖4.1所示。
圖4.1單片機引腳
4.2.2 串口引腳串口引腳的連接圖如附錄1。
第五章 硬件電路設計5.1 主要硬件電路設計硬件電路主要包括:顯示電路,DS18B20溫度傳感器檢測電路,按鍵電路,晶振電路,二極管顯示報警電路,電源電路。
(1) 顯示電路
顯示電路采用了7段共陰數碼管掃描電路,通過單片機的P0.0到P0.7八個端口接數碼管的八個引腳,數碼管的9號引腳接地。用來顯示當前檢測的溫度值,精確度為0.1。如圖5.1所示。節約了單片機的輸出端口,便于程序的編寫。
本設計中還有一組數碼管由P2.0到P2.7連接,除接口不同外其他一樣,如圖5.2。

圖5.2顯示電路
(2) DS18B20溫度傳感器檢測電路
溫度采集通過數字化的溫度傳感器DS18B20,通過QD接向單片機的P3.0口。
DS18B20溫度傳感器電路如圖5.3所示。

圖5.3 溫度傳感器電路引腳圖
(3) 按鍵電路
按鍵電路如圖5.4所示。由K2、K3、K4三個按鍵控制上、下限溫度值。P3.1接口接K4按鍵。P3.2接口接入K3按鍵。P3.3接口接K2按鍵。
1.K2溫度上下限減少鍵:減少溫度上下限的值。
2.K3溫度上下限增加鍵:增加溫度上下限的值。
3.K4溫控開關鍵:進入溫控的切換鍵。

圖5.4 按鍵電路圖
(4) 晶振控制電路
晶振采用的是12MHZ的標準晶振。接入單片機的XTAL1、XTAL2。
晶振控制電路如圖5.5所示。

圖5.5 晶振控制電路圖
(5) 復位電路
復位電路采用了人工復位的方式,按下按鍵K1使單片機復位。直接接到單片機的RESET引腳。
復位電路如圖5.6所示

圖5.6 復位電路圖
(6)二極管顯示報警電路
二極管顯示報警電路如圖5.7所示。通過單片機的P3.4和P3.5兩個端口送出,采用的是高電平驅動,使其發光發出警告。

圖5.7 二極管顯示電路
(8)電源部分
電源部分才用的是直流穩壓電源,產生5V的穩定直流電壓。電源設計部分如圖5.8所示。

圖5.8 電源部分電路
5.2 軟件系統設計5.2.1 軟件系統設計一個應用系統要完成各項功能,首先必須有較完善的硬件作保證。同時還必須得到相應設計合理的軟件的支持,尤其是微機應用高速發展的今天,許多由硬件完成的工作,都可通過軟件編程而代替。甚至有些必須采用很復雜的硬件電路才能完成的工作,用軟件編程有時會變得很簡單,如數字濾波,信號處理等。因此充分利用其內部豐富的硬件資源和軟件資源,采用與C51系列單片機相對應的51匯編語言和結構化程序設計方法進行軟件編程。
程序設計語言有三種:機器語言、匯編語言和高級語言。機器語言是機器唯一能“懂”的語言,用匯編語言或高級語言編寫的程序(稱為源程序)最終都必須翻譯成機器語言的程序(成為目標程序),計算機才能“看懂”,然后逐一執行。
高級語言是面向問題和計算過程的語言,它可通過于各種不同的計算機,用戶編程時不必仔細了解所用的計算機的具體性能與指令系統,而且語句的功能強,常常一個語句已相當于很多條計算機指令,于是用高級語言編制程序的速度比較快,也便于學習和交流,但是本系統卻選用了匯編語言。原因在于,本系統是編制程序工作量不大、規模較小的單片機微控制系統,使用匯編語言可以不用像高級語言那樣占用較多的存儲空間,適合于存儲容量較小的系統。同時,本系統對位處理要求很高,需要解決大量的邏輯控制問題。
51指令系統的指令長度較短,它在存儲空間和執行時間方面具有較高的效率,編成的程序占用內存單元少,執行也非常的快捷,與本系統的應用要求很適合。而且AT89C—51指令系統有豐富的位操作(或稱位處理)指令,可以形成一個相當完整的位操作指令子集,這是AT89C—51指令系統主要的優點之一。對于要求反應靈敏與控制及時的工控、檢測等實時控制系統以及要求體積小、系統小的許多“電腦化”產品,可以充分體現出匯編語言簡明、整齊、執行時間短和易于使用的特點。
本裝置的軟件包括主程序、讀出溫度子程序、復位應答子程序、寫入子程序、以及有關DS18B20的程序(初始化子程序、寫程序和讀程序)。
5.2.2 程序組成系統程序主要包括主程序,讀出溫度子程序,寫入子程序,門限調節子程序等。
1)主程序
主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,溫度測量每1s進行一次。這樣可以在一秒之內測量一次被測溫度,其程序流程見圖5.9所示。
通過調用讀溫度子程序把存入內存儲中的整數部分與小數部分分開存放在不同的兩個單元中,然后通過調用顯示子程序顯示出來。
圖5.9 主程序流程圖
2)讀出溫度子程序
讀出溫度子程序的主要功能是讀出RAM中的9字節,在讀出時需進行CRC校驗,校驗有錯時不進行溫度數據的改寫,程序流程圖如圖5.10所示。
DS18B20的各個命令對時序的要求特別嚴格,所以必須按照所要求的時序才能達到預期的目的,同時,要注意讀進來的是高位在后低位在前,共有12位數,小數4位,整數7位,還有一位符號位。
結束語
本文詳細講述了系統設計方案,并給出了相關程序流程。本設計應用性比較強,可以應用在倉庫溫度、大棚溫度、機房溫度、水池等的監控。另外,如果把本設計方案擴展為多點溫度控制,加上上位機,則可以實現遠程溫度監控系統,將具有更大的應用價值。
本文的創新點在于詳細設計了基于單片機AT89C51 的溫度監控系統,設計程序已經.此系統可廣泛用于溫度在DS18B20 測溫范圍之內的場合,有良好的應用前景。由于單片機的各種優越的特性,使得它的經濟效益顯的更加突出,有很好的實用性。
附錄附錄1

原理電路總設計圖