|
太陽能熱水器控制器設計
The design of controller for solar water heater
主要內(nèi)容:
本文論述了基于C51單片機的太陽能熱水器控制器的實現(xiàn)。用C51單片機設計一種太陽能熱水器控制器,實現(xiàn)水溫、水位及時間的實時顯示以及水溫、水位的自動控制等功能,另外還需要實現(xiàn)時間和水溫設定的功能
[摘要] 該太陽能熱水器控制器是基于C51單片機設計和實施的,它以AT89C51單片機作為檢測和控制中心,由主控芯片模塊、DS18B20 溫度檢測及顯示模塊、水位檢測及顯示模塊、時鐘模塊、報警模塊和電磁閥控制模塊、輔助加熱模塊等模塊組成。它通過DS18B20溫度檢測及顯示模塊實時檢測和顯示水溫,通過水位檢測及顯示模塊實時檢測和顯示水位,通過時鐘模塊實時顯示時鐘并在設定的時間給主控芯片特定的信號,通過電磁閥控制模塊實現(xiàn)熱水器的自動及手動上水,通過輔助加熱模塊實現(xiàn)太陽能熱水器自動及手動加熱,當水位過低且水溫過高時通過報警模塊報警,而主控芯片則負責協(xié)調(diào)其他各模塊的工作。
1 緒論
1.1 太陽能熱水器應用的意義
1.2 我國太陽能發(fā)展現(xiàn)狀
2 系統(tǒng)設計及仿真軟件
2.1 系統(tǒng)的總體結(jié)構(gòu)設計
2.2 設計功能要求
2.3 設計思路
2.4 仿真軟件(proteus)簡介
3 AT89C51簡介
3.1 主要特性
3.2 中斷向量
3.3 管腳說明
3.4 內(nèi)部結(jié)構(gòu)
4 控制器各模塊電路設計
4.1 主控芯片模塊
4.1.1 時鐘電路
4.1.2 復位電路
4.1.3 單片機管腳分配
4.2 DS18B20 溫度檢測及顯示模塊
4.2.1 DS18B20芯片簡介
4.2.2 74LS245簡介
4.2.3 LED數(shù)碼管顯示
4.3 水位測量及顯示模塊
4.4 報警模塊
4.5 輔助加熱模塊
4.5.1 繼電器工作原理
4.5.2 輔助加熱模塊工作原理
4.6 電磁閥控制模塊
4.6.1 電磁閥工作原理
4.6.2 電磁閥控制模塊工作原理
4.7 時鐘模塊
4.7.1 電子表發(fā)聲原理及控制器定時工作原理
5 控制器軟件程序設計
5.1 軟件設計分析
5.2 主程序模塊
5.3 子程序模塊
5.3.1 DS18B20溫度檢測子程序設計
5.3.2 DS18B20溫度轉(zhuǎn)化及顯示子程序
5.3.3 加熱子程序設計
5.3.4 上水子程序設計
5.4 中斷子程序設計
5.4.1 外部中斷0(設定溫度+)子程序設計
5.4.2 外部中斷1(設定溫度-)子程序設計
6 調(diào)試與總結(jié)
6.1 調(diào)試方法
6.2 遇到的問題及解決辦法
6.3 總結(jié)
致謝
參考文獻
附錄
1 緒論
1.1 太陽能熱水器應用的意義
邁入21世紀以來,隨著經(jīng)濟的急速發(fā)展,對自然資源的需求缺口越來越大,人口基數(shù)過大使得將在很長一段時間保持人口數(shù)量的增長,而經(jīng)濟的高發(fā)展速度也將持續(xù)對資源的供應提出考驗。顯而易見的,資源儲量并不是無限的,若要保證經(jīng)濟的可持續(xù)發(fā)展,僅僅靠節(jié)約能源或是限制開采數(shù)量,并不是一個長久的解決辦法,只有開發(fā)新的能源,才能從根本上解決發(fā)展與資源之間的矛盾。所以在今后,新能源必定將會有很大的發(fā)展空間,太陽能、風能、潮汐能,這些清潔能源是未來大規(guī)模利用的新趨勢。[1]
在各類能源中,太陽能以其清潔、無害、長久和普遍等特點,有極高的發(fā)展?jié)摿�,可以說是取之不盡用之不竭。雖然離太陽能的廣泛利用還有很長的路要走,但是現(xiàn)在已經(jīng)在不少地方開始使用,如常見的太陽能發(fā)電系統(tǒng),太陽能熱水系統(tǒng),太陽能路燈、交通燈等等。我國目前太陽能產(chǎn)業(yè)規(guī)模已躍至世界第一,隨著技術的日益成熟,太陽能相關的成熟產(chǎn)品造價也將隨之降低,將更加廣泛地在人們生產(chǎn)生活中普及,這同時也是解決越來越嚴重環(huán)境污染的一個極佳的解決方案。
在我們的生活中,最為我們所熟知的太陽能利用系統(tǒng)便是太陽能熱水器,太陽能熱水器同傳統(tǒng)的熱水器相比有著許多顯著的特點。不僅節(jié)能環(huán)保,而且使用也非常方便。以其低廉的價格深受各層次消費者的青睞。
隨著太陽能熱水器的大面積使用,太陽能的優(yōu)勢特點已廣泛為人們所熟知,這也對以后的相關產(chǎn)品的生產(chǎn)推廣起到了很好的宣傳效應。大力開發(fā)和利用豐富的太陽能資源,對于我國的經(jīng)濟、社會可持續(xù)發(fā)展具有重大深遠意義。[2]
1.2 我國太陽能發(fā)展現(xiàn)狀我國太陽能熱水產(chǎn)業(yè)的發(fā)展特點可以用“起步晚,發(fā)展快”來形容,雖然國內(nèi)與于上世紀80年代才開始研究推廣,但是歷經(jīng)多年的飛速發(fā)展,我國的太陽能產(chǎn)業(yè)已經(jīng)占據(jù)了世界首位,其中熱水器的產(chǎn)量占世界百分之五十以上,同時,中國國產(chǎn)太陽能產(chǎn)品在世界同類產(chǎn)品中也占據(jù)著很大的市場份額,并且市場占有率還在不斷增長。[3]
盡管有著如此迅猛的發(fā)展勢頭,但是需要指出的是,目前國內(nèi)的能與太陽能熱水器相配置的控制器的功能卻并不完善,在市面上很多同類的太陽能熱水器產(chǎn)品,控制系統(tǒng)簡單,功能不全,大多數(shù)只具有設定水溫,顯示水溫這兩個功能,較為智能化的產(chǎn)品還尚未推廣應用,有些功能還處于研發(fā)階段。因此設計出一款具有溫度控制功能和水位控制功能的產(chǎn)品,將很具有實際意義。這樣的控制器,將能夠解決天氣原因?qū)е碌墓饩€不足問題導致熱水器水溫過低的問題,并且因為有了水位控制功能,就可以解決當水位達到一定高度時不能自動開始或停止供水等等問題。
2 系統(tǒng)設計及仿真軟件2.1 系統(tǒng)的總體結(jié)構(gòu)設計系統(tǒng)總體結(jié)構(gòu)設計如圖2.1,該系統(tǒng)包括保溫箱、排氣管、集熱管、溢流管、上下水管、調(diào)節(jié)閥等。
1.001.jpg (22.52 KB, 下載次數(shù): 138)
下載附件
2017-6-2 17:11 上傳
圖2.1 系統(tǒng)總體結(jié)構(gòu)設計
2.2 設計功能要求該太陽能熱水器的控制器不但需要具有水位、水溫及時間的實時顯示功能,而且需要具有水位、水溫的自動控制功能,必要時,還需要能夠?qū)崿F(xiàn)對時間和水溫進行設定等功能。當蓄水箱水位低于40%時能夠?qū)崿F(xiàn)自動上水,當設定時間到且水位低于蓄水箱水位90%時能夠?qū)崿F(xiàn)自動上水,當上水到達規(guī)定的水位時能夠?qū)崿F(xiàn)自動停止上水,當水位界于高低水位之間時,用戶可以通過按鍵操作手動上水、停水;當設定時間到且水溫低于規(guī)定值時,能夠?qū)崿F(xiàn)自動加熱。必要時還可以對太陽能熱水器進行手動加熱和上水,禁止高溫空曬后進水以及淋浴時禁止上水等功能。
2.3 設計思路該太陽能熱水器控制器是基于C51單片機設計和實施的,它以AT89C51單片機作為檢測和控制中心,由主控芯片模塊、DS18B20 溫度檢測及顯示模塊、水位檢測及顯示模塊、時鐘模塊、報警模塊和電磁閥控制模塊、輔助加熱模塊等模塊組成。它通過DS18B20溫度檢測及顯示模塊實時檢測和顯示水溫,通過水位檢測及顯示模塊實時檢測和顯示水位,通過時鐘模塊實時顯示時鐘并在設定的時間給主控芯片特定的信號,通過電磁閥控制模塊實現(xiàn)熱水器的自動及手動上水,通過輔助加熱模塊實現(xiàn)太陽能熱水器自動及手動加熱,當水位過低且水溫過高時通過報警模塊報警,而主控芯片則負責協(xié)調(diào)其他各模塊的工作。
2.4 仿真軟件(proteus)簡介Proteus可以仿真單片機,兼具EDA軟件的仿真功能,還能一部分外圍器件,是當前使用最廣,用戶評價最好的仿真工具�?梢詮脑韴D設計,程序編寫調(diào)試,再到與外圍電路同步仿真,提供與PCB板設計的簡單切換,可以由最初的模擬概型一直到產(chǎn)品的模擬仿真。該軟件也是第一款融合電路原理圖設計,PCB板設計,產(chǎn)品生產(chǎn)前的仿真三者結(jié)合的開發(fā)平臺,其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430,Cortex,DSP等系列處理器,截止到現(xiàn)在,依然在不斷增加其它系列處理器模型。程序編譯支持Keil和MPLAB軟件編譯器。[4]
Proteus軟件具有其它EDA工具軟件的功能:
1.原理布圖
2.PCB自動或人工布線
3.SPICE電路仿真革命性的特點
Proteus的工作過程:在開始菜單中選擇proteus文件夾,單擊文件夾中的ISIS圖標進入proteus仿真軟件的主界面。在工作之前,先要設置捕捉對齊、顏色、圖形界面大小等項目。工作時,先要單擊工具欄中的P按鈕進入元件選擇對話框(pick devices),在對話框keyword中輸入所需元件的關鍵字(比如當需要電阻時輸入“res”),在results一欄中雙擊選出所需要的元器件(注意當選中元器件時在pick devices對話框中右側(cè)兩欄中會出現(xiàn)該元器件在仿真電路圖和PCB板上的預覽圖,根據(jù)此預覽圖進行選擇),選中的元件會自動出現(xiàn)在工作界面P按鈕下面。然后需要進行仿真電路圖的繪制(具體做法為:在P按鈕下面單擊所需要的元器件即選中此元器件,根據(jù)實驗原理圖把選中的元器件放在工作界面的適當位置,雙擊工作界面中的元器件,在出現(xiàn)的對話框中修改元器件的參數(shù),重復以上步驟直到所有的元器件都擺放到工作界面上,然后單擊各元器件的引腳進行連線。至此仿真電路圖制作完成。然后進行程序的編寫,在程序編寫時需要使用專門的程序編寫器(比如keil軟件等)來編寫并編譯連接運行,生成hex文件。接下來需要把程序存入相應的芯片中,具體做法是:雙擊目標芯片,在出現(xiàn)的對話框中“program file”中選擇相應的程序,然后點擊ok 按鈕即可。最后需要運行,在此步驟秩序點擊proteus工作界面左下方的play按鈕即可。
3 AT89C51簡介3.1 主要特性•與MCS-51 兼容
•具有4K 字節(jié)的可重復編程的flash,可寫入/抹掉數(shù)據(jù)1000次以上,寫入的數(shù)據(jù)能保存10年以上
•操作頻率:0Hz~24MHz
•128×8位內(nèi)部RAM
•32條可規(guī)劃的I/O線
•5個中斷向量地址
•可編程串行通道
•需要振蕩電路和時鐘電路[5]
3.2 中斷向量中斷向量見圖3.1[6]
1.002.jpg (23.05 KB, 下載次數(shù): 131)
下載附件
2017-6-2 17:11 上傳
圖3.1 中斷向量表
3.3 管腳說明AT89C51引腳見圖3.2[7]
VCC:供電電壓。
GND:接地。
P0管腳、P1管腳、P2管腳、P3管腳都是8位雙向I/O口,其中P3管腳還有第二功能。
1.003.jpg (40.61 KB, 下載次數(shù): 123)
下載附件
2017-6-2 17:11 上傳
圖3.2 AT89C51 芯片引腳圖
P3管腳第二功能見圖3.3。
RST:復位輸入端。
ALE/
1.004.jpg (1.32 KB, 下載次數(shù): 127)
下載附件
2017-6-2 17:11 上傳
:地址鎖存信號線。
1.005.jpg (32.08 KB, 下載次數(shù): 126)
下載附件
2017-6-2 17:11 上傳
圖3.3 P3口第二功能說明
1.006.jpg (1.29 KB, 下載次數(shù): 141)
下載附件
2017-6-2 17:11 上傳
:外部程序存儲器讀選通端。
1.007.jpg (1006 Bytes, 下載次數(shù): 133)
下載附件
2017-6-2 17:11 上傳
/VPP:訪問內(nèi)部程序存儲器控制端
XTAL1、XTAL2:震蕩電路輸入端。
3.4 內(nèi)部結(jié)構(gòu)51單片機內(nèi)部機構(gòu)如圖3.4[8]
1.008.jpg (44.46 KB, 下載次數(shù): 122)
下載附件
2017-6-2 17:11 上傳
圖3.4 51單片機內(nèi)部結(jié)構(gòu)框圖
4 控制器各模塊電路設計4.1 主控芯片模塊單片機只有40個管腳,其中I/O管腳只有32個,必須合理地分配單片機管腳,否則很容易造成單片機管腳的不夠用。另外,單片機運行需要時鐘電路、復位電路、電源、地線等,這些電路也需要在單片機主控芯片里面設計。主控芯片模塊proteus仿真圖如圖4.1。[9]
1.009.jpg (50.82 KB, 下載次數(shù): 125)
下載附件
2017-6-2 17:11 上傳
圖4.1 主控芯片模塊proteus仿真圖
4.1.1 時鐘電路單片機的運行需要時鐘電路的支持,單片機時鐘電路是配合外部晶體實現(xiàn)振蕩的電路,它由一個晶振和兩個電容組成,其組成圖如圖4.2,它的兩端分別接在單片機的XTAL1和XTAL2管腳。它可以為單片機提供運行時鐘,如果運行時鐘為0 的話,單片機就不工作,當然超出單片機的工作頻率的時鐘也會導致單片機不能正常工作,C51單片機的支持的時鐘頻率為0~24MHz。
1.010.jpg (26.98 KB, 下載次數(shù): 135)
下載附件
2017-6-2 17:11 上傳
圖4.2 單片機時鐘電路
4.1.2 復位電路在單片機在使用過程中有時(比如上電瞬間以及運行中出現(xiàn)錯誤的時候)需要使單片機從開始狀態(tài)重新運行,這時就需要單片機的復位電路了。它可以使單片機內(nèi)部各寄存器的值變?yōu)槌跏紶顟B(tài),復位電路如圖4.3。它可以在單片機上電瞬間和復位開關按下的瞬間給單片機RESET管腳加上一個程指數(shù)函數(shù)的電平信號,當此電平信號能夠在單片機的RESET管腳保持兩個機器周期以上的高電平時,單片機就能完成復位操作。[10]
1.011.jpg (25.14 KB, 下載次數(shù): 126)
下載附件
2017-6-2 17:11 上傳
圖4.3 單片機復位電路
4.1.3 單片機管腳分配單片機管腳分配如圖4.4。
1.012.jpg (21.25 KB, 下載次數(shù): 123)
下載附件
2017-6-2 17:11 上傳
圖4.4 單片機管腳分配
4.2 DS18B20 溫度檢測及顯示模塊蓄水箱水溫檢測電路使用單總線DS18B20芯片,它可以將溫度信號轉(zhuǎn)化成脈沖信號進而轉(zhuǎn)化成水溫高低的信號。DS18B20的DQ端與單片機的P3.7口相連,它可以將水溫大小直接以數(shù)值的方式存放在其內(nèi)部的RAM中,單片機可以通過DS18B20的DQ引腳直接讀取其內(nèi)部RAM中存放的溫度值。在水溫的顯示上,本設計采用兩位LED數(shù)碼管來實現(xiàn),LED數(shù)碼管的段選信號由單片機的P0口來發(fā)出,其位選信號由單片機的P2.6、P2.7管腳發(fā)出。水溫檢測及顯示模塊的proteus電路仿真如圖4.5。
1.013.jpg (60.58 KB, 下載次數(shù): 126)
下載附件
2017-6-2 17:11 上傳
圖4.5 溫度檢測及顯示模塊proteus仿真圖
4.2.1 DS18B20芯片簡介DS18B20是美國DALLAS公司推出的一種溫度傳感器,它能比較準確的測量-55~125℃之間的溫度。相對于以前的熱敏電阻等溫度傳感器,DS18B20更加智能,它能夠直接測出被測環(huán)境的溫度并以數(shù)值方式存在其內(nèi)部的RAM中,當有需要時,它可以通過單總線實現(xiàn)單片機等對DS18B20內(nèi)部RAM中數(shù)據(jù)的讀取。
DS18B20有如下性能特點:
單總線結(jié)構(gòu)設計,僅需要一個引腳即可完成數(shù)據(jù)在DS18B20和單片機之間的通信。
每個DS18B20都有獨一無二的序列號,可以在一條線上并聯(lián)多個DS18B20芯片。
測量溫度范圍-55℃~+125℃。
分辨率可調(diào)。
DS18B20 內(nèi)部結(jié)構(gòu)[11]
DS18B20 內(nèi)部結(jié)構(gòu)如圖4.6。
1.014.jpg (28.31 KB, 下載次數(shù): 146)
下載附件
2017-6-2 17:11 上傳
圖4.6 DS18B20內(nèi)部結(jié)構(gòu)框圖
DS18B20引腳
DS18B20引腳功能描述見圖4.7。
序號
| 名稱
| 引腳功能描述
| 1
| GND
| 地信號
| 2
| DQ
| 數(shù)字信號輸入輸出引腳
| 3
| VDD
| 供電電源輸入端
| 圖4.7 DS18B20各引腳功能
DS18B20轉(zhuǎn)換成的溫度數(shù)據(jù)格式[12]
當DS18B20接到溫度轉(zhuǎn)換命令時它就可以將測得的溫度信號轉(zhuǎn)換成溫度值并以16位帶符號擴展的二進制補碼形式存儲在其高速緩存RAM中,其溫度值格式如圖4.8。
1.015.jpg (15.2 KB, 下載次數(shù): 134)
下載附件
2017-6-2 17:11 上傳
圖4.8 DS18B20溫度數(shù)據(jù)格式
單片機可以通過DS18B20的DQ引腳直接取RAM中溫度的值,讀取時,先讀取低位數(shù)據(jù),然后讀取高位數(shù)據(jù)。在DS18B20溫度數(shù)據(jù)格式中,當S=0時表示此時的溫度值為正值,當S=1時表示此時溫度為負值。
DS18B20 ROM命令[13]
DS18B20的一系列操作基本都是通過ROM命令來實現(xiàn)的,DS18B20的ROM命令見圖4.9。
1.016.jpg (108.11 KB, 下載次數(shù): 112)
下載附件
2017-6-2 17:11 上傳
圖4.9 DS18B20的ROM命令
4.2.2 74LS245簡介74LS245為8位雙向3態(tài)緩沖電路,主要用途為數(shù)據(jù)的雙向緩沖,以增強芯片的驅(qū)動能力。[14]74LS245真值表如圖4.10所示。
輸入
| 輸出
|
1.017.jpg (902 Bytes, 下載次數(shù): 116)
下載附件
2017-6-2 17:11 上傳
| DIR
| L
| L
| 從B端到A端進行數(shù)據(jù)傳輸
| L
| H
| 從B端到A端進行數(shù)據(jù)傳輸
| H
| ×
| 高阻態(tài)
|
圖4.10 74LS245真值表
4.2.3 LED數(shù)碼管顯示LED數(shù)碼管是由八個發(fā)光二極管排列在一起并相互連接組成的,根據(jù)其連接方法的不同,LED數(shù)碼管可以分為共陰極和共陽極兩種連接方法。兩種接法電路圖如圖4.11。
1.018.jpg (57.5 KB, 下載次數(shù): 118)
下載附件
2017-6-2 17:11 上傳
圖4.11 LED數(shù)碼管及接線方法
當把數(shù)碼管中各發(fā)光二極管的陰極連接在一塊并與地相連,通過從各發(fā)光二極管陽極是否接電源來控制發(fā)光二極管的亮滅時成為共陰極接法。同理,當把數(shù)碼管中各發(fā)光二極管陽極接在一塊并與電源相連,通過在各發(fā)光二極管陰極是否接地來控制各發(fā)光二極管的亮滅時稱為共陽極接法。不同的接法所需要點亮電平是不一樣的,所以在使用數(shù)碼管顯示時,一定要注意區(qū)分這兩種接法。當然為了顯示數(shù)字或字符,需要對數(shù)字或字符進行編碼,本設計采用共陰極LED數(shù)碼管顯示。
LED數(shù)碼管顯示方式有兩種,即靜態(tài)顯示方式和動態(tài)顯示方式。靜態(tài)顯示就是每個數(shù)碼管都需要連接一個8位的數(shù)據(jù)線,通過該8位數(shù)據(jù)線發(fā)送數(shù)據(jù)來保持顯示的字符,當向數(shù)碼管送入一次8位數(shù)據(jù)時數(shù)碼管就會一直顯示該字符,如果需要改變需要顯示的字符則需要重新給數(shù)碼管輸入另一個8位數(shù)據(jù)。動態(tài)顯示就是通過一定的操作使各個數(shù)碼管依次點亮,利用發(fā)光二極管的余暉效應和人眼的視覺暫留現(xiàn)象使人的感覺就像是同時點亮各個數(shù)碼管一樣。動態(tài)顯示的亮度比靜態(tài)顯示稍微差一下,程序上稍微麻煩一些,占用的CPU時間長點,但當數(shù)碼管位數(shù)比較多時需要的管腳位數(shù)明顯減少,硬件電路會大大簡化。由于單片機輸出管腳有限,為了節(jié)省單片機管腳,本設計采用動態(tài)顯示方式。
4.3 水位測量及顯示模塊蓄水箱水位是智能控制的一個重要參數(shù),是實現(xiàn)智能控制的重要依據(jù),只有準確檢測出水箱水位才能更好地實現(xiàn)水位地顯示以及蓄水箱的上水、停水等操作。要實現(xiàn)水位地精確檢測最好采用連續(xù)液位傳感器,但考慮到系統(tǒng)成本及使用范圍,本系統(tǒng)在進行水位檢測時仍然采用分段式液位傳感器(即在蓄水箱不同的位置放入水位探針),在水位顯示上采用由5個發(fā)光二極管組成的分段式液位顯示器。水位檢測及顯示電路圖如圖4.12。
1.019.jpg (23.35 KB, 下載次數(shù): 129)
下載附件
2017-6-2 17:11 上傳
圖4.12 水位檢測及顯示電路圖
檢測原理:把五個金屬水位探針分別固定在水箱的五個位置上,金屬探針通過一個1M的電阻(即上拉電阻)和+5V電源相連,水箱里的水通過導線和地相連。當金屬探針在水面以下時,+5V電源、上拉電阻、水箱里的水、地等組成一個回路,由于水的電阻遠比1M小,所以此時探針處電平為低電平。這個低電平通過一個反相器(非門)后變?yōu)楦唠娖�,這個高電平通過發(fā)光二極管、500Ω的電阻放電,使得發(fā)光二極管點亮,顯示此時該液位有水。當金屬探針在水面以上時,金屬探針處電平為高電平,該高電平經(jīng)過反相器時變?yōu)榈碗娖�,低電平不能使發(fā)光二極管發(fā)光,從而顯示該液位沒有水。至此,水位的顯示完成。水位測量及顯示模塊proteus仿真圖如圖4.13。
1.020.jpg (35.58 KB, 下載次數(shù): 144)
下載附件
2017-6-2 17:11 上傳
圖4.13 水位測量及顯示模塊proteus仿真圖
本proteus仿真圖使用按鍵開關代替水和+5V電源、1M電阻及地構(gòu)成回路,當按鍵按下時代表此位置處有水,當按鍵沒有按下時代表此水位處沒有水。需要注意的是,上拉電阻不宜選的太小,因為水是有電阻的,上拉電阻選的太小會導致當探針在水面以下時探針輸出低電平特性不明顯,此時很容易導致液位顯示上出現(xiàn)錯誤。位置最高到位置最低處的探針所測出的電平經(jīng)反相器后會通過導線依次送到單片機的P2.0到P2.4管腳,經(jīng)單片機接收、處理,實現(xiàn)水位控制的操作。
4.4 報警模塊太陽能熱水器通常對蓄水箱內(nèi)的水位有一定的要求,當水箱水位過低時,很容易給人們的正常生活帶來不便,所以,當水位過低時能及時讓人們知道就顯得比較重要,報警模塊正是基于此種原因設計的。報警模塊的proteus仿真圖如圖4.14。
1.021.jpg (36.78 KB, 下載次數(shù): 132)
下載附件
2017-6-2 17:11 上傳
圖4.14 報警模塊的proteus仿真圖
檢測及報警原理:當水位過低時,單片機相應管腳被清零,使得單片機通過P1.5口輸出一系列脈沖波。脈沖波經(jīng)由Q1、R1組成的放大電路后作用于蜂鳴器BUZI的線圈上,線圈產(chǎn)生變化的磁場帶動蜂鳴器紙盆震動從而發(fā)出聲音。
4.5 輔助加熱模塊當光照不足時,太陽能熱水器的水溫很難達到指定的要求,為了不影響人們的正常使用,輔助加熱設備就顯得尤為重要了。輔助加熱模塊的proteus電路仿真圖如圖4.15。
1.022.jpg (35.96 KB, 下載次數(shù): 122)
下載附件
2017-6-2 17:11 上傳
圖4.15 輔助加熱模塊的proteus電路仿真圖
4.5.1 繼電器工作原理繼電器工作原理圖如圖4.16所示。[15]
1.023.jpg (11.09 KB, 下載次數(shù): 142)
下載附件
2017-6-2 17:11 上傳
圖4.16 繼電器工作原理圖
當繼電器的控制回路沒有電流流過時,繼電器的銜鐵在彈簧的拉力作用下右端上翹,觸點3與觸點5斷開,與觸點4結(jié)合。當有電流流過繼電器的控制回路(即由導線和線圈組成的電磁鐵)時,電流就會在在電磁鐵上產(chǎn)生磁場,此時,銜鐵會被電磁鐵吸引而下降,使得觸點3與觸點4分離,與觸點5連接。如果在端點3和端點5接上其他電路組成被控回路就會出現(xiàn)當有電流流過控制回路時被控回路導通,當沒有電流流過控制回路時被控回路斷開。
4.5.2 輔助加熱模塊工作原理當加熱按鈕沒有按下時,此輔助加熱模塊為自動控制模式。在自動控制模式下,當設定的時間到時,單片機會自動對蓄水箱的水溫進行判斷。當水溫高于設定值時,P1.1口輸出為高電平,三極管Q1集電極和發(fā)射極斷開,此時,輸入回路中沒有電流為零,繼電器被控回路斷開,加熱電阻不工作。當P1.1口輸出為低電平時,三極管Q1集電極和發(fā)射極導通,+5V電源經(jīng)電阻R1,繼電器控制回路、三極管Q1和地相連,輸入回路導通,此時,繼電器被控回路閉合,220V交流電源經(jīng)繼電器被控回路給加熱電阻加熱,從而使水溫升高。當臨時(不是設定時間)需要熱水時可以通過加熱按鈕進行加熱,此時,只需按下加熱按鈕即可對蓄水箱的水進行加熱。
4.6 電磁閥控制模塊電磁閥是把電信號轉(zhuǎn)化成水龍頭開關信號的裝置,是實現(xiàn)水位智能控制不可缺少的一部分。電磁閥從原理上分為直動式、分步直動式和先導式三類電磁閥,本設計采用直動式電磁閥。電磁閥控制模塊proteus仿真如圖4.17。
1.024.jpg (38.85 KB, 下載次數(shù): 121)
下載附件
2017-6-2 17:11 上傳
圖4.17 電磁閥控制模塊proteus仿真電路圖
繼電器工作原理已在輔助加熱模塊介紹,此處不再敘述
4.6.1 電磁閥工作原理電磁閥工作原理如圖4.18。
1.025.jpg (22.92 KB, 下載次數(shù): 120)
下載附件
2017-6-2 17:11 上傳
圖4.18 電磁閥工作原理圖
當電磁閥不通電時,活動鐵心在彈簧的彈力作用下上升,入口和出口被閥門隔開,水被阻斷;當通電時,活動鐵心在線圈產(chǎn)生的磁場作用下下落,此時入口和出口導通,水從入口經(jīng)電磁閥流向出口,完成上水。
4.6.2 電磁閥控制模塊工作原理在本設計中,此電磁閥控制模塊分為自動控制和手動控制兩種工作情況:當上水按鍵開關斷開且淋浴開關閉合時電磁閥控制模塊為自動控制模式,此時當單片機P1.4口輸出為高電平時,繼電器的輸入端輸入電流為零,繼電器輸出端開路,電磁閥所在電路開路,電磁閥關閉;當單片機P1.4口輸出為低電平時,繼電器輸入端通過電阻、三極管和電源、地相連,此時,輸入回路有輸入電流,使得繼電器輸出回路閉合,電磁閥所在電路導通,電磁閥打開。當上水按鍵開關直接閉合且淋浴開關閉合時,電磁閥通過按鍵開關直接和220V電源相連,此時電磁閥所在電路導通,電磁閥打開。另外,為了避免淋浴時因水位偏低而導致熱水器直接上水,本模塊加了一個淋浴狀態(tài)開關,當淋浴狀態(tài)打開(淋浴開關斷開)時,直接斷開電磁閥開關,此時無論水位多么低都不會上水,當淋浴狀態(tài)關閉(淋浴開關閉合)時,可以選擇自動控制和手動控制兩種模式。
4.7 時鐘模塊時間是實現(xiàn)熱水器控制器定時上水、定時加熱的重要參考,所以設置時鐘模塊是非常有必要的。時鐘模塊可以通過單片機設置一個數(shù)字時鐘來實現(xiàn),也可以時鐘芯片(比如DS1302)實現(xiàn),還可以通過外接具有定時功能的電子表來實現(xiàn)�?紤]到單片機管腳的數(shù)量限制和設計的難易程度,本設計采用外接電子表的方式來實現(xiàn)定時上水、定時加熱。
4.7.1 電子表發(fā)聲原理及控制器定時工作原理電子表里面裝有壓電陶瓷片,壓電陶瓷片是一種電子發(fā)音元件,在兩個電極中間放入壓電陶瓷介質(zhì)材料,當設定時間到時,會在壓電陶瓷片的兩個電極上加上特定的交流信號,壓電陶瓷片就會根據(jù)所加信號的大小和頻率震動,從而發(fā)出聲音。本設計中會把這個電極信號接在單片機的P1.0管腳,當該管腳的電平是低電平時可以給單片機一個觸發(fā)信號,經(jīng)單片機處理,使得加熱設備開始工作;同理,當給單片機的P1.3管腳加上一個低電平時同樣能給單片機一個觸發(fā)信號,經(jīng)單片機處理后,使得上水設備開始工作。
5 控制器軟件程序設計5.1 軟件設計分析軟件是系統(tǒng)的指揮中心,由軟件來配合硬件來完成電子設備特定的功能是目前電子設備的普遍規(guī)律。本系統(tǒng)同樣要求軟件和硬件兩部分協(xié)調(diào)工作才能所完:由硬件電路完成數(shù)據(jù)的采集、顯示以及對電磁閥和蜂鳴器的控制,由軟件來實現(xiàn)數(shù)據(jù)的判斷、處理等。由此可見,軟件和硬件一樣,都是該系統(tǒng)正常工作所必須的一部分。
軟件相對于硬件電路來說具有更高的性價比,并且更容易實現(xiàn),為了充分發(fā)揮C51單片機的優(yōu)良的性能價格比,我們在進行系統(tǒng)設計時,更傾向于使硬件電路“軟件化”,即通過編程的方法使硬件電路簡化。考慮到C語言諸多優(yōu)良特性,本設計采用C語言編寫,為了增加系統(tǒng)的實時性,本設計對于偶然事件的處理采用中斷的方式來進行處理。
在電路設計時我們采用模塊化設計,同理,在軟件設計時,我們也采用模塊化設計。首先需要編寫出大概的主程序,然后需要找出所設計的子程序并對子程序進行逐個分析和設計,編寫出子程序后應給予每個子程序語法檢驗以確定子程序是不是有語法錯誤,接下來需要把子程序和主程序以及一些的聲明函數(shù)等進行合理的檢查和修改直到?jīng)]有語法錯誤為止,再然后對偶然事件需要進行中斷處理函數(shù)的編寫。最后需要對整個程序進行編譯檢查以確定是否有語法錯誤,如果有語法錯誤需要對程序進行改正,如果沒有可以把程序烤到單片機里來檢驗程序的正確與否。[16]
5.2 主程序模塊主程序需要完成對單片機端口的初始化,開外部中斷0,開外部中斷1等,此外,還包括溫度數(shù)據(jù)讀取、溫度數(shù)據(jù)顯示、水位數(shù)據(jù)讀取以及對熱水器加熱、上水等操作。其流程圖如圖5.1所示。
1.026.jpg (42.05 KB, 下載次數(shù): 127)
下載附件
2017-6-2 17:11 上傳
圖5.1 主程序模塊流程圖
5.3 子程序模塊子程序是指能夠?qū)崿F(xiàn)某一特定功能并能被其他程序調(diào)用的一段程序。采用子程序結(jié)構(gòu)可以使程序得到簡化,便于進行調(diào)試,并可實現(xiàn)程序的模塊化,本設計將采用子程序模塊的設計來實現(xiàn)部分功能。
5.3.1 DS18B20溫度檢測子程序設計DS18 B20溫度檢測模塊的子程序流程圖如圖5.2,它包括對 DS18 B20的初始化、發(fā) ROM命令、發(fā)溫度轉(zhuǎn)化命令、讀存儲器等操作。
1.027.jpg (22.68 KB, 下載次數(shù): 111)
下載附件
2017-6-2 17:11 上傳
圖5.2 DS18B20溫度檢測流程圖
5.3.2 DS18B20溫度轉(zhuǎn)化及顯示子程序DS18 B20溫度轉(zhuǎn)化及顯示子程序流程圖如圖5.3,它包括讀取溫度值、對溫度值得判斷、區(qū)分溫度的十位和個位數(shù)據(jù)、顯示十位數(shù)據(jù)、顯示個位數(shù)據(jù)等操作。
1.028.jpg (30.64 KB, 下載次數(shù): 130)
下載附件
2017-6-2 17:11 上傳
圖5.3 DS18B20溫度轉(zhuǎn)化及顯示流程圖
5.3.3 加熱子程序設計當設定時間到時,外部時鐘會在單片機的P1.0管腳給單片機一個觸發(fā)信號,使得單片機執(zhí)行加熱子程序。加熱子程序流程圖如圖5.4。
1.029.jpg (29.89 KB, 下載次數(shù): 132)
下載附件
2017-6-2 17:11 上傳
圖5.4 加熱子程序流程圖
5.3.4 上水子程序設計同加熱子程序一樣,當設定時間到時,外部時鐘會在單片機的P1.3管腳給單片機一個觸發(fā)信號,使得單片機執(zhí)行上水子程序。上水子程序流程圖如圖5.5。
1.030.jpg (32.46 KB, 下載次數(shù): 120)
下載附件
2017-6-2 17:11 上傳
圖5.5 上水子程序流程圖
5.4 中斷子程序設計為了保證系統(tǒng)的實時性,本設計有一些功能是通過中斷來實現(xiàn)的,這就要求在軟件程序設計里面需要有專門的中斷服務子程序的設計。本設計采用了兩個中斷服務,包括外部中斷0和外部中斷1。其中外部中斷0用作增加設定的溫度值,外部中斷1用作減小設定的溫度值。
5.4.1 外部中斷0(設定溫度+)子程序設計外部中斷0負責使設定的溫度值增加,每當執(zhí)行一次外部中斷0,所設定的溫度值就會增加1。外部中斷0(設定溫度+)子程序流程圖如圖5.6。
1.031.jpg (15.49 KB, 下載次數(shù): 125)
下載附件
2017-6-2 17:11 上傳
圖5.6 外部中斷0(設定溫度+)子程序流程圖
5.4.2 外部中斷1(設定溫度-)子程序設計同外部中斷0相對應,外部中斷1用作使設定的溫度值減小。每當執(zhí)行一次外部中斷1,所設定的溫度值就會自動減1,當設定溫度值減小到30℃一下時設定溫度值自動變?yōu)?9℃。外部中斷1(設定溫度-)子程序流程圖如圖5.7。
1.032.jpg (15.09 KB, 下載次數(shù): 122)
下載附件
2017-6-2 17:11 上傳
圖5.7 外部中斷1(設定溫度-)子程序流程圖
6 調(diào)試與總結(jié)
6.1 調(diào)試方法為了節(jié)省人力、物力,在正式調(diào)試之前往往會對電路進行仿真操作。所謂的仿真操作就是使用專門用于仿真的仿真軟件對系統(tǒng)的硬件電路圖及程序進行仿真。如果仿真結(jié)果滿足我們的要求,那么我們就可以進行硬件電路的制作了,如果仿真結(jié)果不能滿足我們的要求,那么我們就需要重新對程序及相關的硬件進行設計。
本設計使用proteus對系統(tǒng)的各部分和整個系統(tǒng)進行仿真。具體做法為:
- 根據(jù)系統(tǒng)要求用proteus 畫出整體系統(tǒng)的仿真電路圖(可以先一個模塊一個模塊的畫,然后在組裝在一塊)。
- 2、根據(jù)系統(tǒng)要求及畫出的仿真電路圖編寫程序(本設計使用C語言編寫),并用keil軟件進行編譯,生成HEX文件。
- 把生成的HEX文件下載到對應的單片機中(具體做法為:在proteus仿真電路圖中雙擊相應的單片機會出現(xiàn)“Edit Component”對話框,在此對話框中program File一欄中選擇所需的HEX文件,然后點擊該對話框右上角的ok按鈕即可),然后點擊仿真電路圖界面左下角的play按鈕即可進行電路仿真。
在完成系統(tǒng)的仿真操作后就需要對系統(tǒng)進行調(diào)試了。調(diào)試可以分為硬件調(diào)試和系統(tǒng)調(diào)試兩部分。硬件調(diào)試主要是對硬件部分進行調(diào)試,看看所設計的硬件能否完成我們期望的功能,而系統(tǒng)調(diào)試主要是看看系統(tǒng)能否按照預期進行工作。
在制作完成PCB板之后就可以進行硬件部分的調(diào)試了。 在制作完PCB板之后就可以進行硬件電路調(diào)試了。在進行硬件電路調(diào)試之前需要先對各元器件進行檢查,對于有問題的元器件需要及時替換。在檢查完元器件之后就可以往PCB板上查元器件了。為了降低硬件調(diào)試的難度,便于更好的發(fā)現(xiàn)問題,在硬件調(diào)試過程中采用分塊調(diào)試的方法。
在完成硬件電路調(diào)試之后就需要對系統(tǒng)進行調(diào)試了。所謂系統(tǒng)調(diào)試就是把提前編譯好的程序下載單片機中,對系統(tǒng)的整體性能進行觀察、調(diào)試。
6.2 遇到的問題及解決辦法- 在進行proteus各模塊仿真電路圖設計時有部分元器件(比如電磁閥、加熱裝置等)在元件庫中找不到。解決方法:用其他有相似特點的元件代替,并將此元件的參數(shù)修改一下。
- 在進行proteus總體仿真電路設計時,有很多現(xiàn)象(比如:電磁閥的通斷、水位的高低等)不容易觀察或不容易操作。解決方法:用發(fā)光二極管、按鍵開關代替這些不容易觀察或不容易操作的現(xiàn)象。
- 在程序設計時對DS18B20的程序設計總是弄不對。解決方法:參考其他人對這部分程序的編寫,然后按照自己的要求和DS18B20的原理進行修改。
- 在程序設計過程中 ,對DS18B20測出的溫度進行轉(zhuǎn)化方面出現(xiàn)失誤:沒有注意DS18B20溫度數(shù)據(jù)是包含小數(shù)部分的溫度而導致在溫度轉(zhuǎn)化時出現(xiàn)錯誤。解決方法:在對DS18B20結(jié)構(gòu)及原理仔細分析的基礎上對設計的程序進行修改,首先去除溫度的小數(shù)部分,然后吧溫度的個位數(shù)部分和十位數(shù)部分分別放在一個數(shù)組的兩個元素中。
- 在系統(tǒng)調(diào)試中發(fā)現(xiàn)溫度顯示時總是個位數(shù)在前,十位數(shù)在后,給人的感覺很別扭。解決方法有兩個:一、在溫度數(shù)據(jù)的處理子程序中把個位數(shù)據(jù)和十位數(shù)據(jù)處理的語句調(diào)換一下。二、在硬件電路中把兩個LED數(shù)碼管位選信號輸入端調(diào)換一下。本設計采用第一種方法,即在程序處理方面做改變。
6.3 總結(jié)太陽能熱水器控制器是對太陽能熱水器進行控制的一種裝置,它需要能夠?qū)崿F(xiàn)對熱水器水溫、水位的控制。在本設計的過程中,我先是對太陽能熱水器需要實現(xiàn)的功能進行分析,然后按照需要實現(xiàn)的功能按照模塊設計的思想進行設計,接下來把各模塊組合起來形成一個系統(tǒng),用proteus對該系統(tǒng)進行仿真,最后進行實際電路連接。經(jīng)過以上各個步驟的實際操作,我們可以看出,本設計是可行的。
本設計中我用的了單片機、C語言、模電、數(shù)電、電路分析等多門課程,可以說正是在這些知識的支撐下我才能順利完成本設計。在進行本設計的過程中,我較深刻理解了能夠綜合運用知識的重要性,當然,本設計對我綜合運用能力也有一定程度的提高。
另外,在進行本設計的過程中,我的交流能力也有一定程度的提高。在本設計中,我遇到過很多問題,正是與老師、學長、同學的交流給我解決這些問題很大的啟發(fā),使我能夠順利完成本設計。
附錄本設計程序如下:[17]
- /***************************************************/
- #include
- #include
- #define Disdata P0
- #define uchar unsigned char
- #define uint unsigned int
- sbit b20=P3^7;
- sbit p20=P2^0;
- sbit p21=P2^1;
- sbit p22=P2^2;
- sbit p23=P2^3;
- sbit p24=P2^4;
- sbit p25=P2^5;
- sbit p26=P2^6;
- sbit p27=P2^7;
- sbit beet=P1^5;
- sbit heat=P1^0;
- sbit p11=P1^1;
- sbit qxjr=P1^2;
- sbit add=P1^3;
- sbit p14=P1^4;
- sbit qxss=P1^6;
- uchar a=35;
- uint temp,b,wd,h;
- bit lock0=1; //加熱標志位
- bit lock1=1;
- uchar code dis[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
- uchar data temp_data[3]={0x00,0x000,0x00};
- uint key_[2]={5,0};
- /*****************11us延時函數(shù)*************************/
- void delay(uint t)
- {
- for (;t>0;t--);
- }
- /******************1ms延時函數(shù)*****************************/
- void delay1ms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- /****************發(fā)音函數(shù)***************************/
- void play(uchar t)
- {
- uchar i;
- for(i=0;i<1000;i++)
- {
- beet=~beet;
- delay1ms(t);
- }
- beet=0;
- }
- /****************顯示掃描函數(shù)***************************/
- scan()
- {
- uint k=0;
- Disdata=~dis[temp_data[k]];
- p26=0;
- p27=1;
- delay1ms(5);
- k++;
- Disdata=~dis[temp_data[k]];
- p26=1;
- p27=0;
- delay1ms(5);
- p26=1;
- p27=1;
- }
- /*********************預置溫度******************************/
- void yzwd(uint b)
- {
- Disdata=~dis[b%10];
- p26=0;
- p27=1;
- delay1ms(5);
- Disdata=~dis[b/10];
- p26=1;
- p27=0;
- delay1ms(5);
- p26=1;
- p27=1;
- }
- /****************DS18B20復位函數(shù)************************/
- ow_reset(void)
- {
- char presence=1;
- while(presence)
- {
- while(presence)
- {
- b20=1;_nop_();_nop_();
- b20=0;
- delay(50);
- b20=1;
- delay(6);
- presence=b20;
- }
- delay(45);
- presence=~b20;
- }
- b20=1;
- }
- /****************DS18B20寫命令函數(shù)************************/
- void write_byte(uchar val)
- {
- uchar i;
- for(i=8;i>0;i--)
- {
- b20=1;_nop_();_nop_();
- b20=0;_nop_();_nop_();_nop_();_nop_();
- b20=val&0x01;
- delay(6);
- val=val/2;
- }
- b20=1;
- delay(1);
- }
- //
- /****************DS18B20讀1字節(jié)函數(shù)************************/
- uchar read_byte(void)
- {
- uchar i;
- uchar value=0;
- for(i=8;i>0;i--)
- {
- b20=1;_nop_();_nop_();
- value>>=1;
- b20=0;_nop_();_nop_();_nop_();_nop_();
- b20=1;_nop_();_nop_();_nop_();_nop_();
- if(b20)value|=0x80;
- delay(6);
- }
- b20=1;
- return(value);
- }
- /****************讀出溫度函數(shù)************************/
- uint read_temp()
- {
- ow_reset();
- delay(200);
- write_byte(0xcc);
- write_byte(0x44);
- ow_reset();
- delay(1);
- write_byte(0xcc);
- write_byte(0xbe);
- temp_data[0]=read_byte();
- temp_data[1]=read_byte();
- temp=temp_data[1];
- temp<<=8;
- temp=temp|temp_data[0];
- return temp;
- }
- /****************溫度數(shù)據(jù)處理函數(shù)************************/
- work_temp(uint tem)
- {
- temp_data[2]=tem>>4;
- temp_data[0]=temp_data[2]%10;
- temp_data[1]=temp_data[2]/10;
- }
- /****************加熱子函數(shù)************************/
- void heating(void)
-
- {
- if(heat==0)
- {lock0=0;}
- if(lock0==0)
- {p11=0;}
- else
- {p11=1;}
- work_temp(read_temp());
- wd=temp_data[1]*10+temp_data[0];
- if(wd>=a||qxjr==0)
- {lock0=1;p11=1;}
- }
- /****************上水子函數(shù)************************/
- void adding(void)
- {
- if(add==0)
- {lock1=0;}
- if(lock1==0)
- {p14=0;}
- else
- {p14=1;}
- if(p20==1||qxss==0)
- {lock1=1;p14=1;}
- }
- /****************主函數(shù)************************/
- void main()
- {
- P0=0xff;
- p26=1;
- p27=1;
- EX0=1;
- IT0=1;
- EX1=1;
- IT1=1;
- EA=1;
- ow_reset();
- write_byte(0xcc);
- write_byte(0x44);
- while(1)
- {
- heating();
- adding();
- work_temp(read_temp());
- scan();
- wd=temp_data[1]*10+temp_data[0];
- if(wd<80)
- {
- while(p22==0)
- {
- p14=0;
- delay1ms(1);
- work_temp(read_temp());
- scan();
- }
- }
- if(wd>=80)
- {
- while(p24==1)
- {
- p14=0;
- work_temp(read_temp());
- scan();
- }
- while(p24==0)
- {
- play(2);
- p14=1;
- work_temp(read_temp());
- scan();
- }
- }
- }
- }
- /********************外部中斷0(設定溫度+)**************************/
- void wdxg(void) interrupt 0
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
下載(word格式 可編輯):
基于單片機的太陽能熱水器控制器.doc
(1.77 MB, 下載次數(shù): 202)
2017-6-2 12:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|