摘要
本系統的設計可以用于熱水器溫度控制系統和飲水機等各種電器電路中。它以單片機AT89S52為核心,通過3個數碼管顯示溫度和4個按鍵實現人機對話,使用單總線溫度轉換芯片DS18B20實時采集溫度并通過數碼管顯示,并提供各種運行指示燈用來指示系統現在所處狀態,如:溫度設置、加熱、停止加熱等,整個系統通過四個按鍵來設置加熱溫度和控制運行模式。
目錄
1緒論... - 1 -
2系統總體設計... - 2 -
2.1硬件總體設計... - 2 -
2.1.1硬件系統子模塊... - 2 -
2.2軟件總體設計... - 2 -
3硬件系統設計... - 4 -
3.1硬件電路分析和設計報告... - 4 -
3.1.1單片機最小系統電路... - 4 -
3.1.2鍵盤電路... - 5 -
3.1.3數碼管及指示燈顯示電路... - 5 -
3.1.4溫度采集電路... - 7 -
3.1.5電源電路... - 11 -
3.1.6報警電路設計... - 12 -
3.1.7加熱管控制電路設計... - 12 -
4系統軟件設計... - 14 -
4.1主程序流程圖... - 14 -
4.2各個模塊的流程圖... - 16 -
4.2.1讀取溫度DS18B20模塊的流程... - 16 -
4.2.2鍵盤掃描處理流程... - 18 -
4.2.3報警處理流程... - 18 -
5系統調試... - 20 -
5.1硬件電路調試... - 20 -
5.2軟件調試... - 20 -
5.3系統操作說明... - 21 -
5.4數據測試... - 21 -
總結... - 23 -
致謝... - 24 -
參考文獻... - 25 -
附錄一:系統源程序... - 26 -
附錄二:系統硬件總圖... - 35 -
基于單片機的水溫控制器的設計
1緒論
本系統的設計可以用于水溫控制系統和電飯煲等各種電器電路中。它以單片機AT89S52為核心,通過數碼管顯示溫度和語音提示實現人機對話,使用溫度轉換芯片DS18B20實時采集溫度并通過數碼管顯示,并提供各種運行指示燈用來指示系統現在所處狀態,如:溫度設置、加熱、停止加熱等,整個系統通過四個按鍵來設置加熱溫度和控制運行模式。
溫度控制系統可以說是無所不在,熱水器系統、空調系統、冰箱、電飯煲、電風扇等家電產品以至手持式高速高效的計算機和電子設備,均需要提供溫度控制功能。以計算機為例,當中的中央處理器的運行速度愈快,所耗散的熱量便愈多,為免計算機系統過熱而受損,有關系統必須加強溫度過高保護功能。
傳統的溫度采集電路相當復雜,需要經過溫度采集、信號放大、濾波、AD轉換等一系列工作才能得到溫度的數字量,并且這種方式不僅電路復雜,元器件個數多,而且線性度和準確度都不理想,抗干擾能力弱。現在常用的溫度傳感器芯片不但功率消耗低、準確率高,而且比傳統的溫度傳感器有更好的線性表現,最重要的一點是使用起來方便。
自動控制儀器儀表總的發展趨勢是高性能、數字化、集成化、智能化和網絡化。智能溫度控制系統的設計是為了滿足市場對成本低、性能穩定、可遠程監測、控制現場溫度的需求而做的課題,具有較為廣闊的市場前景。
本系統的核心控制芯片選用的是51系列單片機AT89S52,單片機在各個技術領域中的迅猛發展,與單片機所構成的計算機應用系統的特點有關:
·單片機構成的應用系統有較大的可靠性。
·系統構建簡潔、易行,能方便的實現系統功能。
·由于構成的系統是一個計算機系統,相當多的功能由軟件實現,故具有柔性特點。
·有優異的性能價格比。
2系統總體設計
2.1硬件總體設計
設計并制作一個基于單片機的熱水器溫度控制系統的電路,其結構框圖如圖2-1:
圖2-1系統結構框圖
2.1.1硬件系統子模塊
(1)單片機最小系統電路部分
(2)鍵盤掃描電路部分
(3)數碼管溫度顯示和運行指示燈電路部分
(4)溫度采集電路部分
(5)繼電器控制部分
(6)報警部分
2.2軟件總體設計
良好的設計方案可以減少軟件設計的工作量,提高軟件的通用性,擴展性和可讀性。
本系統的設計方案和步驟如下:
(1)根據需求按照系統的功能要求,逐級劃分模塊。
(2)明確各模塊之間的數據流傳遞關系,力求數據傳遞少,以增強各模塊的獨立性,便于軟件編制和調試。
(3)確定軟件開發環境,選擇設計語言,完成模塊功能設計,并分別調試通過。
(4)按照開發式軟件設計結構,將各模塊有機的結合起來,即成一個較完善的系統。
首先接通電源系統開始工作,系統開始工作后,通過按鍵設定溫度值的上限值和下限值,確定按鍵將設定的溫度值存儲到指定的地址空間,溫度傳感器開始實時檢測,調用顯示子程序顯示檢測結果,調用比較當前顯示溫度值與開始設定的溫度值比較,如果當前顯示值低于設定值就通過繼電器起動加熱裝置,直到達到設定值停止加熱,之后進行保溫,如果溫度高于上限進行報警。
3硬件系統設計
3.1硬件電路分析和設計報告
本次設計主要思路是通過對單片機編程將由溫度傳感器DS18B20采集的溫度外加驅動電路顯示出來,包括對繼電器的控制,進行升溫,當溫度達到上下限蜂鳴器進行報警。P1.7開關按鈕是用于確認設定溫度的,初始按下表示開始進入溫度設定狀態,然后通過P1.5和P1.6設置溫度的升降,再次按下P1.7時,表示確認所設定的溫度,然后轉入升溫或降溫。P2.3所接的發光二極管用于表示加熱狀態,P2.5所接的發光二極管用于表示保溫狀態。P2.3接繼電器。P3.1是溫度信號線。整個電路都是通過軟件控制實現設計要求。
3.1.1單片機最小系統電路
因為89S52單片機內部自帶8K的ROM和256字節的RAM,因此不必構建單片機系統的擴展電路。如圖3-1,單片機最小系統有復位電路和振蕩器電路。值得注意的一點是單片機的31腳必須接高電平,否則系統將不能運行。因為該腳不接時為低電平,單片機將直接讀取外部程序存儲器,而系統沒有外部程序存儲器,所以必須接VCC。在按鍵兩端并聯一個電解電容,濾除交流干擾,增加系統抗干擾能力。
圖3-1單片機最小系統圖
3.1.2鍵盤電路
鍵盤是單片機應用系統中的主要輸入設備,單片機使用的鍵盤分為編碼鍵盤和非編碼鍵盤。編碼鍵盤采用硬件線路來實現鍵盤的編碼,每按下一個鍵,鍵盤能夠自動生成按鍵代碼,并有去抖功能。因此使用方便,但硬件較復雜。非編碼鍵盤僅僅提供鍵開關狀態,由程序來識別閉合鍵,消除抖動,產生相應的代碼,轉入執行該鍵的功能程序。非編碼鍵盤中鍵的數量較少,硬件簡單,在單片機中應用非常廣泛。
圖為按鍵和AT89S52的接線圖,檢測儀共設有4個按鍵,每個按鍵由軟件來決定其功能,4個按鍵功能分別為:
(1) SW1:設定按鍵(設定按鍵)
(2) SW2:加法按鍵(當前位加5)
(3) SW3:減法按鍵(當前位減5)
(4) SW4:退出設置鍵(系統初始化)
圖3-2單片機最小系統
3.1.3數碼管及指示燈顯示電路
(1)數碼管顯示說明
各個數碼管的段碼都是單片機的數據口輸出,即各個數碼管輸入的段碼都是一樣的,為了使其分別顯示不同的數字,可采用動態顯示的方式,即先只讓最低位顯示0(含點),經過一段延時,再只讓次低位顯示1,如此類推。由視覺暫留,只要我們的延時時間足夠短,就能夠使得數碼的顯示看起來非常的穩定清楚,過程如表3-1。
表3-1數碼管編碼表
段碼 | 位碼 | 顯示器狀態 |
08H | 01H | □□□□□□□0 |
abH | 02H | □□□□□□1□ |
12H | 04H | □□□□□2□□ |
22H | 08H | □□□□3□□□ |
a1H | 10H | □□□4□□□□ |
24H | 20H | □□5□□□□□ |
04H | 40H | □6□□□□□□ |
aaH | 80H | 7□□□□□□□ |
本論文中使用了3個數碼管,其中前兩位使用動態掃描顯示實測溫度,在設置加熱溫度的時候,兩個數碼管是閃爍,以提示目前處在溫度設置狀態。第三位數碼管靜態顯示符號“℃”。
(2)運行指示燈說明
本熱水器溫度控制系統中共使用到3個LED指示燈和3個數碼管。
數碼管右邊的紅色LED是加熱指示燈,當剛開機或溫度降到設定溫度5℃以下時,該燈會亮,表示目前處于加熱狀態;當溫度上升到設定溫度時,該LED滅,同時數碼管右邊的綠色LED亮,表示目前處于保溫狀態,用戶可以使用熱水器;當溫度再次下降到設定溫度5℃以下時,綠色LED滅,紅色加熱的LED燈亮,不斷循環。
圖3-3 LED數碼管顯示電路圖
3.1.4溫度采集電路
(1)DS18B20介紹
Dallas最新單線數字溫度傳感器DS18B20簡介新的“一線器件”體積更小、適用電壓更寬、更經濟。Dallas半導體公司的數字化溫度傳感器DS1820是世界上第一片支持“一線總線”接口的溫度傳感器。一線總線獨特而且經濟的特點,使用戶可輕松地組建傳感器網絡,為測量系統的構建引入全新概念。DS18B20、DS1822“一線總線”數字化溫度傳感器同DS18B20一樣,DS18B20也支持“一線總線”接口,測量溫度范圍為-55℃~+125℃,在-10℃~+85℃范圍內,精度為±0.5℃。DS1822的精度較差為±2℃。現場溫度直接以“一線總線”的數字方式傳輸,大大提高了系統的抗干擾性。其DS18B20的管腳配置和封裝結構如圖3-4所示。
圖3-4 DS18B20封裝
引腳定義:
①DQ為數字信號輸入/輸出端;
②GND為電源地;
③VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。
(2)DS18B20的單線(1-wire bus)系統
單線總線結構是DS18B20的突出特點,也是理解和編程的難點。從兩個角度來理解單線總線:第一,單線總線只定義了一個信號線,而且DS18B20智能程度較低(這點可以與微控制器和SPI器件間的通信做一個比較),所以DS18B20和處理器之間的通信必然要通過嚴格的時序控制來完成。第二,DS18B20的輸出口是漏級開路輸出,這里給出一個微控制器和DS18B20連接原理圖。這種設計使總線上的器件在合適的時間驅動它。顯然,總線上的器件與(wired AND)關系。這就決定:(1)微控制器不能單方面控制總線狀態。之所以提出這點,是因為相當多的文獻資料上認為,微控制器在讀取總線上數據之前的I/O口的置1操作是為了給DS18B20一個發送數據的信號。這是一個錯誤的觀點。如果當前DS18b20發送0,即使微控制器I/O口置1,總線狀態還是0;置1操作是為了是I/O口截止(cut off),以確保微控制器正確讀取數據。(2)除了DS18B20發送0的時間段,其他時間其輸出口自動截止。自動截止是為確保:1時,在總線操作的間隙總線處于空閑狀態,即高態。2時,確保微控制器在寫1的時候DS18B20可以正確讀入。
由于DS18B20采用的是1-Wire總線協議方式,即在一根數據線實現數據的雙向傳輸,而對AT89S52單片機來說,硬件上并不支持單總線協議,因此,我們必須采用軟件的方法來模擬單總線的協議時序來完成對DS18B20芯片的訪問。
①DS18B20的復位時序,如圖3-5
圖3-5 DS18B20的復位時序圖
②DS18B20的讀時序
對于DS18B20的讀時序分為讀0時序和讀1時序兩個過程。
對于DS18B20的讀時隙是從主機把單總線拉低之后,在15秒之內就得釋放單總線,以讓DS18B20把數據傳輸到單總線上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。DS18B20的讀時序圖如圖3-6所示。
圖3-6 DS18B20的讀時序
③DS18B20的寫時序
對于DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。
對于DS18B20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15us之內就得釋放單總線。如圖3-7所示。
圖3-7 DS18B20的寫時序圖
(3)DS18B20的供電方式
在圖3-8中示出了DS18B20的寄生電源電路。當DQ或VDD引腳為高電平時,這個電路便“取”的電源。寄生電路的優點是雙重的,遠程溫度控制監測無需本地電源,缺少正常電源條件下也可以讀ROM。為了使DS18B20能完成準確的溫度變換,當溫度變換發生時,DQ線上必須提供足夠的功率。
有兩種方法確保DS18B20在其有效變換期內得到足夠的電源電流。第一種方法是發生溫度變換時,在DQ線上提供一強的上拉,這期間單總線上不能有其它的動作發生。如圖3-8所示,通過使用一個MOSFET把DQ線直接接到電源可實現這一點,這時DS18B20工作在寄生電源工作方式,在該方式下VDD引腳必須連接到地。
圖3-8 DS18B20供電方式1
另一種方法是DS18B20工作在外部電源工作方式,如圖3-9所示。這種方法的優點是在DQ線上不要求強的上拉,總線上主機不需要連接其它的外圍器件便在溫度變換期間使總線保持高電平,這樣也允許在變換期間其它數據在單總線上傳送。此外,在單總線上可以并聯多個DS18B20,而且如果它們全部采用外部電源工作方式,那么通過發出相應的命令便可以同時完成溫度變換。
圖3-9 DS18B20供電方式2
(4)DS18B20設計中應注意的幾個問題
DS18B20具有測溫系統簡單、測溫精度高、連接方便、占用接口線少等優點,但在實際應用中也應注意以下幾方面的問題:較小的硬件開銷需要相對復雜的軟件進行補償,由于DS18B20與微處理器間采用串行數據傳送。因此,在對DS18B20進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結果。在DS18B20有關資料中均未提及1Wire上所掛DS18B20數量問題,容易使人誤認為可以掛任意多個DS18B20,在實際應用中并非如此。當1Wire上所掛DS18B20超過8個時,就需要考慮微處理器的總線驅動問題,這一點在進行多點測溫系統設計時要加以注意。連接DS18B20的總線電纜是有長度限制的。實際應用中,測溫電纜線建議采用屏蔽4芯雙絞線,其中一對線接地線與信號線,另一組接VCC和地線,屏蔽層在源端單點接地。
本文以廣泛應用的數字溫度傳感器DS18B20為例,說明了1Wire總線的操作過程和基本原理。事實上,基于1Wire總線的產品還有很多種,如1Wire總線的E2PROM、實時時鐘、電子標簽等。他們都具有節省I/O資源、結構簡單、開發快捷、成本低廉、便于總線擴展等優點,因此有廣闊的應用空間,具有較大的推廣價值。
本設計將溫度傳感器DS18B20與單片機TXD引腳相連,讀取溫度傳感器的數值。DS18B20與單片機連接圖如圖所示3-10所示。
圖3-10 DS18B20與單片機連接圖
3.1.5電源電路
采用L7805穩壓塊,輸出為5V。電子組件要正常運作都需要電源電壓供電,一般常用的電源電壓為+5V或+12V,因為數字IC(Ingegrated Circuit:集成電路)所供給的電壓為+5V,而CMOS IC所供給的電壓為+12V,7805是一個穩壓塊。7805穩壓管把高電壓轉換到低電壓,7805穩壓管具有保護單片機的作用。L7805輸出端要并聯上一個電解電容,濾除交流電干擾,防止損壞單片機系統。本設計采用兩種供電方式,一種為DC7~18V直流穩壓電源變換成5V的直流電;另一種為四節干電池共6V經二極管加壓后得到將近5V的直流電源,電源配以開關和指示燈,以方便使用。黃色發光二極管表示保溫,紅色的表示加熱狀態。
圖3-11系統電源設計圖
3.1.6報警電路設計
同時可以在系統里設定溫度上限值,由于加熱停止后,加熱管還有余熱當采集到的外界溫度高于當前所設定溫度上限值時,程序就會進入報警子程序,觸發蜂鳴器進行報警。報警電路原理圖如圖所示。
圖3-12報警電路圖
圖中的三極管8550的作用是增加驅動能力,比9012的驅動電流還大些,因此選用8550。當程序進入報警子程序時,把P2.7置0,就會觸發蜂鳴器,為了使報警聲音效果更好,對P2.7取反,發出報警嘟嚕聲音。
3.1.7加熱管控制電路設計
繼電器是常用的輸出控制接口,可以做交直流信號的輸出切換。它具有控制系統(又稱輸入回路)和被控制系統(又稱輸出回路),通常應用于自動控制電路中,它實際上是用較小的電流去控制較大電流的一種“自動開關”。故在電路中起著自動調節、安全保護、轉換電路等作用。繼電器控制接點操作說明如下:
●COM:Common,共同點。輸出控制接點的共同接點。
●NC:NormalClose常閉點。以Com為共同點,NC與COM在平時是呈導通狀態的。
●NO:Normal Open常開點。NO與COM在平時是呈開路狀態的,當繼電器動作時,NO與COM導通,NC與COM則呈開路狀態。
當89S52的P2.5輸出高電平時,繼電器不導通,反之當輸出低電平時,繼電器導通,這樣就激活了連接回路。
圖3-13單片機控制繼電器電路圖
4系統軟件設計
本系統采用的是循環查詢方式,來顯示和控制溫度的。主要包括四段程序的設計:DS18B20讀溫度程序,數碼管的驅動程序,鍵盤掃描程序,以及抱經處理程序。
4.1主程序流程圖
圖4-1主程序流程圖
4.2各個模塊的流程圖
4.2.1讀取溫度DS18B20模塊的流程
由于DS18B20采用的是一根數據線實現數據的雙向傳輸,而對AT89S52單片機來說,硬件上并不支持單總線協議,因此,我們必須采用軟件的方法來模擬單總線的協議時序來完成對DS18B20芯片的訪問。
DS18B20單線通信功能是分時完成的,它有嚴格的時隙概念。因此系統對DS18B20的各種操作必須按協議進行。操作協議為:初始化DS18B20(發復位脈沖)→發ROM功能命令→發存儲器操作命令→處理數據DS18B20雖然具有測溫系統簡單、測溫精度高、連接方便、占用口線少等優點,
DS18B20必須首先調用啟動溫度轉換函數,根據數據手冊上對應轉換時間來超作,如為12位轉換,則應該是最大750mS,另外在對DS18B20超作時,時序要求非常嚴格,因此最好禁止系統中斷。
由于DS18B20是在一根I/O線上讀寫數據,因此,對讀寫的數據位有著嚴格的時序要求。DS18B20有嚴格的通信協議來保證各位數據傳輸的正確性和完整性。該協議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設備,而每一次命令和數據的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數據,在進行寫命令后,主機需啟動讀時序完成數據接收。數據和命令的傳輸都是低位在先。
DS18B20的讀時序:
(1)對于DS18B20的讀時序分為讀0時序和讀1時序兩個過程。
(2)對于DS18B20的讀時隙是從主機把單總線拉低之后,在15秒之內就得釋放單總線,以讓DS18B20把數據傳輸到單總線上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。
DS18B20的寫時序:
(1)對于DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。
(2)對于DS18B20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15us之內就得釋放單總線。
系統程序設計主要包括三部分:讀出溫度子程序、溫度轉換命令子程序、顯示溫度子程序。
圖4-2讀取溫度DS18B20模塊的流程圖
程序代碼為:
GET_TEMPER: SETB DQ ;讀出轉換后的溫度值
LCALL INIT_1820 ;先復位DS18B20
JB FLAG1,TSS2
RET ;判斷DS1820是否存在?若DS18B20不存在則返回
TSS2: MOV A,#0CCH ;DS18B20已經被檢測到!!!!!!!!!!!!!!!跳過ROM匹配
LCALL WRITE_1820
MOV A,#44H ;發出溫度轉換命令
LCALL WRITE_1820
LCALL DISPLAY ;這里通過調用顯示子程序實現延時一段時間,等待AD轉換結束,12位的話750微秒
LCALL INIT_1820 ;準備讀溫度前先復位
MOV A,#0CCH ;跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;發出讀溫度命令
LCALL WRITE_1820
LCALL READ_18200 ;將讀出的溫度數據保存到35H/36H
RET
4.2.2鍵盤掃描處理流程
此流程為鍵盤掃描處理,CPU通過檢測各數據線的狀態(0或1)就能知道是否有按鍵閉合以及哪個按鍵閉合。鍵盤管理程序的功能是檢測是否有按鍵閉合,如果有按鍵閉合,消除抖動,根據鍵號轉到相應的鍵處理程序,按鍵流程圖如圖4-3所示。
圖4-3鍵盤掃描子程序流程圖
4.2.3報警處理流程
運行程序后,溫度傳感器DS18B20即可對環境進行溫度采集,并送LED數碼管顯示。我們可以在程序里設定溫度上限值,當采集到的外界溫度高于當前所設定溫度上限值時,程序就會進入報警子程序,觸發蜂鳴器進行報警。其程序流程圖如圖4-4所示。
圖4-4報警子程序流程圖
5系統調試
5.1硬件電路調試
仔細檢查所接電路,按照硬件原理圖接線,理論上是能實現的,如果數碼管不顯示,則應該檢查線路是否正確,或是因為單片機沒有工作,還有集電極和發射極是否接對。如果只顯示兩個八,則可能是DS18B20沒有接正確,檢查上拉電路是否接好。另外要注意的是,由單片機輸出的控制信號比較小,需要進行放大才能驅動繼電器工作,否則就不能實現升溫過程,通常選用8550三極管來進行放大。還有220V交流電綠色接頭和加熱管黃色接頭必須接正確,否則導致電路燒壞。蜂鳴器是低電平有效。如果能注意這些問題,電路基本不會出錯。
5.2軟件調試
如果硬件電路檢查后,沒有問題卻實現不了設計要求,則可能是軟件編程的問題,首先應檢查初始化程序,然后是讀溫度程序,顯示程序,以及繼電器控制程序,對這些分段程序,要注意邏輯順序,調用關系,以及涉及到了標號,有時會因為一個標號而影響程序的執行,除此之外,還要熟悉各指令的用法,以免出錯。還有一個容易忽略的問題就是,源程序生成的代碼是否燒入到單片機中,如果這一過程出錯,那不能實現設計要求也是情理之中的事。本人在設計的時候在偉福仿真軟件進行調試,通過此軟件進行調試可以很方便的觀察單片機內部各個寄存器及內部存儲器變化情況,以方便進行調試。圖為單片機功能調試圖。
圖5-1單片機功能調試圖
硬件與軟件調試相結合,仔細檢查各個模塊的設計,舊能順利完成任務,實現設計要求,在調試過程中必須認真耐心,不能有一點馬虎,否則遺漏一個小的問題就會導致整個設計的失敗。
5.3系統操作說明
本系統上電后數碼管顯示當前測量溫度,此時加熱指示燈和保溫指示燈均不點亮;若此時按“自動加熱”鍵,則單片機自動將預加熱溫度設置為80℃并開始加熱,送出一個加熱信號,并點亮加熱指示燈;若按“溫度設置”鍵,則進入預加熱溫度設置界面,此時數碼管閃爍顯示預設置溫度,此時通過按鍵“+”和“-”進行設置溫度,預設置溫度按“5”遞增或遞減,設置好溫度后再按一次“溫度設置”鍵確定,單片機保存預設置溫度,并開始加熱。此時單片機通過數碼管顯示實時檢測的溫度并和預設置溫度進行對比,如果實測溫度大于或等于預設置溫度,則單片機發出停止加熱信號并熄滅加熱指示燈,點亮保溫指示燈,且當超過預設溫度時發出報警;當溫度下降到預設置溫度以下5度時,單片機再次發出加熱信號,同時熄滅保溫指示燈,點亮加熱指示燈,依次循環控制。
5.4數據測試
1.靜態數據測試
取一桶凈水,改變它的溫度,觀察數碼管上顯示的溫度值,并用溫度計進行測溫,記錄兩組數據,比較差異。記錄表如下:
表5-1靜態溫度數據測試表
溫度℃ | 1 | 2 | 3 | 4 | 5 | 6 |
顯示溫度 | 23 | 47 | 63 | 77 | 84 | 90 |
測量溫度 | 24 | 47 | 63 | 80 | 84 | 91 |
有測試數據可知,本系統測溫結果與溫度計測溫基本一致,能滿足設計,證明了設計的合理性。
2.動態數據測試
進行溫度設定,通過設定溫度值(75℃),觀察加熱管的加熱情況,以及數碼管的顯示值,再用溫度計測量水溫,每隔一段時間記錄一次數據,將兩組值進行比較。記錄表如下:(設定前溫度為25℃)
表5-2靜態溫度數據測試表
組數 分組 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
顯示溫度 | 25 | 29 | 34 | 39 | 42 | 48 | 53 | 58 | 62 | 67 | 70 | 73 | 75 |
測量溫度 | 25 | 28 | 34 | 38 | 42 | 49 | 53 | 59 | 63 | 67 | 71 | 74 | 75 |
通過上表可看出在加熱的過程中,顯示的溫度與實測的溫度近似一樣,說明系統的設計達到精度要求,但還是略有偏差,基本不影響設計結果。
整個測試過程表明設計達到了任務書的要求,證明了該方案是合理可行的,順利完成了設計,達到了預想結果。
總結
通過本次的設計,使我們不僅對單片機這門課程有了更深刻的認識,懂得了如何運用課本知識結合實際來完成定時器的顯示和編程方法以及數碼顯示電路的驅動方法,使我們能夠很快的適應現代控制技術發展的需求,同時也提高了我們的思維能力和實際操作能力,為以后更好的走上工作崗位奠定了堅實的基礎。
另外,這次的設計還讓我更進一步的認識了關于AT89S52等芯片的引腳功能以及使用方法,使我學會了應用不同的芯片來配合完成整個設計的操作。
在做硬件電路的這段時間里,從思考設計到對電路的調試經過了許多困難。同樣在對軟件進行設計時,也可為一路坎坷。但是通過對軟硬件不斷撞墻,不斷思考解決問題的過程中,我學會了很多東西,同時對單片機也有了更深的認識。在做設計的時候,很需要耐心和對事物的細心,很多時候一個簡單問題的一個簡單的疏忽就會導致整個電路的不工作,只有不斷的檢查不斷的調試,才能真正完成一個設計的制作。只有不斷的發現問題解決問題,才能從問題中改變自己,提升自己對單片機的能力。
此設計雖然能夠完成溫度的顯示和控制,但功能和精度有待于進一步提高。以后可以通過加入PID算法優化控制功能,并通過液晶顯示屏實時顯示溫度。
參考文獻
[l]樂建波編著《溫度控制系統》化學工業出版社
[2] [美]Ken C.Pohlmann《數字音頻原理及應用》.蘇菲.第4版.北京:電子工業出版社,2005,2
[3]謝自美編著《電子線路設計·實驗·測試(第二版)》華中科技大學出版社 2000
[4]陳東光編著《單片微型計算機原理及C語言程序設計》華中科技大學出版社 2004.4
[5]武慶生仇梅編著《單片機原理與應用》電子科技大學出版社 1998.2
[6]譚浩強編著《C程序設計》.北京:清華大學出版社1999年
[7]華中理工大學電子學教研室編《電子技術基礎模擬部分(第四版)》高等教育出版社 1999.6
[8]華中理工大學電子學教研室編《電子技術基礎數字部分(第四版)》高等教育出版社 2000.6
[9]趙晶編著《電路設計與制版——Protel 99se的高級應用》人民郵電出版社2000.1
[10]《電子制作》2004.10
[11]王彬任艷穎編著《Digital IC System Design》西安電子科技大學出版社2005.9
[12]趙麗娟邵欣編著《基于單片機的溫度監控系統的設計與實現》機械制造
[13]郭炳坤簡單的恒溫箱溫控電路[J].儀器與未來,1991
[14]GuiyunTian《Foundationand Application of Microcontraller》高等教育出版社2004.11
[15](美)Bjarne Stroustrup《THE C++ PROGRAMMING LANGUAGE,SPECIAL EDITION》Addison Wesley 1997
附錄一:系統源程序
EMPER_L EQU 29H ;用于保存讀出溫度的低8位
TEMPER_H EQU 28H ;用于保存讀出溫度的高8位
FLAG1 EQU 38H ;是否檢測到DS18B20標志位
A_BIT EQU 20H ;數碼管個位數存放內存位置
B_BIT EQU 21H ;數碼管十位數存放內存位置
B1 EQU 70H ;溫度小數點位
A1 EQU 71H ;設定溫度值
DQ EQU P3.1 ;DQ為DS18B20數據位
BELL EQU P2.7 ;//蜂鳴報警
ORG 0000H ;單片機內存分配申明!
AJMP MAIN0
;///////////////////////////////////前面的都是定義
MAIN: MOV R0,#10
M1: CPL P2.3
ACALL DELAY125
DJNZ R0,M1 ;//此段為燈閃5次,無實際意義
;///////////////////////////////////////////////
MAIN0: MOV A1,#80 ;默認加熱為80度
MAIN1: LCALL D1820 ;調用讀溫度子程序
LCALL DISPLAY ;調用數碼管顯示子程序
MOV A,29H
CLR C
CJNE A,A1,MAIN1_1
SETB BELL ;//溫度相等,關閉蜂鳴器
AJMP MAIN1_1_A ;//下等不用叫蜂鳴器
MAIN1_1: JC MAIN1_2 ;為1轉移,表示小于設定溫度
CPL BELL ;蜂鳴器斷續鳴叫
MAIN1_1_A: CLR P2.3 ;//下面是表示沒達到溫度
SETB P2.5
AJMP MAIN2
;/////////////////////////////////////主要是檢測溫度是否小于設定的溫度,小于,則開發熱管CLR P2.3
MAIN1_2: SETB BELL ;//關閉蜂鳴器
CLR P2.5 ;//開發熱管
SETB P2.3
;///////////////////////////////上面的是大于,關發熱管
MAIN2: JB P1.0,MAIN1 ;//看P1.0有否按下
ACALL DELAY125 ;//延時防抖動,常用的手法,網上很多介紹的
JB P1.0,MAIN1 ;//再次查看
CLR P2.3
JNB P1.0,$ ;//等按鍵完全松手才進入!
SETB P2.3
SETB P2.5
;///檢測到P1.0按鍵后后進入設定溫度
MAIN2_1: ACALL DISPLAY1
JB P1.2,MAIN2_2
ACALL DELAY125
JB P1.2,MAIN2_2
JNB P1.2,$
MOV A,#5
ADD A,A1
CLR C
CJNE A,#100,MAIN2_1_1
MOV A,#99
AJMP MAIN2_1_3
;////////////////上面這一段是+5度按鍵,按下+5度
MAIN2_1_1: JC MAIN2_1_3
MAIN2_1_2: CLR C
MOV A,#99
MAIN2_1_3: MOV A1,A
MAIN2_2: JB P1.4,MAIN2_3
ACALL DELAY125
JB P1.4,MAIN2_3
JNB P1.4,$
MOV A,A1
CJNE A,#99,ZY1
MOV B,#4
AJMP ZY2
ZY1: MOV B,#5
ZY2: CLR C
MOV A,A1
SUBB A,B
MAIN2_2_1: JNC MAIN2_2_2
MOV A1,#0
AJMP MAIN2_3
;////////////////上面這一段是-5度按鍵,按下-5度
MAIN2_2_2: MOV A1,A
MAIN2_3: JB P1.6,MAIN2_1
ACALL DELAY125
JB P1.6,MAIN2_1
CLR P2.3
JNB P1.6,$
SETB P2.3
AJMP MAIN1
;/////////////上面這一段是退出的意思的!
D1820: LCALL GET_TEMPER ;調用讀溫度子程序
MOV B1,29H
MOV A,29H
MOV C,40H ;將28H中的最低位移入C
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A
MOV A,B1
MOV B,#10H
MUL AB
MOV B,#10H
DIV AB
MOV B,#10
MUL AB
MOV B,#10H
DIV AB
MOV B1,A
RET
;//////////上面這一段是讀取溫度后進行轉換的意思!
;/////////////////////////////////
;////////////////////////////////
;///////////////////////////////
INIT_1820: SETB DQ ;這是DS18B20復位初始化子程序
NOP
CLR DQ ;主機發出延時537微秒的復位低脈沖
MOV R1,#3
TSR1: MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB DQ ;然后拉高數據線
NOP
NOP
NOP
NOP
MOV R0,#25H
TSR2: JNB DQ,TSR3 ;等待DS18B20回應
DJNZ R0,TSR2
LJMP TSR4 ;延時
TSR3: SETB FLAG1 ;置標志位,表示DS1820存在
LJMP TSR5
TSR4: CLR FLAG1 ;清標志位,表示DS1820不存在
LJMP TSR7
TSR5: MOV R0,#117
TSR6: DJNZ R0,TSR6 ;時序要求延時一段時間
TSR7: SETB DQ
RET
GET_TEMPER: SETB DQ ;讀出轉換后的溫度值
LCALL INIT_1820 ;先復位DS18B20
JB FLAG1,TSS2
RET ;判斷DS1820是否存在?若DS18B20不存在則返回
TSS2: MOV A,#0CCH ;DS18B20已經被檢測到!!!!!!!!!!!!!!!跳過ROM匹配
LCALL WRITE_1820
MOV A,#44H ;發出溫度轉換命令
LCALL WRITE_1820
LCALL DISPLAY ;這里通過調用顯示子程序實現延時一段時間,等待AD轉換結束,12位的話750微秒
LCALL INIT_1820 ;準備讀溫度前先復位
MOV A,#0CCH ;跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;發出讀溫度命令
LCALL WRITE_1820
LCALL READ_18200 ;將讀出的溫度數據保存到35H/36H
RET
WRITE_1820: MOV R2,#8 ;一共8位數據
CLR C ;寫DS18B20的子程序(有具體的時序要求)
WR1: CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
READ_18200: MOV R4,#2 ;將溫度高位和低位從DS18B20中讀出
MOV R1,#29H ;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00: MOV R2,#8 ;數據一共有8位
RE01: CLR C ;讀DS18B20的程序,從DS18B20中讀出兩個字節的溫度數據
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9
RE10: DJNZ R3,RE10
MOV C,DQ
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;/////////////////////////////////////////上面的這些都是溫度采集的!
DISPLAY: MOV A,29H ;將29H中的十六進制數轉換成10進制
MOV B,#10 ;10進制/10=10進制
DIV AB ;顯示子程序
MOV A_BIT,A ;十位在A
MOV B_BIT,B ;個位在B
MOV DPTR,#NUMTAB ;指定查表啟始地址
MOV R0,#1
DPL1: MOV R1,#25 ;顯示1000次
DPLOP: MOV A,B_BIT ;取個位數
MOVC A,@A+DPTR ;查個位數的7段代碼
MOV P0,A ;送出個位的7段代碼
CLR P2.2 ;開個位顯示
ACALL D1MS ;顯示1MS
SETB P2.2
MOV A,A_BIT ;取十位數
MOVC A,@A+DPTR ;查十位數的7段代碼
MOV P0,A ;送出十位的7段代碼
CLR P2.1 ;開十位顯示
ACALL D1MS ;顯示1MS
SETB P2.1
MOV P0,#0FFH
DJNZ R1,DPLOP ;100次沒完循環
DJNZ R0,DPL1 ;4個100次沒完循環
RET
;/////////////////////////////////////上面這段顯示實時溫度
;//////////////////////////////////////
DISPLAY1: MOV A,A1 ;將29H中的十六進制數轉換成10進制
MOV B,#10 ;10進制/10=10進制
DIV AB ;顯示子程序
MOV A_BIT,A ;十位在A
MOV B_BIT,B ;個位在B
MOV DPTR,#NUMTAB ;指定查表啟始地址
MOV R0,#1
DPL11: MOV R1,#25 ;顯示1000次
DPLOP1: MOV A,B_BIT ;取個位數
MOVC A,@A+DPTR ;查個位數的7段代碼
MOV P0,A ;送出個位的7段代碼
CLR P2.2 ;開個位顯示
ACALL D1MS ;顯示1MS
SETB P2.2
MOV A,A_BIT ;取十位數
MOVC A,@A+DPTR ;查十位數的7段代碼
MOV P0,A ;送出十位的7段代碼
CLR P2.1 ;開十位顯示
ACALL D1MS ;顯示1MS
SETB P2.1
MOV P0,#0FFH
DJNZ R1,DPLOP1 ;100次沒完循環
DJNZ R0,DPL11 ;4個100次沒完循環
RET
;/////////////////////////////上面這段顯示設置溫度
D1MS: MOV R7,#50 ;1MS延時
DJNZ R7,$
RET
DELAY10: MOV R6,#20 ;10MS延時
D3: MOV R5,#255
DJNZ R5,$
DJNZ R6,D3
RET
DELAY125: MOV R6,#255 ;125MS延時
D1: MOV R5,#255
DJNZ R5,$
DJNZ R6,D1
RET
DELAY1S: MOV R7,#8 ;1S延時
D2: LCALL DELAY125
DJNZ R7,D2
RET
;///////////////////////這些都是延時,長短而已
NUMTAB: DB 0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H
DB 80H,90H,88H,83H
DB 0C6H,0A1H,86H,8EH
;////////////////////數碼管的具體值
END
附錄二:系統硬件總圖
原文標題:基于單片機的水溫控制器的設計
文章出處:【微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
電路
+關注
關注
173文章
5978瀏覽量
173102 -
單片機
+關注
關注
6044文章
44632瀏覽量
639244 -
控制器
+關注
關注
112文章
16483瀏覽量
179741
原文標題:基于單片機的水溫控制器的設計
文章出處:【微信號:A1411464185,微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
智能馬桶水溫NTC溫度傳感器
采用AT89C52單片機作為路燈控制系統的支路控制器
基于51單片機的簡易無人公交控制器
![基于51<b class='flag-5'>單片機</b>的簡易無人公交<b class='flag-5'>控制器</b>](https://file1.elecfans.com//web1/M00/F3/4F/wKgaoWcVBwWASEQVAAfjs03zwzA768.png)
基于51單片機的LED彩燈控制器設計
![基于51<b class='flag-5'>單片機</b>的LED彩燈<b class='flag-5'>控制器</b>設計](https://file1.elecfans.com//web1/M00/F3/4F/wKgaoWcVCnCAWbGbAAXsmpb0wD0868.png)
stm32單片機用什么軟件編程
國產單片機(MCU)崛起 —— 51系列
![國產<b class='flag-5'>單片機</b>(MCU)崛起 —— 51系列](https://file1.elecfans.com/web2/M00/02/F1/wKgaoma5syyAYzztAAA5LSZZo34694.png)
基于51單片機DS18B20水箱水溫檢測控制設計
工業控制為什么用PLC而不用單片機
單片機和plc有什么相同和不同之處
單片機可以替代PLC嗎
![](https://file1.elecfans.com/web2/M00/BD/AE/wKgaomWl9oKAX6LLABfBoW6rHfw646.png)
單片機是什么?單片機編程如何入門?
![<b class='flag-5'>單片機</b>是什么?<b class='flag-5'>單片機</b>編程如何入門?](https://file.elecfans.com/web2/M00/9B/3D/poYBAGQjnauAVXOgAABFcEbXdEE684.png)
評論