找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 81870|回復(fù): 44
打印 上一主題 下一主題
收起左側(cè)

基于PID的單片機溫度控制系統(tǒng)設(shè)計論文

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:341661 發(fā)表于 2018-5-30 21:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

畢業(yè)設(shè)計

題  目:   基于PID的溫度控制系統(tǒng)設(shè)計   

學(xué)  院:         ********      

專  業(yè):     電氣工程及其自動化    

班  級:          電氣***       

學(xué)  號:       **********      

姓  名:         某某某      

指導(dǎo)教師:           某某某       

教 務(wù) 處 制

                      年 月 日

1

基于PID的溫度控制系統(tǒng)設(shè)計

摘要

溫度是工業(yè)上最基本的參數(shù),與人們的生活緊密相關(guān),實時測量溫度在工業(yè)生產(chǎn)中越來越受到重視,離不開溫度測量所帶來的好處,因此研究控制和測量溫度具有及其重要的意義。

本設(shè)計介紹了以AT89C52單片機為主控器件,基于PID的溫度控制系統(tǒng)的設(shè)計方案和設(shè)計的基本原理。由DS18B20收集溫度信號,并以數(shù)字信號的方式送給單片機進行處理,從而達到溫度控制的目標。主要包括硬件電路的設(shè)計和系統(tǒng)程序的設(shè)計。硬件電路由主控器件、溫測電路、溫控電路和顯示電路等組成。軟件設(shè)計部分包括:顯示電路、溫度信號處理,超溫警報、繼電器控制、按鍵處理等程序。


目錄

摘  要

Abstract

1緒論

1.1課題的來源

1.2課題的意義

1.3課題研究的主要內(nèi)容

2硬件設(shè)計

2.1單片機控制模塊的設(shè)計

2.1.1 AT89C52單片機簡介

2.1.2 單片機的引腳功能

2.1.3 單片機控制模塊的電路設(shè)計

2.1.4 電源設(shè)計

2.2溫度采集模塊的設(shè)計

2.2.1 DS18B20芯片的簡介

2.2.2 DS18B20的內(nèi)部結(jié)構(gòu)

2.2.3 DS18B20的供電方式

2.2.4 DS18B20的引腳功能

2.3溫度控制模塊的設(shè)計

2.4按鍵及顯示模塊的設(shè)計

2.4.1 LCD1602的參數(shù)和引腳功能

2.4.2 LCD1602的特點

2.4.3 按鍵電路的設(shè)計

2.5報警模塊的設(shè)計

3軟件設(shè)計

3.1主程序的設(shè)計

3.2DS18B20讀溫度程序的設(shè)計

3.3鍵盤掃描程序的設(shè)計

3.4報警處理程序的設(shè)計

3.5PID控制算法

4系統(tǒng)仿真

參考文獻

致謝

附錄

1



基于PID的溫度控制系統(tǒng)設(shè)計

1緒論1.1課題的來源
在食品加工、化工、冶煉等工業(yè)控制和生產(chǎn)中,在工業(yè)生產(chǎn)和日常生活中經(jīng)常要用到溫度檢測和控制。以及各種各樣的加熱爐、熱處理器等,都對溫度有著嚴格的要求。傳統(tǒng)的測溫元件有熱電偶和熱電阻。而熱電偶和熱電阻測出的通常是電壓,再轉(zhuǎn)換成相應(yīng)的溫度值,在硬件方面是個難點,而且從設(shè)計和調(diào)試的角度來講都是很復(fù)雜的,以及高昂的制作成本。但采用DS18B20作為溫測元件,然后用單片機對溫度進行控制,可以大幅度提高溫度控制的技術(shù)指標,而且還具有控制方便、簡單、靈活等特點。單片機已經(jīng)滲透到我們生活的各領(lǐng)域,儀表儀器、家用電器、航空航天、計算機通訊網(wǎng)絡(luò)和數(shù)據(jù)的傳輸,包括工業(yè)自動化的實時控制和數(shù)據(jù)處理等,這些都離不開單片機。用單片機可構(gòu)成豐富多樣的數(shù)據(jù)采集系統(tǒng)和控制系統(tǒng)。像工廠流水線智能化的管理、電梯智能化的控制、多種報警系統(tǒng),都可以與計算機聯(lián)網(wǎng)構(gòu)成二級控制系統(tǒng)等。
1.2課題的意義
溫度傳感器是測量溫度的關(guān)鍵,現(xiàn)在溫度傳感器正由模擬式向數(shù)字式、集成化向智能化、網(wǎng)絡(luò)化的方向發(fā)展。在測量溫度的電路中,使用熱敏電阻之類的器件利用其感溫效應(yīng),將隨被測溫度變化的電壓或電流采集過來,先進行A/D轉(zhuǎn)換,然后用單片機進行數(shù)據(jù)的處理,再在顯示電路上,將被測溫度顯示出來。這種設(shè)計需要用到A/D轉(zhuǎn)換電路,因此電路的設(shè)計比較復(fù)雜。
繼而想到可以采用智能溫度傳感器來設(shè)計數(shù)字溫度計。本數(shù)字溫度計的設(shè)計采用美國半導(dǎo)體公司DALLAS推出的一種改進型智能溫度傳感器DS18B20作為檢測元件,其溫度值可以直接被讀出來,通過單片機AT89C52的讀寫和顯示,然后用LCD1602來進行顯示。它的測溫范圍為-55℃~+125℃,最大分辨率可達0.0625℃。而且采用3線制與單片機相連,減少了外部的硬件電路,具有低成本和易使用的特點。
1.3課題研究的主要內(nèi)容
1、總體設(shè)計的內(nèi)容
總體設(shè)計的主要內(nèi)容有:利用單片機作為系統(tǒng)的主控制器,利用DS18B20作為溫度傳感器,將信號送入單片機進行處理,經(jīng)過PID算法后,單片機的輸出用來控制加熱棒的輸出功率,從而實現(xiàn)對溫度的控制。
2、總體設(shè)計的基本要求
總體布置的基本要求主要有:
(1)溫度控制系統(tǒng)的總體設(shè)計和思路;
(2)各部分原理說明;
(3)溫度控制系統(tǒng)硬件設(shè)計,有理論依據(jù),有分析計算過程,主要元件有原理和說明,所有元件必須要有型號和參數(shù);
(4)溫度控制系統(tǒng)軟件設(shè)計,可以使用匯編語言或C語言編程。主要軟件必須能在設(shè)計好的硬件電路上正確運行。

2硬件設(shè)計
硬件設(shè)計方框圖如圖2-1所示,它主要由五個模塊組成:
  • 單片機控制模塊;
  • 溫度采集模塊;
  • 溫度控制模塊;
  • 按鍵及顯示模塊;
  • 報警模塊。

圖2-1 硬件設(shè)計方框圖

2.1單片機控制模塊的設(shè)計
方案一:
采用8031芯片,其內(nèi)部沒有程序存儲器,需要進行外部擴展,這給電路增加了復(fù)雜度。
方案二:
采用2051芯片,其內(nèi)部有2KB單元的程序存儲器,不需外部擴展程序存儲器。但由于系統(tǒng)用到較多的I/O口,因此此芯片資源不夠用。
方案三:
采用AT89C52單片機,其內(nèi)部有4KB單元的程序存儲器,不需外部擴展程序存儲器,而且它的I/O口也足夠本次設(shè)計的要求。
方案評價:
比較這三種方案,綜合考慮單片機的各部分資源,本次設(shè)計選用方案三。
2.1.1 AT89C52單片機簡介
AT89C52是ATMEL公司生產(chǎn)的51系列單片機。片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度,兼容51指令系統(tǒng),F(xiàn)lash存儲單元和8位中央處理器置于片內(nèi),AT89C52單片機功能強大,在許多復(fù)雜的應(yīng)用場合都可以用到。
單片機是微型機的一個分支,單片機的最大特點就是在超大規(guī)模的集成電路芯片上集成了定時器、存儲器、CPU、和多種輸入/輸出接口電路。由于單片機的這種結(jié)構(gòu),相應(yīng)的它具有很多的特點。
它的特點包括:
  • 可靠性高;
  • 抗干擾能力強;
  • 控制能力強;
  • 性價比高;
  • 低電壓;
  • 能擴展了多種串行口。
2.1.2 單片機的引腳功能
AT89C52單片機的引腳圖如圖2-2所示。

圖2-2 AT89C52引腳圖

  • 電源引腳VCCVSS
VCC(40引腳):電源端,+5V。
VSS(20引腳):接地端。
  • 外接晶體引腳XTAL 2XTAL 1
XTAL 2(18引腳):接微調(diào)電容和外部晶體的端口。作為振蕩電路的輸出端。
XTAL 1(19引腳):接微調(diào)電容和外部晶體的端口。作為振蕩電路的輸入端。
  • 控制信號引腳RSTALE、PSEN、EA
RST(9引腳):復(fù)位信號輸入端,高電平有效。完成復(fù)位操作,輸入端必須為兩機器周期(即為24個時鐘振蕩周期)的高電平。
ALE/PROG(30引腳):地址鎖存允許信號端。當單片機上電正常工作后,ALE引腳不斷向外輸出正脈沖信號,此頻率為振蕩器平率的1/6。輸出信號作為鎖存低8位地址的控制信號。如果想確認單片機芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出。若有脈沖信號輸出,則單片機基本上是好的。
PSEN(29引腳):程序存儲允許輸出信號端。
EA(31引腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。
  • 輸入/輸出端口P0、P1、P2P3
P0端口(P0.0~P0.7,39~32引腳)
P1端口(P1.0~P1.7)
P2端口(P2.0~P2.7)
P3端口(P3.0~P3.7)
P3端口還用于一些復(fù)用功能,如表2-1所示。

表2-1 P3各口線與第2功能表

口線

替代的第2功能

P3.0

RXD(串行口輸入)

P3.1

TXD(串行口輸出)

P3.2

INT0(外部中斷0輸入)

P3.3

INT1(外部中斷1輸入)

P3.4

T0(定時器0的外部輸入)

P3.5

T1(定時器1的外部輸入)

P3.6

WR(片外數(shù)據(jù)存儲器“寫選通控制”輸出)

P3.7

RD(片外數(shù)據(jù)存儲器“讀選通控制”輸出)



2.1.3 單片機控制模塊的電路設(shè)計
單片機的最小系統(tǒng)如圖2-3所示,由單片機芯片、電源、時鐘振蕩電路與復(fù)位電路組成。
時鐘振蕩電路的設(shè)計:
單片機XIAL1和XIAL2分別接30pF的電容,中間再并個12MHz的晶振,形成單片機的晶振電路。電容器C1和C2可穩(wěn)定頻率并對振蕩頻率有微調(diào)作用。
復(fù)位電路的設(shè)計:
復(fù)位操作有按鍵手動復(fù)位和上電自動復(fù)位兩種。本設(shè)計采用的是上電自動復(fù)位:RST引腳是復(fù)位信號的輸入端。復(fù)位信號是高電平有效,其有效時間應(yīng)持續(xù)24個振蕩周期(即二個機器周期)以上。電容端瞬間通電,電容C通過電阻R充電,RST端為正脈沖,用以復(fù)位。只要電源VCC的上升時間不超過1ms,就可以實現(xiàn)自動上電復(fù)位,即接通電源就完成了系統(tǒng)的復(fù)位初始化。關(guān)于參數(shù)的選定,在振蕩穩(wěn)定后應(yīng)保證復(fù)位高電平持續(xù)時間(即正脈沖寬度)大于2個機器周期。當采用的晶體頻率為6MHz時,可取C=22μF,R=1kΩ;當采用的晶體頻率為12MHz時,可取C=10μF,R=8.2kΩ。

圖2-3 單片機的最小系統(tǒng)圖

2.1.4 電源設(shè)計
220V交流電轉(zhuǎn)5V直流電的電源設(shè)計如圖2-4所示是由3個部分組成:變壓器、橋式整流電路和三端穩(wěn)壓器。

圖2-4 5V直流電電源設(shè)計圖

  • 變壓器:將220V交流電變成9V左右,由此可知變壓器變比為220/9=25/1;
  • 橋式整流電路:經(jīng)過濾波整流后,電壓有效值增大為10V。如圖2-5所示為橋式整流電路電壓波形圖;
  • 三端穩(wěn)壓器:一般用于直流電路的保護電路,起到降壓、穩(wěn)壓的作用。

圖2-5 橋式整流電路電壓波形圖

2.2溫度采集模塊的設(shè)計
方案一:
傳統(tǒng)的測溫元件有熱電偶和熱電阻。一般來說熱電偶和熱電阻測出的電壓,再轉(zhuǎn)換成相應(yīng)的溫度,要比較多外部硬件的支持,其缺點有:硬件電路較復(fù)雜;軟件調(diào)試較復(fù)雜;制作成本較高。
方案二:
結(jié)合單片機電路的設(shè)計,決定使用溫度傳感器DS18B20,它是最新推出的一種智能型溫度傳感器,它的優(yōu)點是可以直接讀出被測的溫度。主要是對溫度信號進行采集和轉(zhuǎn)換工作,電路由DS18B20溫度傳感器和單片機部分組成。溫度傳感器DS18B20把收集到的溫度送到單片機的P2.6口,單片機接受溫度,然后存儲下來。因為電路部分只用到了溫度傳感器和單片機,所以硬件方面比較簡單。
方案評價:
方案一這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。但方案二電路比較簡單,軟件設(shè)計容易實現(xiàn),故實際設(shè)計中擬采用方案二。
2.2.1 DS18B20芯片的簡介
DS18B20是美國著名半導(dǎo)體公司推出的一種可以直接讀出被測溫度值的溫度傳感器,而且采用寄生供電方式與單片機相連,具有成本低和易使用的特點。輸出信號為數(shù)字信號,方便單片機控制和處理,很多外圍電路因此可以減掉。且該芯片的線形較好,物理、化學(xué)性也相對穩(wěn)定,在工業(yè)生產(chǎn)中可以用來做測量溫度的元件。由于AT89C52能夠帶多個DSB1820,因此容易實現(xiàn)多點測量的目的。輕松的構(gòu)建傳感器網(wǎng)絡(luò),并且單片機可以同時進行數(shù)碼顯示與鍵盤控制,也可以通過RS232串口與上位機進行數(shù)據(jù)通訊,達到全方位立體監(jiān)控的效果。
采用溫度芯片DS18B20測量溫度,可以更方便的實現(xiàn)多點測溫,也體現(xiàn)了數(shù)據(jù)數(shù)字化的好處,便于測溫數(shù)據(jù)集成顯示,也方便了后期對數(shù)據(jù)的處理及其記錄。
2.2.2 DS18B20的內(nèi)部結(jié)構(gòu)
DS18B20芯片的內(nèi)部結(jié)構(gòu)如圖2-6所示。
DS18B20主要包括上下限觸發(fā)器、儲存器與控制邏輯、CRC發(fā)生器電源、溫度傳感器、64位ROM單線借口暫存器。

圖2-6 DS18B20芯片的內(nèi)部結(jié)構(gòu)圖

DS18B20溫度數(shù)字對應(yīng)關(guān)系表如表2-2所示。

表2-2 DS18B20溫度數(shù)字對應(yīng)關(guān)系表

溫度/℃
二進制表示
十六進制表示
+125
0000 0111 1101 0000
07D0H
+85
0000 0101 0101 0000
0550H
+25.0625
0000 0001 1001 0000
0191H
+10.125
0000 0000 1010 0001
00A2H
+0.5
0000 0000 0000 0010
0008H
0
0000 0000 0000 1000
0000H
-0.5
1111 1111 1111 0000
FFF8H


DS18B20溫度值格式表如表2-3所示。

表2-3 DS18B20溫度值格式表

高字節(jié)

15

14

13

12

11

10

9

8

S

S

S

S

S

2 6

2 5

2 4

1/0

1/0

1/0

1/0

1/0

64

32

16

低字節(jié)

7

6

5

4

3

2

1

0

2 3

2 2

2 1

2 0

2_1

2_2

2_3

2_4

8

4

2

1

0.5

0.25

0.125

0.0625



DS18B20的工作過程:
  • 發(fā)復(fù)位DS18B20的負脈沖;
  • DS18B20的回應(yīng)脈沖;
  • 發(fā)ROM命令33H;
  • 發(fā)儲存和控制命令。
DS18B20儲存控制命令共有6種,如表2-4所示。

表2-4 DS18B20 存儲器控制指令

指令

約定代碼

復(fù)制

48H

讀數(shù)據(jù)

BEH

讀電源供電方式

B4H

溫度轉(zhuǎn)換

44H

讀EERAM

B8H

寫數(shù)據(jù)

4EH


主機操作ROM的命令有5種,如表2-5所示。

表2-5 DS18B20的ROM指令

指令

約定代碼

讀ROM

33H

匹配ROM

55H

跳過ROM

CCH

搜索ROM

0F0H

報警搜索

ECH


DS18B20的執(zhí)行序列:
  • 初始化;
  • 執(zhí)行ROM命令,用于定位;
  • 執(zhí)行DS18B20的儲存控制命令,用于轉(zhuǎn)換和讀數(shù)據(jù);
  • DS18B20I/O信號有回應(yīng)脈沖、復(fù)位脈沖、寫0,讀0,寫1,讀1等幾種。
2.2.3 DS18B20的供電方式
在硬件上,DS18B20與單片機的連接有兩種方法,一種是用寄生電源供電,此時,VCC、GND接地,I/O接單片機I/O;另外一種是VCC接外部電源,GND接地,I/O與單片機的I/O線相連。無論是內(nèi)部寄生電源還是外部供電,I/O口線要接5kΩ左右的上拉電阻。如圖2-7所示,本設(shè)計采用的是外部電源供電的方式,且選用的上拉電阻為4.7kΩ。

圖2-7 DS18B20外部電源供電方式圖

2.2.4 DS18B20的引腳功能
引腳功能說明:
  • GND為地;
  • I/O是數(shù)據(jù)輸入/輸出腳(單線接口,可作寄生供電);
  • UDD為外接供電電源輸入端(在寄生電源接線方式時接地)。
DS28B20的引腳如圖2-8所示。

圖2-8 DS18B20引腳圖

DS18B20的特點說明:
  • 采用單總線技術(shù),與單片機通信只需要一根I/O線,在一根線上可以掛接多個DS18B20。
  • 每只DS18B20具有一個獨有的,不可修改的64位序列號,根據(jù)序列號訪問相應(yīng)的器件。
  • 低壓供電,電源范圍從3.05.5V,可以本地供電,也可以直接從數(shù)據(jù)線竊取電源(寄生電源方式)。
  • 測溫范圍為-55℃~+125,在-10℃~+85范圍內(nèi)誤差為±0.5
  • 可編輯數(shù)據(jù)為912位,轉(zhuǎn)換12位溫度時間為750ms(最大)。
  • 用戶可自設(shè)定報警上下限溫度。
  • 報警搜索命令可識別和尋址超過程序限定溫度(溫度報警條件)的器件。
  • DS18B20的分辨率由用戶通過EEPROM設(shè)置為912位。
  • DS18B20可將檢測到溫度值直接轉(zhuǎn)化為數(shù)字量,并通過串行通信的方式與主控制器進行數(shù)據(jù)通信。
  • 負電壓特性,電源極性接反時,溫度計不會因為發(fā)熱而燒毀,只是不能正常工作。
2.3溫度控制模塊的設(shè)計
方案一:
繼電器由于是機械動作,響應(yīng)速度慢,不能滿足本設(shè)計的需要。而用可控硅可以在電路中能夠?qū)崿F(xiàn)以小電流控制大電流、交流電的無觸點控制的目的,而且它的壽命長、可靠性高、動作快。
方案二:
利用單片機控制雙向可控硅的導(dǎo)通角。在不同時刻利用單片機給雙向可控硅的控制端發(fā)出觸發(fā)信號,使其導(dǎo)通或關(guān)斷,實現(xiàn)負載電壓有效值的不同,以達到調(diào)壓控制的目的。具體如下:
(1)由硬件完成過零觸發(fā)環(huán)節(jié),即在工頻電壓下,每10ms進行一次過零觸發(fā)信號,由此信號來達到與單片機的同步。
(2)過零檢測信號接至單片機輸入口,由單片機對此口進行循環(huán)檢測,然后進行延時觸發(fā)。
通過單片機控制雙向可控硅的導(dǎo)通,從而可以控制加熱絲的加熱功率。雙向可控硅接通,則加熱絲加熱;雙向可控硅斷開,則加熱絲停止加熱。
方案評價:
綜合考慮,選擇方案二。
由于是弱電控制強電,因而弱電很容易被強電干擾,影響系統(tǒng)的實時性和效率。因此必須需要有抗干擾的措施,將強電與弱電隔離。光耦合器切斷了各部件之間的聯(lián)系,對強電和弱電實施隔離,有效地抑制了干擾信號對電路的干擾。光耦合器很容易得到觸發(fā)脈沖,且有可靠、體積小的特點。所以可以用帶過零檢測的光電隔離器MOC3061來驅(qū)動雙向可控硅并隔離控制回路和主回路。
MOC3061參數(shù):
輸出端的額定電壓是400V。
最大重復(fù)浪涌電流為1.2A。
最大電壓上升率dv/dt為1000v/us。
輸入輸出隔離電壓為7500V。
輸入控制電流為15mA。
MOC3061引腳排列及內(nèi)部電路圖如圖2-9所示。
圖2-9 MOC3061引腳排列及內(nèi)部電路圖
當單片機的輸出口發(fā)出高電平,經(jīng)過三極管放大后驅(qū)動光耦合器的放光二極管,MOC3061的輸入端導(dǎo)通,輸入電流約為15mA。當MOC306的輸出端6腳和4腳尖電壓稍稍過零時,光耦內(nèi)部雙向可控硅即可導(dǎo)通,它可以給外部晶閘管一個觸發(fā)信號,并使其導(dǎo)通;當單片機輸出口發(fā)出低電平,MOC3061截止,雙向可控硅處于截止狀態(tài)。
MOC3061的優(yōu)點:
(1)控制簡單。
(2)MOC3061由于采用了過零觸發(fā)電路大大簡化了雙向可控硅的觸發(fā)電路。
(3)MOC3061與雙向可控硅實際組成了一個固態(tài)繼電器,實現(xiàn)了無觸電控制。
(4)輸出通道實現(xiàn)了光電隔離,防止了射電干擾。
(5)單片機輸出口直接控制雙向可控硅,省去了的D/A轉(zhuǎn)換電路,簡化了接口電路。
雙向可控硅介紹:
雙向可控硅具有雙向?qū)üδ埽诮涣麟姷恼摪胫芏伎梢詫?dǎo)通。
雙向可控硅的通斷情況由柵極決定,當柵極無信號時MT1和MT2成高阻態(tài),管截止;當在MT1與MT2之間加一個閾值電壓時,就可以利用控制極柵極電壓來使可控硅導(dǎo)通。但需要注意的是,當雙向可控硅接感性負載時,電流和電壓之間有一定的相位差。在電流為零時,反向電壓可能不為零,且超過轉(zhuǎn)換電壓,使管子反向?qū)ǎ室茏幽艹惺苓@種反向電壓,并在回路中加入RC網(wǎng)絡(luò)加以吸收。
雙向可控硅的觸發(fā)方式:
控制雙向可控硅從高阻態(tài)轉(zhuǎn)換到導(dǎo)通區(qū)可以用不同的方式實現(xiàn),相應(yīng)的分為四種方式。
MT1相對于MT2為正,控制脈沖電壓Ug相對于MT1為正。
MT1相對于MT2為負,控制脈沖電壓Ug相對于MT1為負。
MT1相對于MT2為正,控制脈沖電壓Ug相對于MT1為負。
MT1相對于MT2為負,控制脈沖電壓Ug相對于MT1為正。
雙向可控硅的控制極在觸發(fā)后便失去了作用。雙向可控硅長期維持低阻態(tài),直到低于維持電流I H,然后在轉(zhuǎn)換到高阻態(tài)。在控制交流電壓時,每次電源電壓過零雙向可控硅都會自動截止,所以雙向可控硅每半個周期都需要重新觸發(fā)。
如圖2-10所示為溫度控制模塊原理圖。
圖2-10 溫度控制模塊原理圖
2.4按鍵及顯示模塊的設(shè)計
方案一:
八段數(shù)碼管顯示,數(shù)碼管是由八個發(fā)光管組成一個八字形,這些段分別由a,b,c,d,e,f,g,dp來表示。
方案二:
LCD1602液晶顯示器顯示。
方案評價:
本設(shè)計采用LCD1602液晶顯示器顯示,因為它有功耗較低、顯示質(zhì)量較高、重量輕、體積小的特點。
LCD1602的電路圖如圖2-11所示。

圖2-11 LCD1602電路圖

2.4.1 LCD1602的參數(shù)和引腳功能
LCD1602的參數(shù):
字符尺寸:2.95×4.35(W×H)mm。
顯示總?cè)萘浚?6×2個字符。
最佳工作電壓:5.0V。
芯片工作電壓區(qū)間:4.5V—5.5V。
工作電流:2.0mA(5.0V)。
LCD1602的引腳功能如表2-6所示。

表2-6 LCD1602引腳功能表

編號

符號

引腳說明

編號

符號

引腳說明

1

VSS

電源地

9

D2

數(shù)據(jù)

2

VDD

電源正極

10

D3

數(shù)據(jù)

3

VL

顯示偏壓

11

D4

數(shù)據(jù)

4

RS

數(shù)據(jù)/命令選擇

12

D5

數(shù)據(jù)

5

R/W

讀/寫選擇

13

D6

數(shù)據(jù)

6

E

使能信號

14

D7

數(shù)據(jù)

7

D0

數(shù)據(jù)

15

BLA

正極背光源

8

D1

數(shù)據(jù)

16

BLK

負極背光源


2.4.2 LCD1602的特點
在單片機系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個特點。
(1)功耗較低
LCD1602的功耗主要在驅(qū)動IC和內(nèi)部的電極上,因此功耗較低。
(2)顯示質(zhì)量較高
LCD1602顯示器在收到信號后,不需要不斷刷新新的亮點,它的顯示器上的每一個點可以一直保持同樣的亮度和色彩,發(fā)光持續(xù)穩(wěn)定。因此,顯示器不會閃爍,且質(zhì)量較高。
(3)重量輕、體積小
因為控制原理不同,LCD1602顯示器通過電極來控制液晶分子狀態(tài)來達到控制的目的,相較于其他的顯示器來說,同等面積的顯示器,LCD1602要輕許多。
(4)數(shù)字式接口
液晶顯示器都是數(shù)字式的,和單片機系統(tǒng)的接口更加簡單可靠,操作更加方便。
2.4.3 按鍵電路的設(shè)計
方案一:
獨立連接式。獨立式按鍵是指各按鍵相互獨立地接通一條輸入數(shù)據(jù)線。
方案二:
行列式(矩陣式)為了減少鍵盤與單片機借口時所占用I/O線的數(shù)目,在鍵數(shù)較多時,通常都將鍵盤排列成行列矩陣形式。判斷鍵盤中哪一個鍵被按下是通過將行線逐行置低電平后,檢查列輸入狀態(tài)實現(xiàn)的。
方案評價:
對比兩種方案可知,方案一雖然也能很好的實現(xiàn)電路的要求,但考慮到電路設(shè)計的成本和電路整體的性能,我們采用方案一。
如圖2-12所示為獨立式按鍵電路圖。

圖2-12 獨立式按鍵電路圖

獨立式按鍵是指各按鍵相互獨立地接通一條輸入數(shù)據(jù)線。
本設(shè)計采用2個獨立式按鍵分別連接單片機I/O來實現(xiàn)按鍵的功能。從而解決了單片機I/O口被占用的問題和減少了硬件的復(fù)雜程度,通過軟件來配合2個按鍵實現(xiàn)功能。系統(tǒng)程序中通過掃描P1.2、P1.3這2個端口是否為低電平0來判斷按鍵是否被按下。
2.5報警模塊的設(shè)計
方案一:
使用7406作驅(qū)動的單音頻報警電路。
方案二:
使用三極管作驅(qū)動的單音頻報警電路。
方案評價:
使用方案二。
蜂鳴器電路圖如圖2-13所示。

圖2-13 蜂鳴器電路圖

蜂鳴器以直流電壓作為電源,被廣泛地應(yīng)用于電話機、電子玩具、報警器、定時器等電子產(chǎn)品中,被用來當作電子發(fā)聲器。蜂鳴器主要有壓電式和電磁式兩種。本設(shè)計的報警模塊主要采用蜂鳴器及發(fā)光二級管的蜂鳴和發(fā)光來實現(xiàn)超出溫度上限時的報警。
壓電式蜂鳴器約需10mA的驅(qū)動電流。單片機的P2.5接晶體管基極輸入端。當P2.5輸出高電平1時,三極管導(dǎo)通,壓電蜂鳴器兩端獲得約+5V電壓而鳴叫;當P2.5口輸出低電平0時,三極管截止,蜂鳴器停止發(fā)聲。
要使三極管有放大作用,必須保證發(fā)射結(jié)正偏、集電極反偏。
電流放大系數(shù):β=IC/IB。
9013三極管介紹:
9013 結(jié)構(gòu):NPN。
集電極-發(fā)射極電壓:25V。
集電極-基電壓:45V。
射極-基極電壓:5V。
集電極電流:0.5A。
耗散功率:0.625W。
結(jié)溫:150℃。
特征頻率最�。�150MHz。
放大倍數(shù):91。

3軟件設(shè)計
按照系統(tǒng)設(shè)計功能的要求,來確定本系統(tǒng)程序包括DS18B20讀溫度程序、LCD1602的顯示程序、鍵盤掃描程序、報警處理程序以及繼電器加熱程序。
3.1主程序的設(shè)計
如圖3-1所示為主程序流程圖。

圖3-1 主程序流程圖

3.2DS18B20讀溫度程序的設(shè)計
(1)DS18B20讀時序:
  • 讀時序包括讀0和讀1的時序。
  • 讀時序是在拉低單總線之后,在15us之內(nèi)釋放單總線,讓DS18B20把數(shù)據(jù)傳送到單總線上。讀時序的過程至少需要60us。
(2)DS18B20寫時序:
  • 寫時序包括寫0和寫1的時序。
  • 0和寫1時序略有不同。當寫0時序時,單總線至少要被拉低60us。保證DS18B20能夠采到數(shù)據(jù)線上的“0”電平,在15us45us之間;當寫1時序時,拉低單總線,并在15us之內(nèi)釋放單總線。
如圖3-2所示為DS18B20讀溫度程序流程圖。

圖3-2 DS18B20讀溫度程序流程圖

3.3鍵盤掃描程序的設(shè)計
該電路為查詢方式電路,當任何一個鍵按下時,與之相連的輸入數(shù)據(jù)線即被清0,而平時該線為1。因此可以通過檢測各數(shù)據(jù)線的狀態(tài)(0或1)來判斷按鍵是否閉合,以及哪個按鍵已閉合。
如圖3-3所示為鍵盤掃描程序流程圖。

圖3-3 鍵盤掃描程序流程圖

3.4報警處理程序的設(shè)計
設(shè)定目標溫度上限,當實際溫度大于目標溫度上限的時候,執(zhí)行聲光報警程序。
如圖3-4所示為聲光報警程序流程圖。

圖3-4 聲光報警程序流程圖

3.5PID控制算法
    本設(shè)計采用了PID控制技術(shù)。在工程實際運用中,PID控制器以其穩(wěn)定性好、工作可靠、調(diào)整方便、結(jié)構(gòu)簡單而成為主要的工業(yè)控制技術(shù)之一。當被控對象的參數(shù)和結(jié)構(gòu)不能被很好的掌握,或得不到精確的數(shù)學(xué)模型時,控制理論的技術(shù)很難被采用,所以當系統(tǒng)控制器的結(jié)構(gòu)和參數(shù)必須依靠經(jīng)驗來確定時,PID控制技術(shù)最為實用和方便。

PID調(diào)節(jié)器是一種線性調(diào)節(jié)器,它將給定值r(t)與實際輸出值c(t)的偏差的比例(P)、積分(I)、微分(D)的組合組成控制量,從而達到對控制對象的控制目的�?刂破�

                                 (3-1)
(1)連續(xù)控制系統(tǒng)PID調(diào)節(jié)器的微分方程為:
                              (3-2)
式中
Kp——比例常數(shù);
Ti——積分時間常數(shù);
Td——微分時間常數(shù);
e(t)——系統(tǒng)偏差信號;
u(t)——控制器的輸出信號。
(2)PID調(diào)節(jié)器的函數(shù)形式方程為:
                                    (3-3)
(3)數(shù)字PID控制器
如表3-1所示為模擬PID控制規(guī)律的離散化表。

表3-1 模擬PID控制規(guī)律的離散化

模擬形式

離散化形式


數(shù)字PID控制器的差分方程:

                            (3-4)

為積分系數(shù)。

為微分系數(shù)。

式中                稱為比例項。

               稱為積分項。

        稱為微分項。

常用的控制方式:

   1、P控制         

2、PI控制         

3、PD控制         

4、PID控制        


模擬PID控制系統(tǒng)原理如圖3-5所示。

圖3-5 模擬PID控制系統(tǒng)原理框圖

(4)PID調(diào)節(jié)器比例、積分、微分的環(huán)節(jié)
  • 比例環(huán)節(jié):把調(diào)節(jié)器的輸入偏差乘以一個系數(shù),作為調(diào)節(jié)器的輸出,比例環(huán)節(jié)的作用是放大誤差的幅值。當僅有比例控制環(huán)節(jié)時系統(tǒng)輸出存在穩(wěn)態(tài)誤差。
  • 積分環(huán)節(jié):調(diào)節(jié)器加入積分環(huán)節(jié)后達到消除穩(wěn)態(tài)誤差的目的。積分項隨著時間的增加而增大,積分項對穩(wěn)態(tài)誤差的消除取決于時間的積分。PI調(diào)節(jié)器可以使系統(tǒng)在進入穩(wěn)態(tài)后無穩(wěn)態(tài)誤差。
  • 微分環(huán)節(jié):調(diào)節(jié)器的輸入、輸出誤差信號的微分成正比關(guān)系。微分環(huán)節(jié)能反應(yīng)偏差信號的變化趨勢,從而可以實現(xiàn)超前調(diào)節(jié)。 控制器中僅有比例環(huán)節(jié)是不行的,還需要增加微分項,因為它能預(yù)測誤差變化的趨勢。
  • PID控制算法的兩種類型
  • 位置型控制
                            (3-5)
  • 增量型控制
                            (3-6)
PID參數(shù)整定方法:
  • 理論計算法――依賴被控對象準確的數(shù)學(xué)模型。
  • 工程整定法――不依賴被控對象準確的數(shù)學(xué)模型,直接在控制系統(tǒng)中進行現(xiàn)場整定。
    下面對PID運算加以說明:
    所有的數(shù)都變成定點純小數(shù)進行處理。
    算式中的各項有正有負,以最高位作為符號位,最高位為0表示為正數(shù),為1表示負數(shù)。正負數(shù)都是補碼表示,最后的計算以原碼輸出。
節(jié)16位進行計算,最后將運算結(jié)果取成高8位有效值輸出。輸出控制量u(n)的限幅處理。為了便于實現(xiàn)對晶閘管的通斷處理,PID的輸出在0~250之間。大于250或小于0的控制量u(n)都是沒有意義的,因在算法上對u(n)進行限幅,即:

                       =         (3-7)

增量式PID控制算法如圖3-6所示。

圖3-6 增量式PID控制算法程序框圖


4系統(tǒng)仿真
單片機程序編寫可以有多種:匯編語言、C語言等。本設(shè)計采用C語言來編寫。
  • 匯編語言
用匯編語言助記符來表示的程序就是匯編語言。這種語言比機器語言更容易,使用方便,容易記憶。但是由于不同的機器對應(yīng)著不同的匯編語言,這種語言具有一定限制。
  • C語言
  • 對微控制器的指令系統(tǒng)不需要了解,只是有一個初步的了解單片機的存儲結(jié)構(gòu)。
  • 具有規(guī)范的程序,通過不同的函數(shù),是程序變得結(jié)構(gòu)化。
  • 寄存器分配,不同的內(nèi)存地址和數(shù)據(jù)類型和其他細節(jié)可以由編譯器管理。
  • 大大縮短了編程和調(diào)試的時間,提高了編程的效率。
對于AT89C52的控制設(shè)計,編程用Keil軟件,仿真用proteus軟件。Keil支持C語言、匯編及二者的混合編程。
編程軟件Keil介紹:
KeiluVision2是美國軟件公司的C語言軟件開發(fā)系統(tǒng),它兼容單片機系統(tǒng)。與匯編相比,C語言有易學(xué)易用的特點。不僅提高了工作效率,而且在關(guān)鍵的位置嵌入?yún)R編,可以使程序的工作效率接近匯編。標準C編譯器在保留匯編代碼搞笑、快速特點的同時,還未控制器的軟件開發(fā)提供了C環(huán)境。uVision2的集成開發(fā)環(huán)境已經(jīng)完全包括了C52。它包括:項目管理器、編譯器,匯編器,實時操作系統(tǒng)和調(diào)試器。Keil軟件界面如圖4-1所示。
仿真軟件Protues介紹:
Protues軟件是英國公司出版的工具軟件。它不僅具有仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。在國內(nèi)它已受到學(xué)單片機的愛好者和參加單片機開發(fā)應(yīng)用工作者的好感。Proteus是世界上最著名的仿真軟件之一,從代碼調(diào)試到原理圖布圖等仿真,從概念到產(chǎn)品的整個流程都是它的功勞。目前它是世界上唯一可以將PCB設(shè)計軟件、電路仿真軟件和虛擬模型仿真軟件合為一的軟件之一,它的處理器模型支持MSP430、AVR、8051、HC11、ARM和8086PIC10/12/16/18/24/30/DsPIC33等,在編譯方面,它也支持Keil、IAR和MPLAB等多種編譯器。
Proteus ISIS的運行界面是標準的Windows界面,如圖4-3所示,Proteus ISIS軟件有:標題欄、主菜單、狀態(tài)欄、標準工具欄、繪圖工具欄、對象選擇按鈕、仿真進程控制按鈕、預(yù)覽窗口、圖形編輯窗口、對象選擇器等窗口。

圖4-1 Keil軟件界面

生成Hex文件,如圖4-2所示。

圖4-2 生成Hex文件圖

圖4-3 Proteus軟件界面

當溫度還未達到設(shè)置溫度上限默認的50℃時,如圖4-4所示單片機P2.5口輸出低電平,蜂鳴器不響。單片機P2.7口也輸出低電平,二極管不亮,繼電器繼續(xù)加熱。

圖4-4 溫度低于上限時仿真圖

  當溫度達到設(shè)置溫度上限默認的50℃時,如圖4-5所示單片機P2.5口輸出高電平,蜂鳴器響。單片機P2.7口也輸出高電平,二極管亮,繼電器停止加熱。

圖4-5 溫度低于上限時仿真圖
結(jié)論

通過本次設(shè)計,加深了我對單片機的認識,對溫度傳感器DS18B20也有了更深刻的了解。雖然DS18B20在測量溫度時,出現(xiàn)了靈敏度不高,無法跟隨溫度變化快速顯示溫度等問題,但是易于制作、價格低廉、硬件結(jié)構(gòu)簡單、測量值精確和易于操作等許多優(yōu)點讓DS18B20在測溫方面有獨特的優(yōu)勢。

參考文獻
[1]陳煥生.溫度測試技術(shù)及儀表[M].北京:水利電力出版社,1987.9.
[2]秦沿海.數(shù)字PID控制原理及其應(yīng)用[J].西南民族學(xué)院學(xué)報,1997:49-54.
[3]徐科軍.傳感器與檢測技術(shù)[M].北京:電子工業(yè)出版社,2004.9.
[4]張寶芬.自動檢測技術(shù)及儀表控制系統(tǒng)[M].北京:化學(xué)工業(yè)出版社,2000.
[5]先鋒工作室.單片機程序設(shè)計實例[M].北京:清華大學(xué)出版社,2003.
[6]王孝武.現(xiàn)代控制理論基礎(chǔ)[M].北京:機械工業(yè)出版社,1998.
[7]袁希光.傳感器技術(shù)手冊[M].北京:國防工業(yè)出版社,1986.
[8]劉劍.一種數(shù)字PID控制算法分析[J].承德石油高等�?茖W(xué)校學(xué)報,2007:11-22.
[9]歷風滿.數(shù)字PID控制算法的研究[J].遼寧大學(xué)學(xué)報,2005:367-370.
[10]丁元杰.單片微機原理及應(yīng)用[M].北京:機械工業(yè)出版社,1996:256-276.
[11]趙鴻圖.基于單片機的溫度控制系統(tǒng)的設(shè)計與實現(xiàn)Ⅱ[J].微計算機信息,2008(26).
[12]楊萬超.S1單片機溫度控制系統(tǒng)設(shè)計Ⅱ[J].黑龍江科技信息,2009(29).
[13]賴壽宏.微型計算機控制技術(shù)[M].北京:機械工業(yè)出版社,2003:130-145.
[14]馬淑蘭.單片機技術(shù)及應(yīng)用實例分析[M].西安:西安電子科技大學(xué)出版社,2009:20-40.
[15]Zhang et al.Digital PID controller design for multivariable analogue systems with computational[J].IMA J Math Control Info,2004:21-433.
[16]L Dubois.Temperature control by microwave radiometry with narrow band width [J].EurPhysJ.App.lPhys,2000:63-68.
[17]Shiqian wu,Meng Joo Er and Yang Gao,A Fast Appoach for Automatic Generation of Fuzzy Rules by Generalized DynamicFuzzy Neural Networks[J]. IEEE Transaction on Fuzzy Systems,2001(4):578-593.


致謝

本設(shè)計在***老師的嚴格要求和悉心指導(dǎo)下才完成,從課題選擇、總體方案設(shè)計、硬件軟件設(shè)計到系統(tǒng)仿真,無不凝聚著程老師的汗水和心血,導(dǎo)師無私的關(guān)懷和悉心的指導(dǎo),令我受益匪淺。在此特向程老師表示深深的感謝和崇高的敬意。


附錄
附錄1
附錄2
程序代碼:
  1. #include <at89x51.h>
  2. #include <absacc.h>
  3. #include <ctype.h>
  4. #include <math.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <DS18B20.h>
  8. #include "LCD1602.h"                                          ////液晶顯示頭文件
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. sbit Key1=P1^0;
  12. sbit Key2=P1^1;
  13. sbit Up  =P1^2;
  14. sbit Down=P1^3;
  15. uchar t[2],*pt;                                                        //這是用來存放溫度值的,測溫程序通過這個數(shù)組與主函數(shù)通信
  16. uchar  TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};
  17.                                                                                                                 //顯示實時的溫度,上電時顯示+125.00C
  18. uchar  TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,
  19.                                                                                                                 0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};
  20.                                                                                                                 //顯示溫度上下限,上電時顯示TH:+125 TL:+124C                                                                                                
  21. uchar code dotcode[4]={0,25,50,75};
  22. uchar set;//溫度初始值
  23. uchar count,high_time=0; //調(diào)節(jié)占空比的參數(shù)
  24. uint rout;// PID輸出
  25. /查表法*******
  26. 將表值分離出的十位和個位送到十分位和百分位********************/

  27. struct PID
  28. {
  29.               uint SetPoint;      // 設(shè)定目標 Desired Value
  30.               uint Proportion;    // 比例常數(shù) Proportional Const
  31.               uint Integral;      // 積分常數(shù) Integral Const
  32.               uint Derivative;    // 微分常數(shù) Derivative Const
  33.               signed int LastError;     // 錯誤Error[-1]
  34.               signed int PrevError;     // 錯誤Error[-2]
  35.               signed int SumError;      // Sums of Errors
  36. };
  37. struct PID spid;                // PID控制結(jié)構(gòu)體

  38. void init_pid()
  39. //PID初始化
  40. {
  41.               high_time=50;
  42.               spid.Proportion = 23;       // Set PID Coefficients
  43.               spid.Integral = 2;
  44.               spid.Derivative =6;
  45.               spid.SetPoint = set;      // Set PID Setpoint
  46. }

  47. unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )
  48. //PID算法
  49. {
  50.               signed int dError,Error;
  51.               Error = pp->SetPoint - NextPoint;           // 偏差
  52.               pp->SumError += Error;                      // 積分
  53.               dError = pp->LastError - pp->PrevError;     // 當前微分
  54.               pp->PrevError = pp->LastError;            
  55.               pp->LastError = Error;
  56.               return (pp->Proportion * Error+ pp->Integral * pp->SumError              + pp->Derivative * dError);
  57. }

  58. void duty_cycle(uint t)                              
  59. // 占空比
  60. {
  61.               uchar s;
  62.               t=t/10;
  63.               s=set;
  64.               if(s>t)
  65.               {
  66.                             if(s-t>2)
  67.                                           high_time=100;
  68.                             else
  69.                             {
  70.                                           rout = PIDCalc ( &spid,t );   // Perform PID Interation
  71.                                           if(high_time<=100)
  72.                                                         high_time=(uchar)(rout/600);
  73.                                           else
  74.                                                         high_time=100;            
  75.                             }
  76.               }
  77.               else
  78.                             high_time=0;
  79. }

  80. void covert0( unsigned char TH, unsigned char TL)              //將溫度上下限轉(zhuǎn)換為LCD顯示的數(shù)據(jù)
  81. {
  82.               if(TH>0x7F)                    //判斷正負,如果為負溫,將其轉(zhuǎn)化為其絕對值
  83.               {
  84.                             TempBuffer0[3]=0x2d;                   //0x2d為"-"的ASCII碼
  85.                             TH=~TH;
  86.                             TH++;
  87.               }
  88.               else TempBuffer0[3]=0x2b;              //0x2B為"+"的ASCII碼
  89.             
  90.               if(TL>0x7f)
  91.               {
  92.                             TempBuffer0[11]=0x2d;                   //0x2d為"-"的ASCII碼
  93.                             TL=~TL+1;
  94.               }
  95.               else
  96.                             TempBuffer0[11]=0x2b;              //0x2B為"+"的ASCII碼
  97.             
  98.               TempBuffer0[4]=TH/100+0x30;                                         //分離出TH的百十個位
  99.               if( TempBuffer0[4]==0x30)
  100.                             TempBuffer0[4]=0xfe; //百位數(shù)消隱
  101.               TempBuffer0[5]=(TH%100)/10+0x30;                                                        //分離出十位
  102.               TempBuffer0[6]=(TH%100)%10+0x30;                                                        //分離出個位
  103.               TempBuffer0[12]=TL/100+0x30;                                         //分離出TL的百十個位
  104.               if( TempBuffer0[12]==0x30)
  105.                             TempBuffer0[12]=0xfe; //百位數(shù)消隱
  106.               TempBuffer0[13]=(TL%100)/10+0x30;                                                        //分離出十位
  107.               TempBuffer0[14]=(TL%100)%10+0x30;                                                        //分離出個位
  108. }


  109. void covert1(void)              //將溫度轉(zhuǎn)換為LCD顯示的數(shù)據(jù)
  110. {
  111.               unsigned char x=0x00,y=0x00;
  112.                  t[0]=*pt;
  113.                  pt++;
  114.                  t[1]=*pt;
  115.                  if(t[1]>0x07)                    //判斷正負溫度
  116.                  {
  117.                   TempBuffer1[0]=0x2d;                   //0x2d為"-"的ASCII碼
  118.                             t[1]=~t[1];                                          /*下面幾句把負數(shù)的補碼*/
  119.                             t[0]=~t[0];                             /* 換算成絕對值*********/
  120.                             x=t[0]+1;                                                        /***********************/
  121.                             t[0]=x;                                                                      /***********************/
  122.                             if(x>255)                /**********************/
  123.                                           t[1]++;                                                        /*********************/
  124.                  }
  125.                  else
  126.                             TempBuffer1[0]=0x2b;              //0xfe為變"+"的ASCII碼
  127.                 t[1]<<=4;                            //將高字節(jié)左移4位
  128.                 t[1]=t[1]&0x70;                            //取出高字節(jié)的3個有效數(shù)字位
  129.                 x=t[0];                                                                      //將t[0]暫存到X,因為取小數(shù)部分還要用到它
  130.                 x>>=4;                                                                      //右移4位
  131.                 x=x&0x0f;                                                                      //和前面兩句就是取出t[0]的高四位            
  132.                 t[1]=t[1]|x;                                          //將高低字節(jié)的有效值的整數(shù)部分拼成一個字節(jié)
  133.                 TempBuffer1[1]=t[1]/100+0x30;                                         //+0x30 為變 0~9 ASCII碼
  134.                  if( TempBuffer1[1]==0x30)
  135.                             TempBuffer1[1]=0xfe; //百位數(shù)消隱
  136.                 TempBuffer1[2]=(t[1]%100)/10+0x30;                                                        //分離出十位
  137.                 TempBuffer1[3]=(t[1]%100)%10+0x30;                                                        //分離出個位
  138.                 t[0]=t[0]&0x0c;                                                                                                  //取有效的兩位小數(shù)
  139.                 t[0]>>=2;                                                                                                                              //左移兩位,以便查表
  140.                 x=t[0];                                                                                                                                          
  141.                 y=dotcode[x];                                                                                                                              //查表換算成實際的小數(shù)
  142.                 TempBuffer1[5]=y/10+0x30;                                                                                                  //分離出十分位
  143.                 TempBuffer1[6]=y%10+0x30;                                                                                                  //分離出百分位
  144. }                                         

  145. void delay(unsigned int i)
  146. {
  147.               while(i--);
  148. }

  149. void t0_int(void) interrupt 1                            //PWM波輸出
  150. {
  151.               if(++count<=(high_time))
  152.               Relay=0;
  153.               else if(count<=100)
  154.               Relay=1;
  155.               else
  156.               count=0;
  157.               TH0=0X20;
  158.               TL0=0X00;
  159. }

  160. main()
  161. {
  162.               unsigned char TH=50,TL=10,temp=0;                                                                          //下一步擴展時可能通過這兩個變量,調(diào)節(jié)上下限
  163.                                                                                                                        //測溫函數(shù)返回這個數(shù)組的頭地址
  164.               TMOD=0X01;
  165.               TH0=0X20;
  166.               TL0=0X00;
  167.               EA=1;
  168.               ET0=1;
  169.               TR0=1;
  170.               set=60;//目標溫度
  171.               Beep=0;Relay=0;
  172.               init_pid();
  173.               while(1)
  174.               {            
  175.                   if(Up==0)
  176.                             {
  177.                                while(!Up);
  178.                                TH++;
  179.                             }
  180.                             if(Down==0)
  181.                             {
  182.                                           while(!Down);
  183.                                           TL--;
  184.                             }
  185.                             pt=ReadTemperature(TH,TL,0x3f);                            //上限溫度-22,下限-24,分辨率10位,也就是0.25C
  186.                                                                                                                                                           //讀取溫度,溫度值存放在一個兩個字節(jié)的數(shù)組
  187.                
  188.                   if((t[1]>TH)|(t[1]<TL))
  189.                             {
  190.                                 Beep=1;
  191.               //                            Relay=1;
  192.                            
  193.                             }
  194.                             else
  195.                             {
  196.                                 Beep=0;
  197.               //                            Relay=0;
  198.                             }
  199.                             delay(10000);
  200.                             covert1();
  201.                             covert0(TH,TL);
  202.                             LCD_Initial();                                                                                                  //第一個參數(shù)列號,第二個為行號,為0表示第一行
  203.                                                                                                                                                                         //為1表示第二行,第三個參數(shù)為顯示數(shù)據(jù)的首地址
  204.                             LCD_Print(0,0,TempBuffer0);            
  205.                             LCD_Print(0,1,TempBuffer1);                                                        
  206.               }
  207. }
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
基于PID的溫度控制系統(tǒng)設(shè)計.doc (729.5 KB, 下載次數(shù): 1005)



評分

參與人數(shù) 3黑幣 +67 收起 理由
哇啊哇 + 12 很給力!
zqy181818 + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏49 分享淘帖 頂10 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:272828 發(fā)表于 2018-7-9 15:11 | 只看該作者
請問這個設(shè)計的仿真的文件還在嗎?
回復(fù)

使用道具 舉報

板凳
ID:154686 發(fā)表于 2018-9-5 15:44 | 只看該作者
看起來很不錯哦,收藏之~~~
謝謝LZ啦�。�!
回復(fù)

使用道具 舉報

地板
ID:245429 發(fā)表于 2018-12-25 22:38 | 只看該作者
感覺不錯,等幾天有時間再看
回復(fù)

使用道具 舉報

5#
ID:471216 發(fā)表于 2019-1-21 12:58 | 只看該作者
先留個評論,收藏了
回復(fù)

使用道具 舉報

6#
ID:143203 發(fā)表于 2019-1-21 17:08 | 只看該作者
MARK_____________________________________________
回復(fù)

使用道具 舉報

7#
ID:472874 發(fā)表于 2019-1-25 16:02 | 只看該作者
厲害,正好用得上
回復(fù)

使用道具 舉報

8#
ID:472874 發(fā)表于 2019-1-25 16:11 | 只看該作者
資源還在么?
回復(fù)

使用道具 舉報

9#
ID:222388 發(fā)表于 2019-1-30 18:30 | 只看該作者
很受用
回復(fù)

使用道具 舉報

10#
ID:496761 發(fā)表于 2019-4-8 15:05 | 只看該作者
很給力的
回復(fù)

使用道具 舉報

11#
ID:508509 發(fā)表于 2019-4-19 17:14 | 只看該作者
收藏一下
回復(fù)

使用道具 舉報

12#
ID:513399 發(fā)表于 2019-4-27 11:44 | 只看該作者
感覺不錯,收藏了
回復(fù)

使用道具 舉報

13#
ID:487891 發(fā)表于 2019-4-27 15:16 | 只看該作者
學(xué)習(xí)了
回復(fù)

使用道具 舉報

14#
ID:525924 發(fā)表于 2019-5-3 15:01 | 只看該作者
程序是不是沒有寫完呢
回復(fù)

使用道具 舉報

15#
ID:526660 發(fā)表于 2019-5-3 21:21 | 只看該作者
厲害,剛好有用
回復(fù)

使用道具 舉報

16#
ID:468987 發(fā)表于 2019-5-18 21:35 | 只看該作者
寫得很全面,先收藏,以后慢慢看,謝謝樓主的分享。。。
回復(fù)

使用道具 舉報

17#
ID:468987 發(fā)表于 2019-5-18 21:38 | 只看該作者
寫得很全面,很有用,先收藏。慢慢學(xué)習(xí),謝謝樓主分享。。。
回復(fù)

使用道具 舉報

18#
ID:357631 發(fā)表于 2019-11-1 14:04 | 只看該作者
謝貼主,正在做相關(guān)實驗
回復(fù)

使用道具 舉報

19#
ID:659716 發(fā)表于 2019-12-9 15:58 | 只看該作者
請問仿真程序還在嗎?
回復(fù)

使用道具 舉報

20#
ID:666183 發(fā)表于 2019-12-18 09:38 | 只看該作者
很好,很有用
回復(fù)

使用道具 舉報

21#
ID:680972 發(fā)表于 2020-1-5 14:51 | 只看該作者
程序不全吧
回復(fù)

使用道具 舉報

22#
ID:700941 發(fā)表于 2020-3-3 00:33 來自手機 | 只看該作者
怎么才能實現(xiàn)變溫控制呢?
回復(fù)

使用道具 舉報

23#
ID:701351 發(fā)表于 2020-3-4 16:28 | 只看該作者
666 收下了
回復(fù)

使用道具 舉報

24#
ID:701351 發(fā)表于 2020-3-5 20:28 | 只看該作者
等幾天有時間再看
回復(fù)

使用道具 舉報

25#
ID:704833 發(fā)表于 2020-3-24 23:01 | 只看該作者
程序不全,是沒有顯示出來。還是需要下載文件后,才能全部看到
回復(fù)

使用道具 舉報

26#
ID:110278 發(fā)表于 2020-4-7 14:38 | 只看該作者
說的很細致。
回復(fù)

使用道具 舉報

27#
ID:221764 發(fā)表于 2020-4-8 13:28 | 只看該作者
有仿真文件嗎
回復(fù)

使用道具 舉報

28#
ID:221764 發(fā)表于 2020-4-9 23:14 | 只看該作者
程序不太對啊
回復(fù)

使用道具 舉報

29#
ID:770902 發(fā)表于 2020-6-11 17:34 | 只看該作者
這個主程序是全的嗎?
回復(fù)

使用道具 舉報

30#
ID:782863 發(fā)表于 2020-6-25 22:33 | 只看該作者
求頭文件ds18b20,lcd1602,還有請教一下為什么那個beep和relay都是未定義,相關(guān)程序是什么樣子的
回復(fù)

使用道具 舉報

31#
ID:782863 發(fā)表于 2020-6-25 22:43 | 只看該作者
求助,程序運行通過了,但仿真顯示只亮不顯示數(shù)字
回復(fù)

使用道具 舉報

32#
ID:28992 發(fā)表于 2021-3-8 08:32 | 只看該作者
it's a remarkable achievement, thanks for your sharing.
回復(fù)

使用道具 舉報

33#
ID:28992 發(fā)表于 2021-3-16 05:52 | 只看該作者
very good, thank you sir.
回復(fù)

使用道具 舉報

34#
ID:893505 發(fā)表于 2021-3-18 15:04 | 只看該作者
可以,很全,收藏了
回復(fù)

使用道具 舉報

35#
ID:919038 發(fā)表于 2021-5-16 20:19 | 只看該作者
感謝大佬,很有參考價值
回復(fù)

使用道具 舉報

36#
ID:922099 發(fā)表于 2021-5-17 03:24 來自手機 | 只看該作者
這程序是不是不全呀,怎么補全呀
回復(fù)

使用道具 舉報

37#
ID:399799 發(fā)表于 2021-5-20 13:28 來自手機 | 只看該作者
好久不來了。只要來了就有收獲,感謝。
回復(fù)

使用道具 舉報

38#
ID:936713 發(fā)表于 2021-6-12 10:41 | 只看該作者
小白一枚 感覺很有意義 收藏了 實現(xiàn)中。。
回復(fù)

使用道具 舉報

39#
ID:285514 發(fā)表于 2021-9-22 18:10 | 只看該作者
這個帖子好,很全面,是很好的資料,樓主有心了.
回復(fù)

使用道具 舉報

40#
ID:998643 發(fā)表于 2021-12-30 16:49 | 只看該作者
這個帖子好,很全面,是很好的資料,感謝樓主。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表