2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩49頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  直流電機(jī)轉(zhuǎn)速PID控制系統(tǒng)設(shè)計(jì)</p><p><b>  學(xué) 院: </b></p><p><b>  專業(yè)班級(jí): </b></p><p>  姓 名: </p><p>  學(xué) 號(hào): </p><p>  指導(dǎo)老

2、師: </p><p><b>  目 錄</b></p><p>  第一章PID簡(jiǎn)介1</p><p>  第二章直流電機(jī)工作原理6</p><p>  2.1 工作原理6</p><p>  2.2、直流電機(jī)PID控制原理方框圖7</p><p&

3、gt;  第三章控制系統(tǒng)方案選擇10</p><p>  3.1 系統(tǒng)設(shè)計(jì)要求10</p><p>  3.2 系統(tǒng)模塊設(shè)計(jì)12</p><p>  第四章硬件設(shè)計(jì)與實(shí)現(xiàn)17</p><p>  4.1 硬件設(shè)計(jì)17</p><p>  4.2系統(tǒng)面板圖24</p><p>  

4、第五章流程設(shè)計(jì)26</p><p>  5.1 軟件設(shè)計(jì)流程圖26</p><p>  第六章程序說明30</p><p>  6.1 直流電機(jī)部分程序30</p><p>  6.2 溫度檢測(cè)部分程序37</p><p>  第七章說明及調(diào)試46</p><p>  7.1

5、 調(diào)試過程46</p><p>  7.2 運(yùn)行結(jié)果47</p><p>  第八章課程設(shè)計(jì)體會(huì)49</p><p>  第一章 PID簡(jiǎn)介</p><p>  PID (比例積分微分,英文全稱為Proportion Integration Differentiation)控制器問世至今已有近70年歷史,它 以其結(jié)構(gòu)簡(jiǎn)單、穩(wěn)定性好、

6、工作可靠、調(diào)整方便而成為工業(yè)控制的主要技術(shù)之一。當(dāng)被控對(duì)象的結(jié)構(gòu)和參數(shù)不能完全掌握,或得不到精確的數(shù)學(xué)模型時(shí),控制理論的 其它技術(shù)難以采用時(shí),系統(tǒng)控制器的結(jié)構(gòu)和參數(shù)必須依靠經(jīng)驗(yàn)和現(xiàn)場(chǎng)調(diào)試來確定,這時(shí)應(yīng)用PID控制技術(shù)最為方便。即當(dāng)我們不完全了解一個(gè)系統(tǒng)和被控對(duì)象,或 不能通過有效的測(cè)量手段來獲得系統(tǒng)參數(shù)時(shí),最適合用PID控制技術(shù)。PID控制,實(shí)際中也有PI和PD控制。PID控制器就是根據(jù)系統(tǒng)的誤差,利用比例、 積分、微分計(jì)算出控制量進(jìn)行

7、控制的。</p><p>  PID控制器的參數(shù)整定是控制系統(tǒng)設(shè)計(jì)的核心內(nèi)容。它是根據(jù)被 控過程的特性確定PID控制器的比例系數(shù)、積分時(shí)間和微分時(shí)間的大小。PID控制器參數(shù)整定的方法很多,概括起來有兩大類:一是理論計(jì)算整定法。它主要是 依據(jù)系統(tǒng)的數(shù)學(xué)模型,經(jīng)過理論計(jì)算確定控制器參數(shù)。這種方法所得到的計(jì)算數(shù)據(jù)未必可以直接用,還必須通過工程實(shí)際進(jìn)行調(diào)整和修改。二是工程整定方法,它主 要依賴工程經(jīng)驗(yàn),直接在控制系統(tǒng)的試

8、驗(yàn)中進(jìn)行,且方法簡(jiǎn)單、易于掌握,在工程實(shí)際中被廣泛采用。PID控制器參數(shù)的工程整定方法,主要有臨界比例法、反應(yīng) 曲線法和衰減法。三種方法各有其特點(diǎn),其共同點(diǎn)都是通過試驗(yàn),然后按照工程經(jīng)驗(yàn)公式對(duì)控制器參數(shù)進(jìn)行整定。但無論采用哪一種方法所得到的控制器參數(shù),都需 要在實(shí)際運(yùn)行中進(jìn)行最后調(diào)整與完善?,F(xiàn)在一般采用的是臨界比例法。利用該方法進(jìn)行 PID控制器參數(shù)的整定步驟如下:(1)首先預(yù)選擇一個(gè)足夠短的采樣周期讓系統(tǒng)工作;(2)僅加入比例控制環(huán)節(jié)

9、,直到系統(tǒng)對(duì)輸入的階躍響應(yīng)出現(xiàn)臨界振蕩, 記下這時(shí)的比例放大系數(shù)和臨界振蕩周期;(3)在一定的控制度下通過公式計(jì)算得到PID控制器的參數(shù)。</p><p>  PID(比例-積分-微分)控制器作為最早實(shí)用化的控制器已有50多年歷史,現(xiàn)在仍是應(yīng)用最廣泛的工業(yè)控制器。PID控制器簡(jiǎn)單易懂,使用中不需精確的系統(tǒng)模型等先決條件,因而成為應(yīng)用最為廣泛的控制器。</p><p>  PID控制器由比例

10、單元(P)、積分單元(I)和微分單元(D)組成。其輸入e (t)與輸出u (t)的關(guān)系為 u(t)=kp(e((t)+1/TI∫e(t)dt+TD*de(t)/dt) 式中積分的上下限分別是0和t 因此它的傳遞函數(shù)為:G(s)=U(s)/E(s)=kp(1+1/(TI*s)+TD*s)其中kp為比例系數(shù); TI為積分時(shí)間常數(shù); TD為微分時(shí)間常數(shù)。</p><p>  本次課程設(shè)計(jì)就是應(yīng)用數(shù)字PID模型作單片機(jī)控

11、制編程,其中P、I、D參數(shù)可按鍵輸入并用LED數(shù)碼顯示;單片機(jī)PWM調(diào)寬輸出,開關(guān)驅(qū)動(dòng)、電子濾波控制模擬電機(jī)(壓控振蕩器)實(shí)現(xiàn)對(duì)直流電機(jī)的PID調(diào)壓調(diào)速功能。</p><p>  80C51單片機(jī)屬于MCS-51系列單片機(jī),由Intel公司開發(fā),其結(jié)構(gòu)是8048的延伸,改進(jìn)了8048的缺點(diǎn),增加了如乘(MUL)、除(DIV)、減(SUBB)、比較(PUSH)、16位數(shù)據(jù)指針、布爾代數(shù)運(yùn)算等指令,以及串行通信能力和

12、5個(gè)中斷源。采用40引腳雙列直插式DIP(Dual In Line Package),內(nèi)有128個(gè)RAM單元及4K的ROM。80C51有兩個(gè)16位定時(shí)計(jì)數(shù)器,兩個(gè)外中斷,兩個(gè)定時(shí)計(jì)數(shù)中斷,及一個(gè)串行中斷,并有4個(gè)8位并行輸入口。80C51內(nèi)部有時(shí)鐘電路,但需要石英晶體和微調(diào)電容外接,本系統(tǒng)中采用12MHz的晶振頻率。由于80C51的系統(tǒng)性能滿足系統(tǒng)數(shù)據(jù)采集及時(shí)間精度的要求,而且產(chǎn)品產(chǎn)量豐富來源廣,應(yīng)用也很成熟,故采用來作為控制核心。&l

13、t;/p><p>  MCS-51是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,引腳分布請(qǐng)參照----單片機(jī)引腳圖:</p><p>  l P0.0~P0.7 P0口8位雙向口線(在引腳的39~32號(hào)端子)。</p><p>  l P1.0~P1.7 P1口8位雙向口線(在引腳的1~8號(hào)端子)。</p><p>  l P2.0~P2.7 P2口8

14、位雙向口線(在引腳的21~28號(hào)端子)。</p><p>  l P3.0~P3.7 P3口8位雙向口線(在引腳的10~17號(hào)端子)。</p><p><b>  P0口有三個(gè)功能</b></p><p>  1、外部擴(kuò)展存儲(chǔ)器時(shí),當(dāng)做數(shù)據(jù)總線(如圖1中的D0~D7為數(shù)據(jù)總線接口)</p><p>  2、外部擴(kuò)展存儲(chǔ)器

15、時(shí),當(dāng)作地址總線(如圖1中的A0~A7為地址總線接口)</p><p>  3、不擴(kuò)展時(shí),可做一般的I/O使用,但內(nèi)部無上拉電阻,作為輸入或輸出時(shí)應(yīng)在外部接上拉電阻。</p><p>  P1口只做I/O口使用:其內(nèi)部有上拉電阻。</p><p><b>  P2口有兩個(gè)功能:</b></p><p>  1、擴(kuò)展外部存

16、儲(chǔ)器時(shí),當(dāng)作地址總線使用</p><p>  2、做一般I/O口使用,其內(nèi)部有上拉電阻;</p><p><b>  P3口有兩個(gè)功能:</b></p><p>  除了作為I/O使用外(其內(nèi)部有上拉電阻),還有一些特殊功能,由特殊寄存器來設(shè)置,具體功能請(qǐng)參考我們后面的引腳說明。</p><p>  有內(nèi)部EPROM的單

17、片機(jī)芯片(例如8751),為寫入程序需提供專門的編程脈沖和編程電源,這些信號(hào)也是由信號(hào)引腳的形式提供的,</p><p>  即:編程脈沖:30腳(ALE/PROG)</p><p>  編程電壓(25V):31腳(EA/Vpp)</p><p>  這就是單片機(jī)的備用電源,當(dāng)外接電源下降到下限值時(shí),備用電源就會(huì)經(jīng)第二功能的方式由第9腳(即RST/VPD)引入,以保

18、護(hù)內(nèi)部RAM中的信息不會(huì)丟失。</p><p>  在介紹這四個(gè)I/O口時(shí)提到了一個(gè)“上拉電阻”那么上拉電阻又是一個(gè)什么東東呢?他起什么作用呢?都說了是電阻那當(dāng)然就是一個(gè)電阻啦,當(dāng)作為輸入時(shí),上拉電阻將其電位拉高,若輸入為低電平則可提供電流源;所以如果P0口如果作為輸入時(shí),處在高阻抗?fàn)顟B(tài),只有外接一個(gè)上拉電阻才能有效。</p><p>  ALE/PROG 地址鎖存控制信號(hào):在系統(tǒng)擴(kuò)展時(shí),

19、ALE用于控制把P0口的輸出低8位地址送鎖存器鎖存起來,以實(shí)現(xiàn)低位地址和數(shù)據(jù)的隔離。(在后面關(guān)于擴(kuò)展的課程中我們就會(huì)看到8051擴(kuò)展 EEPROM電路,在圖中ALE與74LS373鎖存器的G相連接,當(dāng)CPU對(duì)外部進(jìn)行存取時(shí),用以鎖住地址的低位地址,即P0口輸出。ALE有可能是高電平也有可能是低電平,當(dāng)ALE是高電平時(shí),允許地址鎖存信號(hào),當(dāng)訪問外部存儲(chǔ)器時(shí),ALE信號(hào)負(fù)跳變(即由正變負(fù))將P0口上低8位地址信號(hào)送入鎖存器。當(dāng)ALE是低電平

20、時(shí),P0口上的內(nèi)容和鎖存器輸出一致。關(guān)于鎖存器的內(nèi)容,我們稍后也會(huì)介紹。</p><p>  在沒有訪問外部存儲(chǔ)器期間,ALE以1/6振蕩周期頻率輸出(即6分頻),當(dāng)訪問外部存儲(chǔ)器以1/12振蕩周期輸出(12分頻)。從這里我們可以看到,當(dāng)系統(tǒng)沒有進(jìn)行擴(kuò)展時(shí)ALE會(huì)以1/6振蕩周期的固定頻率輸出,因此可以做為外部時(shí)鐘,或者外部定時(shí)脈沖使用。</p><p>  PORG為編程脈沖的輸入端:我

21、們已知道,在8051單片機(jī)內(nèi)部有一個(gè)4KB或8KB的程序存儲(chǔ)器(ROM),ROM的作用就是用來存放用戶需要執(zhí)行的程序的,那么我們是怎樣把編寫好的程序存入進(jìn)這個(gè)ROM中的呢?實(shí)際上是通過編程脈沖輸入才能寫進(jìn)去的,這個(gè)脈沖的輸入端口就是PROG。</p><p>  PSEN 外部程序存儲(chǔ)器讀選通信號(hào):在讀外部ROM時(shí)PSEN低電平有效,以實(shí)現(xiàn)外部ROM單元的讀操作。</p><p>  1、

22、內(nèi)部ROM讀取時(shí),PSEN不動(dòng)作;</p><p>  2、外部ROM讀取時(shí),在每個(gè)機(jī)器周期會(huì)動(dòng)作兩次;</p><p>  3、外部RAM讀取時(shí),兩個(gè)PSEN脈沖被跳過不會(huì)輸出;</p><p>  4、外接ROM時(shí),與ROM的OE腳相接。</p><p>  EA/VPP 訪問和序存儲(chǔ)器控制信號(hào)</p><p>&

23、lt;b>  1、接高電平時(shí):</b></p><p>  CPU讀取內(nèi)部程序存儲(chǔ)器(ROM)</p><p>  擴(kuò)展外部ROM:當(dāng)讀取內(nèi)部程序存儲(chǔ)器超過0FFFH(8051)1FFFH(8052)時(shí)自動(dòng)讀取外部ROM。</p><p>  2、接低電平時(shí):CPU讀取外部程序存儲(chǔ)器(ROM)。 在前面的學(xué)習(xí)中我們已知道,8031單片機(jī)內(nèi)部是沒有R

24、OM的,那么在應(yīng)用8031單片機(jī)時(shí),這個(gè)腳是一直接低電平的。</p><p>  3、8751燒寫內(nèi)部EPROM時(shí),利用此腳輸入21V的燒寫電壓。</p><p>  RST 復(fù)位信號(hào):當(dāng)輸入的信號(hào)連續(xù)2個(gè)機(jī)器周期以上高電平時(shí)即為有效,用以完成單片機(jī)的復(fù)位初始化操作,當(dāng)復(fù)位后程序計(jì)數(shù)器PC=0000H,即復(fù)位后將從程序存儲(chǔ)器的0000H單元讀取第一條指令碼。</p><

25、p>  XTAL1和XTAL2 外接晶振引腳。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),此二引腳用于外接石英晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),用于接外部時(shí)鐘脈沖信號(hào)。</p><p>  VCC:電源+5V輸入</p><p>  第二章 直流電機(jī)工作原理</p><p><b>  2.1 工作原理 </b></p><p>

26、  本設(shè)計(jì)中的電子鐘的核心是AT89C51。硬件電路主要由六部分構(gòu)成:PID控制電路、復(fù)位電路、鍵盤電路、顯示電路、串行通信電路以及溫度檢測(cè)電路。</p><p>  PID控制電路是電子鐘硬件電路的核心,沒有PID控制電路,直流電機(jī)無法正常穩(wěn)定運(yùn)行。本系統(tǒng)電路采用的晶振11.0592MHz,一號(hào)單片機(jī)定時(shí)器采用的是定時(shí)器0工作在方式2定時(shí),用于實(shí)現(xiàn)一定時(shí)間的計(jì)時(shí),定時(shí)時(shí)間為10ms。復(fù)位電路可使單片機(jī)回復(fù)到初始

27、狀態(tài)。鍵盤可實(shí)現(xiàn)對(duì)直流電機(jī)轉(zhuǎn)速的設(shè)定及啟動(dòng)的操作。溫度檢測(cè)是通過DS18B20芯片實(shí)現(xiàn),在溫度顯示中還要注意數(shù)的轉(zhuǎn)換。在該設(shè)計(jì)中還用到定時(shí)器1工作在方式2用來產(chǎn)生9600的波特率,用在兩片單片機(jī)之間串行傳送數(shù)據(jù)。</p><p><b>  外部中斷INT1</b></p><p>  當(dāng)電機(jī)轉(zhuǎn)一圈時(shí)向外部中斷進(jìn)行一次中斷計(jì)數(shù),從而實(shí)現(xiàn)電機(jī)轉(zhuǎn)速的測(cè)量。</p&g

28、t;<p><b>  一號(hào)單片機(jī)轉(zhuǎn)速顯示</b></p><p>  當(dāng)電機(jī)轉(zhuǎn)動(dòng)時(shí),顯示部分可以把電機(jī)的設(shè)定轉(zhuǎn)速或者是通過通信由溫度計(jì)算的轉(zhuǎn)速顯示出來,同時(shí)在右側(cè)部分顯示電機(jī)當(dāng)下的轉(zhuǎn)速。</p><p>  二號(hào)單片機(jī)的溫度顯示與之類似。</p><p><b>  溫度測(cè)量</b></p>

29、<p>  溫度測(cè)量有專門的芯片DS18B20。DS18B20 可編程溫度傳感器有 3 個(gè)管腳。GND 為接地線,DQ 為數(shù)據(jù)輸入輸出接口, 通過一個(gè)較弱的上拉電阻與單片機(jī)相連。VDD 為電源接口,既可由數(shù)據(jù)線提供電源,又可 由外部提供電源,范圍 3.O~5.5 V。當(dāng) DSI8B20 接收到溫度轉(zhuǎn)換命令后,開始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以 16 位帶 符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器的 0,1 字節(jié)。單片機(jī)可

30、通過單線接口讀 到該數(shù)據(jù),讀取時(shí)低位在前,高位在后,數(shù)據(jù)格式以 0.062 5℃/LSB 形式表示。</p><p><b>  按鍵選擇</b></p><p>  一號(hào)單片機(jī)的鍵盤采用4×4的按鍵方式檢測(cè)按鍵。P0、P1口不斷掃描按鍵的行和列從而計(jì)算出所選擇的數(shù)值,進(jìn)而執(zhí)行相關(guān)的程序。</p><p>  二號(hào)單片機(jī)原理類似。&l

31、t;/p><p><b>  直流電機(jī)驅(qū)動(dòng)部分</b></p><p>  一號(hào)單片機(jī)根據(jù)端口采集到的電機(jī)的轉(zhuǎn)速,經(jīng)過PID計(jì)算,通過另一端口發(fā)送PWM波,從而使電機(jī)改變轉(zhuǎn)速。</p><p>  2.2、直流電機(jī)PID控制原理方框圖</p><p><b>  控制系統(tǒng)方案選擇</b></p&g

32、t;<p>  3.1 系統(tǒng)設(shè)計(jì)要求</p><p>  總要求:自動(dòng)化工程訓(xùn)練是自動(dòng)化專業(yè)學(xué)生在完成自動(dòng)控制理論、單片機(jī)原理及應(yīng)用、計(jì)算機(jī)控制技術(shù)等專業(yè)課程學(xué)習(xí)后的一個(gè)重要實(shí)踐環(huán)節(jié),其目的主要在于使學(xué)生掌握自動(dòng)化技術(shù)的實(shí)際工程應(yīng)用知識(shí),對(duì)典型控制系統(tǒng)的硬件、軟件進(jìn)行針對(duì)性的設(shè)計(jì)和調(diào)試,進(jìn)一步拓寬知識(shí)面,達(dá)到提高學(xué)生獨(dú)立解決實(shí)際工程問題能力的目的。因此,本工程訓(xùn)練必須緊密聯(lián)系實(shí)際,強(qiáng)調(diào)解決實(shí)際問題的

33、能力,學(xué)生要著重學(xué)會(huì)面對(duì)一個(gè)實(shí)際問題,收集資料(包括網(wǎng)上檢索),學(xué)習(xí)新的知識(shí),如何利用已有的實(shí)驗(yàn)裝置、實(shí)驗(yàn)條件等制定解決問題的方案并通過實(shí)踐不斷地去分析和解決前進(jìn)道路上的問題,最終完成課程設(shè)計(jì)的實(shí)驗(yàn)驗(yàn)收。</p><p>  本次設(shè)計(jì),要求學(xué)生在兩周內(nèi)獨(dú)立設(shè)計(jì),完成老師所分配的任務(wù)(學(xué)生也可自定設(shè)計(jì)任務(wù),在設(shè)計(jì)指導(dǎo)教師認(rèn)可的前題下,進(jìn)行設(shè)計(jì)并完成全部要求的內(nèi)容)。課程設(shè)計(jì)結(jié)束時(shí),要求每人提交課程設(shè)計(jì)報(bào)告一份(包括

34、電子稿),并進(jìn)行成果現(xiàn)場(chǎng)演示。</p><p><b>  選擇實(shí)驗(yàn)的要求:</b></p><p>  基于SST89E554RC單片機(jī)實(shí)驗(yàn)系統(tǒng)的綜合實(shí)驗(yàn)應(yīng)用開發(fā)與設(shè)計(jì):要求在掌握相關(guān)基礎(chǔ)性實(shí)驗(yàn)項(xiàng)目的基礎(chǔ)上,完成綜合性實(shí)驗(yàn)項(xiàng)目,并在此基礎(chǔ)上增加鍵盤輸入功能、數(shù)據(jù)顯示功能和通信功能等。</p><p>  這部分主要介紹工作安排和整體設(shè)計(jì)的思想

35、。工作過程規(guī)劃如下:</p><p>  圖3.1直流電機(jī)PID控制工作規(guī)劃流程圖</p><p>  在程序方面,采用分塊設(shè)計(jì)的方法,這樣既減小了編程難度,使程序易于理解,又能便于添加各項(xiàng)功能。程序可分為時(shí)間年月顯示程序、整點(diǎn)報(bào)時(shí)程序、鬧鈴的聲音程序、鬧鈴調(diào)節(jié)程序、調(diào)時(shí)程序、溫度檢測(cè)程序、溫度判斷程序、溫度顯示程序等。運(yùn)用這種方法關(guān)鍵在于各模塊的兼容和配合,若各模塊不匹配會(huì)出現(xiàn)意想不到的

36、錯(cuò)誤。</p><p>  本直流電機(jī)PID控制設(shè)計(jì)主要是依據(jù)圖3.1中的流程做出來的,時(shí)間分配比較均勻。首先,在編程之前必須了解硬件結(jié)構(gòu)尤其是各引腳的用法,以及內(nèi)部寄存器、存儲(chǔ)單元的用法,否則,編程無從下手,電路也無法下筆。這是前期準(zhǔn)備工作。第二部分是硬件部分:依據(jù)想要的功能分塊設(shè)計(jì)。第三部分是軟件部分:先學(xué)習(xí)理解C語言的編程方法再根據(jù)設(shè)計(jì)的硬件電路進(jìn)行分塊的編程調(diào)試,最終完成程序設(shè)計(jì)。第四部分是軟件仿真部分:

37、軟硬件設(shè)計(jì)好后將軟件載入芯片中進(jìn)行仿真。第六部分:連接電路并導(dǎo)入程序檢查電路。最后進(jìn)行功能擴(kuò)展。</p><p>  3.2 系統(tǒng)模塊設(shè)計(jì)</p><p>  本次設(shè)計(jì)可以分為五個(gè)功能:PID控制功能、顯示功能、鍵盤設(shè)定功能、溫度檢測(cè)功能、串行通訊功能。鍵盤設(shè)定功能是通過按鍵實(shí)現(xiàn)的,因此鍵盤設(shè)定功能和顯示功能可以合并為一個(gè)功能,即鍵盤/顯示功能。因此該系統(tǒng)可分成四個(gè)模塊:PID控制模塊、鍵

38、盤/顯示模塊、溫度檢測(cè)模塊、串行通訊模塊。由于增加了溫度檢測(cè),為了避免用一片單片機(jī)數(shù)據(jù)繁多,因此選用了兩片單片機(jī),一片用于PID控制、設(shè)定值/轉(zhuǎn)速顯示、鍵盤設(shè)定、主體功能,另一片專門用于溫度檢測(cè),并且通過串行通訊接口把溫度檢測(cè)的數(shù)據(jù)傳送給第一片單片機(jī)得以調(diào)整轉(zhuǎn)速??紤]到實(shí)驗(yàn)室資源和本設(shè)計(jì)任務(wù)繁重,我們決定用Proteus實(shí)現(xiàn)仿真而不用硬件實(shí)現(xiàn)。下面介紹各個(gè)模塊的實(shí)現(xiàn)方式。</p><p>  3.2.1 電機(jī)轉(zhuǎn)速

39、檢測(cè)及控制方案</p><p>  電機(jī)轉(zhuǎn)速的測(cè)量采用的時(shí)單位時(shí)間內(nèi)通過電機(jī)轉(zhuǎn)動(dòng)送給單片機(jī)的外部中斷進(jìn)行測(cè)量的。當(dāng)電機(jī)轉(zhuǎn)動(dòng)一圈時(shí)會(huì)向單片機(jī)發(fā)送脈沖,使單片機(jī)產(chǎn)生外部中斷,從而進(jìn)行轉(zhuǎn)速的測(cè)量。同時(shí),經(jīng)過計(jì)算后,單片機(jī)會(huì)通過另一端口輸出PWM脈沖,從而控制單片機(jī)轉(zhuǎn)速。</p><p>  圖3.2 電機(jī)控制方案圖</p><p>  3.2.2電子鐘鍵盤/顯示方案&l

40、t;/p><p>  鍵盤/顯示分為鍵盤、顯示兩部分。顯示有LCD數(shù)碼管液晶顯示、點(diǎn)陣顯示、LED數(shù)碼管靜態(tài)顯示、LED數(shù)碼管動(dòng)態(tài)掃描顯示,下面比較這四種顯示的優(yōu)缺點(diǎn),并選擇一種最合適的</p><p>  顯示方案一:LCD顯示</p><p>  LCD數(shù)碼管液晶顯示,由單片機(jī)驅(qū)動(dòng),它主要用來顯示大量數(shù)據(jù)、文字、圖形,能夠顯示的位數(shù)多,顯示得清洗多樣、美觀,但同時(shí)液

41、晶顯示器的編寫程序復(fù)雜,價(jià)格昂貴,從而降低了整個(gè)系統(tǒng)的性價(jià)比,故不采用此種方案。</p><p>  顯示方案二:點(diǎn)陣顯示</p><p>  點(diǎn)陣顯示是由八行八列的發(fā)光二極管集成在一塊電路上組成,主要用來顯示漢字,同時(shí)也能顯示數(shù)字和少量圖像,但是它的焊接較麻煩,價(jià)格高,鑒于所涉及的題目要求它不切實(shí)際,所以排除此方案。</p><p>  顯示方案三:LED數(shù)碼管靜

42、態(tài)顯示</p><p>  LED數(shù)碼管靜態(tài)顯示,電路容易理解且驅(qū)動(dòng)的程序簡(jiǎn)單,多片七段譯碼器驅(qū)動(dòng)顯示,這不僅增加了成本,還需要占用單片機(jī)多個(gè)I/O口,也給電路的焊接帶來一定的困難,因此不選用這種方案作為顯示模塊。</p><p>  顯示方案四:LED數(shù)碼管動(dòng)態(tài)掃描顯示</p><p>  LED數(shù)碼管動(dòng)態(tài)掃描顯示,價(jià)格低廉,不僅減少了對(duì)I/O口的浪費(fèi),而且能夠同

43、時(shí)驅(qū)動(dòng)多個(gè)數(shù)碼管,其驅(qū)動(dòng)程序容易編寫和理解。</p><p>  經(jīng)過四種方案的比較,排除了前三種方案之后,最終選擇方案四:LED數(shù)碼管動(dòng)態(tài)掃描顯示。</p><p><b>  鍵盤有兩種方案。</b></p><p>  鍵盤方案一:陣列式按鍵</p><p>  選取陣列式按鍵,減少了I/O口的使用,而且掃描M&#

44、215;N個(gè)按鍵只需要占用M+N個(gè)I/O口即可實(shí)現(xiàn),但給編程帶來了一定的困難,雖然節(jié)省了很多的口線,降低了成本,但在此設(shè)計(jì)中所用的按鍵要盡量少,因此排除此方案。</p><p>  鍵盤方案二:獨(dú)立式按鍵</p><p>  獨(dú)立式按鍵,每個(gè)按鍵實(shí)現(xiàn)一個(gè)功能,易于控制且編寫程序簡(jiǎn)單,容易理解,雖然會(huì)占用一定的單片機(jī)I/O口資源,但是題目中要求使用的按鍵要盡量少。</p>&l

45、t;p>  通過以上兩種方式比較,采用方案二。</p><p>  以上通過對(duì)顯示和鍵盤方案進(jìn)行選擇,選擇了最合適的顯示、鍵盤功能實(shí)現(xiàn)的方案。</p><p>  圖3.3 方案一鍵盤/顯示方框圖</p><p>  3.2.3溫度檢測(cè)方案</p><p>  傳統(tǒng)的測(cè)溫元件有熱電偶和熱電阻,需要很多硬件支持并且電路復(fù)雜,軟件復(fù)雜,因而

46、選用溫度傳感器DS18B20進(jìn)行溫度采集。</p><p>  圖3.4 溫度檢測(cè)方案</p><p>  3.2.4串行通訊方案</p><p>  由于該系統(tǒng)有很多數(shù)據(jù)需要傳送顯示,一片單片機(jī)遠(yuǎn)遠(yuǎn)不夠,還需要一片單片機(jī),由于單片機(jī)接口較少,要用串行方式在兩片單片機(jī)之間傳遞數(shù)據(jù)。串行通訊是兩片單片機(jī)間使用一根數(shù)據(jù)信號(hào)線,數(shù)據(jù)在一根數(shù)據(jù)信號(hào)線上一位一位地進(jìn)行傳輸,

47、每一位數(shù)據(jù)都占據(jù)一個(gè)固定的時(shí)間長(zhǎng)度。這種通信方式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸慢。要使兩片單片機(jī)能實(shí)現(xiàn)通訊,需要用到COMPIM與虛擬串口連接調(diào)試。</p><p>  3.2.5直流電機(jī)PID控制整體方案系統(tǒng)方框圖</p><p>  經(jīng)過方案論證與比較,選擇89C51作為主控,采用獨(dú)立式按鍵控制,LED數(shù)碼管動(dòng)態(tài)掃描顯示,DS18B20溫度檢測(cè),

48、選擇出最優(yōu)方案的系統(tǒng)框圖如圖圖3.3。</p><p>  圖3.5 總方案系統(tǒng)框圖</p><p><b>  硬件設(shè)計(jì)與實(shí)現(xiàn)</b></p><p><b>  4.1硬件設(shè)計(jì)</b></p><p>  直流電機(jī)PID控制電路的核心是兩塊89C51,用兩塊89C51作控制是為了電機(jī)控制和溫

49、度檢測(cè)互不干擾,其中一塊控制電機(jī),另一塊實(shí)現(xiàn)溫度檢測(cè)。</p><p>  4.1.1 按鍵電路設(shè)計(jì)</p><p>  根據(jù)功能需要,本控制電路需要設(shè)置一下功能鍵:按鍵設(shè)定轉(zhuǎn)速。在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=1

50、6個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來做鍵盤是合理的。 </p><p>  矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,下圖中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下

51、時(shí),所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。</p><p><b>  圖4.1 按鍵電路</b></p><p><b>  參見表4.1。</b></p><p>  表4.1 按鍵功能表</p><

52、;p><b>  按鍵操作說明如下:</b></p><p>  0~9鍵:通過此按鍵設(shè)定要求電機(jī)轉(zhuǎn)速的設(shè)定值。設(shè)定過程中數(shù)值依次左移,實(shí)現(xiàn)百十個(gè)位的設(shè)定。</p><p>  確定鍵:該鍵為自動(dòng)復(fù)位鍵,當(dāng)設(shè)定完成后按確定鍵就可以使設(shè)定值賦給相應(yīng)變量。</p><p>  清除鍵:清除已經(jīng)設(shè)定的轉(zhuǎn)速值。</p><p&

53、gt;  運(yùn)行鍵:設(shè)定值完畢則可以點(diǎn)此鍵進(jìn)行相應(yīng)的運(yùn)行。</p><p>  4.1.2 復(fù)位電路</p><p>  復(fù)位是單片機(jī)的初始化操作,以便使CPU和系統(tǒng)中其他部件都處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。除了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)單片機(jī)系統(tǒng)在運(yùn)行出錯(cuò)或操作錯(cuò)誤使系統(tǒng)處于思索狀態(tài)時(shí),也可按復(fù)位鍵重新啟動(dòng)。</p><p>  復(fù)位后,PC內(nèi)容初

54、始化為0000H,使單片機(jī)從0000H單元開始執(zhí)行程序。89C51單片機(jī)復(fù)位信號(hào)的輸入端是RST引腳,高電平有效。</p><p>  RST端的外部復(fù)位電路有兩種操作方式:上電自動(dòng)復(fù)位和按鍵手</p><p>  動(dòng)復(fù)位。按鍵手動(dòng)復(fù)位有電平方式和脈沖方式兩種。本設(shè)計(jì)用的是按鍵電平復(fù)位時(shí)相當(dāng)于RST端接高電平。如圖4.2所示。</p><p>  需要注意的是單片機(jī)

55、連接了8255A,復(fù)位電路也需與8255A的RESET相連。電路為上電復(fù)位電路,它是利用電容充電來實(shí)現(xiàn)的。在接電瞬間,RESET端的電位與VCC相同,隨著充電電流的減少,RESET的電位逐漸下降。只要保證RESET為高電平的時(shí)間大于兩個(gè)機(jī)器周期,便能正常復(fù)位。該電路除具有上電復(fù)位功能外,若要復(fù)位,只需按RESET鍵,此時(shí)電源VCC經(jīng)電阻R1、R2分壓,在RESET端產(chǎn)生一個(gè)復(fù)位高電平。</p><p><b

56、>  4.1.3顯示電路</b></p><p>  本設(shè)計(jì)中使用LED數(shù)碼管顯示電機(jī)的設(shè)定和實(shí)際轉(zhuǎn)速以及溫度值。電路設(shè)計(jì)如下:</p><p>  圖4.3 轉(zhuǎn)速的顯示電路</p><p>  溫度的顯示電路在另一個(gè)單片機(jī)中完成,圖相似。</p><p><b>  4.1.4溫度檢測(cè)</b><

57、/p><p>  系統(tǒng)設(shè)置了一路溫度檢測(cè)在該系統(tǒng)中,圖4.6是一路溫度硬件圖。</p><p>  圖4.4 DS18B20測(cè)溫原理框圖</p><p>  圖4.5 溫度檢測(cè)的硬件圖</p><p><b>  4.1.5串行通訊</b></p><p>  該系統(tǒng)用到兩片單片機(jī),因此單片機(jī)還需要

58、連接串行接口,電路略。</p><p>  4.1.6晶振電路設(shè)計(jì)</p><p>  在AT89S51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。而在芯片內(nèi)部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。時(shí)鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進(jìn)行二分頻之后,才成為單片機(jī)的時(shí)鐘脈沖信號(hào)。</p><

59、;p><b>  其電路如圖4.7。</b></p><p><b>  圖4.7 晶振電路</b></p><p>  4.1.7 電機(jī)驅(qū)動(dòng)電路</p><p>  通過端口采集電機(jī)轉(zhuǎn)速進(jìn)而輸出PWM波完成電機(jī)控制。</p><p>  PWM(Pulse Width Modulation)

60、控制技術(shù)就是對(duì)脈沖的寬度進(jìn)行調(diào)制的技術(shù),即通過對(duì)一系列脈沖的寬度進(jìn)行調(diào)制,來等效的獲得所需要的波形(含形狀和幅值);面積等效原理是PWM技術(shù)的重要基礎(chǔ)理論;一種典型的PWM控制波形SPWM:脈沖的寬度按正弦規(guī)律變化而和正弦波等效的PWM波形稱為SPWM波。</p><p>  圖4.7 電機(jī)驅(qū)動(dòng)電路</p><p><b>  4.1.8報(bào)警電路</b></p

61、><p>  當(dāng)溫度過高或者過低時(shí),報(bào)警電路會(huì)自動(dòng)報(bào)警。</p><p>  圖4.8 報(bào)警電路</p><p><b>  4.2系統(tǒng)面板圖</b></p><p>  時(shí)間控制模塊面板圖如圖4.8,溫度測(cè)量模塊面板圖如圖4.9。</p><p>  圖4.9 直流電機(jī)控制模塊面板圖</p&

62、gt;<p><b>  流程設(shè)計(jì)</b></p><p>  5.1 軟件設(shè)計(jì)流程圖</p><p>  5.1.1 主程序流程圖</p><p><b>  電機(jī)調(diào)試程序流程:</b></p><p><b>  溫度測(cè)量程序流程:</b></p>

63、;<p>  5.1.2 速度顯示子程序流程圖</p><p>  圖5.2速度顯示子程序流程圖</p><p>  5.1.3 溫度采集程序流程圖</p><p>  5.3 溫度采集程序流程圖 5.4 報(bào)警子程序流程圖</p><p>  5.1.4串行通信接受與發(fā)送流程圖</p>&l

64、t;p><b>  程序說明</b></p><p>  6.1 直流電機(jī)部分程序</p><p>  #include <reg51.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p&g

65、t;<p>  sbit p34=P3^4;</p><p>  sbit p26=P2^6;</p><p>  sbit p36=P3^6;</p><p>  uchar code table[]={0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p>

66、<p>  0x7f,0x6f }; </p><p>  uchar code chose[]={0x01,0x02,0x04,0x08,0x10,0x20};</p><p>  uint shu[6]={1,2,3,4,5,6};</p><p>  uchar q=0,i=0,m=0,n=0;</p><p&g

67、t;  uint count,miaoshu,sv,k=0,k2=0,sv1,sv2; //定義計(jì)數(shù)值,實(shí)際溫度值,設(shè)定的溫度值</p><p>  uchar sec,tcnt,flag,flag1;</p><p>  int rk,yk,uk,uk_1=0,ek,ek_1=0,ek_2=0; //PID計(jì)算參數(shù)</p><p>  signed char

68、 T=20,Kp=30,Td=8,Ti=100,q0,q1,q2; //PID參數(shù)其值經(jīng)反復(fù)調(diào)試得來</p><p>  uchar data buf[4]={0,1,1,1};//字型顯示中間變量</p><p>  /**********************************************************************************/&

69、lt;/p><p>  延時(shí)子程序用來產(chǎn)生1ms的延時(shí),用于在程序中的等待</p><p>  /**********************************************************************************/</p><p>  //延時(shí)1ms子程序</p><p>  void delay

70、(uchar z)</p><p><b>  {</b></p><p>  uchar x,y;</p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b></

71、p><p>  /**********************************************************************************/</p><p>  顯示子程序用來在數(shù)碼管中顯示電機(jī)的設(shè)定轉(zhuǎn)速或計(jì)算轉(zhuǎn)速以及實(shí)際轉(zhuǎn)速</p><p>  /***************************************

72、*******************************************/</p><p><b>  //顯示子程序</b></p><p>  void display(uint a,uint b)</p><p><b>  {</b></p><p><b>  ch

73、ar i;</b></p><p>  shu[0]=a/100;</p><p>  shu[1]=a%100/10;</p><p>  shu[2]=a%10;</p><p>  shu[3]=b/100;</p><p>  shu[4]=b%100/10;</p><p&g

74、t;  shu[5]=b%10;</p><p>  for(i=0;i<6;i++)</p><p><b>  {</b></p><p>  P2=chose[i];</p><p>  P0=table[shu[i]];</p><p>  delay(5);</p>

75、;<p><b>  }</b></p><p><b>  }</b></p><p>  /**********************************************************************************/</p><p>  定時(shí)器中斷子程序用來產(chǎn)生0

76、.1秒的中斷,以此來測(cè)量電機(jī)的轉(zhuǎn)速</p><p>  /**********************************************************************************/</p><p>  // 定時(shí)器中斷0子程序</p><p>  void t0(void) interrupt 1 using 0 //定時(shí)

77、T0中斷服務(wù)函數(shù)</p><p><b>  {</b></p><p>  tcnt++; //每過250ust tcnt 加一</p><p>  if(tcnt==40) //計(jì)滿40 次(1/100 秒)時(shí)</p><p><b>  {</b></p><p>

78、  tcnt=0; //重新再計(jì)</p><p><b>  sec++;</b></p><p>  if(sec==10) //定時(shí)0.1 秒,在從零開始計(jì)時(shí)</p><p><b>  {</b></p><p><b>  sec=0;</b></p>&

79、lt;p>  TH0=0x06; //對(duì)TH0 TL0 賦值</p><p><b>  TL0=0x06;</b></p><p>  miaoshu=count;</p><p><b>  count=0;</b></p><p><b>  }</b></p

80、><p><b>  }</b></p><p><b>  }</b></p><p>  /**********************************************************************************/</p><p>  用來記錄中斷數(shù),從而

81、得到轉(zhuǎn)速</p><p>  /**********************************************************************************/</p><p>  void sdf(void) interrupt 2 using 0 //外部中斷服務(wù)函數(shù)</p><p><b>  { </

82、b></p><p>  count=count+1;</p><p><b>  }</b></p><p>  /**********************************************************************************/</p><p>  接收來自另

83、一個(gè)單片機(jī)的中斷并放入一個(gè)數(shù)組中以便在顯示函數(shù)中方便調(diào)用此數(shù)據(jù),其中加了</p><p>  容錯(cuò)程序,通過一個(gè)特殊字符’11’,來區(qū)別哪一個(gè)是三位數(shù)的百位,十位,個(gè)位。</p><p>  /**********************************************************************************/</p><

84、p>  void jieshou()//接收子程序</p><p><b>  {uchar g;</b></p><p><b>  if(RI==1)</b></p><p><b>  {g=SBUF;</b></p><p><b>  if(g==11

85、)</b></p><p><b>  m=0;</b></p><p><b>  buf[m]=g;</b></p><p><b>  m++; </b></p><p><b>  if(m==4)</b></p>&l

86、t;p><b>  m=0;</b></p><p>  RI=0;//REN=1;</p><p><b>  } </b></p><p><b>  }</b></p><p>  /***************************************

87、*******************************************/</p><p>  檢測(cè)按鍵值計(jì)算對(duì)應(yīng)的數(shù)值</p><p>  /**********************************************************************************/</p><p><b>  //

88、左移一位</b></p><p>  void yishu(uchar num)</p><p><b>  {</b></p><p>  uchar bai,shi,ge;</p><p>  bai=sv1%100/10;</p><p>  shi=sv1%10;</p&

89、gt;<p><b>  ge=num;</b></p><p>  sv1=bai*100+shi*10+ge;</p><p>  k2=sv1;//xinjia</p><p><b>  }</b></p><p>  /***************************

90、*******************************************************/</p><p><b>  檢測(cè)對(duì)應(yīng)的按鍵</b></p><p>  /**********************************************************************************/</p&g

91、t;<p><b>  //按鍵子程序</b></p><p>  void key()</p><p><b>  {</b></p><p>  uchar i,temp,lie,hang,shu;</p><p>  for(i=0;i<4;i++) //求出按鍵值

92、</p><p><b>  {</b></p><p>  P1=~chose[i];</p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  if(temp!=0xf0)</p>

93、<p><b>  {</b></p><p><b>  hang=i;</b></p><p>  if(temp==0xe0)</p><p><b>  lie=1;</b></p><p>  else if(temp==0xd0)</p>&

94、lt;p><b>  lie=2;</b></p><p>  else if(temp==0xb0)</p><p><b>  lie=3;</b></p><p>  else if(temp==0x70)</p><p><b>  lie=4;</b></

95、p><p>  break;</p><p><b>  }</b></p><p><b>  } </b></p><p>  shu=hang*4+lie;//數(shù)為對(duì)應(yīng)的按鍵</p><p>  switch(shu)</p><p>

96、<b>  {</b></p><p>  case 1: if(!flag)yishu(0);break;</p><p>  case 2: if(!flag) yishu(1);break;</p><p>  case 3: if(!flag) yishu(2);break;</p><p>  case

97、4: if(!flag) yishu(3);break;</p><p>  case 5: if(!flag) yishu(4);break;</p><p>  case 6: if(!flag) yishu(5);break;</p><p>  case 7: if(!flag) yishu(6);break;</p><p>  

98、case 8: if(!flag) yishu(7);break;</p><p>  case 9: if(!flag) yishu(8);break;</p><p>  case 10: if(!flag) yishu(9);break;</p><p>  case 11: flag++;/*flag1++*/; break;</p><

99、;p>  case 12: sv1=0;miaoshu=0;flag=0;flag1=0;break;</p><p>  case 13: flag1++; break;</p><p>  default: break;</p><p><b>  }</b></p><p>  while(temp!=0x

100、f0)//放鍵檢測(cè)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  for(i=0;i<10;i++)</p><p>  display(s

101、v1,miaoshu);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //按鍵檢測(cè)程序</b></p><p>  void keyscan()</p><p><b>  {&l

102、t;/b></p><p>  uchar temp;</p><p><b>  P1=0xf0;</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  if(temp!=0xf0

103、)</p><p><b>  {</b></p><p>  delay(5);//消除抖動(dòng)</p><p><b>  P1=0xf0;</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&

104、0xf0;</p><p>  if(temp!=0xf0)</p><p><b>  key();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /********************

105、**************************************************************/</p><p>  進(jìn)行pid的計(jì)算,用來在后面的程序中進(jìn)行電機(jī)的閉環(huán)控制</p><p>  /**********************************************************************************/

106、</p><p>  void pid(void) //PID 計(jì)算輸出量</p><p>  {sv2=100*buf[1]+10*buf[2]+buf[3];</p><p>  if(p26==0)//低電平時(shí)正常顯示設(shè)定值</p><p><b>  sv=sv1;</b></p><p&g

107、t;  if(p26==1)//高電平時(shí)顯示通信值</p><p>  // { if(n==1)</p><p><b>  sv=sv2;</b></p><p>  //if(n==0)</p><p><b>  //sv=k;</b></p><p><

108、b>  // } </b></p><p>  ek=sv-miaoshu;</p><p>  uk=uk_1+q0*ek+q1*ek_1+q2*ek_2;</p><p>  ek_2=ek_1;</p><p><b>  ek_1=ek;</b></p><p>&l

109、t;b>  uk_1=uk;</b></p><p>  if(uk>501)</p><p>  uk=501; //限定輸出上限</p><p><b>  if(uk<1)</b></p><p>  uk=1; //限定輸出下限</p><p><b&

110、gt;  }</b></p><p>  /**********************************************************************************/</p><p>  主函數(shù):初始化定時(shí)器、進(jìn)行順序的子程序執(zhí)行</p><p>  /*****************************

111、*****************************************************/</p><p><b>  main()</b></p><p><b>  {</b></p><p>  q0=Kp*(1+T/Ti+Td/T);//先算出PID的計(jì)算參數(shù)</p><p&g

112、t;  q1=-Kp*(1+2*Td/T);</p><p>  q2=Kp*Td/T;</p><p><b>  p34=0;</b></p><p><b>  EX0=1;</b></p><p><b>  IT1=1;</b></p><p>

113、;<b>  IP=0X00;</b></p><p>  TMOD=0x22; //定時(shí)器T0工作在方式2 自動(dòng)重裝方式,計(jì)數(shù)器T1工作在方式2 自動(dòng)重裝方式</p><p>  TH0=0x06; //對(duì)TH0 TL0 賦值</p><p><b>  TL0=0x06;</b></p><p>

114、;<b>  TH1=0XFC;</b></p><p><b>  TL1=0XFC;</b></p><p>  TR0=1; //開始定時(shí)</p><p>  ET0=1; //允許T0 產(chǎn)生中斷</p><p><b>  TR1=1;</b></p>&

115、lt;p><b>  ET1=0;</b></p><p><b>  EA=1;</b></p><p><b>  EX1=1;</b></p><p><b>  EA=1;</b></p><p><b>  //ES=1;<

116、;/b></p><p><b>  sec=0;</b></p><p>  SCON=0x50; //MODER1,REN=1;</p><p>  PCON=0x00;</p><p>  miaoshu=0;tcnt=0;count=0;sv=0;</p><p><b>

117、  flag=0;</b></p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  keyscan();</p><p>  jieshou();//xinjia</p><p>  if(flag==2

118、)</p><p><b>  p34=0;</b></p><p>  if(flag1==1)</p><p><b>  {</b></p><p>  //uint i;</p><p><b>  pid();</b></p>

119、<p>  if(ek>100)</p><p><b>  {</b></p><p><b>  p34=1;</b></p><p><b>  }</b></p><p>  else if(ek>=0)</p><p>

120、<b>  {</b></p><p><b>  p34=1;</b></p><p>  delay(uk/10);</p><p>  display(sv,miaoshu);</p><p><b>  p34=0;</b></p><p> 

121、 delay(50-uk/10);</p><p><b>  }</b></p><p>  //else if(ek<0)</p><p>  //p34=0;</p><p><b>  }</b></p><p>  if(p26==0)</p

122、><p>  display(sv1,miaoshu);</p><p><b>  else</b></p><p>  display(sv2,miaoshu); </p><p><b>  } </b></p><p><b>  }</b&g

123、t;</p><p>  6.2 溫度檢測(cè)部分程序</p><p>  #include<reg52.h></p><p>  #include <intrins.h></p><p>  #define uchar unsigned char </p><p>  #define ui

124、nt unsigned int</p><p>  sbit DATA = P1^1; //DS18B20接入口</p><p>  uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰極字型碼</p><

125、p>  int temp,temp2; //溫度值</p><p>  int ss;//中間的一個(gè)變量</p><p><b>  int dd;</b></p><p>  int j,i0=0,k;</p><p>  uchar sec,tcnt,flag0,flag1,sec2;</p>

126、<p>  uchar data b;//定時(shí)器中斷次數(shù)</p><p>  uchar data buf[4]={0,0,0,0};//字型顯示中間變量</p><p>  uchar data buf2[4]={11,0,0,0};</p><p>  int alarmH=500; //默認(rèn)報(bào)警值</p><p>  

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論