畢業(yè)設(shè)計(jì)--基于單片機(jī)的恒溫控制系統(tǒng)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  1 緒論 </b></p><p>  溫度是表征物體冷熱程度的物理量。在很多生產(chǎn)過(guò)程中,特別是在冶金、化工、建材、食品、機(jī)械、石油等工業(yè)中,溫度的測(cè)量和控制都直接和安全生產(chǎn)、提高生產(chǎn)效率、保證產(chǎn)品質(zhì)量、節(jié)約能源等重大技術(shù)經(jīng)濟(jì)指標(biāo)相聯(lián)系。因此,溫度的測(cè)量與控制在國(guó)民經(jīng)濟(jì)各個(gè)領(lǐng)域中均受到了相當(dāng)程度的重視。</p><p>  單片機(jī)系統(tǒng)

2、的開(kāi)發(fā)應(yīng)用給現(xiàn)代工業(yè)測(cè)控領(lǐng)域帶來(lái)了一次新的技術(shù)革命,自動(dòng)化、智能化均離不開(kāi)單片機(jī)的應(yīng)用。將單片機(jī)控制方法運(yùn)用到溫度控制系統(tǒng)中,可以克服溫度控制系統(tǒng)中存在的嚴(yán)重滯后現(xiàn)象,同時(shí)在提高采樣頻率的基礎(chǔ)上可以很大程度的提高控制效果和控制精度?,F(xiàn)代自動(dòng)控制越來(lái)越朝著智能化發(fā)展,在很多自動(dòng)控制系統(tǒng)中都用到了工控機(jī),小型機(jī)、甚至是巨型機(jī)處理機(jī)等,當(dāng)然這些處理機(jī)有一個(gè)很大的特點(diǎn),那就是很高的運(yùn)行速度,很大的內(nèi)存,大量的數(shù)據(jù)存儲(chǔ)器。但隨之而來(lái)的是巨額的成本

3、。在很多的小型系統(tǒng)中,處理機(jī)的成本占了系統(tǒng)成本的比例高達(dá)20%,而對(duì)于這些小型的系統(tǒng)來(lái)說(shuō),配置一個(gè)如此高速的處理機(jī)沒(méi)有任何必要,因?yàn)檫@些小系統(tǒng)追求經(jīng)濟(jì)效益,而不是最在乎系統(tǒng)的快速性,所以用成本低廉的單片機(jī)控制小型的,而又不是很復(fù)雜,不需要大量復(fù)雜運(yùn)算的系統(tǒng)中是非常適合的。 </p><p>  隨著電子技術(shù)以及應(yīng)用需求的發(fā)展,單片機(jī)技術(shù)得到了迅速的發(fā)展,在高集成度,高速度,低功耗以及高性能方面取得了很大的進(jìn)展?,F(xiàn)

4、在完全可以運(yùn)用單片機(jī)和電子溫度傳感器對(duì)某處進(jìn)行溫度檢測(cè),而且可以很容易地做到多點(diǎn)的溫度檢測(cè),如果對(duì)此原理圖稍加改進(jìn),還可以進(jìn)行不同地點(diǎn)的實(shí)時(shí)溫度檢測(cè)和控制。</p><p>  1.1 研究的目的和意義</p><p>  溫度是工業(yè)生產(chǎn)中主要被控參數(shù)之一,溫度控制自然是生產(chǎn)的重要控制過(guò)程。工業(yè)生產(chǎn)中溫度很難控制,對(duì)于要求嚴(yán)格的的場(chǎng)合,溫度過(guò)高或過(guò)低將嚴(yán)重影響工業(yè)生產(chǎn)的產(chǎn)質(zhì)量及生產(chǎn)效率,

5、降低生產(chǎn)效益。這就需要設(shè)計(jì)一個(gè)良好溫度控制器,隨時(shí)向用戶(hù)顯示溫度,而且能夠較好控制。單片機(jī)具有和普通計(jì)算機(jī)類(lèi)似的強(qiáng)大數(shù)據(jù)處理能力,結(jié)合PID,程序控制可大大提高控制效力,提高生產(chǎn)效益[1]。</p><p>  例如鋼鐵生產(chǎn)過(guò)程中,按照工藝條件的規(guī)定保持一定的溫度才能保證產(chǎn)品質(zhì)量和設(shè)備的安全。對(duì)電氣設(shè)備進(jìn)行溫度的監(jiān)控,例如高壓開(kāi)關(guān)、變壓器的出線(xiàn)套管等,判斷可能存在的熱缺陷,進(jìn)而能及時(shí)發(fā)現(xiàn)、處理、預(yù)防重大事故的發(fā)生

6、。因此研究溫度控制儀具有重要的意義[2]。</p><p>  在單片機(jī)溫度測(cè)量系統(tǒng)中的關(guān)鍵是測(cè)量溫度、控制溫度和保持溫度,溫度測(cè)量是工業(yè)對(duì)象中主要的被控參數(shù)之一。因此,單片機(jī)溫度測(cè)量則是對(duì)溫度進(jìn)行有效的測(cè)量,并且能夠在工業(yè)生產(chǎn)中得到了廣泛的應(yīng)用,尤其在電力工程、化工生產(chǎn)、機(jī)械制造、冶金工業(yè)等重要工業(yè)領(lǐng)域中,擔(dān)負(fù)著重要的測(cè)量任務(wù)。在日常生活中,也可廣泛實(shí)用于地?zé)?、空調(diào)器、電加熱器等各種家庭室溫測(cè)量及工業(yè)設(shè)備溫度測(cè)

7、量場(chǎng)合[3]。</p><p>  目前市場(chǎng)上熱水器的控制系統(tǒng)大多存在功能單一、操作復(fù)雜、控制不方便等問(wèn)題,很多控制器只具有溫度和水位顯示功能,不具有溫度控制功能.即使熱水器具有輔助加熱功能。也可能由于加熱時(shí)間不能控制而產(chǎn)生過(guò)燒,從而浪費(fèi)電能。本文設(shè)計(jì)的熱水器控制系統(tǒng)以51單片機(jī)為檢測(cè)控制中心單元,具有溫度設(shè)定與控制功能。該控制器和以往顯示儀相比具有性?xún)r(jià)比高、溫度控制與顯示精度高、使用方便和性能穩(wěn)定等優(yōu)點(diǎn),提高了

8、電能的使用效率,具有可觀的經(jīng)濟(jì)效益和社會(huì)效益[4]。</p><p>  1.2 國(guó)內(nèi)外發(fā)展?fàn)顩r</p><p>  溫度控制采用單片機(jī)設(shè)計(jì)的全數(shù)字儀表,是常規(guī)儀表的升級(jí)產(chǎn)品。溫度控制的發(fā)展引入單片機(jī)之后,有可能降低對(duì)某些硬件電路的要求,但這絕不是說(shuō)可以忽略測(cè)試電路本身的重要性,尤其是直接獲取被測(cè)信號(hào)的傳感器部分,仍應(yīng)給予充分的重視,有時(shí)提高整臺(tái)儀器的性能的關(guān)鍵仍然在于測(cè)試電路,尤其是傳

9、感器的改進(jìn)。現(xiàn)在傳感器也正在受著微電子技術(shù)的影響,不斷發(fā)展變化。傳感器正朝著小型、固態(tài)、多功能和集成化的方向發(fā)展。 近年來(lái),溫度控制的發(fā)展尤為迅速。國(guó)內(nèi)外市場(chǎng)上已經(jīng)出現(xiàn)了多種多樣溫度控制儀表,應(yīng)用于社會(huì)的各個(gè)方面。例如能夠進(jìn)行程序控溫的智能多段溫度控制儀,能夠?qū)崿F(xiàn)數(shù)字PID和各種復(fù)雜控制規(guī)律的智能式溫度調(diào)節(jié)器等[5]。</p><p>  水溫系統(tǒng)的傳遞函數(shù)事先難以精確獲得,因而很難判斷哪一種控制方法能夠滿(mǎn)足系統(tǒng)

10、對(duì)控制品質(zhì)的要求。但從對(duì)控制方法的分析來(lái)看,PID控制方法最適合本例采用。另一方面,由于可以采用單片機(jī)實(shí)現(xiàn)控制過(guò)程,無(wú)論采用上述哪一種控制方法都不會(huì)增加系統(tǒng)硬件成本,而只需對(duì)軟件作相應(yīng)改變即可實(shí)現(xiàn)不同的控制方案。因此本系統(tǒng)可以采用PID的控制方式,以最大限度地滿(mǎn)足系統(tǒng)對(duì)諸如控制精度、調(diào)節(jié)時(shí)間和超調(diào)量等控制品質(zhì)的要求[6]。</p><p>  傳統(tǒng)的一位式模擬控制方案,選用模擬電路,用電位器設(shè)定值,反饋的溫度值和

11、設(shè)定值比較后,決定加熱或不加熱。其特點(diǎn)是電路簡(jiǎn)單,易于實(shí)現(xiàn),但是系統(tǒng)所得結(jié)果的精度不高并且調(diào)節(jié)動(dòng)作頻繁,系統(tǒng)靜態(tài)差大、不穩(wěn)定。系統(tǒng)受環(huán)境影響大,不能實(shí)現(xiàn)復(fù)雜的控制算法,不能用數(shù)碼管顯示,不能用鍵盤(pán)設(shè)定。</p><p>  傳統(tǒng)的二位式模擬控制方案,其基本思想與方案一相同,但由于采用上下限比較電路,所以控制精度有所提高。這種方法還是模擬控制方式,因此也不能實(shí)現(xiàn)復(fù)雜的控制算法使控制精度做得較高,而且不能用數(shù)碼管顯示

12、,對(duì)鍵盤(pán)進(jìn)行設(shè)定[8]。</p><p>  現(xiàn)在國(guó)內(nèi)外一般采用經(jīng)典的溫度控制系統(tǒng)。采用模擬溫度傳感器對(duì)加熱杯的溫度進(jìn)行采樣,通過(guò)放大電路變換為 0~5V 的電壓信號(hào),經(jīng)過(guò)A/D 轉(zhuǎn)換,保存在采樣值單元;利用鍵盤(pán)輸入設(shè)定溫度,經(jīng)溫度標(biāo)度轉(zhuǎn)換轉(zhuǎn)化成二進(jìn)制數(shù),保存在片內(nèi)設(shè)定值單元;然后調(diào)顯示子程序,多次顯示設(shè)定溫度和采樣溫度,再把采樣值與設(shè)定值進(jìn)行 PID 運(yùn)算得出控制量,用其去調(diào)節(jié)可控硅觸發(fā)端的通斷,實(shí)現(xiàn)對(duì)電阻絲加

13、熱時(shí)間的控制, 以此來(lái)調(diào)節(jié)水溫使其基本保持恒定[9]。</p><p>  采用單片機(jī)AT89C52設(shè)計(jì)溫度實(shí)時(shí)測(cè)量及控制系統(tǒng)。單片機(jī)AT89C52能夠根據(jù)溫度傳感器DS18B20所采集的溫度數(shù)據(jù)來(lái)控制加熱器或致冷器的啟停,從而把溫度控制在設(shè)定的范圍之內(nèi)。在溫控開(kāi)關(guān)被激活的情況下,當(dāng)溫度低于設(shè)定的下限時(shí),單片機(jī)啟動(dòng)加熱器加熱,同時(shí)點(diǎn)亮綠色發(fā)光二極管,當(dāng)溫度高于設(shè)定的上限時(shí),單片機(jī)啟動(dòng)致冷器降溫,同時(shí)點(diǎn)亮紅色發(fā)光二

14、極管。所有溫度數(shù)據(jù)均通過(guò)液晶顯示器LCM1602顯示出來(lái)。為了防止單片機(jī)掉電引起的數(shù)據(jù)丟失,溫度上下限的設(shè)定值存儲(chǔ)在AT24C02B中[10]。</p><p>  采用一線(xiàn)制數(shù)字溫度傳感器DS18B20來(lái)作為溫度傳感器。傳感器輸出信號(hào)進(jìn)4.7K的上拉電阻直接接到單片機(jī)的P1.0引腳上。DS18B20溫度傳感器是美國(guó)達(dá)拉斯(DALLAS)半導(dǎo)體公司推出的應(yīng)用單總線(xiàn)技術(shù)的數(shù)字溫度傳感器。該器件將半導(dǎo)體溫敏器件、A/

15、D轉(zhuǎn)換器、存儲(chǔ)器等做在一個(gè)很小的集成電路芯片上。溫度傳感器之所以選擇單線(xiàn)數(shù)字器件DS18B20,是在經(jīng)過(guò)多方面比較和考慮后決定的[11]。</p><p>  從硬件和軟件兩方面來(lái)講述水溫自動(dòng)控制過(guò)程,在控制過(guò)程中主要應(yīng)用AT89C52、ADC0809、LED顯示器、LM324比較器,而主要是通過(guò) DS18B20數(shù)字溫度傳感器采集環(huán)境溫度,以單片機(jī)為核心控制部件,并通過(guò)四位數(shù)碼管顯示實(shí)時(shí)溫度的一種數(shù)字溫度計(jì)。軟件

16、方面采用匯編語(yǔ)言來(lái)進(jìn)行程序設(shè)計(jì),使指令的執(zhí)行速度快,節(jié)省存儲(chǔ)空間。為了便于擴(kuò)展和更改,軟件的設(shè)計(jì)采用模塊化結(jié)構(gòu),使程序設(shè)計(jì)的邏輯關(guān)系更加簡(jiǎn)潔明了,使硬件在軟件的控制下協(xié)調(diào)運(yùn)作。 而系統(tǒng)的過(guò)程則是:首先,通過(guò)設(shè)置按鍵,設(shè)定恒溫運(yùn)行時(shí)的溫度值,并且用數(shù)碼管顯示這個(gè)溫度值.然后,在運(yùn)行過(guò)程中將采樣的溫度模擬量送入A/D轉(zhuǎn)換器中進(jìn)行模擬數(shù)字轉(zhuǎn)換,再將轉(zhuǎn)換后的數(shù)字量用數(shù)碼管進(jìn)行顯示,最后用單片機(jī)來(lái)控制加熱器,進(jìn)行加熱或停止加熱,直到能在規(guī)定的溫度

17、下恒溫加熱[12]。</p><p><b>  2 系統(tǒng)總體設(shè)計(jì)</b></p><p>  2.1 系統(tǒng)設(shè)計(jì)任務(wù)與要求</p><p>  該溫度自動(dòng)控制系統(tǒng)采用AT89C52單片機(jī)為主控芯片,傳感器采用數(shù)字溫度傳感器DS18B20,實(shí)現(xiàn)對(duì)溫度的檢測(cè)和控制。</p><p><b>  技術(shù)要求:<

18、;/b></p><p>  1、能夠連續(xù)測(cè)量水的溫度值,用十進(jìn)制數(shù)碼管來(lái)顯示實(shí)際溫度,最小單位為1℃。</p><p>  2、能夠設(shè)定水的溫度值,設(shè)定范圍是30℃~90℃,溫度誤差≤±0.5℃。</p><p>  3、能夠?qū)崿F(xiàn)水溫的自動(dòng)控制,如果設(shè)定水溫為80℃,則能使水溫保持恒定在80℃的溫度下運(yùn)行。</p><p>

19、  4、用單片機(jī)AT89C52控制,通過(guò)按鍵來(lái)控制水溫的設(shè)定值,數(shù)值采用數(shù)碼管顯示。</p><p>  該溫度自動(dòng)控制系統(tǒng)由溫度信號(hào)采樣電路,鍵盤(pán)及顯示電路,溫度控制電路,報(bào)警電路,時(shí)鐘信號(hào)電路等構(gòu)成,并運(yùn)用PID算法進(jìn)行溫度控制和調(diào)整。</p><p>  根據(jù)設(shè)計(jì)任務(wù),詳細(xì)分析溫度自動(dòng)控制系統(tǒng)的設(shè)計(jì)需求,并進(jìn)行軟硬件的總體設(shè)計(jì)。由鍵盤(pán)電路輸入設(shè)定溫度信號(hào)給單片機(jī),溫度信號(hào)采集電路采集

20、現(xiàn)場(chǎng)溫度信號(hào)給單片機(jī),單片機(jī)根據(jù)輸入與反饋信號(hào)的偏差進(jìn)行PID計(jì)算,輸出反饋量給溫度控制電路,實(shí)現(xiàn)升溫。顯示電路實(shí)現(xiàn)現(xiàn)場(chǎng)溫度的實(shí)時(shí)監(jiān)控。設(shè)計(jì)人員需完成全部硬件和軟件的設(shè)計(jì),并利 Altium Designer 6.0仿真軟件對(duì)設(shè)計(jì)結(jié)果進(jìn)行驗(yàn)證。</p><p>  2.2 系統(tǒng)方案的選擇</p><p>  在這個(gè)系統(tǒng)中我們從性能及設(shè)計(jì)成本考慮,我們選擇AT89C52芯片。AT89C52

21、的廣泛使用,使單片機(jī)的價(jià)格大大下降。在溫度傳感器的選擇上我們采用溫度芯片DS18B20測(cè)量溫度。該芯片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測(cè)溫元件,且此元件線(xiàn)形較好。該芯片直接向單片機(jī)傳輸數(shù)字信號(hào),便于單片機(jī)處理及控制。本制作的最大特點(diǎn)之一就是直接采用溫度芯片對(duì)溫度進(jìn)行測(cè)量,使數(shù)據(jù)傳輸和處理簡(jiǎn)單化。采用溫度芯片DS18B20測(cè)量溫度,體現(xiàn)了作品芯片化的這個(gè)趨勢(shì)。部分功能電路的集成,使總體電路更簡(jiǎn)潔,搭建電路和焊接電路時(shí)更快。而且,集成塊的使

22、用,有效地避免外界的干擾,提高測(cè)量電路的精確度。在這個(gè)過(guò)程中,我們通過(guò)單片機(jī)將傳感器所測(cè)量出來(lái)的溫度通過(guò)數(shù)碼管可以顯示出來(lái)。這樣就能實(shí)時(shí)顯示溫度情況[13]。</p><p>  本設(shè)計(jì)采用了PID控制。在工程實(shí)際中,PID控制器以其結(jié)構(gòu)簡(jiǎn)單、穩(wěn)定性好、工作可靠、調(diào)整方便而成為工業(yè)控制的主要技術(shù)之一。當(dāng)被控對(duì)象的結(jié)構(gòu)和參數(shù)不能完全掌握,或得不到精確的數(shù)學(xué)模型,控制理論的其他技術(shù)也難以采用,系統(tǒng)控制器的結(jié)構(gòu)和參須依

23、靠經(jīng)驗(yàn)和現(xiàn)場(chǎng)調(diào)試來(lái)確定時(shí),應(yīng)用PID控制技術(shù)最為方便。    PID控制器的參數(shù)整定是控制系統(tǒng)設(shè)計(jì)的核心內(nèi)容。它是根據(jù)被控過(guò)程的特性確定PID控制器的比例系數(shù)、積分時(shí)問(wèn)和微分時(shí)間的大小。PID控制器參數(shù)整定的方法概括起來(lái)有兩大類(lèi):一是理論計(jì)算整定法。它主要是依據(jù)系統(tǒng)的數(shù)學(xué)模型,經(jīng)過(guò)理論計(jì)算確定控制器參數(shù)。這種方法所得到的計(jì)算數(shù)據(jù)未必可以直接用,還必須通過(guò)工程實(shí)際進(jìn)行調(diào)整和修改。二是工程整定方法,它主要

24、依賴(lài)工程經(jīng)驗(yàn),直接且方法簡(jiǎn)單、易于掌握,在實(shí)際中被廣泛應(yīng)用[14]。</p><p>  3 器件和模塊的選用</p><p>  3.1 AT89C52單片機(jī)</p><p>  AT89C52是一種低功耗、高性能8位微控制器,具有8K 在系可編程Flash 存儲(chǔ)器。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU

25、 和在系統(tǒng)可編程Flash,使AT89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、有效的解決方案。 </p><p>  AT89C52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線(xiàn),看門(mén)狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89

26、C52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止[15]。 </p><p><b>  其主要工作特性為:</b></p><p

27、>  1、內(nèi)含8KB的Flash存儲(chǔ)器,擦寫(xiě)次數(shù)達(dá)1000次;</p><p>  2、內(nèi)含128字節(jié)的RAM;</p><p>  3、具有32根可編程I/O線(xiàn);</p><p>  4、具有2個(gè)16位可編程定時(shí)器;</p><p>  5、具有6個(gè)中斷源、5個(gè)中斷矢量、2級(jí)優(yōu)先權(quán)的中斷結(jié)構(gòu);</p><p>

28、  6、具有1個(gè)全雙工的可編程串行通信接口;</p><p>  7、具有1個(gè)數(shù)據(jù)指針DPTR;</p><p>  8、兩種低功耗工作模式,即空閑模式和掉電模式;</p><p>  9、具有可編程的3級(jí)程序鎖定位;</p><p>  10、工作電源電壓為5±1.2V,典型值為5V;</p><p>  

29、11、最高工作頻率為24MHz。</p><p>  引腳排列如圖3.1所示。</p><p>  圖3.1 AT89C52引腳排列</p><p>  3.2 DS18B20傳感器</p><p>  DS18B20原理與特性:采用了DS18B20單總線(xiàn)可編程溫度傳感器,來(lái)實(shí)現(xiàn)對(duì)溫度的采集和轉(zhuǎn)換,大大簡(jiǎn)化了電路的復(fù)雜度,以及算法的要求。

30、首先來(lái)介紹一下DS18B20這塊傳感器的特性及其功能: DSl8B20的管腳及特點(diǎn) DS18B20可編程溫度傳感器有3個(gè)管腳。內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。</p><p>  GND為接地線(xiàn),DQ為數(shù)據(jù)輸入輸出接口,通過(guò)一個(gè)較弱的上拉電阻與單片機(jī)相連。VDD為電源接口,既可由數(shù)據(jù)線(xiàn)提供電源,又可由外部提供電源,范圍3.0~5.5 V。本文使

31、用外部電源供電。</p><p><b>  主要特點(diǎn)有: </b></p><p>  1. 用戶(hù)可自設(shè)定報(bào)警上下限溫度值。 </p><p>  2.不需要外部組件,能測(cè)量-55~+125℃ 范圍內(nèi)的溫度。</p><p>  3.-10℃ ~+85℃ 范圍內(nèi)的測(cè)溫準(zhǔn)確度為±0.5℃ 。</p>

32、<p>  4.通過(guò)編程可實(shí)現(xiàn)9~l2位的數(shù)字讀數(shù)方式,可在至多750 ms內(nèi)將溫度轉(zhuǎn)換成12 位的數(shù)字,測(cè)溫分辨率可達(dá)0.0625℃ 。 </p><p>  5.獨(dú)特的單總線(xiàn)接口方式,與微處理器連接時(shí)僅需要一條線(xiàn)即可實(shí)現(xiàn)與微處理器雙向通訊。</p><p>  6.測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以“一線(xiàn)總線(xiàn)”串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能

33、力。</p><p>  7.負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。</p><p>  DS18B20支持多點(diǎn)組網(wǎng)的功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線(xiàn)上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫。DS18B20的讀寫(xiě)時(shí)序和測(cè)溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同DS18B20 為9位~12位A/D轉(zhuǎn)換精度,而DS1820為9位A/D轉(zhuǎn)換,雖然我們采用了高

34、精度的芯片,但在實(shí)際情況上由于技術(shù)問(wèn)題比較難實(shí)現(xiàn),而實(shí)際精度此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線(xiàn)性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。如下3.2的測(cè)溫原理圖不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。 DS18B20測(cè)溫原理如圖3.2所示:</p><p><b>  清0</b></p><p><b>  增加

35、</b></p><p><b>  停止</b></p><p>  圖3.2 DS18B20的測(cè)溫原理框圖</p><p>  圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。則高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃

36、所對(duì)應(yīng)的一個(gè)基數(shù)值時(shí)。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生脈沖信號(hào),進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開(kāi)始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值。 </p><p>  在DS18B20測(cè)溫程序設(shè)計(jì)中,向DS18B20發(fā)出溫度轉(zhuǎn)換命令后,程序要等待DS18B20的返回信號(hào),一旦某個(gè)DS18B20接觸不好

37、或斷線(xiàn),當(dāng)程序讀該DS18B20時(shí),將沒(méi)有返回信號(hào),程序進(jìn)入死循環(huán)。這一點(diǎn)在進(jìn)行DS1820硬件連接和軟件設(shè)計(jì)時(shí)也要給予一定的重視。測(cè)溫電纜線(xiàn)采用屏蔽4芯雙絞線(xiàn),其中有一對(duì)接地線(xiàn)與信號(hào)線(xiàn),另一組接VCC和地線(xiàn)。</p><p>  3.3 復(fù)位和時(shí)鐘電路的設(shè)計(jì)</p><p>  本系統(tǒng)中采用自動(dòng)復(fù)位和手動(dòng)復(fù)位鍵復(fù)位相的方式。系統(tǒng)時(shí)鐘電路設(shè)計(jì)采用內(nèi)部方式。AT89C52內(nèi)部有一個(gè)用于構(gòu)成

38、振蕩器的高增益反相放大器。這個(gè)放大器與作為反饋元件的片外晶體諧振器構(gòu)成一個(gè)自激振蕩器。外接晶體諧振器以及電容構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。本系統(tǒng)電路采用的晶體振蕩器頻率為11.0592MHz。采用這種頻率的晶體振蕩器的原因是可以方便的獲得標(biāo)準(zhǔn)的波特率。復(fù)位電路和時(shí)鐘電路如圖3.3所示。復(fù)位電路有上電自動(dòng)復(fù)位和按鈕手動(dòng)復(fù)位兩種。上電復(fù)位是利用電容充電來(lái)實(shí)現(xiàn)的,上電瞬間RST/VPD端的電位與VCC相同,隨著充電電流的減少,RS

39、T/VPD的電位逐漸下降,圖3.3中的10K的電阻是施密特觸發(fā)器輸入端的一個(gè)下拉電阻,時(shí)間常數(shù)為10*10-6*10*103s=100ms,只要Vcc的上升時(shí)間不超過(guò)1ms,振蕩器建立時(shí)間不超過(guò)10ms,這個(gè)時(shí)間常數(shù)足以保證完成復(fù)位操作。上電復(fù)位所需最短時(shí)間是震蕩周期建立時(shí)間加上2個(gè)機(jī)器周期時(shí)間。按鈕復(fù)位采用電平復(fù)位方式,按下復(fù)位電鈕時(shí),電源對(duì)外接電容充電,使RST/VPD端為高電平,復(fù)位按鈕松開(kāi)后,電容通過(guò)內(nèi)部下拉電阻放電,逐漸使RS

40、T/VPD端</p><p>  圖3.3 復(fù)位電路和時(shí)鐘電路</p><p>  3.4 溫度采集電路</p><p>  數(shù)據(jù)采集電路如圖3.4所示,1腳接地,2腳即為單總線(xiàn)數(shù)據(jù)口,3腳接電源。溫度傳感器DS18B20采集被控對(duì)象的實(shí)時(shí)溫度,提供給AT89C52的P3.5口作為數(shù)據(jù)輸入。</p><p>  圖3.4 數(shù)據(jù)采集電路<

41、;/p><p>  3.5 顯示電路的設(shè)計(jì)</p><p>  數(shù)碼管顯示部分,采用與單片機(jī)相連接,將溫度傳感器采集到的信息迅速轉(zhuǎn)化為可視溫度,增加了可讀性[17]。</p><p>  圖3.5 數(shù)碼管顯示電路圖</p><p><b>  3.6 溫度控制</b></p><p>  采用實(shí)時(shí)

42、控制的方法,主機(jī)AT89C52輸出溫度控制信號(hào),控制可控硅控制溫度控制電路。溫度控制電路主要由加熱器跟制冷氣構(gòu)成,使用前人可以對(duì)所需求的恒溫進(jìn)行設(shè)置,設(shè)定溫度通過(guò)數(shù)碼管可顯示。溫度設(shè)置完成后DS18B20采集環(huán)境中的溫度。采集到的溫度傳回單片機(jī),然后對(duì)設(shè)置溫度與采集的溫度進(jìn)行PID計(jì)算計(jì)算出控制量,AT89C52輸出溫度控制信號(hào),控制可控硅對(duì)加熱器或者制冷器開(kāi)始工作使溫度達(dá)到所需求的溫度保持恒定。當(dāng)溫度達(dá)到設(shè)定值時(shí)蜂鳴報(bào)警系統(tǒng)報(bào)警,一次

43、溫度控制完成。</p><p><b>  3.7 供電系統(tǒng)</b></p><p>  供電部分采用TL431構(gòu)成的恒壓源,TL431是一個(gè)有良好的熱穩(wěn)定性能的三端可調(diào)分流基準(zhǔn)源。他的輸出電壓用兩個(gè)電阻就可以任意的設(shè)置到從Verf(2.5V)到36V范圍內(nèi)的任何值。該器件的典型動(dòng)態(tài)阻抗為0.2Ω。其穩(wěn)壓電路圖如圖3.6:</p><p> 

44、 圖3.6 供電電路 </p><p>  4 PID控制和參數(shù)整定</p><p>  4.1 PID調(diào)節(jié)器控制原理</p><p>  PID控制器是一種線(xiàn)性控制器,一種它根據(jù)給定值rin(t)與實(shí)際輸出值yout(t)構(gòu)成控制偏差:</p><p>  Error(t)=rin(t)-yout(t)</p><p

45、>  PID控制就是對(duì)偏差信號(hào)進(jìn)行比例、積分、微分運(yùn)算后,形成一種控制規(guī)律。即,控制器的輸出為:</p><p><b> ?。?.1)</b></p><p>  或?qū)懗蓚鬟f函數(shù)的形式:</p><p><b> ?。?.2)</b></p><p>  式中, kp——比例系數(shù);Ti——積

46、分時(shí)間常數(shù);Td——微分時(shí)間常數(shù)。簡(jiǎn)單說(shuō)來(lái),PID控制器各校正環(huán)節(jié)的作用如下:</p><p>  比例環(huán)節(jié):成比例地反映控制系統(tǒng)的偏差信號(hào)error(t),偏差一旦產(chǎn)生,控制器立即產(chǎn)生控制作用,以減小偏差。</p><p>  比例控制: Gc(s)= Kp </p><p>  積分環(huán)節(jié):主要用于消除靜差,提高系統(tǒng)的無(wú)差度。積分作用的強(qiáng)盡弱取決于積分 時(shí)間

47、常數(shù)Ti,Ti越大,積分作用越弱,反之則越強(qiáng)。</p><p>  積分控制: Gc(s) = Kp/T is</p><p>  微分環(huán)節(jié):反偏差信號(hào)的變化趨勢(shì)(變化速率),并能在偏差信號(hào)變得太大之前, 在系統(tǒng)中引入一個(gè)有效的早期修正信號(hào),從而加快系統(tǒng)的動(dòng)作速度,減少調(diào)節(jié)時(shí)間[7]。</p><p>  微分控制: Gc(s) =KpT ds</p&g

48、t;<p>  4.2 PID控制的分類(lèi)</p><p>  基本PID控制器的理想算式為</p><p><b>  (4.3)</b></p><p><b>  式中</b></p><p>  u(t)——控制器(也稱(chēng)調(diào)節(jié)器)的輸出;</p><p>

49、  e(t)——控制器的輸入(常常是設(shè)定值與被控量之差,即e(t)=r(t)-c(t));</p><p>  Kp——控制器的比例放大系數(shù);</p><p>  Ti ——控制器的積分時(shí)間;</p><p>  Td——控制器的微分時(shí)間。</p><p>  設(shè)u(k)為第k次采樣時(shí)刻控制器的輸出值,可得離散的PID算式</p>

50、<p><b>  (4.4) </b></p><p>  由于計(jì)算機(jī)的輸出u(k)直接控制執(zhí)行機(jī)構(gòu)(如閥門(mén)),u(k)的值與執(zhí)行機(jī)構(gòu)的位置(如閥門(mén)開(kāi)度)一一對(duì)應(yīng),所以稱(chēng)式(4.4)為位置式PID控制算法。</p><p>  位置式PID控制算法的缺點(diǎn):當(dāng)前采樣時(shí)刻的輸出與過(guò)去的各個(gè)狀態(tài)有關(guān),計(jì)算時(shí)要對(duì)e(k)進(jìn)行累加,運(yùn)算量大;而且控制器的輸出

51、u(k)對(duì)應(yīng)的是執(zhí)行機(jī)構(gòu)的實(shí)際位置,如果計(jì)算機(jī)出現(xiàn)故障,u(k)的大幅度變化會(huì)引起執(zhí)行機(jī)構(gòu)位置的大幅度變化。</p><p>  增量式只需計(jì)算增量,算式中不需要累加,控制增量的確定僅與最近幾次偏差采樣值有關(guān),當(dāng)出現(xiàn)計(jì)算誤差或精度不足時(shí),對(duì)控制量計(jì)算的影響較小,且較容易通過(guò)加權(quán)處理獲得比較好的控制效果。</p><p>  4.3 數(shù)字PID參數(shù)的整定</p><p&

52、gt;  PID控制器的參數(shù)整定是控制系統(tǒng)設(shè)計(jì)的核心內(nèi)容。它是根據(jù)被控過(guò)程的特性確定PID控制器的比例系數(shù)、積分時(shí)間和微分時(shí)間的大小。PID控制器參數(shù)整定的方法很多,概括起來(lái)有兩大類(lèi):一是理論計(jì)算整定法。它主要是依據(jù)系統(tǒng)的數(shù)學(xué)模型,經(jīng)過(guò)理論計(jì)算確定控制器參數(shù)。這種方法所得到的計(jì)算數(shù)據(jù)未必可以直接用,還必須通過(guò)工程實(shí)際進(jìn)行調(diào)整和修改。二是工程整定方法,它主要依賴(lài)工程經(jīng)驗(yàn),直接在控制系統(tǒng)的試驗(yàn)中進(jìn)行,且方法簡(jiǎn)單、易于掌握,在工程實(shí)際中被廣泛

53、采用。本設(shè)計(jì)采用PID歸一整定法把對(duì)控制臺(tái)三個(gè)參數(shù)(Kc、Ti、Td,)轉(zhuǎn)換為一個(gè)參數(shù)KP, 從而使問(wèn)題明顯簡(jiǎn)化。以達(dá)到控制器的特性與被控過(guò)程的特性相匹配,滿(mǎn)足某種反映控制系統(tǒng)質(zhì)量的性能指標(biāo)[15]。</p><p>  4.4 PID計(jì)算程序 </p><p>  PID調(diào)節(jié)規(guī)律的基本輸入輸出關(guān)系可用微分方程表示為:</p><p><b> ?。?.

54、5)</b></p><p>  式中為調(diào)節(jié)器的輸入誤差信號(hào),且</p><p><b> ?。?.6)</b></p><p>  其中:為給定值,為被控變量;</p><p>  為調(diào)節(jié)器的輸出控制信號(hào);</p><p><b>  為比例系數(shù);</b><

55、;/p><p><b>  為積分時(shí)間常數(shù);</b></p><p><b>  微分時(shí)間常數(shù)。</b></p><p>  計(jì)算機(jī)只能處理數(shù)字信號(hào),若采樣周期為T(mén)第n次采樣的輸入誤差為,且,輸出為,PID算法用的微分由差分代替,積分由代替,于是得到</p><p><b> ?。?.7)&l

56、t;/b></p><p><b>  寫(xiě)成遞推形式為</b></p><p><b>  △</b></p><p><b>  =</b></p><p><b>  =</b></p><p><b>  =&

57、lt;/b></p><p>  = (4.8)</p><p>  其中: (4.9)</p><p><b> ?。?.10)</b></p><p>&l

58、t;b> ?。?.11)</b></p><p>  顯然,PID計(jì)算△un只需要保留現(xiàn)時(shí)刻en以及以前的兩個(gè)偏差量en-1和en-2。初始化程序初值en-1= en-2 =0 通過(guò)采樣并根據(jù)參數(shù)KP、KD、KI以及en、en-1和en-2計(jì)算△un。</p><p>  根據(jù)輸出控制增量△un,可求出本次控制輸出為</p><p>  +△=

59、 (4.12)</p><p>  下面對(duì)PID運(yùn)算加以說(shuō)明:</p><p>  所有的數(shù)都變成定點(diǎn)純小數(shù)進(jìn)行處理。</p><p>  算式中的各項(xiàng)有正有負(fù),以最高位作為符號(hào)位,最高位為0表示為正數(shù),為1表示負(fù)數(shù)。正負(fù)數(shù)都是補(bǔ)碼表示,最后的計(jì)算以原碼輸出。</p><p>  節(jié)16位

60、進(jìn)行計(jì)算,最后將運(yùn)算結(jié)果取成高8位有效值輸出。輸出控制量un的限幅處理。為了便于實(shí)現(xiàn)對(duì)晶閘管的通斷處理,PID的輸出在0~250之間。大于250或小于0的控制量都是沒(méi)有意義的,因在算法上對(duì)進(jìn)行限幅,即</p><p>  = (4.13)</p><p>  圖4.1 PID計(jì)算程序的流程圖</p><p>  PID的計(jì)算公式采用位置式算法,計(jì)算

61、公式為</p><p><b>  +</b></p><p>  = (4.14)</p><p><b>  5 軟件設(shè)計(jì)</b></p><p>  系統(tǒng)的軟件主要由主程序模塊、數(shù)據(jù)采集模塊、數(shù)據(jù)處理模塊、控制算法模塊等

62、組成。主模塊的功能是為其余幾個(gè)模塊構(gòu)建整體框架及初始化工作;數(shù)據(jù)采集模塊的作用是將數(shù)字量采集并儲(chǔ)存到存儲(chǔ)器中;數(shù)據(jù)處理模塊是將采集到的數(shù)據(jù)進(jìn)行一系列的處理,其中最重要的是數(shù)字濾波程序:控制算法模塊完成控制系統(tǒng)的PID運(yùn)算并且輸出控制量。</p><p>  5.1 主程序模塊</p><p>  主程序模塊要做的主要工作是上電后對(duì)系統(tǒng)初始化和構(gòu)建系統(tǒng)整體軟件框架,其中初始化包括對(duì)單片機(jī)的

63、初始化、串口初始化等。然后等待溫度設(shè)定,若溫度已經(jīng)設(shè)定好了,判斷系統(tǒng)運(yùn)行鍵是否按下,若系統(tǒng)運(yùn)行,則依次調(diào)用各個(gè)相關(guān)模塊,循環(huán)控制直到系統(tǒng)停止運(yùn)行[18]。</p><p>  設(shè)計(jì)模塊圖如下圖5.1所示。</p><p>  圖5.1 設(shè)計(jì)模塊圖</p><p>  主程序模塊的程序流程圖如圖5.2所示。</p><p>  5.2 數(shù)據(jù)采

64、集和顯示模塊</p><p>  數(shù)據(jù)采集模塊的任務(wù)是負(fù)責(zé)溫度信號(hào)的采集以及將采集到的數(shù)字量提供給單片機(jī)。</p><p>  AT89C52通過(guò)控制DS18B20讀取實(shí)時(shí)溫度,然后,通過(guò)P0口送到數(shù)碼管進(jìn)行顯示。顯示程序設(shè)計(jì)框圖如圖5.3所示。</p><p><b>  N</b></p><p><b>

65、  Y </b></p><p>  圖5.3 顯示程序設(shè)計(jì)框圖</p><p>  6 應(yīng)用軟件與實(shí)物展示</p><p><b>  6.1 軟件介紹</b></p><p>  本次設(shè)計(jì)中共用到了三款應(yīng)用軟件,首先是程序編程軟件,用到的是Keil C51軟件。然后是對(duì)源程序的燒錄軟件,用到的是S

66、TC-ISP燒錄軟件。在對(duì)PCB圖的制作中用到的是Altium Designer 6.0。</p><p>  Keil C51是51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),該系統(tǒng)提供了豐富的函數(shù)庫(kù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全windows界面。其生成的代碼效率非常的高,多數(shù)語(yǔ)言生成的匯編代碼程序緊湊容易理解。C語(yǔ)言功能上結(jié)構(gòu)性、可讀性、可維護(hù)性上有很高的優(yōu)勢(shì)。</p><p>  STC-

67、ISP是一款單片機(jī)下編程燒錄軟件,是針對(duì)STC系列單片機(jī)而設(shè)計(jì)的,可下載STC89系列、12C2050系列和12C5140等系列的STC單片機(jī),由于其使用非常簡(jiǎn)便已經(jīng)被廣泛使用。</p><p>  2005年年底,Protel軟件的原廠商公司推出了Protel系列的最新高端版本Altium Designer 6.0。 Altium Designer 6.0,它是完全一體化電子產(chǎn)品開(kāi)發(fā)系統(tǒng)的一個(gè)新版本,也是業(yè)界第

68、一款也是唯一一種完整的板級(jí)設(shè)計(jì)解決方案。Altium Designer 是業(yè)界首例將設(shè)計(jì)流程、集成化 PCB 設(shè)計(jì)、可編程器件(如 FPGA)設(shè)計(jì)和基于處理器設(shè)計(jì)的嵌入式軟件開(kāi)發(fā)功能整合在一起的產(chǎn)品,一種同時(shí)進(jìn)行PCB和FPGA設(shè)計(jì)以及嵌入式設(shè)計(jì)的解決方案,具有將設(shè)計(jì)方案從概念轉(zhuǎn)變?yōu)樽罱K成品所需的全部功能。</p><p><b>  6.2 實(shí)物展示</b></p><

69、;p>  通過(guò)Altium Designer 6.0做出PCB電路圖,然后根據(jù)PCB圖焊接實(shí)物。參考圖6.1和圖6.2。</p><p>  圖6.1 整體設(shè)計(jì)PCB圖</p><p>  通過(guò)PCB圖做出的實(shí)物圖如圖6.2所示: </p><p><b>  圖6.2 實(shí)物圖</b></p><p><

70、;b>  總結(jié)</b></p><p>  首先,通過(guò)這次應(yīng)用系統(tǒng)的設(shè)計(jì),我學(xué)到了不少的知識(shí)。把以前沒(méi)有學(xué)好的程序?qū)I(yè)知識(shí)進(jìn)行了補(bǔ)充和加強(qiáng),加深了我對(duì)于單片機(jī)和數(shù)字電路的認(rèn)識(shí),鞏固了自己的專(zhuān)業(yè)知識(shí),相信在以后的學(xué)習(xí)和工作中碰到這些基礎(chǔ)的元器件我會(huì)更加得心應(yīng)手。</p><p>  本次設(shè)計(jì)主要是針對(duì)溫度的檢測(cè)跟控制的算法做出了研究。在設(shè)計(jì)中深刻的對(duì)AT89C52單片機(jī)、D

71、S18B20溫度傳感器有了詳細(xì)的了解,對(duì)PID的控制算法有了基本了解。我所寫(xiě)的系統(tǒng)主要根據(jù)目前工業(yè)自動(dòng)化的發(fā)展趨勢(shì)和國(guó)內(nèi)實(shí)際的應(yīng)用特點(diǎn)和要求,使用AT89C52主控芯片進(jìn)行控制,其中溫度控制電路是設(shè)計(jì)通過(guò)可控硅調(diào)功器實(shí)現(xiàn)。 </p><p>  通過(guò)查閱大量的資料,我獲得了以前在課堂上學(xué)不到的東西,我想這對(duì)于以</p><p>  后的畢業(yè)設(shè)計(jì),或者工作也好,都是很有幫助的。我很認(rèn)真地對(duì)待

72、這個(gè)過(guò)程中的</p><p>  每一個(gè)細(xì)節(jié),希望自己能做得更好。希望今后還有這樣的機(jī)會(huì),能夠讓我學(xué)到更</p><p><b>  多的知識(shí)。</b></p><p><b>  附 錄</b></p><p>  附錄A 單片機(jī)程序</p><p>  //*****

73、****************************************************************</p><p>  //****************************李奇畢設(shè)*********************************</p><p>  // Descriptoon:

74、 </p><p>  // *采用89C52+DS1820+數(shù)碼管+蜂鳴器</p><p>  // *DS1820設(shè)置為12位精度</p><p>  // *環(huán)境溫度超過(guò)Alarm值 蜂鳴器報(bào)警

75、 </p><p>  // *Alarm值可通過(guò)按鍵自由設(shè)定</p><p>  //*該溫度可設(shè)定范圍1--100度,測(cè)量范圍-55--125度 </p><p>  //*************************************************

76、********************</p><p>  //*************************可調(diào)溫度報(bào)警器******************************</p><p>  #include <REG52.H></p><p>  #include <intrins.h></p><p

77、>  #include <math.h></p><p>  #define uchar unsigned char</p><p>  unsigned char code dis_code[]={ </p><p>  0xC0,/*0*/</p><p>  0xF9,/*1*/</p>&

78、lt;p>  0xA4,/*2*/</p><p>  0xB0,/*3*/</p><p>  0x99,/*4*/</p><p>  0x92,/*5*/</p><p>  0x82,/*6*/</p><p>  0xF8,/*7*/</p><p>  0x80,/*8*/&l

79、t;/p><p>  0x90,/*9*/</p><p>  0xF7,/*負(fù)號(hào)*/</p><p>  0xB6,/*溫度設(shè)定狀態(tài)*/ };</p><p>  uchar data dis_buf[8],i;</p><p>  uchar data dis_index ; //數(shù)碼管顯示標(biāo)簽</p&g

80、t;<p>  uchar dis_digit=0xfe; //數(shù)碼管位選通控制端</p><p>  sbit Spk=P3^7; //驅(qū)動(dòng)蜂鳴器報(bào)警</p><p>  sbit Key_UP = P3^3; //上調(diào)溫度</p><p>  sbit Key_DOWN = P3^4; //下調(diào)溫度<

81、/p><p>  sbit Key_SET = P3^2; //設(shè)定鍵(溫度設(shè)定)</p><p>  /************************************************************</p><p>  *18B20驅(qū)動(dòng)程序,DQ為數(shù)據(jù)口,接于P1.4</p><p>  *11.0592M晶振

82、,上拉4.7k電阻</p><p>  *************************************************************/</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit

83、 dq = P1^0; //定義18B20的數(shù)據(jù)端</p><p>  bit flag;</p><p>  uint Temperature;</p><p>  uchar gechar,shichar,baichar,Alarm;</p><p>  uchar temp_buff[9]; //存儲(chǔ)讀取的字節(jié),rea

84、d scratchpad為9字節(jié),read rom ID為8字節(jié)</p><p>  uchar id_buff[8];</p><p><b>  uchar *p;</b></p><p>  uchar crc_data;</p><p>  uchar code CrcTable [256]={</p>

85、;<p>  0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,</p><p>  157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,</p>

86、<p>  35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,</p><p>  190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,</p>&l

87、t;p>  70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,</p><p>  219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,</p><

88、;p>  101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,</p><p>  248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,</p><p

89、>  140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,</p><p>  17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,</p><

90、p>  175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,</p><p>  50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,</p><

91、;p>  202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,</p><p>  87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,</p><p

92、>  233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,</p><p>  116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53}; //CRC校驗(yàn)表<

93、/p><p>  /************************************************************</p><p>  *Function:延時(shí)處理 </p><p>  *************************************************************/</p><p

94、>  void TempDelay (uint us)</p><p><b>  {</b></p><p>  while(us--);</p><p><b>  }</b></p><p>  /*********************************************

95、***************</p><p>  *Function:18B20初始化</p><p>  *************************************************************/</p><p>  void Init18b20 (void)</p><p><b>  {&l

96、t;/b></p><p><b>  EA=0;</b></p><p><b>  dq=1;</b></p><p><b>  _nop_();</b></p><p><b>  dq=0;</b></p><p>

97、  TempDelay(86); //delay 530 uS//80</p><p><b>  _nop_();</b></p><p><b>  dq=1;</b></p><p>  TempDelay(14); //delay 100 uS//14</p><p><b&g

98、t;  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  if(dq==0)</b></p><p>  flag = 1; //detect 182

99、0 success!</p><p><b>  else</b></p><p>  flag = 0; //detect 1820 fail!</p><p>  TempDelay(20); //20</p><p><b>  _nop_();</b></p>

100、<p><b>  _nop_();</b></p><p><b>  dq = 1;</b></p><p><b>  EA=1;</b></p><p><b>  }</b></p><p>  /******************

101、******************************************</p><p>  *Function:向18B20寫(xiě)入一個(gè)字節(jié)</p><p>  *************************************************************/</p><p>  void WriteByte (uchar wr)

102、 //單字節(jié)寫(xiě)入</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p><b>  EA=0;</b></p><p>  for (i=0;i<8;i++)</p><p><b&g

103、t;  {</b></p><p><b>  dq = 0;</b></p><p><b>  _nop_();</b></p><p>  dq=wr & 0x01;</p><p>  TempDelay(5); //delay 45 uS //5</p>

104、<p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  dq=1;</b></p><p><b>  wr >>= 1;</b></p><p><b

105、>  }</b></p><p><b>  EA=1;</b></p><p><b>  }</b></p><p>  /************************************************************</p><p>  *Funct

106、ion:讀18B20的一個(gè)字節(jié)</p><p>  *************************************************************/</p><p>  uchar ReadByte (void) //讀取單字節(jié)</p><p><b>  {</b></p><p>

107、  uchar i,u=0;</p><p><b>  EA=0;</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  dq = 0;</b></p><p><

108、b>  u >>= 1;</b></p><p><b>  dq = 1;</b></p><p><b>  if(dq==1)</b></p><p>  u |= 0x80;</p><p>  TempDelay (4);</p><p&g

109、t;<b>  _nop_();</b></p><p><b>  }</b></p><p><b>  EA=1;</b></p><p>  return(u);</p><p><b>  }</b></p><p>  

110、/************************************************************</p><p>  *Function:讀18B20</p><p>  *************************************************************/</p><p>  void readbyt

111、es (uchar j)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<j;i++) </p><p><b>  {</b></p><p>  *p =

112、ReadByte(); //讀取的溫度值存到指針?biāo)肝恢?lt;/p><p><b>  p++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*********************************

113、***************************</p><p>  *Function:CRC校驗(yàn)</p><p>  *************************************************************/</p><p>  uchar CRC (uchar j)</p><p><b&g

114、t;  {</b></p><p>  uchar i,crc_data=0;</p><p>  for(i=0;i<j;i++) </p><p>  crc_data = CrcTable[crc_data^temp_buff[i]];</p><p>  return (crc_data);</p>

115、<p><b>  }</b></p><p>  /************************************************************</p><p>  *Function:讀取溫度</p><p>  *******************************************

116、******************/</p><p>  void GemTemp(void)</p><p><b>  {</b></p><p>  readbytes(9);</p><p>  if (CRC(9)==0) //校驗(yàn)正確</p><p><b>  {<

117、/b></p><p>  Temperature = temp_buff[1]*0x100 + temp_buff[0];</p><p>  Temperature /= 16; //忽略小數(shù)部分</p><p>  TempDelay(1);</p><p>  Alarm = temp_buff[2];</p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論