隨著社會(huì)的進(jìn)步,人類文明在不斷提高的同時(shí),卻面臨著一個(gè)非常嚴(yán)峻的問題:世界上的不可再生能源——煤炭、石油、天然氣的存儲(chǔ)量在以極快的速度減少,在不久的將來,這些寶貴的資源將逐漸從地球上消失。與此同時(shí),使用這些能源給我們周圍的環(huán)境帶來了巨大的破壞。藍(lán)藻爆發(fā)、臭氧空洞、二噁英事件等環(huán)境問題在不斷的出現(xiàn),生態(tài)平衡遭到了嚴(yán)重的破壞。所以,人類急需發(fā)現(xiàn)更多無污染的可再生資源,在這時(shí),太陽能這個(gè)無窮無盡的綠色資源得到了人們的青睞。使用它不僅可以解決能源短缺的問題,而且不用擔(dān)心它會(huì)消耗盡,只要太陽 升起,人們就可以得到儲(chǔ)量豐富的太陽能;另外,太陽能的使用不會(huì)產(chǎn)生CO2等有害氣體,絕對不會(huì)對環(huán)境產(chǎn)生任何的污染,有效地緩解了現(xiàn)存的環(huán)境問題。太陽能技術(shù)也因此得到了飛速的發(fā)展,太陽能汽車、太陽能電池、太陽能熱水器等新型產(chǎn)品不斷出現(xiàn)在市場上,其中,以太陽能熱水器發(fā)展的最為廣泛,也得到了大眾的認(rèn)可。根據(jù)不完全統(tǒng)計(jì),太陽能熱水器的銷售量已遠(yuǎn)遠(yuǎn)超過了其他種類的熱水器。隨著太陽能技術(shù)的不斷改革,此款熱水器會(huì)有一個(gè)更廣闊、更長遠(yuǎn)的發(fā)展。
太陽能熱水器給人們提供著安全、綠色、節(jié)能的熱水,而且造價(jià)比較低廉,在技術(shù)上也比較成熟,因此受到人們的喜愛。在整個(gè)太陽能熱水器系統(tǒng)中,除了熱水器本身之外,還有一個(gè)系統(tǒng)也起到了及其重要的作用,即控制器。它是用戶與熱水器之間的交流介質(zhì),通過控制器,可以將熱水器的水位水溫信息及時(shí)反饋給用戶,而用戶也可以通過控制器對熱水器進(jìn)行操作,比如,當(dāng)熱水器的水箱沒水時(shí),用戶可以選擇自動(dòng)上水功能來加水,當(dāng)雨雪天氣時(shí),沒有足夠的熱量來滿足水的溫度,用戶就可以啟動(dòng)輔助加熱功能,通過加熱棒來加熱水,這樣,無論何時(shí)用戶都可以使用到熱水。
1.2 現(xiàn)狀分析
太陽能熱水器的銷量一直成增長趨勢,十幾年前,市場的主導(dǎo)還是電加熱型的熱水器,太陽能熱水器寥寥無幾,而如今,幾乎每家每戶都在使用太陽能熱水器,以其廉價(jià)、節(jié)能、環(huán)保的優(yōu)勢占領(lǐng)了絕大部分市場。隨著人們越來越濃厚的環(huán)保意識(shí),對這種綠色的太陽能熱水器的需求會(huì)越來越大。但是與之配套的控制器卻一直沒有達(dá)到成熟的階段。目前,大多數(shù)控制器只具有簡單的檢測、顯示功能,還需要人為的上水,當(dāng)水溫達(dá)不到滿意的溫度時(shí),用戶束手無策。因此,一個(gè)多功能的控制器一旦問世,一定會(huì)得到人們的喜愛。這種控制器的市場前景非常廣闊。
這種控制器以單片機(jī)為核心器件,單片機(jī)的價(jià)格低廉、工作穩(wěn)定、設(shè)計(jì)簡單,非常適合這種控制器的生產(chǎn),智能化的單片機(jī)還能夠根據(jù)不同的需求作出相應(yīng)的調(diào)整,滿足了不同用戶的多方面需求。另外,單片機(jī)系統(tǒng)耗能較少,能夠最大程度的節(jié)約能源,保護(hù)設(shè)備,增加設(shè)備的使用壽命。它適用于各個(gè)地方的各種需求,且安裝快捷,使用方便,所以它的市場前景廣闊,是目前市面上其他熱水器種類的升級(jí)產(chǎn)品?傊,無論從價(jià)格還是技術(shù)來說,太陽能熱水器及其控制器都具有很大的優(yōu)勢。
太陽能熱水器的組成很簡單,包括存儲(chǔ)熱水的保溫水箱、用于吸收太陽光能量并把它轉(zhuǎn)換為熱量的集熱器、冷水和熱水循環(huán)流動(dòng)的水管,再加上幾個(gè)閥門,用來控制水的流向。其結(jié)構(gòu)圖如下所示:
圖2-1太陽能熱水器結(jié)構(gòu)原理圖
太陽能熱水器產(chǎn)生熱水的過程也非常簡單,利用冷熱水密度不同的原理就可以完成水循環(huán),集熱器可以很好的保留太陽光的能量,從而將其轉(zhuǎn)換為水的熱量,當(dāng)有水從集熱器中流過時(shí),冷水被加熱為熱水,再流向保溫水箱儲(chǔ)存起來,以供用戶隨時(shí)使用,直到水溫達(dá)到設(shè)定值,循環(huán)閥門關(guān)閉。水循環(huán)過程如下圖所示:
圖2-2太陽能熱水器水循環(huán)原理圖
2.2 控制器結(jié)構(gòu)及工作原理控制器的核心器件為SST89E58單片機(jī),下圖中T1代表保溫水箱中的溫度傳感器DS18B20,由它負(fù)責(zé)實(shí)時(shí)溫度值的檢測,再發(fā)送給單片機(jī)進(jìn)行顯示;T2負(fù)責(zé)水位的檢測,并完成自動(dòng)上水功能;F1、F4分別代表冷水閥門和熱水閥門;冷水和熱水分別經(jīng)F2、F3循環(huán)流動(dòng),最終存儲(chǔ)在保溫水箱中;電加熱系統(tǒng)負(fù)責(zé)在雨雪天氣進(jìn)行加熱,來達(dá)到設(shè)定溫度;控制器還應(yīng)有報(bào)警功能,當(dāng)數(shù)據(jù)超過了正常范圍,報(bào)警器啟動(dòng),提醒用戶。
圖2-3控制系統(tǒng)結(jié)構(gòu)簡圖
工作原理:
白天集熱器工作時(shí),打開閥門F2、F3,冷水從水箱流向集熱器,經(jīng)過加熱后的熱水經(jīng)F3流向保溫水箱。溫度傳感器T1實(shí)時(shí)檢測水溫,當(dāng)溫度達(dá)到設(shè)定值時(shí),關(guān)閉閥門F2,F(xiàn)3。用戶使用水時(shí),打開閥門F4。沒有水時(shí),打開閥門F1上水。當(dāng)陽光不足的陰雨天氣時(shí),水溫達(dá)不到設(shè)定值,可以啟動(dòng)輔助加熱系統(tǒng)。
控制器通過顯示電路能夠及時(shí)的反映出熱水器的實(shí)時(shí)狀態(tài),包括水的溫度、水箱中剩余的水量,它的輔助加熱系統(tǒng)使人們在陰雨天氣也能夠使用到熱水,報(bào)警功能能夠督促人們?nèi)ジ淖儫崴鞯臓顟B(tài),使之處于正常的工作范圍?傊,控制器為人們使用太陽能熱水器帶來了方便。對本課題進(jìn)行分析之后,擬出了三個(gè)方案,如下所示:
方案一:以FPGA為基礎(chǔ)設(shè)計(jì)系統(tǒng)
本方案以VHDL語言和EDA技術(shù)為基礎(chǔ),設(shè)計(jì)了一款太陽能熱水器控制器,該系統(tǒng)的實(shí)現(xiàn)基于FPGA,控制器的硬件電路和軟件程序相結(jié)合,完成了對水箱中的水溫、水位等信息的采集和顯示。
方案二:以CPLD為基礎(chǔ)設(shè)計(jì)系統(tǒng)
本方案以芯片EPMl270作為核心器件,將控制器的外接電路檢測得到的水溫水位信息進(jìn)行處理和分析,并從LCD液晶顯示屏上展示給用戶,有效地解決了使用太陽能熱水器過程中遇到的問題。
方案三:以單片機(jī)SST89E58為基礎(chǔ)設(shè)計(jì)太陽能熱水器控制系統(tǒng)
本方案以SST89E58作為中心環(huán)節(jié),它與80C51完全兼容,選擇DS18B20為溫度傳感器、8155作為接口芯片,再加上鍵盤、顯示電路,實(shí)現(xiàn)了對太能熱水器的水溫水位的檢測和控制。控制器還有一套輔助加熱的從系統(tǒng),以繼電器作為啟動(dòng)從系統(tǒng)的開關(guān)。
通過對以上三個(gè)方案的優(yōu)缺點(diǎn)的分析,從實(shí)際的可行度,個(gè)人的知識(shí)掌握情況以及節(jié)約成本考慮,本設(shè)計(jì)選用第三種方案。
本設(shè)計(jì)的核心器件為SST89E58單片機(jī),由它控制所有的功能完成運(yùn)行,溫度的檢測需要用到溫度傳感器,這里選用DS18B20,水位的檢測需要用到水位傳感器,為了方便實(shí)驗(yàn),本設(shè)計(jì)中用四個(gè)按鍵來模擬不同的水位,不同的按鍵按下會(huì)得到相應(yīng)的水位信息,顯示用到數(shù)碼管,并由芯片8155作為接口電路,還需要由蜂鳴器和LED組成的報(bào)警電路來實(shí)現(xiàn)聲光報(bào)警,輔助加熱系統(tǒng)必須要用到繼電器,以此來控制開關(guān)。根據(jù)以上設(shè)計(jì),得到控制系統(tǒng)方框圖如下:
圖3-1 控制系統(tǒng)方框圖
3.2 單片機(jī)及其外圍電路
基于單片機(jī)設(shè)計(jì)的電路簡單,I/O口擴(kuò)展方便,因此可以外接多個(gè)電路,完全滿足了控制器的需求,對單片機(jī)的編程也可使用匯編和C語言,編程方便;此外,單片機(jī)價(jià)格低廉、工作穩(wěn)定、耗能較少,非常適合實(shí)驗(yàn)使用。
3.2.1 單片機(jī)簡介單片機(jī)是一個(gè)集成在芯片上的計(jì)算機(jī),SST89E58與80C51完全兼容,編程方便,程序被保存在ROM中,因此具有掉電保存功能,單片機(jī)擁有大量的I/O口和外擴(kuò)I/O口,可以基于單片機(jī)設(shè)計(jì)很多電路,它的總線結(jié)構(gòu)負(fù)責(zé)片內(nèi)所有部件的通信,提高了工作過程中的可靠程度。片內(nèi)有256個(gè)數(shù)據(jù)存儲(chǔ)空間,絕對能夠滿足控制器的需求。在本設(shè)計(jì)中只使用到了單片機(jī)的某些引腳,例如外接石英晶體和電容的X1、X2等,單片機(jī)引腳圖如下所示:
圖3-2 單片機(jī)引腳排列圖
部分引腳功能介紹:
表3-1 芯片引腳介紹
時(shí)鐘電路提供了系統(tǒng)所需要的時(shí)鐘信號(hào),控制著單片機(jī)的工作節(jié)奏。其電路圖如下所示,圖中X1為石英晶體振蕩器,C1、C2是兩個(gè)值為30pF的反饋電容,它們構(gòu)成的外部電路從XTAL1 、XTAL2端輸入,與片內(nèi)的反相器相結(jié)合,產(chǎn)生震蕩脈沖,再經(jīng)過分頻電路,得到需要的時(shí)鐘信號(hào),以供單片機(jī)使用。本設(shè)計(jì)中晶振的頻率為11.0592MHz。
圖3-3 晶振電路
3.2.3 手動(dòng)復(fù)位電路
單片機(jī)的復(fù)位電路用于產(chǎn)生復(fù)位信號(hào),并從RST端輸入,當(dāng)單片機(jī)檢測到RST端有超過2個(gè)周期的高電平后,系統(tǒng)進(jìn)行復(fù)位,本設(shè)計(jì)采用手動(dòng)復(fù)位,如圖3-4所示,當(dāng)按下圖中的按鍵時(shí),RST電平變高,單片機(jī)復(fù)位。
圖3-4 手動(dòng)復(fù)位電路
3.3 顯示電路控制器的顯示電路可以顯示水箱中水的剩余量以及水的溫度,使人們及時(shí)的了解熱水器的工作狀態(tài),采用數(shù)碼管與8155的結(jié)合來顯示,這樣便有效的節(jié)省了大量的I/O端口,功耗低,應(yīng)用非常廣泛,且設(shè)計(jì)方便,硬件電路也較為簡單。
3.3.1 數(shù)碼管簡介為了對采集到的水溫和水位的進(jìn)行顯示,要用到4個(gè)數(shù)碼管。其中2個(gè)用來顯示水位的高低,另外2個(gè)用來顯示實(shí)時(shí)的水溫。
發(fā)光二極管的縮寫字母是LED,它是能夠?qū)㈦娦盘?hào)轉(zhuǎn)換為光信號(hào)的發(fā)光器件。數(shù)碼管就是由多個(gè)LED按照數(shù)字8的形狀排列而成的。本設(shè)計(jì)中使用的是8段數(shù)碼管,其發(fā)光二極管的排列形狀如圖3-5(a)。
圖3-5 8段LED顯示器
在使用過程中,為了給發(fā)光二極管提供電壓使其發(fā)光,會(huì)把8個(gè)二極管的一端相連,給予高電平或是接地,連接方式有以下2種:
?共陽極。此方法給8個(gè)發(fā)光二極管的陽極端提供高電平,如圖3-5(b)所示,另一端提供低電平的二極管會(huì)被點(diǎn)亮,否則滅。
?共陰極。此方法將8個(gè)發(fā)光二極管的陰極端接地,如圖3-5(c)所示,另一端提供高電平的二極管會(huì)被點(diǎn)亮,否則滅。
本設(shè)計(jì)中用到的是共陰極接法,所以給陽極引腳加上高電平二極管就會(huì)發(fā)光。
3.3.2 8155簡介
本設(shè)計(jì)中用8155作4位數(shù)碼管的接口芯片。如圖3-6所示,其中PA口為位碼輸出口,PA4~PA7為輸出位控線,由于8155的高電平輸出電流很小,數(shù)碼管會(huì)很暗,所以在每個(gè)數(shù)碼管的位控線上要加入一個(gè)三極管來放大電流。PB口控制段碼的輸出值。
圖3-6 顯示電路
使用8155作數(shù)碼管的接口芯片時(shí),8155只能輸出顯示的段碼,而不能夠控制輸出的內(nèi)容,動(dòng)態(tài)控制的實(shí)現(xiàn)要依靠軟件程序。在程序設(shè)計(jì)的時(shí)候,需要設(shè)置一個(gè)顯示緩沖區(qū),將要顯示的數(shù)值存放到這個(gè)區(qū)域,本設(shè)計(jì)中用到4個(gè)數(shù)碼管,因此設(shè)置了4個(gè)單元,地址為30H~33H。在每一個(gè)數(shù)碼管被點(diǎn)亮之后,應(yīng)加一段延時(shí)程序,以保證該數(shù)碼管有足夠的顯示亮度。
3.4溫度檢測電路溫度檢測電路可以實(shí)時(shí)的反映出當(dāng)前的水溫,選擇DS18B20主要由于其硬件電路簡單,只需一條數(shù)據(jù)線與單片機(jī)相連即可,成本較低,誤差小,非常適用于熱水器溫度的檢測。
3.4.1 溫度傳感器DS18B20簡介DS18B20的主要特征如下表所示:
表3-2 DS18B20的主要特征
DS18B20芯片封裝結(jié)構(gòu):
圖3-7 DS18B20芯片封裝
DS18B20引腳功能:
·引腳1:GND 電壓地 ·引腳2:DQ 單數(shù)據(jù)總線 ·引腳3:VDD 電源電壓
DS18B20的工作原理:
DS18B20一個(gè)芯片即可完成溫度的檢測和數(shù)字?jǐn)?shù)據(jù)的輸出, 增強(qiáng)了其抗干擾能力。它的一個(gè)工作周期可分為溫度檢測和數(shù)據(jù)處理這兩個(gè)部分。18B20共有三種存儲(chǔ)器,它們分別是:ROM 、RAM 和EEPROM。
控制器對18B20操作流程:
在DS18B20工作之前,先要進(jìn)行一段時(shí)間的復(fù)位。復(fù)位結(jié)束后,單片機(jī)給出高電平,以便接收一個(gè)存在脈沖。至此,單片機(jī)和18B20達(dá)成了基本的通信協(xié)議,接下來將完成兩者間的數(shù)據(jù)通信。之后控制器發(fā)送ROM指令,一共有5條指令,由5個(gè)工作周期完成,當(dāng)單片機(jī)只外接一個(gè)DS18B20時(shí),可以跳過ROM指令,在本設(shè)計(jì)中就跳過了ROM指令。接下來控制器發(fā)送存儲(chǔ)器操作指令,該指令包括寫RAM數(shù)據(jù)、讀RAM數(shù)據(jù)、將RAM數(shù)據(jù)復(fù)制到EEPROM、溫度轉(zhuǎn)換、將EEPROM中的報(bào)警值復(fù)制到RAM、工作方式切換。當(dāng)存儲(chǔ)器操作指令結(jié)束后,將執(zhí)行溫度轉(zhuǎn)換指令或讀數(shù)據(jù)指令。
若要讀出實(shí)時(shí)的水溫?cái)?shù)據(jù)則需要執(zhí)行兩個(gè)工作周期,第一個(gè)周期為復(fù)位、跳過ROM指令、執(zhí)行溫度轉(zhuǎn)換存儲(chǔ)器操作指令、等待500uS溫度轉(zhuǎn)換時(shí)間。接下來執(zhí)行第二個(gè)周期,為復(fù)位、跳過ROM指令、執(zhí)行讀RAM的存儲(chǔ)器操作指令、讀數(shù)據(jù)。至此,DS18B20的工作完成,之后單片機(jī)便可以對數(shù)據(jù)做相應(yīng)的處理。
3.4.2 溫度檢測電路設(shè)計(jì)
單片機(jī)和溫度傳感器的電路圖:
圖3-8 溫度檢測電路
如上圖所示,DS18B20的數(shù)據(jù)端口與單片機(jī)的P1.0相連,硬件電路非常簡單,溫度數(shù)據(jù)經(jīng)過處理后會(huì)送到數(shù)碼管顯示。
3.5 水位檢測電路及自動(dòng)上水3.5.1 水位檢測電路設(shè)計(jì)
蓄水箱的水位也是控制器需要檢測的一個(gè)重要數(shù)據(jù),最好是采用連續(xù)液位傳感器,這樣測得的數(shù)據(jù)可以準(zhǔn)確的反映出蓄水箱的真實(shí)水位,但是為了簡化實(shí)驗(yàn),本設(shè)計(jì)采用分段式液位傳感器,并用四個(gè)按鍵來代替水位。由于單片機(jī)實(shí)驗(yàn)板上獨(dú)立按鍵個(gè)數(shù)有限,這里采用矩陣鍵盤中的部分按鍵來設(shè)計(jì)電路。KEY1按下代表水位為0%,KEY5按下代表水位為30%,KEY9按下代表水位為60%,KEY13按下代表水位為90%。鍵盤上有行線和列線之分,本矩陣電路有4條列線4條行線。在行線和列線的交點(diǎn)處放置了一個(gè)按鍵,由于行線和列線分別連接著按鍵的不同端,當(dāng)按鈕沒有被按下時(shí),行線和列線是不相通的。當(dāng)有按鍵按下時(shí),對應(yīng)的行線變?yōu)榈碗娖。這樣就能采集到是哪個(gè)鍵按下。矩陣鍵盤原理圖如下:
圖3-9 矩陣鍵盤電路
將圖中P2.0~P2.4連接到單片機(jī)后,在軟件編程時(shí),只需將P2.4清0,水位檢測電路就完成了,當(dāng)按鍵1按下時(shí),數(shù)碼管會(huì)顯示00,當(dāng)按鍵5按下時(shí),數(shù)碼管會(huì)顯示30,當(dāng)按鍵9按下時(shí),數(shù)碼管會(huì)顯示60,當(dāng)按鍵13按下時(shí),數(shù)碼管會(huì)顯示90。
3.5.2 自動(dòng)上水設(shè)計(jì)
當(dāng)蓄水箱沒水時(shí),希望通過一個(gè)按鍵的控制來實(shí)現(xiàn)自動(dòng)上水。在實(shí)際應(yīng)用中,應(yīng)用一個(gè)按鍵來控制電磁閥的開閉,以調(diào)整水位的多少,而在實(shí)驗(yàn)中,電磁閥的開閉難以實(shí)現(xiàn),只能通過數(shù)碼管顯示水位來假設(shè)水位的上升。在軟件設(shè)計(jì)時(shí),需要用到外部中斷1,并由INT1引腳引入中斷請求。當(dāng)芯片檢測到有中斷信號(hào)時(shí),進(jìn)入中斷程序,數(shù)碼管自動(dòng)顯示為“00→30→60→90”,然后退出中斷,返回到主程序,自動(dòng)上水功能至此完成。
3.6 溫度設(shè)定及報(bào)警電路
溫度的設(shè)定是利用單片機(jī)的計(jì)數(shù)中斷功能,按鍵按下,進(jìn)入相應(yīng)的中斷,溫度值相應(yīng)改變。聲光報(bào)警電路利用LED燈和蜂鳴器的組合,成本低廉,設(shè)計(jì)方便,電路簡單。
3.6.1 溫度設(shè)定在太陽能熱水器控制器使用過程中,用戶會(huì)根據(jù)自身需求設(shè)定一個(gè)溫度值,當(dāng)處于加熱狀態(tài)時(shí),達(dá)到這個(gè)溫度就會(huì)停止加熱,溫度不再上升。溫度設(shè)定需要用到2個(gè)定時(shí)器中斷,分別用來完成溫度的加1和溫度的減1。這樣用戶就可以根據(jù)實(shí)際需求來設(shè)定0~99中的任意一個(gè)數(shù)。
將4個(gè)定時(shí)器TL0、TH0、TL1、TH1的初始值設(shè)置為FFH,這樣,當(dāng)有按鍵按下時(shí),相當(dāng)于從T0或T1中輸入了脈沖,對應(yīng)的定時(shí)器的值加1,進(jìn)入中斷服務(wù)程序,完成中斷工作后,返回到主程序。在軟件設(shè)計(jì)時(shí),只需將定時(shí)器方式選擇寄存器(TMOD)中的C/設(shè)置為1即表示在計(jì)數(shù)工作方式,計(jì)數(shù)脈沖由2個(gè)按鍵負(fù)責(zé)提供。那么當(dāng)采集到一個(gè)按鍵按下時(shí)就會(huì)進(jìn)入相應(yīng)的中斷,對溫度值進(jìn)行加減。
3.6.2 報(bào)警電路設(shè)計(jì)
當(dāng)水溫、水位過高或過低時(shí),系統(tǒng)應(yīng)該發(fā)出警告信號(hào)來提醒用戶,考慮到自然水本身溫度只有幾度,如果設(shè)置低溫報(bào)警,那么一上水系統(tǒng)就會(huì)報(bào)警,這是不希望出現(xiàn)的狀況,所以本設(shè)計(jì)只設(shè)置一個(gè)高溫報(bào)警值,這個(gè)值可以由用戶隨意設(shè)定。水位報(bào)警值分別為沒水時(shí)的00%和溢水時(shí)的90%。在控制器的工作過程中,單片機(jī)會(huì)不斷的將實(shí)時(shí)水溫和水位與報(bào)警設(shè)定值進(jìn)行比較,一旦到達(dá)這個(gè)值,報(bào)警燈會(huì)啟動(dòng),蜂鳴器響,當(dāng)實(shí)時(shí)數(shù)據(jù)下降到正常范圍內(nèi),報(bào)警燈會(huì)滅掉,蜂鳴器不響。此部分電路設(shè)計(jì)非常簡單,只需由P1.1和P1.2引腳分別控制一個(gè)蜂鳴器和1個(gè)LED燈,當(dāng)需要報(bào)警時(shí),將對應(yīng)的引腳設(shè)置成需要的值即可。報(bào)警電路圖如下所示:
圖3-10 報(bào)警電路圖
輔助加熱由繼電器來控制,繼電器是一種很好的控制開關(guān),價(jià)格低,控制方便,配合一個(gè)LED燈來模擬加熱過程,使電路簡單易行。
當(dāng)天氣晴朗時(shí),陽光很充足,熱水器水箱中的水能夠被加熱到滿意溫度,但是當(dāng)雨雪天氣,集熱器吸收的能量無法使溫度達(dá)到設(shè)定值,所以控制器還需要一套輔助加熱系統(tǒng),當(dāng)水溫滿足不了用戶的需求時(shí),可以通過按鍵開啟加熱系統(tǒng),水箱中的加熱棒便開始發(fā)熱工作,當(dāng)水被加熱到設(shè)定值時(shí),加熱系統(tǒng)自動(dòng)關(guān)閉。
本設(shè)計(jì)中使用的繼電器的型號(hào)是SRD-05VDC-SL-C。電磁繼電器一般由銜鐵、線圈、鐵芯、觸點(diǎn)簧片等幾部分組成。當(dāng)給繼電器兩端加上一個(gè)電壓時(shí),電磁效應(yīng)就此產(chǎn)生,開關(guān)打到常開觸點(diǎn)。當(dāng)線圈斷電后,電磁的吸力也隨之消失,開關(guān)打到常閉觸點(diǎn)。
輔助加熱的電路圖如下所示:
在仿真時(shí),由于軟件中沒有SRD-05VDC-SL-C型號(hào)的繼電器,所以用G2R-14-AC120型號(hào)的繼電器代替,兩者的工作原理相似。
圖3-11 輔助加熱電路圖
輔助加熱功能由外部中斷0實(shí)現(xiàn),當(dāng)采集到按鍵按下時(shí),進(jìn)入中斷。當(dāng)輔助加熱時(shí),單片機(jī)的P2.6口輸出的是高電平,三極管導(dǎo)通,開關(guān)打到常開狀態(tài),發(fā)光二極管被點(diǎn)亮,當(dāng)不需要輔助加熱時(shí),P2.6口輸出的是低電平,三極管未導(dǎo)通,開關(guān)在常閉狀態(tài),發(fā)光二極管不亮。圖中的D1為一個(gè)續(xù)流二極管,當(dāng)線圈突然斷電后,電流不會(huì)立刻消失,剩余的能量會(huì)損壞線圈,為了防止這種現(xiàn)象發(fā)生,用一個(gè)二極管構(gòu)成一個(gè)回路,使能量慢慢釋放完,保護(hù)了線圈,增加了它的壽命。
當(dāng)蓄水箱中沒水時(shí),是嚴(yán)禁啟動(dòng)輔助加熱的,否則加熱器會(huì)燒壞。在軟件設(shè)計(jì)的時(shí)候,當(dāng)進(jìn)入輔助加熱中斷后,應(yīng)先判斷是否有水,即33H中的值是否為0,當(dāng)為0時(shí),跳出中斷,不對P2.6的狀態(tài)做任何改變,當(dāng)不為0時(shí),P2.6輸出高電平,即開啟輔助加熱系統(tǒng)。
控制器的功能比較多,代碼也有幾百行,為了方便修改和設(shè)計(jì),這里采用模塊化結(jié)構(gòu),包括主程序、溫度檢測子程序、水位檢測子程序、報(bào)警子程序、顯示子程序以及4個(gè)中斷程序:輔助加熱子程序、自動(dòng)上水子程序和溫度設(shè)定子程序。由主程序調(diào)用不同的子程序來實(shí)現(xiàn)控制器的所有功能。
在編寫系統(tǒng)初始化程序時(shí)需要注意以下幾點(diǎn):
?設(shè)置4個(gè)單元的顯示緩沖區(qū)30H~33H,數(shù)碼管顯示的數(shù)字存放在這里。
?在50H、51H中存放溫度設(shè)定的初始值。
?程序會(huì)使用到中斷,所以在初始化時(shí)必須對與中斷相關(guān)的寄存器進(jìn)行一些設(shè)置。
主程序流程圖如下所示:
圖4-1 主程序流程圖
將采集到的溫度值轉(zhuǎn)換成數(shù)字?jǐn)?shù)據(jù)后送到單片機(jī)進(jìn)行處理,得到一個(gè)3位數(shù)的值,由于實(shí)際生活中顯示的溫度只需要2位就可以滿足,這里放棄了百位值的顯示,處理后的數(shù)據(jù)送到33H、32H保存并通過數(shù)碼管顯示。
4.3 水位檢測子程序
4個(gè)按鍵的一端分別接到P2口的4個(gè)引腳,當(dāng)按鍵按下時(shí),對應(yīng)的引腳電平變低。判斷出哪個(gè)按鍵按下后數(shù)碼管會(huì)顯示出對應(yīng)的值。流程圖如下所示:
圖4-2 水位檢測流程圖
4.4 報(bào)警子程序
將檢測到的水溫、水位與報(bào)警值進(jìn)行比較,當(dāng)超出范圍時(shí),報(bào)警燈亮,當(dāng)又回到正常范圍內(nèi)時(shí),報(bào)警燈暗。報(bào)警子程序流程圖如下所示:
圖4-3 報(bào)警流程圖
4.5 顯示子程序
當(dāng)采集到水溫水位的數(shù)據(jù)后,被保存在30H~33H中,然后調(diào)用顯示子程序,在每個(gè)時(shí)間點(diǎn)被點(diǎn)亮的數(shù)碼管只有一個(gè),但是時(shí)間間隔太短,人眼無法分辨出,所以平時(shí)看到的都是4個(gè)數(shù)碼管同時(shí)亮著。
4.6 輔助加熱子程序
輔助加熱功能由外部中斷0實(shí)現(xiàn),當(dāng)采集到按鍵按下時(shí),進(jìn)入中斷。進(jìn)入中斷后首先判斷是否有水,沒水就退出,不需要加熱;如果有水,開啟加熱,當(dāng)加熱到設(shè)定值后,停止加熱。輔助加熱流程圖如下:
圖4-4 輔助加熱流程圖
4.7 自動(dòng)上水子程序
自動(dòng)上水功能需要用到外部中斷1,當(dāng)檢測到相應(yīng)按鍵按下時(shí),進(jìn)入中斷,然后控制數(shù)碼管從00到30到60到90的顯示,完成后退出中斷。
4.8 溫度設(shè)定子程序
溫度設(shè)定需要用到2個(gè)定時(shí)器中斷,定時(shí)器中斷0用來完成溫度加1度,定時(shí)器中1用來完成溫度減1度。當(dāng)進(jìn)入溫度加1中斷后,判斷當(dāng)前值的個(gè)位是否為9,若為9,則十位加1,個(gè)位清0;若不為9,則INC 50H即可。調(diào)用顯示后返回主程序。當(dāng)進(jìn)入溫度減1中斷后,判斷當(dāng)前值的個(gè)位是否為0,若為0,則十位減1,個(gè)位變?yōu)?;若不為0,則DEC 50H即可。調(diào)用顯示后返回主程序。
程序編譯的目的是為了檢測編寫的程序是否成功,或找出其中錯(cuò)誤,以便更好的改善,保證能夠正確的實(shí)現(xiàn)系統(tǒng)的軟件功能。本設(shè)計(jì)用的開發(fā)工具是KeilC,并使用匯編語言進(jìn)行編程,程序編譯后的結(jié)果如下圖所示:
圖5-1 編譯后的結(jié)果
程序編譯正確之后,即可用仿真電路圖進(jìn)行調(diào)試。仿真電路圖如下所示,由于矩陣鍵盤的效果與獨(dú)立按鍵的效果一樣,為了方便仿真,在此仿真時(shí)用獨(dú)立按鍵代替矩陣鍵盤,并用80C51代替SST89E58進(jìn)行仿真:
圖5-2 仿真電路圖
點(diǎn)擊開始按鈕,程序開始運(yùn)行,以下選取幾種仿真結(jié)果:
數(shù)碼管顯示應(yīng)為3022,如下所示:
圖5-3 仿真結(jié)果顯示
(2)當(dāng)按鍵3按下時(shí),代表水位為60%,改變DS18B20的值,使之為40。數(shù)碼管顯示應(yīng)為6040,如下所示:
圖5-4 仿真結(jié)果顯示
(3)當(dāng)按鍵4按下時(shí),代表水位為90%,達(dá)到報(bào)警值,此時(shí)不管溫度值為多少,系統(tǒng)都會(huì)報(bào)警,蜂鳴器會(huì)響,LED燈D1亮,如下所示:
圖5-5 仿真結(jié)果顯示
圖5-6 仿真結(jié)果顯示
圖5-7 仿真結(jié)果顯示
(6)當(dāng)按鍵7按下時(shí),溫度的設(shè)定值加1,由25變?yōu)?6,如下所示:
→→
圖5-8 仿真結(jié)果顯示
→→
圖5-9 仿真結(jié)果顯示
硬件實(shí)物圖如下所示:
圖5-10 硬件實(shí)物圖
提供外部電源后硬件便開始工作,這里選取幾種結(jié)果演示:
圖5-11硬件結(jié)果顯示
(2)當(dāng)KEY5按下時(shí),代表水位為60%,此時(shí)水溫為30,則數(shù)碼管顯示結(jié)果為:
圖5-12硬件結(jié)果顯示
(3)當(dāng)KEY1按下時(shí),代表水位為90%,此時(shí)達(dá)到報(bào)警值,不管水溫為多少,系統(tǒng)都會(huì)報(bào)警,蜂鳴器響,LED燈被點(diǎn)亮,結(jié)果如下所示:
圖5-13硬件結(jié)果顯示
→
圖5-14 硬件結(jié)果顯示
→
圖5-15 硬件結(jié)果顯示
5.3 調(diào)試過程中遇到的問題
通過設(shè)計(jì)之前所學(xué)的知識(shí)都得到了廣泛的應(yīng)用,加深了理論與實(shí)際的聯(lián)系。提高了本人的動(dòng)手能力,自己的創(chuàng)新意識(shí)也得到了培養(yǎng),使自己對單片機(jī)的了解更加的全面了。一開始接觸這個(gè)課題的時(shí)候,完全沒有思路,雖然很熟悉太陽能熱水器,控制器的功能也理解,但要自己動(dòng)手用軟件和硬件來實(shí)現(xiàn),卻無從下手。從網(wǎng)上找了很多資料,也借鑒了其他人設(shè)計(jì)的控制器,在一番深入的了解之后終于得到了一個(gè)初步的設(shè)計(jì)思路,并在之后的代碼編寫和硬件焊接過程中,不斷的完善,最終完成了本次設(shè)計(jì)。
在這次設(shè)計(jì)中,接觸到了溫度傳感器,這款芯片是本人從來沒有使用過的,雖然它與單片機(jī)的連接非常簡單,但是硬件的簡化導(dǎo)致了軟件的開銷,所以在軟件編程時(shí),溫度檢測這一模塊的代碼困擾了本人很久,查了很多資料,對傳感器的工作原理也了解了很多,可是編寫的代碼始終不能運(yùn)行,經(jīng)過了三周左右的努力,終于發(fā)現(xiàn)了代碼中的錯(cuò)誤,原因是因?yàn)闆]有給復(fù)位足夠的時(shí)間導(dǎo)致18B20不能工作,修改后成功的將溫度檢測模塊編寫完成。設(shè)計(jì)中另外一個(gè)難點(diǎn)是溫度設(shè)定中斷代碼的編寫,在一開始的設(shè)計(jì)思路中,進(jìn)入中斷后沒有PUSH、POP的內(nèi)容,在中斷子程序中修改溫度后回到主程序時(shí)發(fā)生了沖突,意識(shí)到這一點(diǎn)后修改了代碼,完成了中斷子程序的編寫。至于其他模塊的代碼編寫比較簡單,過程中并未遇到什么挫折。
硬件電路的焊接也不是非常順利,設(shè)計(jì)初的報(bào)警電路是由LED燈和蜂鳴器組成的,但是在下程序的過程中不小心把蜂鳴器弄壞了,所以在耽擱了一周之后才完成。本次硬件電路是基于之前課程設(shè)計(jì)中用過的單片機(jī)實(shí)驗(yàn)板,因此布局布線比較簡單,這為硬件的搭建省了很多事,也為此次設(shè)計(jì)提供了很多方便。
三個(gè)多月的時(shí)間很快就過去了,在這段時(shí)間里,本人各方面的能力都得到了提升,總之,這次設(shè)計(jì)讓本人學(xué)到了很多。
經(jīng)過幾個(gè)月的努力,本人的設(shè)計(jì)已經(jīng)完成。回想這幾個(gè)月的學(xué)習(xí),從開題到論文的順利完成,得到了老師和同學(xué)們的很多幫助。
首先要感謝本人的指導(dǎo)老師,在設(shè)計(jì)的過程中,從選題,設(shè)計(jì)方案,論文修改直至成稿一直給予了很多的指導(dǎo)和幫助,同時(shí)也提供了相關(guān)的參考資料,為本人解答疑惑,提供了很多關(guān)鍵性的建議。她嚴(yán)謹(jǐn)細(xì)致,一絲不茍的作風(fēng)一直是本人學(xué)習(xí)、工作中的榜樣,他循循善誘的教導(dǎo)和不拘一格的思路給本人無盡的啟迪。
還有本人的室友和很多同學(xué)也給了很多的幫助,他們給予鼓勵(lì)與意見,讓本人度過了這段艱辛的時(shí)期。特別要感謝寢室的同學(xué)們,一直以來都在鼓勵(lì)本人,在做仿真時(shí)一直都在幫助本人,如果沒有她們的熱心幫忙,此次設(shè)計(jì)的完成將變得非常困難。
對于這次設(shè)計(jì)中給予本人幫助的老師和同學(xué)致以感謝!
附錄
附錄1:程序
GE_BIT EQU 40H
SHI_BIT EQU 41H
DI_8BIT EQU 43H
GAO_8BIT EQU 44H
DQ EQU P1.0 ;溫度傳感器I/O口
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP HEAT ;輔助加熱
ORG 000BH
LJMP PLUS ;溫度加1
ORG 0013H
LJMP RISE ;自動(dòng)加水
ORG 001BH
LJMP MINUS ;溫度減1
ORG 0020H
MAIN:MOV SP,#60H
MOV 30H,#0 ;30H-33H顯示緩沖區(qū)
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 50H,#5 ;存放溫度設(shè)定值
MOV 51H,#2
MOV DPTR,#07100H ;選中8155
MOV A,#3H
MOVX @DPTR,A
MOV IP,#0FH ;中斷優(yōu)先級(jí)
MOV TCON,#05H ;外部中斷脈沖觸發(fā)有效
MOV IE,#8FH ;中斷總允許,允許定時(shí)器和外部中斷
MOV TMOD,#55H ;接通外部技術(shù)引腳T0T1
MOV TH0,#0FFH
MOV TL0,#0FFH
MOV TH1,#0FFH
MOV TL1,#0FFH
SETB TR0 ;啟動(dòng)定時(shí)器
SETB TR1
CLR P2.4
CLR P2.6
TURN:
LCALL WATER
LCALL ZHUANHUAN ;調(diào)用讀溫度子程序
LCALL DISPLAY
LCALL WARN ;水溫水位報(bào)警
AJMP TURN
WATER: ;水位按鍵判斷
JNB P2.3 ,LOOP5
JNB P2.2,LOOP4
JNB P2.1,LOOP3
JNB P2.0,LOOP2
LCALL DISP
RET
LOOP2:MOV 32H,#0
MOV 33H,#0
LCALL DISP
RET
LOOP3:MOV 32H,#0
MOV 33H,#3
LCALL DISP
RET
LOOP4:MOV 32H,#0
MOV 33H,#6
LCALL DISP
RET
LOOP5:MOV 32H,#0
MOV 33H,#9
LCALL DISP
RET
WARN:MOV A,51H ;水溫報(bào)警
SWAP A
ORL A,50H
MOV 52H,A ;50H和51H 合并
MOV A,31H
SWAP A ;30H和51H合并
ORL A,30H
CJNE A,52H,PD ;檢測到的溫度與設(shè)定溫度比較
CLR P2.6
CLR P1.2
SETB P1.1
LJMP EXIT
PD:JC BBB ;溫度<設(shè)定值則 跳到BBB
CLR P2.6
CLR P1.2
SETB P1.1
SJMP EXIT
BBB:LCALL WARNING
EXIT:RET
WARNING:MOV A,#0 ;水位報(bào)警
CJNE A,33H,PD1 ;沒水時(shí)報(bào)警
CLR P1.2
SETB P1.1
AJMP OUT1
PD1:MOV A,#9
CJNE A,33H,BB ;水滿時(shí)報(bào)警
CLR P1.2
SETB P1.1
AJMP OUT1
BB:SETB P1.2
CLR P1.1
OUT1:RET
/*4個(gè)中斷*/
PLUS: ;溫度加1中斷
PUSH 30H
PUSH 31H
MOV TH0,#0FFH
MOV TL0,#0FFH
MOV A,50H
CJNE A,#9,CC
MOV 50H,#0
INC 51H
AJMP CC1
CC:INC 50H
CC1:
MOV 30H,50H
MOV 31H,51H
MOV R1,#07FH
CFU:LCALL DISP1 ;將設(shè)定值顯示一段時(shí)間
DJNZ R1,CFU
POP 30H
POP 31H
RETI
MINUS: ;溫度減1中斷
PUSH 30H
PUSH 31H
MOV TH1,#0FFH
MOV TL1,#0FFH
MOV A,50H
CJNE A,#0,CC2
MOV 50H,#9
DEC 51H
AJMP CC3
CC2:DEC 50H
CC3:
MOV 30H,50H
MOV 31H,51H
MOV R1,#07FH
CFU1:LCALL DISP1
DJNZ R1,CFU1
POP 30H
POP 31H
RETI
HEAT: ;輔助加熱中斷
MOV A,33H
JZ OUT ;沒水時(shí)不能打開繼電器,JZ累加器判0轉(zhuǎn)移
SETB P2.6
OUT:RETI
RISE: MOV 32H,#0 ;自動(dòng)上水
MOV 33H,#0
MOV R1,#0FFH
CFU2:LCALL DISP
DJNZ R1,CFU2
MOV 33H,#3
MOV R1,#0FFH
CFU3:LCALL DISP
DJNZ R1,CFU3
MOV 33H,#6
MOV R1,#0FFH
CFU4:LCALL DISP
DJNZ R1,CFU4
MOV 33H,#9
MOV R1,#0FFH
CFU5:LCALL DISP
DJNZ R1,CFU5
RETI
/***顯示程序***/
DISP:
MOV A,#40H ;水位顯示子程序
MOV DPTR,#07101H
MOVX @DPTR,A
MOV A,32H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#07102H
MOVX @DPTR,A
LCALL DELAY00
MOV A,#80H
MOV DPTR,#07101H
MOVX @DPTR,A
MOV A,33H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#07102H
MOVX @DPTR,A
LCALL DELAY
RET
DISP1:
MOV A,#10H ;溫度顯示子程序
MOV DPTR,#07101H
MOVX @DPTR,A
MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#07102H
MOVX @DPTR,A
LCALL DELAY00
MOV A,#20H
MOV DPTR,#07101H
MOVX @DPTR,A
MOV A,31H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#07102H
MOVX @DPTR,A
LCALL DELAY
RET
/*---------------------延時(shí)子程序-------------------- */
DELAY: MOV R5,#0FH
DELAY4: MOV R4,#0FH
DELAY5: DJNZ R4,DELAY5
DJNZ R5,DELAY4
RET
DELAY00:MOV R6,#0AH
DELAY8: MOV R7,#0AFH
DELAY9: DJNZ R7,DELAY9
DJNZ R6,DELAY8
RET
;這是DS18B20復(fù)位初始化子程序
INIT_1820:
SETB DQ
NOP
CLR DQ ;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖
MOV R1,#3
DU_1:
MOV R0,#107
DJNZ R0,$
DJNZ R1,DU_1
SETB DQ ;然后拉高數(shù)據(jù)線
NOP
NOP
NOP
MOV R0,#25H
DU_2:JNB DQ,DU_3 ;等待DS18B20回應(yīng)
DJNZ R0,DU_2
LJMP DU_4 ;延時(shí)
DU_3:SETB F0 ;置標(biāo)志位,表示DS1820存在
LJMP DU_5
DU_4:CLR F0 ;清標(biāo)志位
LJMP DU_7
DU_5:MOV R0,#117
DU_6:DJNZ R0,DU_6
DU_7:SETB DQ
RET
;-------------------------------------------------
;寫DS18B20的子程序
WRITE_1820:MOV R2,#8
CLR C
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
;-------------------------------------------------
;讀DS18B20的子程序,
READ_1820:MOV R4,#2
MOV R1,#DI_8BIT ;低位存入DI_8BIT,高位存入GAO_8BIT
RE0:MOV R2,#8
RE1:CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9
RE2:DJNZ R3,RE2
MOV C,DQ
MOV R3,#23
RE3:DJNZ R3,RE3
RRC A
DJNZ R2,RE1
MOV @R1,A
INC R1
DJNZ R4,RE0
RET
;-------------------------------------------------
;讀出后轉(zhuǎn)換的溫度值
ZHUANHUAN:
LCALL INIT_1820 ;先復(fù)位DS18B20
JB F0,ZH1
RET
ZH1:MOV A,#0CCH
LCALL WRITE_1820
MOV A,#44H
LCALL WRITE_1820
LCALL DISPLAY ;等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒
LCALL INIT_1820
MOV A,#0CCH ;跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;發(fā)出讀溫度命令
LCALL WRITE_1820
LCALL READ_1820
;CHULI
MOV A,GAO_8BIT
MOV A,DI_8BIT
MOV B,#16
DIV AB
MOV 35H,A ;將DI_8BIT的高四位右移四位,存入35H中(溫度值)
MOV A,B ;將TEMPER_L的低四位X10/16得小數(shù)后一位數(shù).
MOV B,#10
MUL AB
MOV B,#16
DIV AB
MOV 36H,A ;將小數(shù)后一位數(shù).存入36H中
MOV A,GAO_8BIT ;TEMPER_H中存放高8位數(shù),權(quán)重16
MOV B,#16
MUL AB
ADD A,35H ;35H中存入溫度值的整數(shù)部分
MOV B,#10
DIV AB
MOV GE_BIT,B ;個(gè)位存入40H中
MOV B,#10 ;
DIV AB ;
MOV SHI_BIT,B ;十位存入41H中
RET
;-------------------------------------------------
DISPLAY:
MOV A,SHI_BIT //顯示溫度十位
MOV 31H,A
MOV A,GE_BIT //顯示溫度個(gè)位
MOV 30H,A
LCALL DISP1
RET
/*************** 段碼緩沖區(qū) **********************************/
TABLE: DB 0fcH,60H,0daH,0f2H,66H,0b6H,0beH,0e0H,0feH,0f6H
End
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |