仿真原理圖如下:
下面是文檔的部分內(nèi)容預(yù)覽:
目錄 摘要 ABSTRACT 第一章 概述 1.1 設(shè)計背景 1.2 設(shè)計任務(wù) 第二章 太陽能熱水器及控制系統(tǒng)簡介 2.1 熱水器及系統(tǒng)工作原理 2.2 控制系統(tǒng)設(shè)計原則 2.3 主控方案 2.4 溫度檢測方案 2.5 水位檢測方案 2.6 顯示方案 2.7 時鐘方案 第三章 控制系統(tǒng)硬件設(shè)計 3.1 總體設(shè)計 3.2 主控模塊 3.2.1 單片機接口配置 3.2.2 復(fù)位電路 3.2.3 時鐘電路 3.3 溫度測量模塊 3.3.1 DS18B20簡介 3.3.2 溫度測量電路接線圖 3.4 水位檢測模塊 3.5 顯示模塊 3.5.1 LCD1602電氣接線圖 3.5.2 LCD1602技術(shù)參數(shù)及接口說明 3.6 實時時鐘 3.6.1 DS1302簡介 3.6.2 時鐘電路電氣原理圖 3.7 驅(qū)動模塊 3.6.1 上水電磁閥驅(qū)動電路 3.6.2 自動加熱驅(qū)動電路 3.8 按鍵模塊 3.8.1 按鍵模塊簡介 3.8.2 按鍵抖動處理 第四章 控制系統(tǒng)軟件設(shè)計 4.1 實時時鐘軟件設(shè)計 4.1.1 DS1302時鐘地址及數(shù)據(jù)格式 4.1.3 DS1302軟件流程 4.1.4 時間讀取子程序 4.1.5 時間設(shè)置子程序 4.1.6 日期BCD轉(zhuǎn)字符程序 4.1.7 時間BCD轉(zhuǎn)字符程序 4.2 水溫檢測軟件設(shè)計 4.2.1 傳感器操作指令 ·4.2.2 DS18B20軟件流程 4.2.3 獲取溫度子程序 4.3 顯示模塊軟件設(shè)計 4.3.1 LCD1602指令及說明 4.3.2 LCD1602RAM地址映射 4.3.3 初始化過程 4.3.4 顯示子程序 4.4 水位檢測軟件設(shè)計 4.5 按鍵模塊軟件設(shè)計 4.5.1 讀取鍵值子程序 4.5.2 鍵值處理子程序 第五章 控制系統(tǒng)調(diào)試與仿真 5.1 總體仿真結(jié)果展示 5.2 自動加熱仿真 5.3 水位檢測及上水仿真 第六章 總結(jié)與展望 參考文獻
摘要 隨著社會的發(fā)展和科技的不斷進步,人們的生活水平也在逐漸提高。與之而來的問題也很多,例如能源危機與環(huán)境污染,綠色環(huán)保理念因而開始深入人心。太陽能作為新興的清潔能源得到了大家的普遍認可,首先太陽能取之不盡、用之不竭,其次干凈無污染又是一大特點,因此積極推廣太陽能的應(yīng)用具有重大意義。本設(shè)計將研發(fā)一款高性能的太陽能熱水器控制系統(tǒng),產(chǎn)品具有智能化的特點。本篇文檔的設(shè)計可以作為單獨的控制系統(tǒng)銷售也可以安裝在普通的太陽能熱水器上使之作為智能型熱水器來出售。這一設(shè)計會更廣泛地推動太陽能的使用,在將來還可以與物聯(lián)網(wǎng)系統(tǒng)結(jié)合,吸引消費者的眼球,同時符合國家當(dāng)前的發(fā)展理念。 本文檔在介紹單片機、傳感器、實時時鐘的特點基礎(chǔ)之上,詳盡地說明了太陽能熱水器控制系統(tǒng)的工作原理與方案設(shè)計。根據(jù)本設(shè)計的要求,采用STC89C52作為主控芯片。其他硬件部分包括:水溫采集模塊、水位監(jiān)測模塊、按鍵輸入部分、LCD顯示窗口及繼電器控制模組,繼電器控制模組有自動上水和程控加熱部分構(gòu)成。在軟件方面,本設(shè)計采用模塊化方式對系統(tǒng)進行分組設(shè)計,使得設(shè)計工作穩(wěn)步展開,并且經(jīng)過仿真驗證,本系統(tǒng)的各個模塊均正常工作,符合設(shè)計要求
ABSTRACT
With the development of society and the progress of science and technology, people's living standards are gradually improving. However, problems come with it, such as the energy crisis and environmental pollution, thus green development ideas gained ground. Solar energy as a new clean energy has been widely recognized, due to that it’s inexhaustible and clean, and followed by a major feature. So, promoting the use of solar energy actively is of great significance. This article will set out to design an intelligent, high-performance solar water heater control system which was designed with intelligent automation features. This design can be used as a separate control system sales also it can be installed on ordinary solar water heater to make it as a smart water heater to sell. The design will be more beneficial to promote the use of solar energy. Combined with the internet of things will attract the attention of consumers in the future and be in line with the country's current development concept. This paper describes the basic features of the microcontroller, sensors, real-time clock, and a detailed illustration of the working principle and design of solar water heater control system. According to the design requirements, STC89C52 used here as a master chip. Other hardware includes: temperature acquisition module, water level monitoring module, key input section, LCD display window and relay control module, relay control module has automatic pumping water part and programming heating part. On the software side, using modular design makes the works steady progress. After simulation, each module of the system is working properly, which meeting to the design requirements.
第一章 概述 1.1 設(shè)計背景 能源對于人類的發(fā)展至關(guān)重要。每一次人類文明的進步,都可以看到舊能源的落幕與新能源的成長。近代工業(yè)起源于英國,當(dāng)時蒸汽機的發(fā)明與改進使得煤炭資源取代了木材,成為主導(dǎo)能源。到20世紀(jì)初,石油得到大規(guī)模開采與使用,全世界對石油的需求激增,石油逐步取代煤炭成為主導(dǎo)能源。根據(jù)Statistical Review of World Energy 2015[3]估算,在2014年的能源消費結(jié)構(gòu)中,石油仍然是主導(dǎo)燃料,約占全球能源消費的33.3%;煤炭和天然氣資源分別占全球能源消費的30.1%和24.0%。作為化石燃料,三者合計達到全球能源消費的87.4%,傳統(tǒng)燃料依然支撐起現(xiàn)代商業(yè)文明主導(dǎo)力量。 自從傳統(tǒng)能源作為主導(dǎo)能源以來,兩大安全問題便顯現(xiàn)出來。一是傳統(tǒng)化石燃料的供應(yīng)問題,其越來越難以滿足市場的需要。因為化石燃料是不可再生的能源,有限的儲量卻要應(yīng)付世界經(jīng)濟和人口的飛速增長。二是傳統(tǒng)能源的安全問題。一方面,由于開采技術(shù)的問題,煤礦事故頻繁發(fā)生;再者,資源的肆意無須開采,對地下水、地表生態(tài)環(huán)境造成了難以恢復(fù)的破壞。另一方面,傳統(tǒng)能源的使用還會產(chǎn)生廢氣廢渣,特別是燃燒未經(jīng)處理的煤炭會排放SO2、粉塵等污染物。 應(yīng)對傳統(tǒng)化石能源日益嚴(yán)峻的安全形勢,世界各國開始調(diào)整戰(zhàn)略政策,采取多元化供應(yīng)策略,積極引導(dǎo)開發(fā)新能源,以降低對傳統(tǒng)能源的依賴性。 就我國的發(fā)展來說,積極推廣新能源,以節(jié)約和代替部分化石能源,這是保障我國能源安全、優(yōu)化能源結(jié)構(gòu)、促進社會與經(jīng)濟可持續(xù)發(fā)展、保護環(huán)境、應(yīng)對氣候生態(tài)變化、調(diào)整產(chǎn)業(yè)結(jié)構(gòu)的戰(zhàn)略部署。近年來,新能源的發(fā)展受到政府的大力支持。自2011年起,可再生能源發(fā)展的脈絡(luò)日漸清晰,我國政府將在推廣新能源和提高傳統(tǒng)能源效率兩方面加速能源結(jié)構(gòu)調(diào)整。未來新興能源開發(fā)利用的戰(zhàn)略定位是:到2020年,核能、風(fēng)能、太陽能等新興能源要成為能源總需求中增量部分的主力軍,加上水能共提供約6億噸標(biāo)準(zhǔn)煤,占一次能源消費總量的15%;到2030年,新興能源要成為主流能源之一,加上水能共提供20%以上的一次能源消費量[1]。 作為一個幅員遼闊的國家,中國有著豐富的太陽能資源。雖然我國在太陽能熱水器累計安裝量居世界第一位,但是由于中國龐大的人口數(shù)量,意味著中國人均占有的太陽能熱水器還少于像塞浦路斯、以色列、希臘和奧地利等國家。 根據(jù)我國可再生能源發(fā)展規(guī)劃,太陽能熱水器累計安裝應(yīng)在2010年達3億平方米和在2020年達到1億7000萬平方米,每千人擁有量達128平方米到203平方米。根據(jù)這一計劃,在2020年中國太陽能熱水器的持有率只相當(dāng)于2000年奧地利的水平,仍遠低于2000年的塞浦路斯和以色列的太陽能熱水器安裝量[2]。 目前,中國正處于快速發(fā)展階段,城鄉(xiāng)居民對生活熱水的需求急劇增加[5]。而在農(nóng)村地區(qū)和中小城市,太陽能熱水器已經(jīng)成為提高人民生活質(zhì)量、全面建設(shè)小康社會的一個快捷的技術(shù)方法[2]。隨著傳統(tǒng)能源價格的持續(xù)上漲,社會上的環(huán)保意識日益提高。另外由于太陽能熱水器產(chǎn)業(yè)的升級改進和太陽能熱水器與建筑一體化技術(shù)的發(fā)展,使得太陽能熱水器將保持增長勢頭。中國太陽熱水器市場自上世紀(jì)90年代以來,保持了十多年的快速增長。我國太陽能熱水器的年鋪設(shè)量由2000年的610萬平方米,快速增長到2009年的4200萬平方米,年平均增長速度24%[6]。太陽能熱水器運行保有量由2000年的2600萬平方米,增長至2009年的14500萬平方米,年平均增長速度為21%[6]。尤其是2006年《可再生能源法》實施以來,國家可再生能源開發(fā)政策進一步加強,更是由于新農(nóng)村建設(shè)的開展和地方政府開始實施新建建筑強制安裝政策,對太陽能熱水器的應(yīng)用和推廣起到了極大的推動作用。2006年至2009年太陽能熱水器銷售量年均增長率為33%,總保有量年均增長率為17%,太陽能熱水器應(yīng)用又進入了一個新的高潮[2]。 面對巨大的市場,對太陽能熱水器也提出了新的技術(shù)要求。目前太陽能熱水器普遍都沒有自動控制系統(tǒng),這讓太陽能的推廣工作達到了技術(shù)瓶頸。因此設(shè)計一個智能化的太陽能熱水器控制系統(tǒng)迫在眉睫。
1.2 設(shè)計任務(wù) 本課題旨在設(shè)計一個小成本、低功耗、多用途的太陽能熱水器控制系統(tǒng)。熱水系統(tǒng)采用單片機芯片作為微型控制器,該系統(tǒng)是設(shè)計目標(biāo)有: - 通過傳感器,將水位水溫采樣信號傳送給單片機進行處理,并進行水位及溫度的顯示;
- 當(dāng)水位到達低限,系統(tǒng)自動上水,高限停止上水;
- 可調(diào)預(yù)置水溫設(shè)計,用戶可以自主設(shè)置溫度保持范圍,以應(yīng)對不同地區(qū)不同季節(jié);
- 可以設(shè)定時段監(jiān)控溫度,如果在時段內(nèi),溫度過低系統(tǒng)將循環(huán)加熱;
- 允許自動/手動進行上水、加熱設(shè)置。
在設(shè)計系統(tǒng)的過程中,同時學(xué)習(xí)了單片機的開發(fā)與程序編制以及電路的設(shè)計與仿真等操作。本科階段的知識得到了進一步提高,另外有自學(xué)了Proteus和Keil等軟件的使用。在下文,提供了不同滿足設(shè)計要求的方案,最終選擇最優(yōu)設(shè)計。
第二章 太陽能熱水器及控制系統(tǒng)簡介
2.1 熱水器及系統(tǒng)工作原理 目前市場上太陽能熱水器的主要分類有:玻璃真空管熱水器、平板型熱水器、陶瓷中空平板型熱水器以及熱管式熱水器等。而在國內(nèi),太陽能熱水器市場份額的90%是全玻璃真空管太陽能[2],因此本設(shè)計采用真空管太陽能熱水器作為控制對象。太陽能熱水器基本構(gòu)造如圖所示,包括有:水箱、集熱管、進出水接口、排氣孔、安裝架等組件。陽光照射在真空式的集熱管上,集熱管吸收熱量,管內(nèi)冷水被加熱成熱水。由于熱水比重低于冷水,熱水上浮冷水下沉進行冷熱交替加熱,最終熱水被收集到儲水箱內(nèi),以上是太陽能熱水器的基本原理。
圖2.1 太陽能原理圖 在光照良好的情況下,上述過程比較順利。如果遇到連續(xù)陰雨天氣,則不能收集熱水,因此需要加熱電輔加熱功能。當(dāng)單片機采集到溫度低于設(shè)定值,并且在預(yù)設(shè)時間段內(nèi),將開啟加熱,保持水溫在程序設(shè)置的范圍內(nèi)。水位監(jiān)測模塊安裝在水箱中,監(jiān)測水位的變化并發(fā)出水位報警信息。當(dāng)水位低于設(shè)定位置,單片機發(fā)出指令停止加熱同時開始上水;水位被監(jiān)測到達高水位時,停止上水。實時時鐘為系統(tǒng)提供時間信息,既可以顯示日期時間等信息,又能讓用戶自主設(shè)置水溫保持時間段。在該時間段內(nèi)開啟輔助加熱功能,其他時間只顯示溫度而不加熱以節(jié)約能源。系統(tǒng)還提供有手動按鈕,允許用戶自主控制上水電磁閥、加熱器等器件。在手動模式下系統(tǒng)依然監(jiān)控水位水溫信息,防止發(fā)生上水溢出、干燒等事故。
2.2 控制系統(tǒng)設(shè)計原則 本控制系統(tǒng)將單片機及外圍電路與太陽能熱水器結(jié)合起來。運用溫度、水位監(jiān)測技術(shù),將水溫、水位信息進行處理、控制。該系統(tǒng)設(shè)計遵循的原則如下: 1)可靠性。本太陽能熱水器控制系統(tǒng)是基于單片機的系統(tǒng),在設(shè)計單片機的硬件與軟件方案時,要考慮到各種因素了來保證系統(tǒng)的高可靠性。例如在測量溫度時,如何保持溫度數(shù)據(jù)地準(zhǔn)確傳輸;如何保證單片機工作不被電磁干擾等等。因此系統(tǒng)需要綜合考慮,保證采集、傳輸以及處理過程中的可靠性,才能使得系統(tǒng)能夠應(yīng)對各種復(fù)雜的環(huán)境與使用習(xí)慣。 2)準(zhǔn)確性。本系統(tǒng)使用的測量電路較為先進,能夠精確地反映被測量的變化。 3)經(jīng)濟性。本設(shè)計針對的是廣大民用客戶,所以在選用電路器件時要考察其性價比如何,盡可能控制成本以提高競爭力。 4)人性化。由于本系統(tǒng)要面向廣大客戶,所以在進行軟硬件設(shè)計時,要充分考慮諸多因素。 2.3 主控方案 選擇單片機芯片有以下兩種方案: 方案一: 選用STC89C52芯片作為主控制器。 STC89C52RC單片機是STC宏晶電子公司生產(chǎn)的兼容MCS-51的高性能/低功耗單片機。該型號單片機性價比高、抗干擾能力強,工作電壓:5.5V~3.3V(5V 單片機)/3.8V~2.0V(3V 單片機)。工作頻率范圍:0~40MHz,相當(dāng)于普通8051 的0~80MHz,實際工作頻率可達48MHz。用戶應(yīng)用程序空間為8K 字節(jié),片上集成512 字節(jié)RAM。 方案二:采用AT89S52。 AT89S52是Atmel 公司制造,也和MCS-51系列單片機兼容,片內(nèi)具有8K字節(jié)程序存儲空間,256字節(jié)的數(shù)據(jù)存儲空間,具有在線編程可擦除技術(shù)。 兩種單片機都完全能夠滿足設(shè)計需要,STC89C52相對ATS89C52價格便宜,且抗干擾能力強。考慮到成本因素,因此選用STC89C52。
2.4 溫度檢測方案 溫度是整個太陽能熱水器工作狀態(tài)的核心指標(biāo),系統(tǒng)根據(jù)采集到的儲水箱溫度判斷接下來的動作,溫度測量的準(zhǔn)確性直接關(guān)系到控制系統(tǒng)能否正常工作。 設(shè)計溫度測量方案時,有以下備選方案:熱敏電阻+模數(shù)轉(zhuǎn)換器,數(shù)字式溫度測量器件。其中第一個方案從設(shè)計角度考慮較為復(fù)雜,測量過程如圖3.4所示[4]。而后一方案有眾多的溫度傳感器芯片可供選擇,常見的有LM355Z、DS18B20等等,使用方便。
圖3.4 溫度測量流程圖 其中DS18B20是一款高性能的數(shù)字式溫度測量芯片,可以將溫度量直接轉(zhuǎn)化為數(shù)字量,因此單片機可以方便的通過總線讀取數(shù)據(jù)。綜上,本設(shè)計采用DS18B20傳感器。 2.5 水位檢測方案 在考慮水位檢測模塊時,有以下幾種傳感器可以實現(xiàn):超聲波傳感器、液壓傳感器、電容液位傳感器、以及電子液位檢測器。具體如表所示:
電極式水位檢測電路結(jié)構(gòu)簡單,其精度也足夠控制系統(tǒng)的使用。利用導(dǎo)電液體開關(guān)電路的原理,適用于單片機等邏輯控制器。當(dāng)水漫過電極,電路接通,電平發(fā)生改變,主控芯片依靠電平的狀態(tài)判斷液位。采用電極式液位檢測電路控制了成本,降低了系統(tǒng)復(fù)雜度,也方便自主選擇安裝位置。這里注意電極在水箱中容易生銹或被電化學(xué)腐蝕,影響檢測的準(zhǔn)確性。為了防止這種現(xiàn)象發(fā)生,本設(shè)計擬采用石墨涂層包裹電極,這樣既不影響檢測,也不會發(fā)生腐蝕等不良結(jié)果。 壓敏式傳感器精度高,與此同時帶來成本的問題;電容式傳感器具有精度高的特點但是熱水箱內(nèi)極易產(chǎn)生水垢,會影響測量精度;電極式電路成本低、應(yīng)用方便、適用性強,是本次設(shè)計控制系統(tǒng)所采用的。 2.6 顯示方案 顯示輸出模塊要求能夠顯示水溫、水位,日期、時間以及以上信息的設(shè)置選項。有如下三種方案可供選擇:一、LED指示燈顯示水位,占用4個I/O口,數(shù)碼管顯示水溫以及時間等信息,占用12個I/O口;二、LCD1602顯示以上全部信息,但是不能同時顯示,占用11個I/O口;三、采用LCD12864液晶,可以同時輸出全部設(shè)計要求的信息,但是成本較高。 本設(shè)計顯示的信息量較多但是實時更新速度要求較低,并因此選取LCD1602液晶屏作為顯示輸出器件。 2.7 時鐘方案 本控制系統(tǒng)需要時間信息進行控制驅(qū)動電路,目前市場上有多種時鐘芯片可供選擇,而且單片機本身也有定時功能,因此考慮以下兩種方案: 一是直接使用單片機的定時計數(shù)器提供信號:用程序計算年、月、日、星期、時、分、秒等計數(shù)信息。此種方案雖然減少芯片的使用,成本低,但是,實現(xiàn)的時間誤差較大。二是采用DS1302時鐘芯片:DS1302是一款高性能的時鐘芯片,其特點有:計時準(zhǔn)確、接口簡單、使用方便以及功耗較低。所以采用DS1302芯片提供時鐘信息具有較多的優(yōu)點。
第三章 控制系統(tǒng)硬件設(shè)計 3.1 總體設(shè)計 太陽能熱水器控制系統(tǒng)主要功能的實現(xiàn)有STC89C52RC單片機控制水溫、水位等信息的采集與輸出、控制繼電器開通與關(guān)斷,進而使用戶在消耗少量能源的情況下獲取更多的熱水。如圖3.1所示,控制系統(tǒng)主要包括溫度檢測模塊、水位檢測模塊、實時時鐘模塊、按鍵輸入模塊、LCD顯示模塊以及繼電器驅(qū)動電路,驅(qū)動電路包括有輔助加熱模塊和自動上水模塊。
水溫水位檢測模塊負責(zé)溫度與水位的檢測工作,溫度檢測傳感器采用達拉斯半導(dǎo)體公司生產(chǎn)的DS18B20,通過與單片機的I/O口相連;水位檢測電路采用電極式的測量方法;實時時鐘為整個系統(tǒng)提供實時時間,用戶可以設(shè)置自動加熱的時間段,其他時間可以手動加入以節(jié)約能源;鍵盤輸入模塊實現(xiàn)對系統(tǒng)控制信息的輸入;LCD顯示模塊采用LCD1602器件輸出控制系統(tǒng)的信息;驅(qū)動電路有繼電器負責(zé)通斷電磁閥上水,用雙向晶閘管接通加熱器件電路可以避免繼電器啟動時產(chǎn)生電弧帶來的危險。電氣原理圖如圖3.2所示。
圖3. 2控制系統(tǒng)電氣原理圖
3.2 主控模塊
3.2.1 單片機接口配置 水溫檢測模塊:P1.7;水位檢測電路:P3.4~P3.7;鍵盤輸入模塊:P1.0~P1.6;實時時鐘模塊: P2.5~P2.7;自動上水模塊:P2.3輔助加熱模塊:P2.4;水溫水位顯示模塊:數(shù)據(jù)口P0、使能等等P2.0~P2.2(LCD1602)。
圖3.3 單片機接口配置圖 3.2.2 復(fù)位電路 單片機在運行時難免會遇到各種問題,快速的解決方案是進行系統(tǒng)復(fù)位,使CPU和其他器件處于初始狀態(tài)。
圖3.4 復(fù)位電路 3.2.3 時鐘電路 時鐘電路是單片機CPU的心臟,它控制著CPU的工作節(jié)拍,可以通過提高時鐘頻率來提高CPU的計算速度[5]。
圖3.5 89C52時鐘震蕩電路 3.3 溫度測量模塊 3.3.1 DS18B20簡介 本設(shè)計采用DALLAS (Maxim)公司出產(chǎn)的DS18B20芯片,該產(chǎn)品特點有:獨特的1-Wire接口僅僅占用一個通信端口;內(nèi)置溫度傳感器和EEPROM減少外部元件的數(shù)量;測量溫度范圍:-55°C至+125°C (-67°F至+257°F),-10°C至+85°C范圍內(nèi)測量精度為±0.5°C;9位至12位可編程分辨率;無需另接外部元件;寄生供電模式下只需要2個操作引腳(DQ和GND);多點通信以簡化分布式溫度測量工作;每個器件具有唯一64位序列號,存儲在器件的ROM內(nèi);用戶可以靈活地定義溫度報警門限,通過報警搜索指令來找到溫度超出門限的器件;提供8引腳SO,8引腳μSOP,3引腳TO-92多種封裝形式,如圖3-7展示了DS18B20.各種封裝及引腳圖。 圖3.7 DS18B20封裝形式 1
本設(shè)計中采用的是TO-92形式的封裝,其尺寸形狀便于安裝在熱水器中。通過屏蔽雙絞線與單片機相連,可以實現(xiàn)長距離測量工作。各種封裝的引腳定義見下表。 |
| | | | | | | | | | | | | | | | | 數(shù)據(jù)輸入輸出引腳 單總線開漏引腳 當(dāng)使用寄生電路供電模式時也可以為器件提供電力 | | | | | |
3.3.2 溫度測量電路接線圖 DS18B20采用的獨特的一線式結(jié)構(gòu),其僅需一根線就能夠?qū)崿F(xiàn)通信。溫度傳感器一共有三條線:電源線、電源底線及數(shù)據(jù)線,其電源即可通過電源供電如圖3-5所示,但使用外部電源可以提高測量速度。以上所述特點表明DS18B20非常適合用于長距離多點溫度檢測系統(tǒng)。
圖3.6 DS18B20外部供電電路圖 溫度測量模塊的組成器件有:DS18B20和4.7k上拉電阻。注意在長距離傳輸時使用屏蔽類雙絞線,應(yīng)該適當(dāng)減少上拉電阻阻值,以補償線阻。
圖 3.8 DS18B20接線圖 DS18B20檢測的溫度經(jīng)單片機處理、判斷,可以進行LCD輸出顯示和控制加熱器件工作。對于加熱溫度,我國目前沒有相關(guān)行業(yè)標(biāo)準(zhǔn)。出于安全考慮,最高加熱溫度控制在55°C,最低加熱溫度為40°C。 3.4 水位檢測模塊 水位監(jiān)測模塊采用的電極式測量電路原理如圖所示。電極A對應(yīng)10%水位下限,電極B對應(yīng)40%水位,電極C對應(yīng)70%水位,電極D對應(yīng)95%水位上限。水箱底部放置公共地線,每當(dāng)水位到達某一個電極位置,比如在70%水位,水將電極A、B、C與公共地線短接。根據(jù)原理圖所示,電極A、B、C接地,電信號經(jīng)74LS04反相,P3.7 ,P3.6,P3.5將采集到高電平,P3.4保持低電平。此時單片機僅需查詢數(shù)據(jù)便可判斷出水位的信息。 對于水位監(jiān)測模塊的設(shè)計要注意電極在水箱中容易生銹或被電化學(xué)腐蝕,影響檢測的準(zhǔn)確性。為了防止這種現(xiàn)象發(fā)生,本設(shè)計擬采用石墨涂層包裹電極,這樣既不影響檢測,也不會發(fā)生腐蝕等不良結(jié)果。
圖3.9水位檢測模塊電氣原理圖
3.5 顯示模塊
3.5.1 LCD1602電氣接線圖 顯示電路有排阻、電位器以及LCD1602構(gòu)成,電位器調(diào)節(jié)顯示對比度。STC89C52的P0口和排阻、LCD1602的數(shù)據(jù)I/O口相連,P2^0接RS引腳,P2^1接R/W引腳,P2^2接E引腳。
圖3.10 LCD1602電氣原理圖 3.5.2 LCD1602技術(shù)參數(shù)及接口說明 LCD1602主要性能指標(biāo)有:16X2個字符顯示容量;4.5~5.5V的工作電壓;2.0mA工作電流;字符尺寸為2.95X4.35mm。引腳說明見下表 [td]
3.6 實時時鐘
3.6.1 DS1302簡介 DS1302 是DALLAS (Maxim)公司推出的涓流充電時鐘芯片。片內(nèi)包含有實時時鐘/日歷和31字節(jié)靜態(tài)RAM ,通過簡單的串行接口與單片機進行通信。實時時鐘/日歷提供秒、分、時、日、星期、月、年的信息,每月天數(shù)和閏年天數(shù)可實現(xiàn)自動調(diào)整,時鐘操作可通過AM/PM 指示決定采用24或12小時格式。DS1302 與單片機之間采用同步串行的方式進行通訊,僅需用到三根線:RST復(fù)位、 I/O 數(shù)據(jù)線、 SCLK串行時鐘。時鐘/RAM 的讀/寫數(shù)據(jù)可以一個字節(jié)或多達31個字節(jié)的字符組方式通信。DS1302 工作時功耗很低,保持?jǐn)?shù)據(jù)和時鐘信息時功率小于1mW。 3.6.2 時鐘電路電氣原理圖 實時時鐘模塊由電池、晶振、電容以及DS1302時鐘芯片組成。RST引腳與單片機的P2.5相連,SCLK與P2.6相連,I/O與P2.7相連。
圖3.11 實時時鐘電路圖
3.7 驅(qū)動模塊 驅(qū)動模塊包括上水電磁閥驅(qū)動電路和加熱元件驅(qū)動電路。 3.6.1 上水電磁閥驅(qū)動電路 上水電磁閥驅(qū)動電路主要元件有:兩個1k電阻、一個二極管1N4007、一個三極管2N3905,一個5V的LED以及繼電器。 該驅(qū)動電路控制信號低電平有效,這時三極管導(dǎo)通,繼電器工作,電磁閥開啟實現(xiàn)低水位自動上水。當(dāng)水位檢測模塊監(jiān)測水位到達高水位時,P2.3置1,三極管關(guān)斷,繼電器停止工作,電磁閥閉合。
圖3.11 自動上水驅(qū)動電路 3.6.2 自動加熱驅(qū)動電路 自動加熱驅(qū)動電路由雙向晶閘管Q4015N5、光電耦合器件MOC3022、以及一個47歐姆的電阻構(gòu)成。 該電路設(shè)計構(gòu)想是:電熱元件功率比較高,普通繼電器在開通、關(guān)斷瞬間會產(chǎn)生電弧。由于電弧會損壞器件,因而普通繼電器難以勝任開關(guān)工作,即使可以,成本也比較高。這里采用固態(tài)繼電器的原理,用雙向晶閘管當(dāng)作交流開關(guān)。雙向晶閘管的門極控制電路的開通與關(guān)斷:當(dāng)單片機程序判斷需要開啟加熱功能時,I/O口信號經(jīng)光耦產(chǎn)生門極電流使晶閘管導(dǎo)通;當(dāng)加熱到指定溫度,光耦關(guān)斷門極電路,流過雙向晶閘管的工作電流最多在一個周期內(nèi),就會低于晶閘管的最小導(dǎo)通電流,晶閘管關(guān)斷。
圖3.12 自動加熱驅(qū)動電路
3.8 按鍵模塊
3.8.1 按鍵模塊簡介 本熱水器控制系統(tǒng)涉及到一些功能設(shè)置鍵和一個系統(tǒng)復(fù)位鍵,功能鍵分別是:“加”鍵、“減”鍵、“設(shè)置”鍵、“選項”鍵、“返回”鍵、“加熱”鍵以及“上水”鍵。
圖3.13 按鍵模塊原理圖 在顯示模式中,按下設(shè)置鍵,進入設(shè)置模式;設(shè)置模式中按下返回鍵,退出到顯示模式。在設(shè)置模式中,按下選項鍵選擇設(shè)置選項。在特定選項中,由加、減鍵上下設(shè)置數(shù)值。加熱鍵和上水鍵可以手動運行加熱及上水功能,方便客戶多樣性地使用本控制系統(tǒng)。 3.8.2 按鍵抖動處理 按鍵模塊是操作人員輸入系統(tǒng)信息的入口,所以精確識別每個按鍵的動作是決定系統(tǒng)能否正常工作的關(guān)鍵。現(xiàn)在市場上的按鍵多采用機械彈性開關(guān),電信號在機械觸點的閉合和斷開過程中,完成高低電平的轉(zhuǎn)換。但是按鍵在閉合及斷開瞬時間由于彈性作用,必然產(chǎn)生一連串的抖動。
圖3.14 按鍵抖動示意圖 為了穩(wěn)定操作,我們要防止抖動的發(fā)生,為了消除抖動的影響,可以從硬件和軟件兩方面解決:1)硬件延時消抖:計算好電容放電時間,利用放電延時不失為一個方案。但本設(shè)計選用的單片機程序存儲空間足夠放下軟件消抖的函數(shù),且考慮到批量生產(chǎn)增加電容的成本,故采用下一方案。2)軟件延時消抖:如果按鍵較多,常用軟件延時的方法去抖動。流程如下:檢測到按鍵閉合→延時5-10ms→再次檢測按鍵狀態(tài),如果再次檢測仍是閉合狀態(tài),則認為確實有按鍵按下。
第四章 控制系統(tǒng)軟件設(shè)計
4.1 實時時鐘軟件設(shè)計 4.1.1 DS1302時鐘地址及數(shù)據(jù)格式 對DS1302的時鐘操作需要的數(shù)據(jù)地址及格式如下表所示[12]。 表4.1時鐘地址及數(shù)據(jù)格式 1
下面介紹使用到的寄存器含義: CH(時鐘停止位):CH=0振蕩器工作允許;CH=1振蕩器停止。 寄存器2第5位(AM/PM定義):AP=0 上午模式;AP=1 下午模式。 WP(寫保護位):WP=0數(shù)據(jù)能夠?qū)懭耄籛P=1 數(shù)據(jù)不能寫入。 寄存器2第7位 (12/24 小時標(biāo)志):bit7=0:24 小時模式;bit7=1:12 小時模式。
4.1.3 DS1302軟件流程
圖4.1 DS1302軟件控制流程圖 4.1.4 時間讀取子程序 void ds_get_time(systemtime *time) { unsigned char readvalue; //second readvalue=dsread(dssecond); time->second=((readvalue&0x70)>>4)*10+(readvalue&0x0F); //minute readvalue=dsread(dsminute); time->minute=((readvalue&0x70)>>4)*10+(readvalue&0x0F); //hour readvalue=dsread(dshour); time->hour=((readvalue&0x70)>>4)*10+(readvalue&0x0F); //day readvalue=dsread(dsday); time->day=((readvalue&0x70)>>4)*10+(readvalue&0x0F); //week readvalue=dsread(dsweek); time->week=((readvalue&0x70)>>4)*10+(readvalue&0x0F); //month readvalue=dsread(dsmonth); time->month=((readvalue&0x70)>>4)*10+(readvalue&0x0F); //year readvalue=dsread(dsyear); time->year=((readvalue&0x70)>>4)*10+(readvalue&0x0F);
} 4.1.5 時間設(shè)置子程序 voiddssettime(unsigned char addr,unsigned char byte) { dsprotect(0); dswrite(addr,((byte/10)<<4|(byte%10))); } 4.1.6 日期BCD轉(zhuǎn)字符程序 voiddatezstr(systemtime *time,char *datestr) { *datestr=time->year/10+'0'; *(datestr+1)=time->year%10+'0';
*(datestr+2)='-';
*(datestr+3)=time->month/10+'0'; *(datestr+4)=time->month%10+'0';
*(datestr+5)='-'; *(datestr+6)=time->day/10+'0'; *(datestr+7)=time->day%10+'0'; *(datestr+8)=''; } 4.1.7 時間BCD轉(zhuǎn)字符程序 voidtimezstr(systemtime *time,char *timestr) { *timestr=time->hour/10+'0'; *(timestr+1)=time->hour%10+'0';
*(timestr+2)='-';
*(timestr+3)=time->minute/10+'0'; *(timestr+4)=time->minute%10+'0';
*(timestr+5)='-'; *(timestr+6)=time->second/10+'0'; *(timestr+7)=time->second%10+'0'; *(timestr+8)=''; }
4.2 水溫檢測軟件設(shè)計 4.2.1 傳感器操作指令 本小節(jié)介紹DS18B20的數(shù)據(jù)操作指令,為程序設(shè)計提供原理性指導(dǎo)。首先要了解DS18B20的內(nèi)部存儲空間,內(nèi)部存儲器由一個高速暫存器和一個非易失性E2PROM構(gòu)成,其原理如表3.2所示。 表4.2 DS18B20溫度傳感器內(nèi)存空間 |
| |
|
| | | |
|
| | |
| | | | | | | | | | | | | | | |
|
| | |
|
| | |
|
| | |
|
|
由于DS18B20的單總線設(shè)計,在數(shù)據(jù)傳輸是要滿足一定格式要求的方能進行操作。根據(jù)芯片的通信協(xié)議,主機與DS18B20的通信要具有初始化、ROM操作指令、功能操作指令三個步驟。下表列出本設(shè)計需要使用的一些指令及其說明。
|
| | | | | | 忽略ROM命令允許主機不提供64位ROM編碼以提高訪問存儲器的速度。 | | 總線上只有一個DS18B20時方可使用,否則會發(fā)生沖突。 | | | | | DS18B20發(fā)送溫度轉(zhuǎn)換狀態(tài)給主機 | | | | DS18B20發(fā)送最多9個字節(jié)的數(shù)據(jù)給主機,主機可以隨時停止讀取數(shù)據(jù)。 | | 寫數(shù)據(jù)到暫存器中的第二、第三、第四字節(jié)空間(TH,TL和控制字寄存器) | | 主機發(fā)送三個字節(jié)的數(shù)據(jù)到DS18B20. | | 復(fù)制暫存器中TH, TL和控制字寄存器的數(shù)據(jù)到E2PROM。 | |
| | 復(fù)制E2PROM中的數(shù)據(jù)到暫存器的TH, TL和控制字寄存器。 | | DS18B20發(fā)送調(diào)取狀態(tài)給主機 |
·4.2.2 DS18B20軟件流程
圖4.2 DS18B20軟件流程 4.2.3 獲取溫度子程序 void dsgettemp(unsigned char *integer,unsigned char *decimal,unsigned char *symbol) { unsigned char high,low,temp,tempth,temptl,tempconfig; sendChangeCmd(); //發(fā)送溫度轉(zhuǎn)換指令 delay_ms(800); sendReadCmd(); //發(fā)送讀取暫存器指令
low=readByte(); high=readByte(); tempth=readByte(); temptl=readByte(); tempconfig=readByte(); sendChangeCmd(); //為下一次溫度采集做準(zhǔn)備
temp=high>>4; //溫度計算 if(0==temp) { (*symbol)=0; (*integer)=(high<<4)|(low>>4); (*decimal)=(low&0x0f)*0.625;
} else { (*symbol)=1; (*integer)=~(high<<4)|(low>>4); (*decimal)=10-(low&0x0f)*0.625; if(10==*decimal) { (*integer) += 1; (*decimal) = 0; } } }
4.3 顯示模塊軟件設(shè)計
4.3.1 LCD1602指令及說明
4.3.2 LCD1602RAM地址映射 LCD1602液晶控制器內(nèi)部RAM有80x8的緩沖空間,注意數(shù)據(jù)地址還應(yīng)與上0x80h。
4.3.3 初始化過程 延時15mS; 寫指令38H(不檢測忙信號); 延時5mS; 寫指令38H(不檢測忙信號); 延時5mS; 寫指令38H(不檢測忙信號); 以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號; 寫指令38H:顯示模式設(shè)置; 寫指令08H:顯示關(guān)閉; 寫指令01H:顯示清屏; 寫指令06H:顯示光標(biāo)移動設(shè)置; 寫指令0CH:顯示開及光標(biāo)設(shè)置; 4.3.4 顯示子程序 voidlcdoutput(unsigned char x,unsigned char y,unsigned char *str) { if(y)//此由有坐標(biāo)x,y值計算地址y=1則顯示在第二行 x|=0x40; x|=0x80;//LCD1602存儲地址第七位為1,所以地址要與上0x80
lcdwrite(command,x);//寫入地址
while(*str!='')//寫入數(shù)據(jù) { lcdwrite(data,*str); str++;
} }
4.4 水位檢測軟件設(shè)計
水位檢測程序比較簡單,有圖3.9 水位檢測模塊電氣原理圖所示,僅需讀取P3口,在屏蔽低四位就可判斷水位信息。水位檢測模塊的原理是:讀取水位檢測接口,然后進行查表,再根據(jù)預(yù)設(shè)的關(guān)鍵水位信息操作繼電器驅(qū)動電路。部分程序如下: unsigned char depthprocess() {
unsigned char depth; unsigned char depthvalue; P3=0xff; depth=P3; depth&=0xf0; P3=0xff; switch(depth) { case 0xf0: { water=1; depthvalue=100; break; } case 0x70: {
depthvalue=70; break; } case 0x30: {
depthvalue=40; break; } case 0x00: { water=0; depthvalue=10; break; } default: break; } return depthvalue; } 4.5 按鍵模塊軟件設(shè)計 4.5.1 讀取鍵值子程序 unsigned char readkeys() { unsigned char keystemp,keysvalue; do { P1=0xff; keystemp=P1; delay_ms(8); P1=0xff; keysvalue=P1;
} while(keystemp!=keysvalue); returnkeysvalue; } 4.5.2 鍵值處理子程序 由于鍵值處理子程序較長,這里摘錄一段修改日期的程序: voidkeysprocess() {
unsigned char x;//零時變量 chardatestring[9],timestring[9]; charyearnum[1]; charmonthnum[1]; chardaynum[1]; charhournum[1]; charminnum[1]; charthnum[1]; chartlnum[1]; systemtimedatetime; unsigned char keys; unsigned char pagcount=1;//計次移動 charaddnum[7];
unsigned char set,add,sub,hea,wat,mov,sav; //設(shè)置,加鍵,減鍵,加熱,上水,移動,保存 keys=readkeys(); set=keys&0x01; add=keys&0x02; sub=keys&0x04; hea=keys&0x08; wat=keys&0x10; mov=keys&0x20; sav=keys&0x40;
if(set==0) { dsgettime1(&datetime); datezstr1(&datetime,datestring);//獲取時間 timezstr1(&datetime,timestring); if(mov==0) {
pagcount++; if(pagcount>8)//要設(shè)置的項目共有7個最后一次復(fù)使 { pagcount=1; } switch(pagcount) { case 1: { dssettime1(dssecond,0x80);//stop ds1302 CH置高 lcdwrite1(command,0x80+6);//設(shè)置年閃爍 lcdwrite1(command,0x0f);//閃爍
if(add==0) {
yearnum[0]=datestring[0]+datestring[1];//年
yearnum[0]++;
if(yearnum[0]>99) {yearnum[0]=0;} lcdoutput1(5,0,yearnum);//顯示修改結(jié)果 dssettime1(dsyear,numtobcd(yearnum[0],1));//寫入年 } if(sub==0) { yearnum[0]=datestring[0]+datestring[1];//年
yearnum[0]--;
if(yearnum[0]<=0) { if(yearnum[0]==0) {lcdoutput1(6,0,"0");} else {yearnum[0]=99;}
} lcdoutput1(5,0,yearnum);//顯示修改結(jié)果 dssettime1(dsyear,numtobcd(yearnum[0],1));//寫入年
}
dssettime1(dssecond,0);//啟動ds1302CH置低CH置低 break; } case 2: { …… } }
第五章 控制系統(tǒng)調(diào)試與仿真
5.1 總體仿真結(jié)果展示 圖5.1 總體仿真效果圖 5.2 自動加熱仿真 由于在Proteus中雙向晶閘管無法仿真,這里使用繼電器驅(qū)動電路替代加熱驅(qū)動電路,同樣是低電平有效,程序不變。
圖5.2 加熱模塊原理圖 水溫低于40°C開啟加熱:
圖5.3開啟加熱仿真結(jié)果
水溫高于55°C關(guān)閉加熱:
圖5.4 關(guān)閉加熱仿真結(jié)果
圖5.5 溫度傳感器狀態(tài) 綜上顯示,模塊正常工作
5.3 水位檢測及上水仿真
水位檢測模塊原理如下。當(dāng)水位出于電極3、4之間,電極1、2、3相當(dāng)于開關(guān)閉合。此時P3口的狀態(tài)為0xe0(用0xf0屏蔽低四位),LED4、5、6.燈亮。 圖5.6 水位檢測模塊原理圖及仿真 當(dāng)水位低于10%,上水驅(qū)動電路動作,繼電器打開電磁閥上水;水位到達高水位繼電器關(guān)閉電磁閥,停止上水。 圖5.7 低水位開始上水仿真結(jié)果 圖5.8 高水位停止上水仿真結(jié)果
第六章 總結(jié)與展望 我國正處于“十三五”時期,在十三五規(guī)劃中寫到:深入推進能源革命,著力推動能源生產(chǎn)利用方式變革,優(yōu)化能源供給結(jié)構(gòu),提高能源利用效率,建設(shè)清潔低碳、安全高效的現(xiàn)代能源體系,維護國家能源安全。為相應(yīng)國家號召,應(yīng)當(dāng)積極開發(fā)和利用太陽能等清潔可再生能源。在生活中,太陽能熱水器得到廣泛而又普遍的運用。為方便用戶的個性化、人性化使用太陽能熱水器,積極推廣太陽能的利用,開發(fā)一款控制系統(tǒng)的任務(wù)放在了我們的面前。本設(shè)計通過STC89C52作為核心主控制器,采用時鐘芯片DS1302,溫度傳感器DS18B20組成控制系統(tǒng) 。制作了一款可以智能加熱、自動上水等功能的熱水器控制器,并且控制器有精度高、抗干擾性強等諸多優(yōu)點。 通過大量閱覽參考資料和歷經(jīng)半年的不斷調(diào)試,控制系統(tǒng)終于達到了設(shè)計要求。本設(shè)計進行電路硬件設(shè)計、軟件設(shè)計,通過了仿真調(diào)試。由于工作量較大,本系統(tǒng)的設(shè)計還有一些不足: - 溫度測量反映速度較慢,有待進一步優(yōu)化軟件設(shè)計。
- 按鍵的中斷方式未完成調(diào)試,功能是通過查詢方式實現(xiàn)的,效率較低。
- 控制器與太陽能熱水器結(jié)合的優(yōu)化設(shè)計沒有作進一步闡述。
部分源碼如下:
- #include
- #include
- #include
- #include
- #include
- #include
- sbit heater = P2^3;
- unsigned char x;
- /************更新***************/
- void updatatime()
- { systemtime datetime;
-
-
-
- lcdwrite(command,clear_screen);
- dsgettime(&datetime); //獲取時間
- lcdoutput(0,0,"DATE:"); //日期
- datezstr(&datetime,datestring);
- lcdoutput(5,0,"20");
- lcdoutput(7,0,datestring);
- lcdoutput(0,1,"TIME:");
- for(x=8;x>0;x--) //循環(huán)顯示時間
- {
- converttemp();
- dsgettime(&datetime);
- timezstr(&datetime,timestring);
- lcdoutput(5,1,timestring);
- delay_ms(300);
- }
- }
- void updatatemp()
- {
- lcdwrite(command,clear_screen);
- lcdoutput(0,0,"SWEN:"); //水溫
- lcdoutput(0,1,"SWEI:"); //水位
- for(x=8;x>0;x--) //循環(huán)顯示時間
- {
- converttemp();
- lcdoutput(5,0,tempstr);
- depthprocess();
- delay_ms(300);
- }
- }
- /************主函數(shù)***************/
- void main()
- {
- unsigned char integer,symbol,decimal;
-
- ds1302init();
- lcdini();
- while(1)
- {
- dsgettemp(&integer,&decimal,&symbol); //獲取溫度
- if(integer<40) //自動加熱
- {
- heater=0;
- }
- else if(integer>55)
- {
- heater=1;
- }
- //關(guān)鍵顯示部分
- updatatime();
- updatatemp();
-
-
-
- }
-
- }
復(fù)制代碼
本人初學(xué),僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬
顯示部分已經(jīng)調(diào)試好了,目前按鍵部分還沒有加入,大家有時間可以自行補充完善:
仿真程序.7z
(929.87 KB, 下載次數(shù): 942)
2021-12-4 17:59 上傳
點擊文件名下載附件
如果有朋友補全了此程序,可以上傳到論壇大家一起學(xué)習(xí)
|