基于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引腳圖
VCC(40引腳):電源端,+5V。
VSS(20引腳):接地端。
XTAL 2(18引腳):接微調(diào)電容和外部晶體的端口。作為振蕩電路的輸出端。
XTAL 1(19引腳):接微調(diào)電容和外部晶體的端口。作為振蕩電路的輸入端。
RST(9引腳):復(fù)位信號輸入端,高電平有效。完成復(fù)位操作,輸入端必須為兩機器周期(即為24個時鐘振蕩周期)的高電平。
ALE/PROG(30引腳):地址鎖存允許信號端。當單片機上電正常工作后,ALE引腳不斷向外輸出正脈沖信號,此頻率為振蕩器平率的1/6。輸出信號作為鎖存低8位地址的控制信號。如果想確認單片機芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出。若有脈沖信號輸出,則單片機基本上是好的。
PSEN(29引腳):程序存儲允許輸出信號端。
EA(31引腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。
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功能表
| |
| |
| |
| |
| |
| |
| |
| WR(片外數(shù)據(jù)存儲器“寫選通控制”輸出) |
| 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)系表
DS18B20溫度值格式表如表2-3所示。
表2-3 DS18B20溫度值格式表
DS18B20的工作過程:
- 發(fā)復(fù)位DS18B20的負脈沖;
- 收DS18B20的回應(yīng)脈沖;
- 發(fā)ROM命令(33H);
- 發(fā)儲存和控制命令。
DS18B20儲存控制命令共有6種,如表2-4所示。
表2-4 DS18B20 存儲器控制指令
主機操作ROM的命令有5種,如表2-5所示。
表2-5 DS18B20的ROM指令
DS18B20的執(zhí)行序列:
- 初始化;
- 執(zhí)行ROM命令,用于定位;
- 執(zhí)行DS18B20的儲存控制命令,用于轉(zhuǎn)換和讀數(shù)據(jù);
- DS18B20的I/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.0~5.5V,可以本地供電,也可以直接從數(shù)據(jù)線竊取電源(寄生電源方式)。
- 測溫范圍為-55℃~+125℃,在-10℃~+85℃范圍內(nèi)誤差為±0.5℃。
- 可編輯數(shù)據(jù)為9~12位,轉(zhuǎn)換12位溫度時間為750ms(最大)。
- 用戶可自設(shè)定報警上下限溫度。
- 報警搜索命令可識別和尋址超過程序限定溫度(溫度報警條件)的器件。
- DS18B20的分辨率由用戶通過EEPROM設(shè)置為9~12位。
- 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”電平,在15us到45us之間;當寫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ù)測誤差變化的趨勢。

(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)著不同的匯編語言,這種語言具有一定限制。
- 對微控制器的指令系統(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
程序代碼:
- #include <at89x51.h>
- #include <absacc.h>
- #include <ctype.h>
- #include <math.h>
- #include <stdio.h>
- #include <string.h>
- #include <DS18B20.h>
- #include "LCD1602.h" ////液晶顯示頭文件
- #define uchar unsigned char
- #define uint unsigned int
- sbit Key1=P1^0;
- sbit Key2=P1^1;
- sbit Up =P1^2;
- sbit Down=P1^3;
- uchar t[2],*pt; //這是用來存放溫度值的,測溫程序通過這個數(shù)組與主函數(shù)通信
- uchar TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};
- //顯示實時的溫度,上電時顯示+125.00C
- uchar TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,
- 0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};
- //顯示溫度上下限,上電時顯示TH:+125 TL:+124C
- uchar code dotcode[4]={0,25,50,75};
- uchar set;//溫度初始值
- uchar count,high_time=0; //調(diào)節(jié)占空比的參數(shù)
- uint rout;// PID輸出
- /查表法*******
- 將表值分離出的十位和個位送到十分位和百分位********************/
-
- struct PID
- {
- uint SetPoint; // 設(shè)定目標 Desired Value
- uint Proportion; // 比例常數(shù) Proportional Const
- uint Integral; // 積分常數(shù) Integral Const
- uint Derivative; // 微分常數(shù) Derivative Const
- signed int LastError; // 錯誤Error[-1]
- signed int PrevError; // 錯誤Error[-2]
- signed int SumError; // Sums of Errors
- };
- struct PID spid; // PID控制結(jié)構(gòu)體
-
- void init_pid()
- //PID初始化
- {
- high_time=50;
- spid.Proportion = 23; // Set PID Coefficients
- spid.Integral = 2;
- spid.Derivative =6;
- spid.SetPoint = set; // Set PID Setpoint
- }
-
- unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )
- //PID算法
- {
- signed int dError,Error;
- Error = pp->SetPoint - NextPoint; // 偏差
- pp->SumError += Error; // 積分
- dError = pp->LastError - pp->PrevError; // 當前微分
- pp->PrevError = pp->LastError;
- pp->LastError = Error;
- return (pp->Proportion * Error+ pp->Integral * pp->SumError + pp->Derivative * dError);
- }
-
- void duty_cycle(uint t)
- // 占空比
- {
- uchar s;
- t=t/10;
- s=set;
- if(s>t)
- {
- if(s-t>2)
- high_time=100;
- else
- {
- rout = PIDCalc ( &spid,t ); // Perform PID Interation
- if(high_time<=100)
- high_time=(uchar)(rout/600);
- else
- high_time=100;
- }
- }
- else
- high_time=0;
- }
-
- void covert0( unsigned char TH, unsigned char TL) //將溫度上下限轉(zhuǎn)換為LCD顯示的數(shù)據(jù)
- {
- if(TH>0x7F) //判斷正負,如果為負溫,將其轉(zhuǎn)化為其絕對值
- {
- TempBuffer0[3]=0x2d; //0x2d為"-"的ASCII碼
- TH=~TH;
- TH++;
- }
- else TempBuffer0[3]=0x2b; //0x2B為"+"的ASCII碼
-
- if(TL>0x7f)
- {
- TempBuffer0[11]=0x2d; //0x2d為"-"的ASCII碼
- TL=~TL+1;
- }
- else
- TempBuffer0[11]=0x2b; //0x2B為"+"的ASCII碼
-
- TempBuffer0[4]=TH/100+0x30; //分離出TH的百十個位
- if( TempBuffer0[4]==0x30)
- TempBuffer0[4]=0xfe; //百位數(shù)消隱
- TempBuffer0[5]=(TH%100)/10+0x30; //分離出十位
- TempBuffer0[6]=(TH%100)%10+0x30; //分離出個位
- TempBuffer0[12]=TL/100+0x30; //分離出TL的百十個位
- if( TempBuffer0[12]==0x30)
- TempBuffer0[12]=0xfe; //百位數(shù)消隱
- TempBuffer0[13]=(TL%100)/10+0x30; //分離出十位
- TempBuffer0[14]=(TL%100)%10+0x30; //分離出個位
- }
-
-
- void covert1(void) //將溫度轉(zhuǎn)換為LCD顯示的數(shù)據(jù)
- {
- unsigned char x=0x00,y=0x00;
- t[0]=*pt;
- pt++;
- t[1]=*pt;
- if(t[1]>0x07) //判斷正負溫度
- {
- TempBuffer1[0]=0x2d; //0x2d為"-"的ASCII碼
- t[1]=~t[1]; /*下面幾句把負數(shù)的補碼*/
- t[0]=~t[0]; /* 換算成絕對值*********/
- x=t[0]+1; /***********************/
- t[0]=x; /***********************/
- if(x>255) /**********************/
- t[1]++; /*********************/
- }
- else
- TempBuffer1[0]=0x2b; //0xfe為變"+"的ASCII碼
- t[1]<<=4; //將高字節(jié)左移4位
- t[1]=t[1]&0x70; //取出高字節(jié)的3個有效數(shù)字位
- x=t[0]; //將t[0]暫存到X,因為取小數(shù)部分還要用到它
- x>>=4; //右移4位
- x=x&0x0f; //和前面兩句就是取出t[0]的高四位
- t[1]=t[1]|x; //將高低字節(jié)的有效值的整數(shù)部分拼成一個字節(jié)
- TempBuffer1[1]=t[1]/100+0x30; //+0x30 為變 0~9 ASCII碼
- if( TempBuffer1[1]==0x30)
- TempBuffer1[1]=0xfe; //百位數(shù)消隱
- TempBuffer1[2]=(t[1]%100)/10+0x30; //分離出十位
- TempBuffer1[3]=(t[1]%100)%10+0x30; //分離出個位
- t[0]=t[0]&0x0c; //取有效的兩位小數(shù)
- t[0]>>=2; //左移兩位,以便查表
- x=t[0];
- y=dotcode[x]; //查表換算成實際的小數(shù)
- TempBuffer1[5]=y/10+0x30; //分離出十分位
- TempBuffer1[6]=y%10+0x30; //分離出百分位
- }
-
- void delay(unsigned int i)
- {
- while(i--);
- }
-
- void t0_int(void) interrupt 1 //PWM波輸出
- {
- if(++count<=(high_time))
- Relay=0;
- else if(count<=100)
- Relay=1;
- else
- count=0;
- TH0=0X20;
- TL0=0X00;
- }
-
- main()
- {
- unsigned char TH=50,TL=10,temp=0; //下一步擴展時可能通過這兩個變量,調(diào)節(jié)上下限
- //測溫函數(shù)返回這個數(shù)組的頭地址
- TMOD=0X01;
- TH0=0X20;
- TL0=0X00;
- EA=1;
- ET0=1;
- TR0=1;
- set=60;//目標溫度
- Beep=0;Relay=0;
- init_pid();
- while(1)
- {
- if(Up==0)
- {
- while(!Up);
- TH++;
- }
- if(Down==0)
- {
- while(!Down);
- TL--;
- }
- pt=ReadTemperature(TH,TL,0x3f); //上限溫度-22,下限-24,分辨率10位,也就是0.25C
- //讀取溫度,溫度值存放在一個兩個字節(jié)的數(shù)組
-
- if((t[1]>TH)|(t[1]<TL))
- {
- Beep=1;
- // Relay=1;
-
- }
- else
- {
- Beep=0;
- // Relay=0;
- }
- delay(10000);
- covert1();
- covert0(TH,TL);
- LCD_Initial(); //第一個參數(shù)列號,第二個為行號,為0表示第一行
- //為1表示第二行,第三個參數(shù)為顯示數(shù)據(jù)的首地址
- LCD_Print(0,0,TempBuffer0);
- LCD_Print(0,1,TempBuffer1);
- }
- }
復(fù)制代碼
完整的Word格式文檔51黑下載地址: