水溫自動控制系統(tǒng)_第1頁
水溫自動控制系統(tǒng)_第2頁
水溫自動控制系統(tǒng)_第3頁
水溫自動控制系統(tǒng)_第4頁
水溫自動控制系統(tǒng)_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、電子技術(shù)綜合設(shè)計設(shè)計報告設(shè)計題目: 水溫自動控制系統(tǒng) 組長姓名: 學(xué) 號: 專業(yè)與班級: 工業(yè)自動化14-16班 姓 名: 學(xué) 號: 專業(yè)與班級: 工業(yè)自動化14-16班 姓 名: 學(xué) 號: 專業(yè)與班級: 工業(yè)自動化14-16班 時 間: 2016 2017 學(xué)年第(1)學(xué)期 指導(dǎo)教師: 陳燁 成 績: 評閱日期: 一、 課題任務(wù)設(shè)計并制作一個水溫自動控制系統(tǒng),對1.5L凈水進(jìn)行加。水溫保持在一定范圍內(nèi)且由人工設(shè)定。細(xì)節(jié)要求如下:1.溫度設(shè)定范圍為4090 ,最小分辨率為0.1,誤差1。2.可通過LCD顯示屏顯示溫度目標(biāo)值與實時溫度。3.可以通過鍵盤調(diào)整目標(biāo)溫度的數(shù)值。二、 方案比較1. 系統(tǒng)

2、模塊設(shè)計為完成任務(wù)目標(biāo),可以將系統(tǒng)分為如下幾個部分:5V直流電供電模塊、測溫模塊、80C52單片機(jī)控制系統(tǒng)、鍵盤控制電路、溫度顯示模塊、繼電器控制模塊、強(qiáng)電加熱電路。通過各模塊之間的相互配合,可以完成水溫檢測、液晶顯示、目標(biāo)值設(shè)置、水溫控制等功能。系統(tǒng)方框圖如下:2. 5V直流電供電模塊方案一:直接用GP品牌的9v電池,然后接通過三端穩(wěn)壓芯片7805穩(wěn)壓成5伏直流電源提供給單片機(jī)系統(tǒng)使用,接兩個5伏電源的濾波電容后輸出。方案二:通過變壓器,將220v的市電轉(zhuǎn)換成9v左右的交流電,變壓器輸出端的9V電壓經(jīng)橋式整流并電容濾波。要得到一個比較穩(wěn)定的5v電壓,在這里接一個三端穩(wěn)壓器的元件7805。由于

3、需要給繼電器提供穩(wěn)定的5V電壓,而方案一中導(dǎo)致電池的過度損耗,無法穩(wěn)定帶動繼電器持續(xù)工作,所以我們選用能夠提供更加穩(wěn)定5v電源的方案二。3. 測溫模塊經(jīng)查閱資料,IC式感溫器在市場上應(yīng)用比較廣泛的有以下幾種:AD590:電流輸出型的測溫組件,溫度每升高1 攝氏度,電流增加1A,溫度測量范圍在-55 150之間。其所采集到的數(shù)據(jù)需經(jīng)A/D 轉(zhuǎn)換,才能得到實際的溫度值。DS18B20:內(nèi)含AD轉(zhuǎn)換器,所以除了測量溫度外,它還可以把溫度值以數(shù)字的方式(9 B i t ) 送出,因此線路連接十分簡單,它無需其他外加電路,直接輸出數(shù)字量,可直接與單片機(jī)通信,讀取測溫數(shù)據(jù)。它能夠達(dá)到0.5的固有分辨率,使

4、用讀取溫度暫存寄存器的方法還能達(dá)到0.0625以上精度,溫度測量范圍在-55125 之間,應(yīng)用方便。SMARTEC感溫組件:這是一只3個管腳感溫IC,溫度測量范圍在-45 13,誤差可以保持在0.7 以內(nèi)。max6225/6626:最大測溫范圍也是-55+125,帶有串行總線接口,測量溫度在可測范圍內(nèi)的的誤差在4以內(nèi),較大,故舍棄該方案。本設(shè)計選用DS18B20感溫IC,這是因其性能參數(shù)符合設(shè)計要求,接口簡單,內(nèi)部集成了A/D 轉(zhuǎn)換,測溫更簡便,精度較高,反應(yīng)速度快,且經(jīng)過市場考察,該芯片易購買,使用方便。下面是DS18B20感溫IC的實物和接口圖片4. 80C52單片機(jī)控制系統(tǒng)AT89C52

5、是一個低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,AT89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。5. 鍵盤控制電路方案一:四鍵設(shè)定,一個十位控制鍵,一個個位控制鍵,一個位控制鍵,一個確認(rèn)鍵,通過四鍵的配合設(shè)定為度,該方案接線和程序簡單,但實際操作不太便捷。方案二:矩陣鍵盤設(shè)定,通過按鍵輸入不同數(shù)字實現(xiàn)溫度的設(shè)定,電路連接比較簡單,程序較方案一復(fù)雜,但已經(jīng)在學(xué)習(xí)過

6、程中接觸過矩陣鍵盤的編程技巧,有一定的可行性,且操作起來更加符合我們的日常習(xí)慣。本次設(shè)計暫定采用矩陣鍵盤來作為溫度設(shè)定電路的輸入。6. 溫度顯示模塊方案一:使用數(shù)碼管顯示,通過數(shù)碼管顯示被測溫度和設(shè)定溫度。該方案程序簡單,且已學(xué)習(xí)過其編程技巧,但硬件占用單片機(jī)I/O口較多,對于盡量節(jié)約端口,讓線路簡單來說不是好方法,而且顯示也不夠直觀靈活,只能顯示數(shù)字,。方案二:使用液晶屏1602顯示。1602可顯示兩行字符及數(shù)字,可以用來顯示設(shè)定溫度及測量溫度,較之?dāng)?shù)碼管顯示更加清晰直觀,雖然此前沒有接觸過相關(guān)知識,但該器件上手比較容易,可以在短期內(nèi)學(xué)會其使用方法。1602較之?dāng)?shù)碼管更加符合本次設(shè)計要求,因

7、此使用1602作為顯示器件。7. 繼電器控制模塊方案一:采用普通的控制方法,即水溫溫度到達(dá)臨界溫度時,控制繼電器開閉。但由于水溫變化快,且慣性大,不易控制精度。 方案二:采用PWM控制加PID算法,通過采用PWM可以產(chǎn)生一個波形,而PWM波形的占空比是通過PID算法調(diào)節(jié),這樣就可以通過控制加熱電路的開、斷時間比來控制加熱器功率進(jìn)而控制溫度的變化,從而使精度提高。此方法中硬件上可以使用固態(tài)繼電器或晶閘管控制加熱器工作。我們選擇方案二。三、 電路設(shè)計1. 電源電路整個系統(tǒng)需要使用5V直流電和220V交流電。電源電路采用變壓器與穩(wěn)壓模塊,將工頻電壓降為5V直流電,為系統(tǒng)供電。首先用變壓器模塊20V交

8、流電降為9V交流電,接入整流電橋,變?yōu)橹绷麟娸敵觯偈褂萌朔€(wěn)壓芯片7805穩(wěn)壓為5V。L7805輸出端要聯(lián)上電解電容,濾除交流電干擾,防止損壞單片機(jī)系統(tǒng)。LM7805最大可以輸出1A的電流,內(nèi)部有限流式短路保護(hù),短時間內(nèi),例如幾秒鐘的時間,輸出端對地(2腳)短路并不會使7805燒壞。2. 溫度傳感器DS18B20溫度傳感器只有三根外引線:單線數(shù)據(jù)傳輸總線端口DQ ,外供電源線VDD,共用地線GND。外部供電方式(VDD接+5V,且數(shù)據(jù)傳輸總線接4.7k的上拉電阻,其接口電路如下圖(外接電源工作方式)所示。3. 單片機(jī)最小系統(tǒng)單片機(jī)最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片機(jī)可

9、以工作的系統(tǒng).對51系列單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括:單片機(jī)、晶振電路、復(fù)位電路4. 按鍵、顯示電路這部分實際上是一個單片機(jī)最小系統(tǒng)的基本電路,鍵盤選用矩陣鍵盤可滿足要求,通過按鍵輸入不同數(shù)字實現(xiàn)溫度的設(shè)定。   在顯示方面選用常用的1602液晶顯示模塊。通過相應(yīng)的程序,可以實現(xiàn)溫度的實時顯示,電路連接也比較簡單,只需連接數(shù)據(jù)總線,和三根控制線即可實現(xiàn)數(shù)據(jù)控制,實現(xiàn)顯示功能。1602顯示電路5. 繼電器溫控單片機(jī)驅(qū)動繼電器的通斷,從而比較容易的實現(xiàn)對小功率電熱棒的加熱。本系統(tǒng)利用繼電器的吸合與否來實現(xiàn)水溫的自動化控制。本次設(shè)計采用型號為JRC-21F的繼電器。

10、其特點有: (1).超小型,低功耗; (2).觸點型式:1H,1Z(1A.AC); (3).觸點負(fù)載:2A,120VAC; (4).外型尺寸:15.7X10.4X11.4 如圖是驅(qū)動較大功率繼電器的接口,當(dāng)p1.1(連接單片機(jī)的輸出口)輸出低電平時,Q1導(dǎo)通,繼電器吸合;當(dāng)p1.1輸出高電平時,Q1截止,繼電器斷開。由于繼電器吸合時電流比較大,所以在單片機(jī)與繼電器之間增加了光電耦合器件作為隔離電路。R3是光電耦合輸出管的限流電阻,R4是驅(qū)動管Q1基極泄放電阻。整體硬件電路見附錄四、 程序設(shè)計程序結(jié)構(gòu)包括:主程序、傳感器測溫程序、lcd1602顯

11、示程序、鍵盤掃描程序、PID計算程序、PWM波形發(fā)生程序。主程序流程圖如下所示:傳感器測溫程序流程圖:lcd1602顯示程序流程圖:鍵盤掃描程序流程圖:溫度比較與PID計算程序流程圖:PWM波形發(fā)生程序(定時器中斷)流程圖:五、 測試方案1.靜態(tài)測試:室溫狀態(tài)下,分別用溫度計與18B20傳感器檢測水溫,觀察兩者是否有誤差。2.動態(tài)測試:用繼電器控制“熱得快”對1升水加熱,用鍵盤設(shè)定需加熱溫度值,觀察、記錄1602顯示屏上實時水溫值的變化過程和每次改變溫度設(shè)定值后PID調(diào)節(jié)的超調(diào)量。多次調(diào)試并和修改PID參數(shù)來完善該系統(tǒng)。檢驗水溫的穩(wěn)定值是否滿足設(shè)計目標(biāo)的要求。六、 系統(tǒng)調(diào)試1.加熱水量與加熱器

12、的功率確定加熱器水量與功率應(yīng)當(dāng)構(gòu)成匹配,加熱水量過多或功率過小會導(dǎo)致加熱時間過長,而加熱水量過少或功率過大會使超調(diào)增大,不利于控制。我們選擇1L的容器作為測試對象,預(yù)計將20攝氏度的水加熱到100攝氏度需要5分鐘。經(jīng)過計算這樣的加熱器功率至少為1120w,因此選擇1000w的加熱管。滿足1L的容器很多,但是廣口的盆水位較低,不利于加熱管的安放。經(jīng)過努力,找到了合適的容器(實物見附件),恰能使得加熱棒處于最為合適的水位深度。2.上下層溫差的優(yōu)化和電動機(jī)電源的選擇電動機(jī)本不在設(shè)計的范圍里面,但是隨著系統(tǒng)調(diào)試的進(jìn)行,發(fā)現(xiàn)容器中的的水很難實現(xiàn)熱均勻。容器中上下層溫差過大,導(dǎo)致溫度傳感器所測數(shù)據(jù)極不準(zhǔn)確

13、,滯后過大,非常不利于控制。所以又添加一個直流減速電機(jī)帶動槳葉加速冷熱水對流,從而讓容器里面的水受熱均勻,方便測溫模塊對系統(tǒng)水溫的實時監(jiān)測。這一額外的電動機(jī)沒有在事先考慮的器件電氣匹配范圍內(nèi),所以當(dāng)它與加熱模塊一同共用5v的直流電源時,已超出了整流模塊所能提供的最大電流,于是又添加了一個電源給電動機(jī)供電。3. PID程序的修改調(diào)試當(dāng)實際水溫與目標(biāo)值差距過大時,加熱器只需滿功率工作(或完全停止工作)即可滿足要求。此時采用PID控制意義不大,且PID控制范圍很大,參數(shù)很難整定,而微分環(huán)節(jié)也容易受到干擾導(dǎo)致加熱器無法滿功率運行。因此,在滿足控制精度的前提下,可將PID控制的范圍縮小到設(shè)定溫度的

14、77;1之內(nèi)。范圍縮小后,PID參數(shù)容易調(diào)整,控制效果明顯增強(qiáng)。經(jīng)過調(diào)試后PID參數(shù)分別為Proportion = 10,Integral = 8,Derivative =6。4.PWM波周期的調(diào)試PWM波的周期越短,控制的精度越高。但PWM波形的輸出需要單片機(jī)中斷程序進(jìn)行控制,中斷頻率過高會干擾單片機(jī)中主程序的運行。測溫模塊18B50對時間的要求非常嚴(yán)格,因此測溫模塊讀取數(shù)據(jù)期間會與中斷程序沖突。若18B20讀數(shù)期間允許中斷中斷會導(dǎo)致其溫度輸出出現(xiàn)大量錯誤;若不允許中斷會導(dǎo)致PWM波周期頻繁變化。經(jīng)過調(diào)試,將PWM波周期設(shè)為5s。七、 數(shù)據(jù)測試與處理1.靜態(tài)溫度的測試室溫狀態(tài)下,分別用溫度計

15、與18B20傳感器檢測水溫,得到結(jié)果分別為。溫度計顯示17.5,18B20傳感器顯示溫度17.9,在誤差允許的范圍內(nèi),滿足要求。2.動態(tài)溫度的測試:令測溫系統(tǒng)工作,對1.5L凈水加熱,設(shè)定溫度分別為50,60, 80,每10s記錄一次顯示屏幕上的數(shù)據(jù),繪制其溫度變化曲線,并計算溫度控制的超調(diào)量,穩(wěn)態(tài)誤差。溫度數(shù)據(jù)及曲線如下:(1) 目標(biāo)溫度50度:時間(10s)01234567溫度()303030.130.531.13232.733.5時間(10s)89101112151718溫度()34.535.336.137.138.140.642.343.2時間(10s)1920212324252627

16、溫度()44.14545.847.648.449.149.750.8時間(10s)2829303132333435溫度()51.251.651.851.851.851.851.851.7時間(10s)3639404346515457溫度()51.651.351.150.850.650.550.350.1時間(10s)6063646668697072溫度()5049.849.950.150.550.750.750.7時間(10s)7578818487889091溫度()50.550.450.250.149.949.85050時間(10s)92溫度()50超調(diào)量為3.6%(2) 目標(biāo)溫度60度:時

17、間(10s)01234567溫度()5050.551.151.852.653.554.155時間(10s)89101112131415溫度()55.856.657.558.358.959.860.361.2時間(10s)1617181920212427溫度()61.561.661.661.661.561.461.160.8時間(10s)3032333436374041溫度()60.460.260.16059.86060.260.3時間(10s)4245474850525354溫度()60.360.2606059.859.960.160.3時間(10s)5657溫度()60.460.3超調(diào)量為2

18、.5%(3) 目標(biāo)溫度80度:時間(10s)01234567溫度()6060.861.462.162.863.764.565.3時間(10s)89101112131516.5溫度()66.166.867.668.369.170.371.372.4時間(10s)1819212223242526溫度()73.574.375.676.47777.778.478.9時間(10s)2728293031323334溫度()79.580.180.380.580.580.380.280.1時間(10s)35363738.539404142溫度()79.879.679.479.379.379.379.479.4

19、時間(10s)4344454647484950溫度()79.579.679.779.879.9808079.9時間(10s)5152535455565758溫度()79.779.679.679.679.779.779.880時間(10s)5960616263溫度()80.180808080超調(diào)量為0.6%由以上溫度曲線可以看出,水溫能夠保持在設(shè)定溫度上下,控制過程中超調(diào)量<4%,且穩(wěn)態(tài)時的誤差在為±0.3,滿足系統(tǒng)設(shè)計要求。八、 設(shè)計總結(jié)通過本次應(yīng)用系統(tǒng)設(shè)計,在很大程度上提高了我們的獨立思考、分析判斷以及動手實踐能力,也對系統(tǒng)設(shè)計過程以及設(shè)計過程中應(yīng)注意的問題有了初步的認(rèn)識,加

20、深了我們對所學(xué)知識的理解。出于對自身知識及可獲取的學(xué)習(xí)資源的考慮,我組本次電子綜合設(shè)計的選題最終定為水溫自動控制系統(tǒng)的設(shè)計,該題目為往年電設(shè)題目,參考資料較易獲取且基本未超出我們現(xiàn)掌握的知識水平。在參考了書本及網(wǎng)絡(luò)上的設(shè)計思想之后,我們確定了該系統(tǒng)的設(shè)計方案初稿,并討論了設(shè)計方案的可行性。討論確定出實驗所需器材以及組員的分工,由一名組員進(jìn)行程序的編寫,另外兩名組員進(jìn)行硬件電路的焊接及調(diào)試。經(jīng)過幾次檢查、調(diào)試以及修改之后,基本實現(xiàn)了本次設(shè)計的部分預(yù)期目標(biāo):可通過LCD顯示屏顯示溫度目標(biāo)值與實時溫度,可以通過鍵盤調(diào)整目標(biāo)溫度的數(shù)值等功能。在系統(tǒng)調(diào)試過程中,遇到一些問題:1.由于一開始沒有估計好器件

21、占用的空間,所購萬用板太小,無法滿足實驗要求,之后又換用了一個較大的萬用板。在最小系統(tǒng)焊接完成后,由于沒有搞清楚按鍵的內(nèi)部接線,使單片機(jī)一直處于復(fù)位狀態(tài),無法正常工作,后用萬用表排查出該錯誤。2.在加熱控制器件的選擇上花費了較多精力,開始的設(shè)計方案是用光電耦合器配合雙向晶閘管利用PWM波控制加熱功率來實現(xiàn)溫度的穩(wěn)定,但在硬件實驗時發(fā)現(xiàn)控制導(dǎo)通無法實現(xiàn),且電壓、電流余量有限,不能滿足設(shè)計要求。便換用了固態(tài)繼電器配合三極管來實現(xiàn)功率控制。3.在完成基本功能后,發(fā)現(xiàn)由于水溫分布不均勻,溫度傳感器無法及時檢測到水溫變化以改變加熱功率,減小超調(diào)量,又在原系統(tǒng)中增加了電機(jī)攪拌器以使水溫分布均勻。4. 在P

22、ID參數(shù)整定中,發(fā)現(xiàn)初始的PID算法過于簡單,造成被控變量誤差與穩(wěn)定性均較差。普通的位置PID算法很難滿足水溫控制系統(tǒng)的要求。查閱資料后,縮小了PID控制的范圍,在滿足控制精度的前提下,溫控范圍縮小到設(shè)定溫度的±1之內(nèi)。范圍縮小后,PID參數(shù)容易調(diào)整,控制效果明顯增強(qiáng)。這些問題的解決幫助我們?nèi)诤纤鶎W(xué)的知識,極大提高了我們動手能力。通過對本設(shè)計的反思總結(jié),加深了對機(jī)械,單片機(jī),自動控制等多方面知識的理解,也激發(fā)了我們對電子設(shè)計的極大興趣,這對我們以后的學(xué)習(xí)生活有著十分重要的作用。 九、 參考文獻(xiàn)1.劉海成.AVR單片機(jī)原理及測控工程應(yīng)用 .北京航空航天大學(xué)出版社2.周潤景 劉曉霞.單片

23、機(jī)實用系統(tǒng)設(shè)計與仿真經(jīng)典實例.電子工業(yè)出版社3.謝維成 楊加國.單片機(jī)原理與應(yīng)用及C51程序設(shè)計.清華大學(xué)出版社4.大學(xué)生電子設(shè)計競賽組委會.第五屆全國電子設(shè)計競賽獲獎作品選編.北京理工大學(xué)出版社5.黃志偉 全國大學(xué)生電子設(shè)計競賽系統(tǒng)設(shè)計。北京航空航天出版社6.51黑電子論壇 十、 附錄1. 電路原理圖2.程序#include <REG52.H>#include<intrins.h>#include<math.h>#include<string.h>#define uchar unsigned char#define uint unsigned

24、intsbit DQ =P27; /定義端口sbit RS=P25;sbit RW=P24;sbit EN=P23;sbit output=P20;sbit P0_0=P00;sbit P0_1=P01;sbit P0_2=P02;sbit P0_3=P03;uchar flag;/flag為溫度值的正負(fù)號標(biāo)志單元uchar c2;/18b20的直接輸出量 uint cc,cc2;/變量cc為18b20輸出量的直接計算值,cc2為放大100倍溫度值 float cc1;/cc1為溫度值uchar buff110="Set temp: "/1602屏顯示uchar buff2

25、10="Cur temp: "/1602屏顯示uchar set_c2='5','0'/用于溫度設(shè)置及1602屏顯示uchar buff36="+00.0 "/1602屏顯示uchar temper,set_temper=50;/temper用于PID的測量值(整數(shù)),set_temper用于PID參考值uint s;/PID的測量值(小數(shù))struct PID unsigned int SetPoint; / 設(shè)定目標(biāo) unsigned int Proportion; / 比例常數(shù) unsigned int Integr

26、al; / 積分常數(shù) unsigned int Derivative; / 微分常數(shù) unsigned int LastError; / Error-1unsigned int PrevError; / Error-2unsigned int SumError; / Sums of Errors;struct PID spid; / 創(chuàng)建PID結(jié)構(gòu)uint rout; / PID Outputuint rin; / PID Inputunsigned char high_time,low_time,count=0;/占空比調(diào)節(jié)參數(shù)void delay(uint useconds) /延時程序

27、for(;useconds>0;useconds-);uchar ow_reset(void) /復(fù)位(18B20) uchar presence; DQ = 0; / DQ 低電平 delay(50); / 480ms DQ = 1; / DQ 高電平 delay(3); / 等待 presence = DQ; / presence 信號 delay(25); return(presence); / 0允許, 1禁止 uchar read_byte(void) /從單總線上讀取一個字節(jié)(18B20) uchar i; uchar value = 0; for (i=8;i>0;i

28、-) value>>=1; DQ = 0; DQ = 1; delay(1); if(DQ)value|=0x80; delay(6); return(value);void write_byte(uchar val) /向單總線上寫一個字節(jié)(18B20) uchar i; for (i=8; i>0; i-) / 一次寫一位 DQ = 0; DQ = val&0x01; delay(5); DQ = 1; val=val/2; delay(5);void Read_Temperature(void) /讀取溫度(18B20) ow_reset(); write_by

29、te(0xCC); / 跳過 ROM write_byte(0xBE); / 讀 c1=read_byte();/低字節(jié) c0=read_byte();/高字節(jié) ow_reset(); write_byte(0xCC); write_byte(0x44); / 再次開始 cc=c0*256.0+c1;/ 18b20輸出量的直接計算值 if (c0>0xf8) flag=1;cc=cc+1;else flag=0; cc1=cc*0.0625; /計算出溫度值 cc2=cc1*100;/溫度值放大100倍,放在整型變量中便于取數(shù)字c0=(c0<<4)&0x7f; s=(

30、unsigned int)(c1&0x0f); s=(s*100)/16;/溫度值小數(shù)部分 c1=c1>>4; temper=c0|c1;/溫度值整數(shù)部分delay(1000);/用于PID的測量溫度值 return;void fbusy()/檢查忙函數(shù)(1602)P1 = 0xff;RS = 0;RW = 1;EN = 1;EN = 0;while(P1 & 0x80)EN = 0;EN = 1;void wc51r(uchar j)/寫命令函數(shù)(1602) fbusy();EN = 0;RS = 0;RW = 0;EN = 1;P1 = j;EN = 0;voi

31、d wc51ddr(uchar j)/寫數(shù)據(jù)函數(shù)(1602) fbusy();/讀狀態(tài);EN = 0;RS = 1;RW = 0;EN = 1;P1 = j;EN = 0;void init()/1602初始化wc51r(0x01); /清屏wc51r(0x38); /使用8位數(shù)據(jù),顯示兩行,使用5*7的字型wc51r(0x0c); /顯示器開,光標(biāo)開,字符不閃爍wc51r(0x06); /字符不動,光標(biāo)自動右移一格void display(void) /1602顯示程序1(初始化顯示)uchar k;delay(10); init();wc51r(0x80); /寫入顯示緩沖區(qū)起始地址為第1

32、行第1列for (k=0;k<10;k+)/第一行顯示提示信息"Set temp:" wc51ddr(buff1k);for (k=0;k<2;k+) wc51ddr(set_ck);/顯示設(shè)定的溫度wc51r(0xc0); /寫入顯示緩沖區(qū)起始地址為第2行第1列for (k=0;k<10;k+) /第二行顯示提示信息"Cur temp:" wc51ddr(buff2k); buff31=cc2/1000+0x30; if ( buff31=0x30) buff31=0x20;/取出十位,轉(zhuǎn)換成字符,如果十位是0不顯示。 buff32=

33、cc2/100%10+0x30;/取出個位,轉(zhuǎn)換成字符 buff34=cc2/10%10+0x30;/取出小數(shù)點后一位,轉(zhuǎn)換成字符 if (flag=1) buff30='-'else buff30='+' for (k=0;k<6;k+)/第二行顯示溫度 wc51ddr(buff3k); void display2(void) /1602顯示程序2(循環(huán)顯示)uchar k;delay(10);wc51r(0xca);buff31=cc2/1000+0x30;if ( buff31=0x30) buff31=0x20;/取出十位,轉(zhuǎn)換成字符,如果十位是0

34、不顯示。 buff32=cc2/100%10+0x30;/取出個位,轉(zhuǎn)換成字符 buff34=cc2/10%10+0x30;/取出小數(shù)點后一位,轉(zhuǎn)換成字符 if (flag=1) buff30='-'else buff30='+' for (k=0;k<6;k+)/第二行顯示溫度 wc51ddr(buff3k);uchar scan_key()/鍵盤檢測程序,16個按鍵輸出序號116uchar set_num=0;uchar dushu,dushu1;P0=0xff;P0_0=0;/掃描第一行dushu=P0;dushu=dushu&0xf0;if

35、(dushu!=0xf0)delay(900);dushu=P0;dushu=dushu&0xf0;if(dushu!=0xf0)dushu1=dushu;while(dushu!=0xf0)dushu=P0;dushu=dushu&0xf0;delay(900);dushu=P0;dushu=dushu&0xf0;while(dushu!=0xf0)dushu=P0;dushu=dushu&0xf0;if(dushu1=0xe0)set_num=1;else if(dushu1=0xd0)set_num=2;else if(dushu1=0xb0)set_nu

36、m=3;else if(dushu1=0x70)set_num=4;P0_0=1;delay(900);P0_1=0;/掃描第二行dushu=P0;dushu=dushu&0xf0;if(dushu!=0xf0)delay(900);dushu=P0;dushu=dushu&0xf0;if(dushu!=0xf0)dushu1=dushu;while(dushu!=0xf0)dushu=P0;dushu=dushu&0xf0;delay(900);dushu=P0;dushu=dushu&0xf0;while(dushu!=0xf0)dushu=P0;dushu

37、=dushu&0xf0;if(dushu1=0xe0)set_num=5;else if(dushu1=0xd0)set_num=6;else if(dushu1=0xb0)set_num=7;else if(dushu1=0x70)set_num=8;P0_1=1;P0_2=0;/掃描第三行dushu=P0;dushu=dushu&0xf0;if(dushu!=0xf0)delay(900);dushu=P0;dushu=dushu&0xf0;if(dushu!=0xf0)dushu1=dushu;while(dushu!=0xf0)dushu=P0;dushu=du

38、shu&0xf0;delay(900);dushu=P0;dushu=dushu&0xf0;while(dushu!=0xf0)dushu=P0;dushu=dushu&0xf0;if(dushu1=0xe0)set_num=9;else if(dushu1=0xd0)set_num=10;else if(dushu1=0xb0)set_num=11;else if(dushu1=0x70)set_num=12;P0_2=1;delay(900);P0_3=0;/掃描第四行dushu=P0;dushu=dushu&0xf0;if(dushu!=0xf0)dela

39、y(900);dushu=P0;dushu=dushu&0xf0;if(dushu!=0xf0)dushu1=dushu;while(dushu!=0xf0)dushu=P0;dushu=dushu&0xf0;delay(900);dushu=P0;dushu=dushu&0xf0;while(dushu!=0xf0)dushu=P0;dushu=dushu&0xf0;if(dushu1=0xe0)set_num=13;else if(dushu1=0xd0)set_num=14;else if(dushu1=0xb0)set_num=15;else if(du

40、shu1=0x70)set_num=16;P0_3=1;delay(900);return set_num;void PIDInit (struct PID *pp)/PID結(jié)構(gòu)體空間分配 memset ( pp,0,sizeof(struct PID);unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )/PID計算部分unsigned int dError,Error;Error = pp->SetPoint - NextPoint; / 偏差pp->SumError += Error; / 積分dErro

41、r = pp->LastError - pp->PrevError; / 當(dāng)前微分pp->PrevError = pp->LastError;pp->LastError = Error;return (pp->Proportion * Error / 比例項+ pp->Integral * pp->SumError / 積分項+ pp->Derivative * dError); / 微分項compare_temper()/溫度比較處理程序 unsigned char i; if(set_temper>temper) if(set_t

42、emper-temper>1) high_time=100; low_time=0; else for(i=0;i<10;i+) Read_Temperature(); rin = s; / Read Input rout = PIDCalc ( &spid,rin ); / Perform PID Interation if (high_time<=100) high_time=(unsigned char)(rout/800); else high_time=100; low_time= (100-high_time); else if(set_temper<

溫馨提示

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

評論

0/150

提交評論