精選太陽能熱水器控制器的設計作業_第1頁
精選太陽能熱水器控制器的設計作業_第2頁
精選太陽能熱水器控制器的設計作業_第3頁
精選太陽能熱水器控制器的設計作業_第4頁
精選太陽能熱水器控制器的設計作業_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選太陽能熱水器控制器的設計作業太陽能熱水器控制器的設計摘要: 本系統是為太陽能熱水器水溫水位的檢測和控制而設計的。在整個控制系統中,以STC89C52為主控芯片,由DS18B20傳感器分別檢測水溫和水位,實現對水溫和水位、上水測量、顯示、報警等功能,并以電磁閥、繼電器為閥門開關實現全自動加熱、上水。整個系統精度高,耐高溫性強,易于調整,測試方便,到達設計要求。關鍵詞: STC89C52 DS18B20傳感器 水溫水位檢測與控制引言當前能源緊缺,用電緊張,太陽能是綠色能源,得到廣闊用戶的喜愛。使用太陽能熱水器時存在的問題:不可缺水,空曬情況下上水會爆炸;春、秋天,水溫升高蒸發,造成熱能損失;冬

2、天水溫不夠,須用電等等。采用太陽能熱水器智能儀也稱太陽能熱水器水溫水位監控儀,能解決上述問題。使用戶省心,使用方便,智能運行,用戶不必作任何操作。太陽能熱水器是一種利用太陽輻射能通過溫室效應把水加熱的裝置。利用聚積的高溫來加熱水。太陽能熱水器不僅可以為家庭提供低溫用熱水(4060),還可以為暖房、溫室、枯燥、蒸餾、制冷等熱動力系統和工農業生產提供較高溫度的熱水。太陽能熱水器由于具有綠色環保特色而在人民生活和生產中得到了很多應用,它為百姓提供環保、平安節能、衛生的新型熱水器產品,太陽能熱水器就是吸收太陽的輻射熱能,加熱冷水提供給人們在生活、生產中使用的節能設備。進步源于競爭,在我國太陽能擁有廣闊

3、的市場,當然也有更大的競爭,各大商家為了使自己的產品在市場上立足并長遠開展,不斷提高太陽能熱水器的性能,其中太陽能熱水器控制器以其靈活、貼近客戶成為商家競爭的熱點。目前,各大商家紛紛提高太陽能熱水器的智能化程度來滿足消費者的需求。許多太陽能熱水器的功能有:開機自檢、溫控上水、強制上水、水位預置、水質設置、水溫指示、低水壓上水、水位顯示、防高溫空曬、缺水報警、自動防溢流、缺水上水、手動上水、故障提示等許多貼近客戶需求的功能。 一、根本設計框圖本系統的組成框圖如圖1所示。本系統的主要設計思路是:設計太陽能熱水器控制器,要求實現測溫,高中低水位點測開關量,加水控制,電加熱控制、計算機監控等功能。在此

4、框圖中由PC上位機實現對控制局部的監控,由單片機實現現場局部的控制。PC上位機局部由VB監控界面實現實時監控,其中包括太陽能熱水器當前的溫度,當前水位,自動/手動控制,開始加水/停止加水,開始加熱/停止加熱,設置溫度并加熱,保溫控制等。由單片機實現硬件電路的控制,從而實現太陽能熱水器控制器的控制功能。圖1 電路設計框圖二、硬件電路的設計 由單片機實現硬件電路的控制,其中硬件局部主要由DS18B20水溫采集局部,LCD顯示水溫水位局部,按鍵控制局部實現相應的功能控制,水溫水位報警電路等組成。硬件電路設計圖見附錄一。1、水溫采集局部1DS18B20根本知識 DS18B20數字溫度計是DALLAS公

5、司生產的1Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統,具有線路簡單,在一根通信線,可以掛很多這樣的數字溫度計,十分方便。 DS18B20產品的特點 只要求一個端口即可實現通信;在DS18B20中的每個器件上都有獨一無二的序列號;實際應用中不需要外部任何元器件即可實現測溫;測量溫度范圍在55C到125C之間;數字溫度計的分辨率用戶可以從9位到12位選擇;內部有溫度上、下限告警設置。 2DS18B20工作原理及應用:DS18B20的溫度檢測與數字數據輸出全集成于一個芯片之上,從而抗干擾力更強。其一個工作周期可分為兩個局部,即溫度檢測和數據處理。在講解其工作流程之

6、前我們有必要了解DS18B20的內部存儲器資源。DS18B20共有三種形態的存儲器資源,它們分別是: ROM只讀存儲器,用于存放DS18B201D編碼,其前8位是單線系列編碼(DS18B20的編碼是19H),后面48位是芯片唯一的序列號,最后8位是以上56的位的CRC碼(冗余校驗)。數據在出產時設置不由用戶更改。DS18B20共64位ROM。RAM數據暫存器,用于內部計算和數據存取,數據在掉電后喪失,DS18B20共9個字節RAM,每個字節為8位。第1, 2個字節是溫度轉換后的數據值信息,第3, 4個字節是用戶EEPROM(常用于溫度報警值儲存)的鏡像。在上電復位時其值將被刷新。第5個字節序列

7、是用戶第3個EEPROM的鏡像。第6, 7, 8個字節為計數存放器,是為了讓用戶得到更高的溫度分辨率而設計的,同樣也是內部溫度轉換、計算的暫存單元。第9個字節為前8個字節的CRC碼。EEPROM非易失性記憶體,用于存放長期需要保存的數據,上下限溫度報警值和校驗數據,DS18B20共3位EEPROM,并在RAM都存在鏡像,以方便用戶操作。基于DS18B20的水溫采集電路如圖2所示: 圖2 水溫采集電路由單片機P1.4引腳控制溫度信息采集,DS18B20采集的溫度數據送到單片機內部,由單片機內部判斷對現有的溫度是否進行加熱,保溫處理。LCD顯示水溫水位局部液晶顯示器以其微功耗、體積小、顯示內容豐富

8、、超薄輕巧的諸多優點在袖珍式儀表和低功耗應用系統中得到越來越廣泛的應用。但是通用型液晶正常工作溫度為0C-+55C,存儲溫度范圍為-20C-+60C,溫度過高時,不能正常顯示。LCD1602液晶為5V電壓驅動,帶背光,可顯示兩行,每行16個字符,不能顯示漢字,內置含128個字符的ASCII字符集字庫,只有并行接口,無串行接口。LCD1602引腳功能介紹:第1腳:VSS為地電源第2腳:VDD接5V止電源第3腳:VO為液晶顯示器比照度調整端,接止電源時比照度最弱,接地電源時比照度最高,比照度過高時會產生“鬼影,使用時可以通過一個l0K的電位器調整比照度.第4腳:RS為存放器選擇,高電平時選擇數據存

9、放器、低電平時選擇指令存放器。第5腳:RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以寫入指令或者顯示地址,當RS為低電平RW為高電平時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數據。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。第7 腳-14腳:D0-D7為8位雙向數據線。第15一16腳:空腳圖3是水溫水位顯示局部:圖3 水溫水位顯示在LCD上顯示水溫,高中低水位,及當前的時間,通過LCD可以實現實時監控,知道目前太陽能熱水器的水溫水位的變化。按鍵控制局部這局部主要是運用按鍵實現太陽能熱水器的實時控制的一些觀測,由于沒有

10、實際的太陽能熱水器用于實驗,采用此種方式可以觀察是否實現了預期的效果。通過按鍵按下判斷是手動/自動控制,加水/加熱控制,停止加水/加熱控制,高中低水位控制。當按下某一按鍵時,對應的二極管亮,表示此功能實現。如圖4所示:圖4 按鍵控制局部水溫水位報警電路當水溫低于某一設定值時,報警電路發出警告,及要求進行加熱,這是可以采用電加熱的方式實現溫度值的提高。當水位高于或低于某一水位值時,報警電路報警,此時可以采用自動或手動上水的方式上水。如圖5所示:圖5 水溫水位報警電路軟件局部的設計軟件局部的設計主要是包括兩大模塊,即主程序的設計和處理程序的設計。在主程序中首先進行初始化設計:按鍵的初始化,LCD的

11、初始化,串口通信的初始化,定時器的初始化。還要進行LCD的清零,接下來進入大循環,進行按鍵的處理及相關程序的調用。系統程序流程圖如圖6所示:系統上電后,系統即進行輸入輸出口的初始化,再等待用戶按檢測鍵,在掃描到用戶已經按過檢測間后,單片機調用讀數子程序,將水溫和控制溫度通過A/D轉換后,處理判斷水是否需要加熱。如果需要加熱測低溫燈亮,并等待用戶按加熱鍵。用戶按加熱鍵后,系統制動繼電器,是加熱器通電。再加熱過程中,系統循環檢測水溫,并控制加熱時間。整個系統在上電后將無限循環檢測水溫,實現實時加熱。如用戶需要關閉,那么可通過總電源操作。在軟件設計局部,按鍵處理程序、LCD 1602程序、串口通信模

12、塊、DS18B20模塊的設計及相應的處理程序局部,這幾個模塊的編寫過程比較復雜,寫成的過程中要小心細致,同時也要敢于嘗試。具體的程序設計見附錄二。圖6 系統流程圖四、太陽能熱水器控制器串口通信協議1、通信模式電腦和CPU通過串口進行全雙工命令與數據傳遞,一方發送數據,另一方接收數據即可,沒有答復。串口速率:BPS= 96002、通信協議格式發送方發送數據/命令/狀態的協議為:地址,數據。1地址為一字節數據,數值范圍80HFFH,標志是最高位定為12數據長度可變,但每一個字節的數值一定小于80H,即字節的最高位=03所有命令中的數值均為一字節,且小于等于FFH。 命令沒有應答,且每傳一個數據時前

13、面都要有地址。3、通信協議的內容下位機傳給上位機:1、太陽能熱水器的當前溫度 地址:“A0 命令:A000:當前溫度為0攝氏度 A001:當前溫度為1攝氏度 A002:當前溫度為2攝氏度 A099:當前溫度為99攝氏度 注: 命令是以字符的形式傳送,每傳送溫度時都要加上地址。當前溫度大于80攝氏度時報警。 2、太陽能熱水器水位檢測: 地址:A1 命令:A110:水位到達低水位 A111:水位到達中水位 A112:水位到達高水位 注:命令傳送是以單個字符的形式,每傳送一組溫度數值時都要加上地址。水位到達高水位時報警。上位機傳給下位機:1、太陽能熱水器加熱命令及溫度設置、熱水器保溫地址:B0命令:

14、B014:加熱到20度 B015:加熱到21度 B016:加熱到22度 B017:加熱到23度 B04F:加熱到79度 B050:加熱到80度地址: B1H:停止加熱 命令傳送是以單個字符的形式,每傳送一組溫度數值時都要加上地址。 注:上位機傳溫度時,把十進制溫度數據以十六進制的形式傳給下位機。設置的溫度是從2080度,超此范圍,設置溫度窗口會報錯。 2、太陽能熱水器加水設置 命令:C0:開始加水 “C1:停止加水3、太陽能熱水器自動/手動設置 命令:D0:自動 “D1:手動VB監控界面見附錄三:五、小結本系統硬件局部簡單,主要數據都有軟件處理,且具有平安性、可靠性以及實用性。在此次的設計中,

15、我學到了很多知識,之前單片機的知識幾乎忘記,經過這次小課題設計,我做到了溫故而知新,同時也鍛煉了自己的編程的能力。雖然在這次課題設計中我遇到了許多難題,通過與同學的討論,根本上得到了解決,之后會再接再厲,爭取做得更好!在此也要感謝此次設計過程中幫助過我的同學及老師們。附錄一:整體電路圖附錄二:軟件設計程序#include reg52.h#include key.h#include lcd1602.h#include usart.h#include ds18b20.h#include time.h#include dispose.hvoid Init (void)KeyInit();LcdIni

16、t();UsartInit();TimeInit();void main (void)unsigned key;Init();LcdClr();while (1)key = KeyScan();DisposeKey(key);#include dispose.hsbit di=P20;sbit zhong=P21; sbit gao=P22;char RunMode;char SetTemp;char SetTempbuf;char BaojingEn;unsigned char shuiliang(void);void DisposeAuto(void)if (tempi SetTempbu

17、f)jiare = 0;elsejiare = 1;if (shuiliang() = 0)jiashui = 0;else if (shuiliang() = 1) & (SetTempbuf - tempi 30)jiashui = 0;else if (shuiliang() = 2) & (SetTempbuf - tempi 20)jiashui = 0;else if (shuiliang() = 3) & (SetTempbuf - tempi 10)jiashui = 0;elsejiashui = 1;void DisposeKey(unsigned char key)swi

18、tch (key)case 8:/手動/自動RunMode = !RunMode;break;case 9:/加熱if (!RunMode)jiare = 0;break;case 10:/+if (SetTemp)if (SetTempbuf 0)SetTempbuf-;LcdPos(14);LcdWdat(SetTempbuf/10+48);LcdWdat(SetTempbuf%10+48);break;case 12:/設置溫度SetTemp = !SetTemp;if (SetTemp)LcdClr();LcdPos(0);LcdWdat(S);LcdWdat(e);LcdWdat(t

19、);LcdWdat(T);LcdWdat(e);LcdWdat(m);LcdWdat(p);LcdWdat(:);LcdPos(14);LcdWdat(SetTempbuf/10+48);LcdWdat(SetTempbuf%10+48);elseLcdClr();LcdPos(0);LcdWdat(T);LcdWdat(e);LcdWdat(m);LcdWdat(p);LcdWdat(:);LcdPos(14);LcdWdat(tempi/10+48);LcdWdat(tempi%10+48);break;case 13:/報警音開/關BaojingEn = !BaojingEn;break

20、;case 14:/加水if (!RunMode)jiashui = 0;break;case 15:/停止if (!RunMode)jiare = 1;jiashui = 1;break;default :break;unsigned char shuiliang(void)static unsigned char shuiliang;di=0;zhong=0;gao=0;/static unsigned char j;P3 |= 0 x38;/j+;/if (j = 2)/j = 0;/if (di = 1)shuiliang = 0;else if (zhong = 1)shuilian

21、g = 1;else if (gao = 1)shuiliang = 2;/if (shuiliang0 != shuiliang1)switch (shuiliang)case 0 :LcdPos(0 x40);LcdWdat(W);LcdWdat(a);LcdWdat(t);LcdWdat(e);LcdWdat(r);LcdWdat( );LcdWdat(L);LcdWdat(e);LcdWdat(v);LcdWdat(e);LcdWdat(l);LcdWdat(:);LcdWdat(0);UsartSendShuiwei(0);break;case 1 :LcdPos(0 x40);Lc

22、dWdat(W);LcdWdat(a);LcdWdat(t);LcdWdat(e);LcdWdat(r);LcdWdat( );LcdWdat(L);LcdWdat(e);LcdWdat(v);LcdWdat(e);LcdWdat(l);LcdWdat(:);LcdWdat(1);UsartSendShuiwei(1);break;case 2 :LcdPos(0 x40);LcdWdat(W);LcdWdat(a);LcdWdat(t);LcdWdat(e);LcdWdat(r);LcdWdat( );LcdWdat(L);LcdWdat(e);LcdWdat(v);LcdWdat(e);L

23、cdWdat(l);LcdWdat(:);LcdWdat(2);UsartSendShuiwei(2);break;case 3 :LcdPos(0 x40);LcdWdat(W);LcdWdat(a);LcdWdat(t);LcdWdat(e);LcdWdat(r);LcdWdat( );LcdWdat(L);LcdWdat(e);LcdWdat(v);LcdWdat(e);LcdWdat(l);LcdWdat(:);LcdWdat(3);UsartSendShuiwei(3);break;default :break;/return shuiliang; 按鍵處理局部#include ke

24、y.hvoid KeyDelay (unsigned int z)unsigned int i;while(z-)for(i=0;i120;i+);void KeyInit (void)P2=0 xfe;P0=0 xff;ad0=0;ad1=0;ad2=0;ad3=1;unsigned char KeyScan (void)unsigned char temp,num;num=16;ad0=0;ad1=0;ad2=1;ad3=1;P2=0 xfe; /掃描第一行P0=0 xff;temp=P0;if(temp!=0 xff)KeyDelay(5);temp=P0;if(temp!=0 xff)

25、switch(temp)case 0 xfe: num=0; break;case 0 xfd: num=1; break;case 0 xfb: num=2; break;case 0 xf7: num=3; break;case 0 xef: num=4; break;case 0 xdf: num=5; break;case 0 xbf: num=6; break;case 0 x7f: num=7; break;while(temp!=0 xff)P0=0 xff;temp=P0;P2=0 xfd; /掃描第二行P0=0 xff;temp=P0;if(temp!=0 xff)KeyDe

26、lay(5);temp=P0;if(temp!=0 xff)switch(temp)case 0 xfe: num=8; break;case 0 xfd: num=9; break;case 0 xfb: num=10; break;case 0 xf7: num=11; break;case 0 xef: num=12; break;case 0 xdf: num=13; break;case 0 xbf: num=14; break;case 0 x7f: num=15; break;while(temp!=0 xff)P0=0 xff;temp=P0;ad3=0;return num;

27、LCD1602程序#include lcd1602.hunsigned char code dis1 = Welcome B6 ;/第一行顯示內容unsigned char dispbuf5;/第二行顯示內容float count1=34.56;/*/* /* 延時子程序 /* /*/void LcdDelay (int ms) int i; while(ms-) for(i = 0; i= 3)SetTempbuf = (dat2-48)*10+dat3-48;if (!RunMode)jiare = 0;else if (dat0 = B) & (dat1 = 1)if (!RunMode

28、)jiare = 1;else if (dat0 = C) & (dat1 = 0)if (!RunMode)jiashui = 0;else if (dat0 = C) & (dat1 = 1)if (!RunMode)jiashui = 1;else if (dat0 = D) & (dat1 = 0)RunMode = 1;else if (dat0 = D) & (dat1 = 1)RunMode = 0;break;elseTI=0;/TI清0DS18B20 程序#include ds18b20.hunsigned char temper2;/存放溫度的數組 /*延時函數*/void DsDelay (unsigned int us) while(us-);/*復位函數*/void DsReset (void) /復位unsigned char x=0;DQ = 1;DsDelay(8); /稍做延時DQ = 0;DsDelay(80); /精確延時 大于 480usDQ = 1; /拉高總線DsDelay(14);x=DQ;DsDelay(20);/*從DS18B20讀一字節*/unsigned char DsReadbyte(void) /讀1字節unsigned char i=0;unsigned char d

溫馨提示

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

評論

0/150

提交評論