微型計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)報(bào)告(二階電壓跟蹤_單片機(jī))_第1頁(yè)
已閱讀1頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  二階環(huán)節(jié)電壓跟蹤控制系統(tǒng)的設(shè)計(jì)</p><p>  (采用單片機(jī)教學(xué)實(shí)驗(yàn)裝置)</p><p><b>  目錄</b></p><p><b>  一、序言1</b></p><p><b>  二、設(shè)計(jì)步驟2</b></p><

2、p>  2.1 確定基本設(shè)計(jì)目標(biāo)2</p><p>  2.2 確定基本實(shí)現(xiàn)方案2</p><p>  2.2.1 搭建二階環(huán)節(jié)2</p><p>  2.2.2 電路輸出跟蹤階躍信號(hào)2</p><p>  2.2.3 設(shè)計(jì)人機(jī)交互接口(鍵盤(pán))2</p><p>  2.2.4 精度要求2</p

3、><p>  2.3 硬件設(shè)計(jì)2</p><p>  2.4 軟件設(shè)計(jì)3</p><p>  2.5 調(diào)試完善程序4</p><p><b>  三、 心得體會(huì)5</b></p><p><b>  四、參考文獻(xiàn)9</b></p><p><

4、;b>  五、附錄10</b></p><p>  5.1系統(tǒng)框圖10</p><p>  5.2電原理圖11</p><p>  5.3程序流程圖12</p><p>  5.4程序清單17</p><p><b>  一、序言</b></p><

5、p>  自動(dòng)控制在日常生活中的應(yīng)用非常廣泛,大到航天航空,小到家用電器都會(huì)涉及到自動(dòng)控制。自動(dòng)控制系統(tǒng)的任務(wù)是使被控對(duì)象的被控量跟隨給定值的變化而變化。閉環(huán)控制系統(tǒng)是一種最基本的自動(dòng)控制系統(tǒng),圖1是單回路閉環(huán)控制系統(tǒng)的框圖。變送器(含測(cè)量元件)對(duì)被控量C進(jìn)行測(cè)量,并將其變換為電信號(hào),經(jīng)A/D轉(zhuǎn)換為數(shù)字信號(hào)后反饋給控制器??刂破鲗⒎答佇盘?hào)與給定值R進(jìn)行比較,并根據(jù)指定的控制規(guī)律產(chǎn)生相應(yīng)的控制信號(hào),經(jīng)D/A轉(zhuǎn)換后作用于被控對(duì)象,使被控

6、量與給定值保持一致。</p><p>  圖1.1 單回路閉環(huán)控制系統(tǒng)框圖</p><p><b>  二、設(shè)計(jì)步驟</b></p><p>  2.1 確定基本設(shè)計(jì)目標(biāo)</p><p>  仔細(xì)研讀了設(shè)計(jì)任務(wù)書(shū)后,我們確認(rèn)了本次課程設(shè)計(jì)需要實(shí)現(xiàn)的基本任務(wù)目標(biāo)有:</p><p> ?。?)搭建一

7、個(gè)二階環(huán)節(jié);</p><p> ?。?)示波器能夠顯示輸出曲線;</p><p> ?。?)要求設(shè)計(jì)人機(jī)交互接口,參數(shù)可隨時(shí)設(shè)置;</p><p><b> ?。?)精度要求。</b></p><p>  2.2 確定基本實(shí)現(xiàn)方案</p><p>  對(duì)比任務(wù)書(shū)的要求,我們討論得出了要完成各個(gè)基本

8、設(shè)計(jì)任務(wù)的初步實(shí)現(xiàn)方案:</p><p>  2.2.1 搭建二階環(huán)節(jié)</p><p>  本次課程設(shè)計(jì)中,由實(shí)驗(yàn)室提供二階環(huán)節(jié)系統(tǒng)裝置,故不需要我們自己搭建。</p><p>  2.2.2 電路輸出跟蹤階躍信號(hào)</p><p>  我們采用實(shí)驗(yàn)箱上的4×4鍵盤(pán)作為系統(tǒng)輸入,實(shí)驗(yàn)箱讀取按鍵后,得到一個(gè)給定值,系統(tǒng)通過(guò)A/D讀取二階

9、環(huán)節(jié)的電壓并與給定值比較,采取控制并將輸出值通過(guò)D/A送給二階環(huán)節(jié)。整個(gè)過(guò)程中需要用的讀鍵程序、D/A、A/D轉(zhuǎn)換程序、LED顯示程序、濾波程序、控制計(jì)算程序……</p><p>  2.2.3 設(shè)計(jì)人機(jī)交互接口(鍵盤(pán))</p><p>  由于任務(wù)要求信號(hào)參數(shù)可通過(guò)人機(jī)交互接口設(shè)置,我們討論后設(shè)計(jì)在LED上顯示輸入的信息。通過(guò)4×4鍵盤(pán)輸入控制信號(hào)。按鍵設(shè)置為‘0’到‘9’十個(gè)

10、按鍵加上負(fù)號(hào)、小數(shù)點(diǎn)和確認(rèn)這三個(gè)按鍵。</p><p>  2.2.4 精度要求</p><p>  對(duì)于精度≤±5%,調(diào)節(jié)時(shí)間≤25秒的設(shè)計(jì)要求,我們決定在軟件調(diào)試時(shí)通過(guò)修改各參數(shù)來(lái)完成。</p><p><b>  2.3 硬件設(shè)計(jì)</b></p><p>  本次課程設(shè)計(jì)中最為重要的硬件設(shè)計(jì)任務(wù)是信號(hào)數(shù)據(jù)

11、采集系統(tǒng)的搭建。數(shù)據(jù)采集系統(tǒng)是由單片機(jī)和硬件接口電路組成,硬件接口電路主要由采樣保持器、A/D轉(zhuǎn)換電路、輸入接口電路、D/A轉(zhuǎn)換電路、控制邏輯電路輸出接口電路等組成。其工作過(guò)程是:由機(jī)接收電路模擬信號(hào),將模擬信號(hào)送到采樣保持電路進(jìn)行采樣;當(dāng)單片機(jī)啟動(dòng)A/D轉(zhuǎn)換電路轉(zhuǎn)換時(shí),采樣保持電路處于保持狀態(tài),并把信號(hào)送給A/D轉(zhuǎn)換電路實(shí)現(xiàn)模擬量到數(shù)字量的轉(zhuǎn)換;A/D轉(zhuǎn)換結(jié)束后,將送出一結(jié)束信號(hào),該信號(hào)可產(chǎn)生已中斷請(qǐng)求或供單片機(jī)查詢(xún),同時(shí)采樣/保持電

12、路進(jìn)入采樣狀態(tài),單片機(jī)由輸入接口電路讀取模擬信號(hào)并進(jìn)行一次轉(zhuǎn)換數(shù)據(jù)。當(dāng)單片機(jī)向D/A轉(zhuǎn)換電路輸出數(shù)據(jù)時(shí),D/A轉(zhuǎn)換電路輸出一個(gè)與輸出數(shù)據(jù)對(duì)應(yīng)的模擬電壓。硬件電路就是選取合適的電子器件和芯片,設(shè)計(jì)成滿(mǎn)足系統(tǒng)速度、精度和可靠性等技術(shù)要求的電路接口,使單片計(jì)算機(jī)能按要求完成上述工作過(guò)程。</p><p>  其次,按鍵鍵盤(pán)功能設(shè)計(jì)也是重要的,不同的鍵盤(pán)設(shè)計(jì)帶給編程的難度是不同的,具體功能的體現(xiàn)也是有差別的。</p

13、><p>  本次課程設(shè)計(jì)需要用到的硬件系統(tǒng)還有閉環(huán)控制系統(tǒng)。其實(shí)閉環(huán)控制系統(tǒng)硬件組成與數(shù)據(jù)采集系統(tǒng)基本相同,主要由模擬輸入通道、模擬輸出通道和被控對(duì)象等組成。圖2.3.1就是此次設(shè)計(jì)過(guò)程中一個(gè)很重要的硬件模塊,即二階環(huán)節(jié)系統(tǒng):</p><p>  圖2.3.1 二階環(huán)節(jié)</p><p><b>  2.4 軟件設(shè)計(jì)</b></p>

14、<p>  相同于硬件設(shè)計(jì),軟件設(shè)計(jì)也大體分為兩個(gè)部分,及采集系統(tǒng)和閉環(huán)控制系統(tǒng)。因?yàn)榇舜握n程設(shè)計(jì)的主要任務(wù)是完成閉環(huán)控制系統(tǒng)的軟件設(shè)計(jì),而且采集系統(tǒng)的軟件設(shè)計(jì)可以包括在閉環(huán)控制系統(tǒng)的步驟里。</p><p>  除了必須達(dá)到采集系統(tǒng)的要求外,閉環(huán)控制系統(tǒng)的軟件設(shè)計(jì)還必須有控制算法程序和更強(qiáng)的數(shù)據(jù)處理能力。其實(shí)一個(gè)控制系統(tǒng)的控制過(guò)程可歸納為以下3個(gè)步驟:</p><p>  1.

15、 實(shí)時(shí)數(shù)據(jù)采集:即對(duì)被控參數(shù)的瞬時(shí)值進(jìn)行測(cè)量。</p><p>  2. 實(shí)時(shí)決策:對(duì)表征被控對(duì)象狀態(tài)的測(cè)量值進(jìn)行分析,并按已定的控制規(guī)律進(jìn) 行控制。</p><p>  3. 實(shí)時(shí)控制:根據(jù)決策,實(shí)施對(duì)控制機(jī)構(gòu)發(fā)出控制信號(hào)。</p><p>  控制程序的運(yùn)行必須滿(mǎn)足以上控制過(guò)程,同時(shí)控制算法是使被控參數(shù)盡快達(dá)到給定值,并能將被控參數(shù)隨時(shí)

16、間的變化情況在屏幕上顯示出來(lái)。</p><p>  參考程序流程圖如圖3 所示。該程序由初始化和數(shù)據(jù)采集,數(shù)據(jù)濾波,標(biāo)度變換,LED顯示,D/A輸出,控制程序和等子程序構(gòu)成。</p><p><b>  各子程序功能為:</b></p><p>  (1)數(shù)據(jù)采集:連續(xù)采集12個(gè)數(shù)據(jù),每采集一個(gè)數(shù)據(jù),去掉最前面一個(gè)數(shù)據(jù)。</p>

17、<p>  (2)數(shù)字濾波:具體方法是對(duì)12個(gè)數(shù)據(jù)取平均值</p><p>  (3)標(biāo)度變換:函數(shù) void symbol()將數(shù)字濾波后的采樣值按比列換成與實(shí)際輸入對(duì)應(yīng)的模擬電壓毫伏值,然后存放在數(shù)據(jù)緩沖區(qū)。</p><p>  (4)LED顯示:函數(shù)void display()顯示給定值和跟蹤電壓值。</p><p>  (5)控制決策:函數(shù)void

18、 pid()對(duì)給定值與真實(shí)值的誤差進(jìn)行比例、積分和微分運(yùn)算,得到本次控制值,存放在輸出緩沖區(qū)。</p><p>  (6)D/A輸出:D/A輸出程序是將當(dāng)前輸出緩沖區(qū)數(shù)據(jù)輸出到D/A轉(zhuǎn)換器端口。</p><p>  (7)檢查按鍵:函數(shù)void keyscan()檢查是否有鍵按下,以確定給定值為多少。如有鍵按下,讀取鍵值,是確定鍵鍵就表示輸入完畢。</p><p>

19、  2.5 調(diào)試完善程序</p><p>  相關(guān)硬件及軟件設(shè)計(jì)完成后,最后的主要工作就是調(diào)試運(yùn)行程序,并達(dá)到設(shè)計(jì)任務(wù)要求的精度。整個(gè)過(guò)程就是不斷地修改相關(guān)參數(shù)并調(diào)試運(yùn)行,已達(dá)到理想效果。調(diào)試完善程序之后,我們便開(kāi)始著手撰寫(xiě)課程設(shè)計(jì)報(bào)告。</p><p><b>  心得體會(huì)</b></p><p>  計(jì)算機(jī)控制原理的課程設(shè)計(jì)剛剛結(jié)束,微型計(jì)

20、算機(jī)控制的課程設(shè)計(jì)接踵而至。這次我們面對(duì)的實(shí)際控制對(duì)象更接近于我們的生活了,我突然感覺(jué)到了我積累了的知識(shí)終于有了用武之地了。我很興奮,但興奮的同時(shí)我也感覺(jué)得到此次課程設(shè)計(jì)的重要性,眼前的難題是我們分到了單片機(jī)類(lèi)型的控制。雖然平時(shí)比較擅長(zhǎng)軟件設(shè)計(jì)的我此時(shí)也感到一絲絲壓力,因?yàn)槲覀冃〗M決定要用已經(jīng)一年多沒(méi)有用過(guò)的C語(yǔ)言編寫(xiě)程序,雖然當(dāng)時(shí)我學(xué)習(xí)C語(yǔ)言的時(shí)候很認(rèn)真。而且我自認(rèn)為當(dāng)時(shí)學(xué)得很不錯(cuò)的,但畢竟有一年多沒(méi)有用了,不經(jīng)有點(diǎn)生疏了。</

21、p><p>  周一,我們滿(mǎn)懷激情的來(lái)到了單片機(jī)實(shí)驗(yàn)室。我們沒(méi)有著急馬上動(dòng)手做實(shí)驗(yàn),而是檢查起了我們的實(shí)驗(yàn)設(shè)備是否能正常工作。我們把給的實(shí)例程序?qū)懙搅藛纹瑱C(jī)里,導(dǎo)線也連接了,當(dāng)我們運(yùn)行時(shí),發(fā)現(xiàn)實(shí)驗(yàn)設(shè)備無(wú)法正常工作,起初我們還懷疑過(guò)是不是實(shí)例程序出了問(wèn)題。同時(shí)我們也在認(rèn)真的檢查我們的線路連接,當(dāng)然,我們并沒(méi)有發(fā)現(xiàn)問(wèn)題。就這樣,迷迷糊糊的周一就這樣過(guò)去了,一點(diǎn)收獲也沒(méi)有。</p><p>  周二

22、,我們又調(diào)試了其他實(shí)例程序,發(fā)現(xiàn)用lcd顯示的時(shí)候,是能夠正常顯示的。但我們問(wèn)了一下和我們做同一個(gè)項(xiàng)目的組員,他們也沒(méi)有多大的進(jìn)展。這下我心里稍微舒緩了一下,然后聽(tīng)他們說(shuō)著實(shí)驗(yàn)設(shè)備有些老化,不能得到正確的結(jié)果就可能是這個(gè)原因了,我現(xiàn)在也只能這樣想了,我決定先用proteus仿真一下。下午一回到宿舍就開(kāi)始搭建實(shí)驗(yàn)電路了,但當(dāng)我用搭建好的實(shí)驗(yàn)電路仿真時(shí),發(fā)現(xiàn)也不能正常的運(yùn)行。這下我一下子就懵了,我不知道到底是我搭建的電路有問(wèn)題,還是程序出現(xiàn)

23、了問(wèn)題。我努力的在網(wǎng)上查找資料,關(guān)于仿真軟件的運(yùn)用,還有就是查找軟件的錯(cuò)誤,但到了晚上十點(diǎn)多了,還是沒(méi)有找到結(jié)果。</p><p>  周三,沒(méi)有任何進(jìn)展,還是在查找proteus仿真的錯(cuò)誤,還是沒(méi)有任何的進(jìn)展。很快,到了晚上,有些小組已經(jīng)換到了計(jì)算機(jī)硬件機(jī)房,用另外一套設(shè)備了。到了我們小組抉擇的時(shí)候了,我們到底是繼續(xù)選擇留在單片機(jī)機(jī)房,還是換機(jī)房用新的設(shè)備。最后通過(guò)小組決定,我們還是決定留下了,我們不能退縮,面

24、對(duì)這點(diǎn)困難。但說(shuō)實(shí)話,目前為止我們還是沒(méi)有任何進(jìn)展,此時(shí),不經(jīng)心里有點(diǎn)著急了,一周的課程設(shè)計(jì)我們已經(jīng)花了大半的時(shí)間了。剩下的兩天時(shí)間,我們能做出結(jié)果嗎?我真的無(wú)從知曉。</p><p>  周四,我們又來(lái)到了單片機(jī)機(jī)房,今天老師考慮到了導(dǎo)線老化的原因,終于為我們換了一批導(dǎo)線。用新的導(dǎo)線接上,實(shí)例程序能正常工作了。我一下子來(lái)了精神,當(dāng)天上午我完成了我的指定任務(wù),調(diào)試也完全沒(méi)有問(wèn)題。我也分配給了小組成員不同的子程序,

25、這樣希望能盡快完成我們的任務(wù),畢竟我們的時(shí)間已經(jīng)不多了。下午我們進(jìn)行了A/D轉(zhuǎn)換模塊的調(diào)試,這模塊的調(diào)試遇到了一些麻煩。到了晚上,A/D模塊仍然沒(méi)有任何進(jìn)展。</p><p>  周五,很早就來(lái)到了實(shí)驗(yàn)室,這是我們最后一天了,我們要抓緊時(shí)間了,其他小組已經(jīng)陸續(xù)答辯了,這無(wú)形給了我們很大的壓力,但是壓力就是動(dòng)力。到了中午的時(shí)候,終于調(diào)試出了A/D模塊功能。現(xiàn)在主要是PID算法和D/A模塊了,下午我們?cè)缭缇屯瓿闪薉/

26、A模塊的調(diào)試,我們不敢休停半刻,我們著手PID的調(diào)試?,F(xiàn)在回想起來(lái),這個(gè)模塊是最傷腦筋的模塊了,我們一直調(diào)試到晚上十點(diǎn)了,此時(shí)就剩下四組了。最讓我感到溫暖的是,老師也在同我們并肩作戰(zhàn),雖然到最后還是沒(méi)有調(diào)試出來(lái),但老師看到我們那依依不舍的樣子,決定星期六再給我們半天的時(shí)間。這消息對(duì)我們無(wú)疑是雪中送炭。</p><p>  周六,花了兩個(gè)小時(shí),終于把結(jié)果弄出來(lái)了,我們一周的課程設(shè)計(jì)也算告一段落了。</p>

27、;<p>  現(xiàn)在總結(jié)一下,我覺(jué)得主要是我們定義的數(shù)據(jù)類(lèi)型出了問(wèn)題。一開(kāi)始我們考慮到要用到小數(shù)點(diǎn),所以定義浮點(diǎn)類(lèi)型數(shù)據(jù),編譯時(shí)發(fā)現(xiàn)地址溢出。我們只能將有些數(shù)據(jù)改為其他類(lèi)型,但運(yùn)算時(shí)出現(xiàn)了問(wèn)題。還有就是c語(yǔ)言用負(fù)數(shù)計(jì)算時(shí),有可能會(huì)出錯(cuò),最好用正數(shù)進(jìn)行運(yùn)算。當(dāng)然計(jì)算時(shí)也要考慮數(shù)據(jù)溢出的問(wèn)題??傊?,通過(guò)這次課程設(shè)計(jì),我懂得了如何用軟件實(shí)現(xiàn)pid控制,同時(shí)對(duì)pid的原理也有了更清晰的認(rèn)識(shí)。</p><p>

28、  本次微型計(jì)算機(jī)控制我們的課程設(shè)計(jì)題目是二階環(huán)節(jié)電壓跟蹤控制系統(tǒng)的設(shè)計(jì)(采用單片機(jī)教學(xué)實(shí)驗(yàn)系統(tǒng)的)。由于本次的時(shí)間比較緊只有一周的時(shí)間,再加上要使用單片機(jī)無(wú)疑增加了難度。為了能很好的完成任務(wù)小組成員都花了不少時(shí)間復(fù)習(xí)單片機(jī)和計(jì)算機(jī)控制的知識(shí),并自行研究課題設(shè)計(jì)如何做。</p><p>  在對(duì)題目有一定的了解基礎(chǔ)后我們小組開(kāi)始展開(kāi)討論,確定和設(shè)計(jì)系統(tǒng)框圖并分配好任務(wù),通力完成。題目要求我們?cè)O(shè)計(jì)一個(gè)控制器輸出作用

29、于電路輸入IN使得電路輸出能夠跟蹤-5~5V范圍內(nèi)的任意階躍信號(hào),這就需要我們的程序設(shè)計(jì)中要包含有A/D轉(zhuǎn)換、標(biāo)度變換、D/A轉(zhuǎn)換、PID控制算法以及顯示與鍵盤(pán)等模塊。在明確好各個(gè)模塊后我分配到的是標(biāo)度轉(zhuǎn)換模塊然后協(xié)助其他組員完成其他模塊。</p><p>  微型計(jì)算機(jī)控制系統(tǒng)在讀入被測(cè)模擬信號(hào)后需要轉(zhuǎn)換成數(shù)字量,變成操作人員所熟悉的數(shù)值并顯示出來(lái),這就是標(biāo)度變換模塊所要?dú)獾淖饔?。本次課題我們要A/D轉(zhuǎn)換讀入電

30、壓值并轉(zhuǎn)成0~255中的數(shù)字量。-5~5V的電壓轉(zhuǎn)成0~255相應(yīng)的數(shù)字量我們采用的是線性標(biāo)度轉(zhuǎn)換,把它帶入相應(yīng)的標(biāo)度變換公式,再用程序語(yǔ)言表示出來(lái)即可,再接下來(lái)就是把相應(yīng)的數(shù)字量一位一位分離出來(lái)再在LED顯示管上顯示出來(lái)。在復(fù)習(xí)過(guò)單片機(jī)和計(jì)算機(jī)控制后很快就完成了這模塊的編程。</p><p>  在經(jīng)過(guò)漫長(zhǎng)的編程后,終于把每個(gè)模塊都初步完成,再接下來(lái)我們就一起進(jìn)行聯(lián)調(diào)。一開(kāi)始,小錯(cuò)誤不斷,在我們仔細(xì)排錯(cuò)下對(duì)多處

31、地方進(jìn)行了調(diào)整修改后鍵盤(pán)、顯示、A/D轉(zhuǎn)換、D/A轉(zhuǎn)換都能夠順利的工作,但在整塊一起調(diào)試以后我們的結(jié)果卻出不來(lái),我們的PID控制一直沒(méi)起到控制的效果,輸出電壓總是維持在5V處,沒(méi)有跟隨輸入變化。我們經(jīng)過(guò)多次排查甚至多次改控制算法都沒(méi)能解決問(wèn)題的算在。最后我們實(shí)在沒(méi)辦法,只能請(qǐng)老師來(lái)協(xié)助我們。在老師的協(xié)助下我們調(diào)出各個(gè)模塊單步調(diào)試,觀察變量變化看是否按照程序在準(zhǔn)確執(zhí)行,最終老師幫我們找到了原因:我們都數(shù)據(jù)類(lèi)型定得太亂了,一會(huì)整型一會(huì)浮點(diǎn)數(shù)

32、的,計(jì)算出來(lái)的數(shù)值一直有錯(cuò)。在老師的建議下我們改動(dòng)程序,統(tǒng)一把數(shù)值定為整型,解決了我們的困擾。最后我們一起對(duì)控制算法進(jìn)行調(diào)整,先是值進(jìn)行比例控制確定了一個(gè)比較合適的參數(shù),再加入微分環(huán)節(jié)加快了調(diào)節(jié)時(shí)間,接著引入積分環(huán)節(jié)消除靜差。</p><p>  在經(jīng)過(guò)一周的努力我們成功的完成了課題,并且有不錯(cuò)的控制效果,輸出在經(jīng)過(guò)很多的調(diào)節(jié)時(shí)間后進(jìn)入穩(wěn)定,并且已輸入的誤差只有0.03V左右。在這次課程設(shè)計(jì)中我們小組遇到了很多困

33、難,在我們相互幫助團(tuán)結(jié)協(xié)作下才得以完成。這短短的幾天時(shí)間了讓我感受到了團(tuán)結(jié)合作的重要性,以及遇到困難要敢于沖擊敢于挑戰(zhàn),只有這樣你才能走得跟遠(yuǎn),取得成功。相信在今后的學(xué)習(xí)生活中這次課程設(shè)計(jì)的經(jīng)歷將對(duì)我有很大的幫助。</p><p>  在這次短暫的一個(gè)星期的學(xué)習(xí)和設(shè)計(jì)中,我和我的隊(duì)友們一起合作完成了二階環(huán)節(jié)電壓跟蹤控制系統(tǒng)的設(shè)計(jì)任務(wù)。二階環(huán)節(jié)電壓跟蹤控制系統(tǒng)可以用C語(yǔ)言編寫(xiě),因此程序簡(jiǎn)潔,易于閱讀。在這次課程設(shè)計(jì)

34、中,我負(fù)責(zé)的主要是A/D轉(zhuǎn)換功能的實(shí)現(xiàn)和編寫(xiě)報(bào)告。</p><p>  設(shè)計(jì)完了程序則該輪到調(diào)試了,各個(gè)模塊進(jìn)行獨(dú)立的調(diào)試。調(diào)試是一件很需要耐心的工作,同時(shí)也需要相當(dāng)?shù)淖屑?xì)。也許只是稍微寫(xiě)漏了一句語(yǔ)句也會(huì)耽擱相當(dāng)大的時(shí)間。尤其是當(dāng)設(shè)計(jì)者被調(diào)試擾亂了思維的時(shí)候更應(yīng)該靜下心來(lái)仔細(xì)閱讀程序,檢驗(yàn)自己的邏輯是否有誤。這些都是需要慢慢學(xué)習(xí)的。</p><p>  這次程序的設(shè)計(jì)構(gòu)思沒(méi)有多大問(wèn)題,但是

35、當(dāng)調(diào)試的時(shí)候,總是出現(xiàn)運(yùn)算的錯(cuò)誤,經(jīng)老師的指導(dǎo),才發(fā)現(xiàn)原來(lái)不同類(lèi)型的數(shù)據(jù)運(yùn)算結(jié)果會(huì)出現(xiàn)相當(dāng)多的問(wèn)題,這在編程時(shí)應(yīng)多加注意。</p><p>  當(dāng)問(wèn)題被一個(gè)個(gè)解決之后,我們終于看到了希望。整個(gè)系統(tǒng)能夠跟蹤二階環(huán)節(jié)的電壓。雖然精度還有不足,但我們已經(jīng)向成功邁進(jìn)。接下來(lái)則是對(duì)程序進(jìn)行控制算法的優(yōu)化,減小靜差。</p><p>  總之,在這次的課程設(shè)計(jì)中,我學(xué)習(xí)到了很多的東西,感覺(jué)自己終于能夠

36、將所學(xué)的知識(shí)跟實(shí)際應(yīng)用聯(lián)系到了一起。深刻認(rèn)識(shí)到了自己的動(dòng)手能力以及知識(shí)的熟悉程度等方面的欠缺。這還需要進(jìn)行大量的練習(xí)才行。</p><p>  我們組本次計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)的題目是二階電壓跟蹤控制系統(tǒng)的設(shè)計(jì),我們班采用的是抽簽的方式分配題目,當(dāng)我們接到這個(gè)題目的時(shí)候頓時(shí)傻眼了。不想選這個(gè)題目,原因有兩個(gè):第一,對(duì)于這種抽象的控制對(duì)象,設(shè)計(jì)起來(lái)比較枯燥;第二,采用單片機(jī)系統(tǒng),也就是要用到忘了很久C語(yǔ)言,這無(wú)異于

37、增加了編程的難度。</p><p>  說(shuō)實(shí)話,經(jīng)過(guò)一個(gè)假期之后,計(jì)算機(jī)控制技術(shù)和單片機(jī)的知識(shí),到現(xiàn)在我已經(jīng)忘得差不多了。本來(lái)學(xué)習(xí)的時(shí)候就學(xué)得不是很好,為了不拖大家的后腿,我用周末的時(shí)間把計(jì)算機(jī)控制技術(shù)和單片機(jī)的書(shū)粗略的過(guò)了一遍,把支離破碎的知識(shí)重新拾起在腦海里。</p><p>  星期一,早上八點(diǎn)半,我們準(zhǔn)時(shí)來(lái)到了實(shí)驗(yàn)室。我們幾個(gè)理清了所有的功能和流程,一個(gè)上午我們把整個(gè)的流程圖畫(huà)出來(lái)

38、了,再用了下午跟晚上的時(shí)間修改整理出來(lái)了主程序,和各個(gè)模塊的流程圖。第三天,我們把主程序和各個(gè)模塊的流程圖用專(zhuān)業(yè)工具畫(huà)了出來(lái)。然后進(jìn)行了任務(wù)分工,由于我編程水平一般,所以沒(méi)有分配到特別復(fù)雜的模塊,我分配到的是PID和DA模塊。</p><p>  乍一看,我的任務(wù)太簡(jiǎn)單了,我最初也這么以為,可是當(dāng)我真正著手干的時(shí)候我才發(fā)現(xiàn),各種各樣的問(wèn)題都來(lái)了。</p><p>  首先DA,我是通過(guò)老師

39、給的參考程序來(lái)學(xué)習(xí)的,程序很短,只有幾行,可是我怎么也搞不懂那個(gè)地址是怎么來(lái)的,自己想了很久還是沒(méi)有想出來(lái),最終還是通過(guò)同學(xué)才弄懂了。其次,是PID,PID乍一看一點(diǎn)都不難,只是按書(shū)上把公式表達(dá)出來(lái)就行了,這也是最后最困擾我們的地方,就在這個(gè)問(wèn)題上面我們就弄了兩天,最終拖到星期六才答辯。其實(shí)PID我們?cè)诔绦虻乃枷肷厦嫱耆珱](méi)有問(wèn)題,包括其他地方也是,大家往往在大的思想上面都不會(huì)出錯(cuò),小的地方很多時(shí)候才是最致命的地方。本次設(shè)計(jì),我(包括我的

40、隊(duì)友)犯錯(cuò)在了變量的類(lèi)型上了。還好有王老師的幫助,才讓我們從錯(cuò)誤的泥沼中抽身出來(lái),在這里要特別感謝王老師。在我們組的小錯(cuò)誤上面花了太多時(shí)間,同時(shí)我們我們也會(huì)總結(jié)經(jīng)驗(yàn),爭(zhēng)取以后都不再犯同類(lèi)型的錯(cuò)誤。</p><p>  在設(shè)計(jì)和調(diào)試的過(guò)程中我們遇到了各種各樣的問(wèn)題,還好我們相互幫助,相互提醒,相互鼓勵(lì),最終完成了這次的設(shè)計(jì)。這次的設(shè)計(jì)不僅讓我復(fù)習(xí)了計(jì)算機(jī)硬件基礎(chǔ)的基本知識(shí),還讓我學(xué)會(huì)了理論與實(shí)際的結(jié)合,最重要的是我

41、體會(huì)到了一個(gè)團(tuán)隊(duì)的力量。</p><p><b>  四、參考文獻(xiàn)</b></p><p>  【1】《計(jì)算機(jī)硬件技術(shù)基礎(chǔ)》—楊天怡等主編—重慶大學(xué)出版社</p><p>  【2】《計(jì)算機(jī)硬件技術(shù)基礎(chǔ)實(shí)驗(yàn)教程》—黃勤等主編—重慶大學(xué)出版社</p><p>  【3】《單片微型計(jì)算機(jī)與接口技術(shù)》—李群芳等主編—電子工業(yè)出

42、版社</p><p>  【4】《計(jì)算機(jī)控制技術(shù)》—王建華等主編—高等教育出版社</p><p><b>  五、附錄</b></p><p><b>  5.1系統(tǒng)框圖</b></p><p><b>  5.2電原理圖</b></p><p>  圖

43、5.2.1 系統(tǒng)電源理圖</p><p><b>  5.3程序流程圖</b></p><p><b>  5.4程序清單</b></p><p>  /******************************************************/</p><p>  /* 文

44、件名: KeyScan.c */</p><p>  /* 功能描述: 控制8255完成鍵盤(pán)掃描及數(shù)碼顯示實(shí)驗(yàn) */</p><p>  /******************************************************/</p><p>  #include<

45、SST89x5x4.h></p><p>  #include<Absacc.h></p><p>  #include<intrins.h> </p><p>  #include<stdio.h> </p><p>  #define C8255_A XBYTE[0x7FFC]

46、 //8255端口地址定義</p><p>  #define C8255_B XBYTE[0x7FFD]</p><p>  #define C8255_C XBYTE[0x7FFE]</p><p>  #define C8255_CON XBYTE[0x7FFF]</p><p>  #define ad5

47、74_0 XBYTE[0x7f00]</p><p>  #define ad574_1 XBYTE[0x7f08]</p><p><b>  //數(shù)碼管顯示編碼</b></p><p>  unsigned char a[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x0

48、7,0x7f,0x6f,</p><p>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</p><p>  0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87,0xff,0xef,</p><p>  0x40,0x5c,0x1c,0x78}; //40為

49、負(fù)號(hào)</p><p><b>  //顯示緩沖</b></p><p>  unsigned char b[] = {11, 11, 11,11, 11, 11};</p><p>  unsigned char c[]= {0x5c,0x1c,0x78}; //顯示out 超出范圍</p><p&g

50、t;  unsigned char d[]={0,0,0,0,0,0}; //傳遞真實(shí)值float set_value</p><p>  //unsigned int e[11]={0};</p><p>  unsigned char f[3]={0}; //存取個(gè)十百數(shù)據(jù)</p><p&

51、gt;  unsigned char key_down;</p><p>  unsigned char key_value;</p><p>  unsigned char key_count;</p><p>  unsigned char key_v_mflag=0;</p><p>  unsigned char key_v_pfla

52、g=0; //小數(shù)點(diǎn)和負(fù)號(hào)標(biāo)志</p><p>  sbit da_cs=P2^0;</p><p>  sbit da_wr=P2^1;</p><p>  long int advalue;</p><p>  long int set_value=-2000;</p><p

53、>  long int sym_fruit;</p><p>  long int ad_fruit;</p><p>  long int ek,ek1,eki,ekd;</p><p>  long int out;</p><p>  long int adv_fruit;

54、 //求取12次轉(zhuǎn)換結(jié)果</p><p>  int kp=1,kd=5,ki=1;</p><p>  void display();</p><p>  void delay(unsigned int time);</p><p>  void clear();</p><p>  void writebuffer

55、();</p><p>  void getkey(); //得到按鍵值</p><p>  void cmp_value();</p><p>  void keyscan(); //按鍵掃描函數(shù)</p><p>  void confirm_val

56、ue();</p><p>  void adcge();</p><p>  void adcge12();</p><p>  void symbol(); //標(biāo)度變變換</p><p>  void adave();</p><p>  //////

57、//////////////////////////////中斷服務(wù)程序</p><p>  void int_timer0() interrupt 1</p><p><b>  {</b></p><p>  TH0 = 0xb1; //初始化定時(shí)器0</p><p>  TL0

58、= 0xe0;</p><p>  display();</p><p><b>  clear();</b></p><p><b>  }</b></p><p>  /////////////////////////////////ad574</p><p>  voi

59、d symbol() //標(biāo)度變變換</p><p><b>  { </b></p><p>  sym_fruit=advalue*625;</p><p>  sym_fruit=sym_fruit/256;</p><p>  sym_fruit=sym_frui

60、t-5000;</p><p>  ad_fruit=sym_fruit;</p><p>  if(sym_fruit>=0)</p><p>  { b[2]=11;</p><p>  sym_fruit/=100;</p><p>  b[0]=(char)sym_fruit%10;</p>

61、<p>  sym_fruit/=10;</p><p>  b[1]=(char)sym_fruit%10; </p><p>  b[1]+=20; //將第三位加上小數(shù)點(diǎn) </p><p><b>  }</b></p><p><b>  el

62、se</b></p><p>  { sym_fruit*=-1; //要將負(fù)數(shù)變?yōu)檎龜?shù),否則顯示會(huì)出錯(cuò)</p><p>  sym_fruit/=100;</p><p>  b[0]=(char)sym_fruit%10;</p><p>  sym_fruit/=10;</p>

63、<p>  b[1]=(char)sym_fruit%10;</p><p>  b[1]+=20; //將第三位加上小數(shù)點(diǎn)</p><p><b>  b[2]=30;</b></p><p><b>  }</b></p><p><

64、;b>  }</b></p><p>  void adcge()</p><p><b>  {</b></p><p>  unsigned char Hbyte, Lbyte;</p><p>  delay(100);</p><p>  Hbyte = ad574_0

65、; // 讀取AD轉(zhuǎn)換結(jié)果的高8位</p><p>  Lbyte = ad574_1; // 讀取AD轉(zhuǎn)換結(jié)果的低8位</p><p>  advalue = (((unsigned int)Hbyte)<<4)|((Lbyte&0xf0)>>4);// 轉(zhuǎn)換結(jié)果</p>

66、;<p><b>  }</b></p><p>  void pid()</p><p>  { ekd=ek;</p><p>  ek=set_value-ad_fruit; //ek</p><p><b>  eki+=ek;</b></p><p&

67、gt;  ek1=ek*kp*0.8+ki*eki*0.001+kd*(ek-ekd);</p><p>  if(ek1>5000)</p><p><b>  ek1=5000;</b></p><p>  if(ek1<-5000)</p><p>  ek1=-5000;</p><

68、;p>  out=(ek1+5000);</p><p>  out=out*255;</p><p>  out/=10000; </p><p><b>  da_cs=0;</b></p><p><b>  da_wr=0;</b></p><p>  P1=(

69、char)(out); </p><p><b>  }</b></p><p>  void display()</p><p><b>  {</b></p><p>  unsigned char i, j = 0xDF;</p><p>  for(i=0; i

70、<6; i++)</p><p><b>  {</b></p><p>  C8255_A = 0xFF;</p><p>  C8255_B = a[b[i]]; //查表輸出顯示</p><p>  C8255_A = j;</p><p>

71、;  delay(0x100);</p><p>  j = (j>>1)|(j<<7);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void delay(unsigned int time)</p>&

72、lt;p><b>  {</b></p><p>  unsigned int i;</p><p>  for(i=0; i<time; i++);</p><p><b>  }</b></p><p>  void keyscan()

73、 //按鍵掃描函數(shù)</p><p><b>  {</b></p><p>  unsigned char cc;</p><p>  C8255_A = 0x00; //X1~X4 </p><p>  cc=C8255_C;

74、 //得到Y(jié)1~Y4的值</p><p>  key_down = (~cc) & 0x0f;</p><p><b>  }</b></p><p>  void clear() //清屏</p><p><b> 

75、 {</b></p><p>  C8255_B = 0x00;</p><p><b>  }</b></p><p>  void writebuffer()</p><p><b>  {</b></p><p>  keyscan();</p>

76、<p>  while(key_down) //鍵盤(pán)消抖</p><p><b>  {</b></p><p>  key_down=1;</p><p>  keyscan();</p><p><b>  }</b></p>

77、<p><b>  }</b></p><p>  void getkey() //得到按鍵值</p><p><b>  {</b></p><p>  unsigned char value;</p><p>  unsigned c

78、har i, j = 0xFE;</p><p>  for(i=0; i<4; i++)</p><p><b>  {</b></p><p>  C8255_A = j;</p><p>  value = C8255_C;</p><p>  if(!(value & 0x0

79、1)) //行1</p><p><b>  {</b></p><p>  key_value = i + 0;</p><p>  writebuffer();</p><p><b>  return;</b></p><p

80、><b>  }</b></p><p>  if(!(value & 0x02)) //行2</p><p><b>  {</b></p><p>  key_value = i + 4;</p><p>  writebuffer

81、();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(!(value & 0x04)) //行3</p><p><b>  {</b></p>

82、<p>  key_value = i + 8;</p><p>  writebuffer();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(!(value & 0x08))

83、 //行4</p><p><b>  {</b></p><p>  key_value = i + 12;</p><p>  writebuffer();</p><p><b>  return;</b></p><p><b>  }<

84、;/b></p><p><b>  j <<= 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void cmp_value()</p><p><b>  

85、{</b></p><p>  if(key_count==2)</p><p><b>  { </b></p><p>  key_count=5;</p><p><b>  b[5]=11;</b></p><p><b>  b[4]=11;&

86、lt;/b></p><p><b>  b[3]=11;</b></p><p>  key_v_mflag=0;</p><p>  key_v_pflag=0;</p><p><b>  }</b></p><p>  if(key_value>=0&am

87、p;&key_value<=9)</p><p><b>  {</b></p><p>  b[key_count]=key_value; //0~9的數(shù)就直接賦值</p><p>  d[key_count]=key_value;</p><p>  key_count--;<

88、/p><p><b>  }</b></p><p>  if(key_value==11&&key_count==5) //第一次輸入負(fù)號(hào),且在最高位</p><p><b>  {</b></p><p>  b[key_count--]=30;</p&

89、gt;<p>  key_v_mflag=1; //負(fù)號(hào)標(biāo)志</p><p><b>  }</b></p><p>  if(key_value==10&&key_v_pflag==0) //第一次輸入小數(shù)點(diǎn)</p><p><b>  {<

90、/b></p><p>  key_v_pflag=1; //小數(shù)點(diǎn)標(biāo)志</p><p>  if(b[++key_count]==30) //前面一位為負(fù)號(hào)</p><p><b>  {</b></p><p>  b[--key_count]=20

91、; //自動(dòng)補(bǔ)上0.</p><p>  key_count--;</p><p><b>  }</b></p><p>  else if( --key_count==5&&b[key_count]==11) //如果第一次輸入小數(shù)點(diǎn)就0.</p><p><b>  {

92、</b></p><p>  b[key_count--]=20;</p><p><b>  }</b></p><p>  Else </p><p><b>  {</b></p><p>  b[++key_count]+=20;

93、//將前面一個(gè)數(shù)自動(dòng)加上小數(shù)點(diǎn)</p><p>  key_count--; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void confirm_

94、value()</p><p><b>  { </b></p><p>  char h,k;</p><p>  if(b[5]==30) //最高位有負(fù)號(hào)</p><p><b>  {</b></p><p>  i

95、f(b[4]==0||b[4]==20) //第四位為0或0.</p><p>  set_value=d[3]*(100); </p><p><b>  else</b></p><p>  set_value=d[4]*1000+d[3]*(100);</p><p>  set_val

96、ue=0-set_value;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  set_value=d[5]*1000+d[4]*100+d[3]*10;</p>&

97、lt;p><b>  }</b></p><p>  if(set_value<-5000||set_value>5000) //判斷是否超出范圍</p><p><b>  {</b></p><p>  for(h=5,k=31;h>2;h--)</p><p&

98、gt;<b>  {</b></p><p><b>  b[h]=k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>&l

99、t;p>  void main()</p><p><b>  {</b></p><p>  C8255_CON = 0x81; //8255初始化</p><p>  key_count = 5;</p><p>  //////////////////////// 中斷服務(wù)

100、程序</p><p>  TH0 = 0xb1; //初始化定時(shí)器0</p><p>  TL0 = 0xe0;</p><p>  TMOD = 0x01;</p><p>  TCON = 0x10; //啟動(dòng)定時(shí)器,</p><p>  IE=0x82;

101、 //開(kāi)總中斷,定時(shí)器0和int0</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  ad574_0=0;</p><p>  keyscan(); //按鍵掃描</p><p>  if(k

102、ey_down) //判是否有鍵按下</p><p><b>  { </b></p><p>  delay(400);</p><p>  getkey(); //得到按鍵值 </p><p>  if(key_value>=0&&key_value<=11)&

103、lt;/p><p>  cmp_value();</p><p>  if(key_value==12)</p><p>  confirm_value(); //判斷是否按下確定鍵</p><p><b>  }</b></p><p><b>  adcge();</b&g

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論