基于單片機的速度模糊控制器孫朝文_第1頁
基于單片機的速度模糊控制器孫朝文_第2頁
基于單片機的速度模糊控制器孫朝文_第3頁
基于單片機的速度模糊控制器孫朝文_第4頁
基于單片機的速度模糊控制器孫朝文_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

PAGEPAGE20畢業(yè)論文題目:基于C51單片機的速度模糊控制器-軟件學(xué)生姓名:學(xué)號:系(院):專業(yè):班級:指導(dǎo)教師:起止時間:2007年12月—-2008年5月基于C51單片機的速度模糊控制器摘要:模糊控制技術(shù)是以模糊數(shù)學(xué)為基礎(chǔ)發(fā)展起來的一種新的控制技術(shù)。模糊控制方式是一種非線性控制方式,對無法取得數(shù)學(xué)模型或數(shù)學(xué)模型相當(dāng)粗糙的系統(tǒng)可以取得令人滿意的控制效果。直流電動機轉(zhuǎn)速控制是一種非線性的時變的復(fù)雜過程,轉(zhuǎn)速直接影響著工件的機器質(zhì)量。本文討論了利用模糊控制技術(shù)設(shè)計的單片機模糊速度控制系統(tǒng),實驗表明該系統(tǒng)比傳統(tǒng)的PID速度控制系統(tǒng)精度高、速度快。關(guān)鍵詞:模糊控制;模糊算法;單片機;霍爾傳感器;直流電動機Thefuzzycontrolerwhichusedspeedadjustedbasedon51MCUAbstract:Fuzzycontroltechnologyisanewcontroltechnologybasedonfuzzymath.Fuzzycontrolwayisanon-linearcontrolmode,whichisunabletoobtainthemathematicalmodeloraroughmathematicalmodelofthesystemofcontrolcanbeachievedsatisfactoryresults。Motorspeedcontrolisanonlineartime-varyingcomplexityoftheprocess,speeddirectimpactonthequalityofthemachineparts.Thisarticlediscussestheuseoffuzzycontrolofthemicrocontrollertechnologydesignfuzzyspeedcontrolsystem,experimentsshowthatthesystemishigheraccuracyandfasterthanthetraditionalPIDspeedcontrolsystem.Keywords:Fuzzycontrol,fuzzyalgorithm;MCU;Hallsensor;DCMotors目錄1。引言…………(5)1。1模糊控制器的可行性分析…………………(5)1.2本設(shè)計的的任務(wù)和要求…………1。2.1設(shè)計任務(wù)…………(6)1.2.2設(shè)計要求…………(6)2.系統(tǒng)電路設(shè)計2。1基本硬件組成…………………(6)2.1.1AT89C51……………………(6)2。1。2直流電動機轉(zhuǎn)速的測量原理………………(10)2。1。3直流電動機工作原理與結(jié)構(gòu)……(11)2。2電路設(shè)計整體思路…………(13)3.系統(tǒng)控制算法設(shè)計與實現(xiàn)……(13)3.1模糊控制的原理…………………(13)3.1.1模糊控制器的基本原理………………(13)3.1。2模糊控制器設(shè)計的基本方法……(14)3.2本設(shè)計模糊控制算法的設(shè)計思想……………(15)3。2。1確定模糊控制器的輸入量和輸出量……(15)3.2.2精確量的模糊化………(15)3。2.3模糊控制規(guī)則…………(17)3。2.4模糊判決…………………(18)4.系統(tǒng)軟件設(shè)計與實現(xiàn)………………(18)4.1軟件主程序…………………(18)4.2軟件主要子程序……………(27)4。2.1霍爾元件角速度采樣及顯示子程序……(27)5.系統(tǒng)的安裝與調(diào)試………………(31)5。1軟件調(diào)試……………(31)5.2系統(tǒng)調(diào)試………………6.總結(jié)和體會……………………(31)致謝………(32)參考文獻…………(32)附錄………………(33)1.引言1。1模糊控制器的可行性分析在我國,模糊控制的理論研究水平相對較高,而應(yīng)用技術(shù)水平卻相對落后,特別是在工業(yè)過程控制領(lǐng)域,普遍采用查表法或公式法實現(xiàn)模糊控制,其控制精度不高,影響系統(tǒng)的性能.

本文推出一種通用的模糊控制器,其模糊控制用推理法實現(xiàn),并且將PI控制結(jié)合進去以改善控制性能,工程設(shè)計人員只要根據(jù)對象給出系統(tǒng)輸入、輸出量的隸屬函數(shù)及控制規(guī)則,再加上少量的外圍電路就可構(gòu)成一個模糊控制系統(tǒng)。一個簡單的模糊控制系統(tǒng)結(jié)構(gòu)框圖如圖1所示,模糊控制系統(tǒng)與其它控制系統(tǒng)的區(qū)別就是其控制器是采用模糊控制算法而不是其它控制算法.簡單模糊控制器的基本結(jié)構(gòu)如圖2所示,模糊控制器首先需要將輸入的精確數(shù)據(jù)值轉(zhuǎn)化為模糊量,以便能夠按照人的語言習(xí)慣和模糊思維特點進行推理;其次,依據(jù)規(guī)則庫對輸入量進行模糊推理,得到輸出量的結(jié)果;最后,將模糊推理結(jié)果的模糊量轉(zhuǎn)化為精確量輸出。事實上,硬件化的模糊集成電路組成的模糊控制器就是這樣一種思路,我們用軟件實現(xiàn)模糊控制的3個步驟來構(gòu)成通用模糊控制器,雖然速度低于硬件模糊芯片構(gòu)成的模糊控制器,但價格遠遠低于后者,更適合我國國情。圖1簡單模糊控制系統(tǒng)結(jié)構(gòu)框圖圖2簡單模糊控制器的功能結(jié)構(gòu)1.2本設(shè)計的任務(wù)及要求1。2.1設(shè)計任務(wù):基于單片機,采用模糊算法設(shè)計一個速度模糊控制器控制直流電動機的角速度,從而控制直流電動機的電流.1。2.2設(shè)計要求具體實現(xiàn)功能如下:角速度傳感器能采樣電動機的角速度。數(shù)碼管顯示采樣角速度值和直流電動機的電流.根據(jù)得出不同的角速度,從而得到控制直流電動機的不同電流。2..系統(tǒng)電路設(shè)計2。1基本硬件組成2.1.1AT89C51AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)擦除100次.該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。AT89C51的芯片管腳圖如圖2-1圖2-1AT89C51的芯片管腳圖主要特性:·與MCS—51兼容?·4K字節(jié)可編程閃爍存儲器

壽命:1000寫/擦循環(huán)?數(shù)據(jù)保留時間:10年

·全靜態(tài)工作:0Hz-24Hz?·三級程序存儲器鎖定

·128*8位內(nèi)部RAM?·32可編程I/O線?·兩個16位定時器/計數(shù)器?·5個中斷源

·可編程串行通道

·低功耗的閑置和掉電模式?·片內(nèi)振蕩器和時鐘電路管腳說明:VCC:供電電壓。?

GND:接地。?

P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入.P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位.在FIASH編程時,P0口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。?

P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故.在FLASH編程和校驗時,P1口作為第八位地址接收。?

P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流.這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。?

P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1"后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故.

P3口也可作為AT89C51的一些特殊功能口,如下表所示:

口管腳備選功能

P3.0RXD(串行輸入口)

P3.1TXD(串行輸出口)?P3.2/INT0(外部中斷0)?P3.3/INT1(外部中斷1)

P3。4T0(記時器0外部輸入)?P3.5T1(記時器1外部輸入)?P3.6/WR(外部數(shù)據(jù)存儲器寫選通)?P3。7/RD(外部數(shù)據(jù)存儲器讀選通)?P3口同時為閃爍編程和編程校驗接收一些控制信號。??

RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間.?ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0.此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高.如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。

?

/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。

/EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器.注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP).?

XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。?

XTAL2:來自反向振蕩器的輸出。振蕩特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接.有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。芯片擦除:整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行.?此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式.在閑置模式下,CPU停止工作。但RAM,定時器,計數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個硬件復(fù)位為止.2。1.2直流電動機轉(zhuǎn)速的測量原理轉(zhuǎn)速是工業(yè)上常用的一個參數(shù)。電動機的轉(zhuǎn)速常以每秒或分鐘的圈數(shù)來表示,有時也用角速度表示瞬時速度.轉(zhuǎn)速的測定方法很多,常用的一種測量方法是用霍爾IC器件?;魻朓C器件是由半導(dǎo)體材料制成的一種薄片.在半導(dǎo)體薄片相對的兩側(cè)通以控制電流,在薄片垂直方向加以磁場,則在半導(dǎo)體兩端會產(chǎn)生一電動勢,其大小與控制電流和磁場的乘積成正比,這就是霍爾效應(yīng)。若控制電流保持不變,則霍爾IC器件感應(yīng)電壓將隨外界的磁場強度而變化。將一塊永久磁鋼固定在電動機轉(zhuǎn)軸上轉(zhuǎn)盤的邊沿,轉(zhuǎn)盤隨被測軸旋轉(zhuǎn),磁鋼也將跟著同步旋轉(zhuǎn)。在轉(zhuǎn)盤附近安裝一個3000系列的霍爾IC器件,當(dāng)轉(zhuǎn)盤隨軸旋轉(zhuǎn)時,霍爾IC器件受磁鋼所產(chǎn)生的磁場影響,輸出脈沖信號,其頻率f和轉(zhuǎn)速n成正比,只要測量出脈沖的周期T或頻率f即可計算出電動機的轉(zhuǎn)速n.根據(jù)電動機的工作情況和它的轉(zhuǎn)速特性,選用美國SPRAGUE公司生產(chǎn)的3000系列霍爾IC開關(guān)傳感器,它內(nèi)部含有穩(wěn)壓電路、霍爾電動勢發(fā)生器、放大器、施密特觸發(fā)器和集電極開路輸出電路,具有工作范圍寬(包括頻率響應(yīng)寬和動態(tài)范圍大等)、可靠性高、外圍電路簡單、輸出電平可與各種數(shù)字電路兼容等特點?;魻杺鞲衅鳈z測轉(zhuǎn)速示意圖如下。在非磁材料的圓盤邊上粘貼一塊磁鋼,霍爾傳感器固定在圓盤外緣附近。圓盤每轉(zhuǎn)動一圈,霍爾傳感器便輸出一個脈沖。通過單片機測量產(chǎn)生脈沖的頻率就可以得出圓盤的轉(zhuǎn)速。圖2-2霍爾傳感器工作電路圖圖2-3霍爾傳感器測轉(zhuǎn)速直流電動機的轉(zhuǎn)速與電動機線圈的電流大小有關(guān)。用DAC0832芯片控制輸出到直流電動機的電流的方法來控制電動機的轉(zhuǎn)速。當(dāng)電動機轉(zhuǎn)速小于設(shè)定值時,DAC0832芯片的輸出電流增大;當(dāng)大于設(shè)定值時,則DAC0832芯片輸出電流減小,從而使電動機設(shè)定的速度恒速旋轉(zhuǎn)。DAC0832芯片是一塊數(shù)模轉(zhuǎn)換器。其基本原理是按二進制各位代碼的數(shù)值,將每一位二進制數(shù)字量按其“權(quán)”換成相應(yīng)的模擬器,然后對各位數(shù)字量轉(zhuǎn)換后的模擬量進行疊加.其和就是與被轉(zhuǎn)換的二進制數(shù)據(jù)成正比的模擬量.2.1.3直流電動機工作原理與結(jié)構(gòu)圖2-4直流電動機模型圖2-4是一個最簡單的直流電動機模型。在一對靜止的磁極N和S之間,裝設(shè)一個可以繞Z-Z'軸而轉(zhuǎn)動的圓柱形鐵芯,在它上面裝有矩形的線圈abcd。這個轉(zhuǎn)動的部分通常叫做電樞.線圈的兩端a和d分別接到叫做換向片的兩個半圓形銅環(huán)1和2上。換向片1和2之間是彼此絕緣的,它們和電樞裝在同一根軸上,可隨電樞一起轉(zhuǎn)動.A和B是兩個固定不動的碳質(zhì)電刷,它們和換向片之間是滑動接觸的。來自直流電源的電流就是通過電刷和換向片流到電樞的線圈里.圖2-5換向器在直流電機中的作用當(dāng)電刷A和B分別與直流電源的正極和負極接通時,電流從電刷A流入,而從電刷B流出.這時線圈中的電流方向是從a流向b,再從c流向d。我們知道,載流導(dǎo)體在磁場中要受到電磁力,其方向由左手定則來決定。當(dāng)電樞在圖7-5(a)所示的位置時,線圈ab邊的電流從a流向b,用表示,cd邊的電流從c流向d,用⊙表示.根據(jù)左手定則可以判斷出,ab邊受力的方向是從右向左,而cd邊受力的方向是從左向右。這樣,在電樞上就產(chǎn)生了反時針方向的轉(zhuǎn)矩,因此電樞就將沿著反時針方向轉(zhuǎn)動起來。當(dāng)電樞轉(zhuǎn)到使線圈的ab邊從N極下面進入S極,而cd邊從S極下面進入N極時,與線圈a端聯(lián)接的換向片1跟電刷B接觸,而與線圈d端聯(lián)接的換向片2跟電刷A接觸,如圖7—5(b)所示。這樣,線圈內(nèi)的電流方向變?yōu)閺模淞飨騝,再從b流向a,從而保持在N極下面的導(dǎo)體中的電流方向不變。因此轉(zhuǎn)矩的方向也不改變,電樞仍然按照原來的反時針方向繼續(xù)旋轉(zhuǎn)。由此可以看出,換向片和電刷在直流電機中起著改換電樞線圈中電流方向的作用.直流電機是最常見和成本最低的小型電機,并且廣泛用于各種應(yīng)用.無刷直流電機宣稱能提供更高可靠性以及更低噪聲和成本,然而到目前為止,它卻只能在磁盤或計算機風(fēng)扇等少數(shù)量產(chǎn)應(yīng)用中取代傳統(tǒng)直流電機。在某些應(yīng)用里,無刷直流電機有多項優(yōu)點勝過傳統(tǒng)電刷電機,例如它以電子組件和傳感器取代電刷,不但延長電機壽命和減少維護成本,而且也沒有電刷產(chǎn)生的噪音。直流電機的特性使它成為調(diào)速系統(tǒng)最容易使用的電機。2.2電路設(shè)計整體思路整體原理圖如圖2-9圖2-6整體思路原理圖3.系統(tǒng)控制算法設(shè)計與實現(xiàn)3.1模糊控制的原理3。1。1模糊控制的基本原理模糊控制是以模糊集合論、模糊語言變量和模糊邏輯推理為基礎(chǔ)的一種計算機數(shù)字控制。該系統(tǒng)的被控對象是直流電動機,被控參數(shù)是直流電動機電流值,單片機模糊速度控制器,控制器根據(jù)系統(tǒng)給定角速度和直流電動機角速度偏差值及電動機角速度偏差值的變化率,利用模糊控制算法,求出控制系統(tǒng)的控制輸出量μk(數(shù)字量),經(jīng)D/A變換器轉(zhuǎn)變?yōu)榭刂颇M量以控制直流電動機電流.它的基本原理見圖3-1,可概括為以下四個步驟:a.根據(jù)傳感器采樣值,計算出變化量和變化率作為系統(tǒng)的輸入量。b。將輸入變量的精確值變?yōu)槟:?。?根據(jù)輸入變量(模糊量)及模糊控制規(guī)則,按模糊推理合成規(guī)則計算模糊量。d.由上述得到的控制量計算精確的控制量.通常使用的變量形式用N(Negabive),P(Positive),L(Large),S(Small),0(Zero)等組合來表示.圖3—1模糊控制的基本原理3.1。2模糊控制器設(shè)計的基本方法模糊控制器的設(shè)計基本方法為:a。確定模糊控制器的輸入變量與輸出變量.b.設(shè)計模糊控制器的控制規(guī)則。c.模糊化與非模糊化的方法.d。模糊控制器的輸入變量和輸出變量的論域并確定模糊控制器的參數(shù)。e.模糊控制算法的應(yīng)用程序。f.選擇模糊控制算法的采樣時間.模糊規(guī)則的設(shè)計一般包括:選擇描述輸入輸出變量的詞集,定義一個模糊變量的模糊子集及建立模糊控制器的控制規(guī)則.輸入輸出變量的詞集一般為{NL,NM,NS,NO,PO,PS,PM,PL}。定義模糊變量的模糊子集就是要確定模糊子集函數(shù)的形狀。一般用正態(tài)分布.在精確度要求不很高時,可采用梯形分布。控制規(guī)則可用條件語句描述,即ifAandBthenC等,然后建立控制規(guī)則表。模糊化就是把精確量轉(zhuǎn)為模糊量,可采用公式:Y=12[x(a+b)/2](b—a),精確量實際變化范圍為[a,b]。模糊控制的輸出是一個模糊量,它不能直接控制被控對象,需要將其轉(zhuǎn)為精確量。此過程亦稱清晰化、判決.方法有三:a。取最大隸屬度法.該法簡單易行,但利用信息少.b.中位法。c.平均判決法,該法利用信息多,但計算量大。3.2本設(shè)計模糊控制算法的設(shè)計思想3。2.1確定模糊控制器的輸入和輸出量模糊控制器采用目前廣泛使用的二維模糊控制器。確定模糊變量為:?

A:e—直流電動機轉(zhuǎn)子角速度給定值和實際值的偏差,?

B:de—直流電動機轉(zhuǎn)子角速度給定值和實際值的偏差的變化量,?

C:u—直流電動機電流值.?

?3。2.2精確量的模糊化取直流電動機轉(zhuǎn)子角速度給定值和實際值的偏差e、直流電動機轉(zhuǎn)子角速度給定值和實際值的偏差的變化量de作為控制器的輸入信息,二者皆可用模糊語言變量表示為:PB、PM、PS、ZE、NS、NM、NB.模糊化是對模糊控制器的輸入變量求取相應(yīng)語言值的隸屬度.模糊變量詞集:選擇e的詞集為{NB,NM,NS,ZE,PS,PM,PB}選擇de的詞集為{NB,NM,NS,ZE,PS,PM,PB}選擇u的詞集為{NB,NM,NS,ZE,PS,PM,PB}a。采樣角速度值模糊子集的隸屬函數(shù)輸入值e論域劃分為11檔,令e={-150,-120,-90,-60,-30,0,30,60,90,120,150}采角速度偏差范圍為-150-—150(rad/min).通過統(tǒng)計可得模糊變量e的賦值表如表3—1e-150-120-90—60—300306090120150PB00000000。10。40.71PM000000.10.40.710.70。4PS0000.10.40.710.70.40。10ZE000.10.40.710.70.40.100NS00。10.40.710.70.40。1000NM0.40.710.70.40.100000NB10.70.40。10000000表3—2模糊變量e賦值表b。偏差變化量模糊子集的隸屬函數(shù)設(shè)角速度偏差變化量論域劃分為11檔,令de={-30,—24,-18,-12,-6,0,6,12,18,24,30}。通過統(tǒng)計可得模糊變量C的賦值表如表3-2所示.de—30-24-18-12-60612182430PB00000000.10。40。71PM000000。10.40.710。70。4PS0000.10。40。710.70。40。10ZE000.10。40。710。70.40。100NS00.10。40。710.70。40.1000NM0.40.710.70。40.100000NB10.70.40。10000000

表3-3模糊變量de的賦值表c。輸出量u的隸屬函數(shù)設(shè)輸出量化論域為11檔,令u={-100,—80,—60,-40,—20,0,20,40,60,80,100},通過統(tǒng)計,輸出變量U的賦值表如表3—3所示。u—100-80-60-40-20020406080100PB00000000.10。40.71PM000000.10。40.710。70.4PS0000.10.40.710.70。40.10ZE000.10.40.710。70。40.100NS00.10.40.710.70.40。1000NM0.40。710。70。40.100000NB10。70.40。10000000表3—4輸出變量u賦值表3.2。3模糊控制規(guī)則模糊控制規(guī)則”部分的任務(wù)是:利用前面“模糊化"部分得到的輸入e和de的模糊集E和De,按照模糊推理語句(規(guī)則或經(jīng)驗)求出輸出模糊集U.模糊控制規(guī)則由下列推理語言構(gòu)成ife=NBandde=PBthenu=ZEife=PSandde=PMthenu=PB。.。實際上它們規(guī)定了輸入變量e和de的各種狀態(tài)下輸出變量e的對應(yīng)值,體現(xiàn)了人的控制經(jīng)驗.共有35條規(guī)則,把這些規(guī)則列成表,稱作控制規(guī)則表,如表3-4.ddueNBNMNSZEPSPMPBNBNBNBNBNMNMNSZENMNBNBNBNMNSZEPSNSNBNMNMNSZEPSPMZENBNSNSZEPSPMPBPSNMNSZEPSPMPBPBPMNSNEPSPMPBPBPBPBZEPSPNPMPBPBPB?表3-5模糊控制規(guī)則表3.2。4模糊判決根據(jù)控制規(guī)則,可以求出每一條規(guī)則的模糊關(guān)糸Ri,進而求得總的模糊關(guān)糸R。對于給定的e和de的值,通過合成推理規(guī)則可求出對應(yīng)的u.再經(jīng)過模糊判決可得執(zhí)行量。由前述可知計算R的工作量較大,且是重復(fù)性運算。因此,可以事先進行運算。在工程上常用的方法是,根據(jù)模糊量化、模糊決策表,存入計算機。根據(jù)模糊決策表可直接由輸入對應(yīng)到輸出.在進行控制時,計算機根據(jù)采樣和變換得來的e和de值接查表得出控制量u。模糊決策表要在糸統(tǒng)調(diào)試時反復(fù)修改后才能達到實用的目的.從模糊決策去查到的是輸出精確量。把此精確量加到被控對象的輸入,實現(xiàn)對被控對象的控制.eeμde—150—120-90-60-300306090120150-301008010010060602020000-248080808060602020000—1810080100806060000000-1280808080808000-40-40-40—6100801008060200—40-60—60-6001008010060200—20—60—100-80-10066060604000-60-80-100-80—1001240404000-20-80-80-80-80—801800000—20—60-80—100-80-10024000-20—20-60-60—80-80-80—8030000-20-20-60—60-100-100-80—100表3—6模糊控制決策表4.系統(tǒng)軟件設(shè)計與實現(xiàn)硬件平臺結(jié)構(gòu)一旦確定,大的功能框架即形成。軟件在硬件平臺上構(gòu)筑,完成各部分的協(xié)調(diào)。系統(tǒng)功能是由軟硬件共同實現(xiàn)的,由于軟件的可伸縮性,最終實現(xiàn)的系統(tǒng)功能可強可弱,差別可能很大.因此,軟件是本系統(tǒng)的靈魂。軟件采用模塊化設(shè)計方法,不僅易于編程和調(diào)試,也可減小軟件故障率和提高軟件的可靠性。同時,對軟件進行全面測試也是檢驗錯誤排除故障的重要手段。4.1軟件主程序系統(tǒng)以中斷方式以角速度傳感器對角速度進行采樣并進行顯示,同時計算出角速度變化量,從面得到兩個模糊控制輸入量,然后通過查表程序查根據(jù)前人經(jīng)驗得到的模糊決策表,最后得到控制輸出量(u)進而實現(xiàn)對直流電動機電流控制的功能。主程序流程圖如圖4-1.開始開始定時器初始化允許定時器中斷開系統(tǒng)中斷采樣時間到?采樣角速度值值查模糊決策表輸出控制量偏差變化量控制直流電動機顯示角速度顯示電流圖4-1主程序流程圖8051模糊控制算法子程序:#include”reg52。h"?//--—-————--—-------—---—-———----———-——--—--—---—-——---------——---—--—-———---—?//定義差距輸入常量?#defineGAP_ZERO

0x00?#defineGAP_VSMALL

0x01?#defineGAP_SMALL

0x02?#defineGAP_MEDIUM

0x03

#defineGAP_BIG

0x04?//定義控制輸出常量

#defineTURN_ZERO

0x80?#defineTURN_VSMALL

0x81?#defineTURN_SMALL

0x82

#defineTURN_MEDIUM

0x83

#defineTURN_BIG

0x84?//-——--------——定義常量—--—-——---————----—---——-——--—------—--——--—-—-—---—-----———-?#defineMU_MAX0XFF

//模糊度的最大值為0XFF代表面1?#defineRULE_TOT10

//規(guī)則數(shù)個數(shù)

#defineMF_TOT5

//成員函數(shù)的個數(shù)?#defineIO_NUM0x07?#defineLABEL_NUM0x70?#defineDEFAULT_VALUE0x00?//—--—-—-----—-—--定義數(shù)據(jù)庫—----—----——-—---------—--—-——---—————-—----?unsignedcharcodeoutput_memf[MF_TO(shè)T]={0,15,35,60,102};//OUTPUTTURNINGNUMBER:

//ZERO,VSMALL,SMALL,MEDIUM,BIG?unsignedcharcodeinput_memf[MF_TOT][4]={?//輸入功能函數(shù)以點斜式方式存儲。第一維成員函數(shù)標(biāo)號第二維是點斜式數(shù)據(jù)?//距離功能函數(shù)

{0x00,0x00,0x00,0x0d},//VSLOW?{0x00,0x0d,0x14,0x0d},//SLOW?{0x1e,0x0d,0x32,0x0d},//MEDIUM?{0x3C,0x0d,0x50,0x0d},//FAST?{0x50,0x09,0x6e,0x00}

//VFAST?

};?//--——-—-—--—定義模糊系統(tǒng)規(guī)則——-—-—-——--—-—-—--—————-——----—-—-——-—-—--—-——--——?unsignedcharcoderules[RULE_TOT]={?//if.。.

then..。?GAP_ZERO,TURN_ZERO,?GAP_VSMALL,TURN_VSMALL,

GAP_SMALL,TURN_SMALL,?GAP_MEDIUM,TURN_MEDIUM,

GAP_BIG,TURN_BIG?

};

//—-—-—--——-—定義各變量—-—--——-—-----———-—--——-—--—---—-—---—-——--—--——------—?unsignedcharoutputs[MF_TOT],fuzzy_out;

//模糊輸出mu值?//—-—---—--—-子程序函數(shù)頭申明--——-----—---————-———-——-—-—----—-----—--—-——---—--——-

voidfuzzy_engine(uchar);

ucharcompute_memval(uchar,uchar);

voiddefuzzify(void);?/***************************************************************************************************************/?ucharcompute_memval(ucharinput,ucharlabel)?

{?

intdat(yī)atemp;?

if(input〈input_memf[label][0])?

{

//如果輸入不在曲線下u值為0?

return0;?

}

else

{?

if(input<input_memf[label][2])?

{

temp=input;

//用點斜式計算mu?

temp-=input_memf[label][0];?

if(!input_memf[label][1])?

{?

temp=MU_MAX;?

else?

temp*=input_memf[label][1];?

}?

if(temp〈0x100)?

//如果結(jié)果不超過1?

returntemp;

//返回計算結(jié)果?

}?

else?

{

returnMU_MAX;

//確保mu值在范圍內(nèi)

}?

}?

else

{

//輸入落在第二條斜線上?

temp=input;

//用點斜式方法計算mu

temp-=input_memf[label][2];?

temp*=input_memf[label][3];

temp=MU_MAX—temp;?

if(temp〈0)?

//確保結(jié)果不小于0?

return0;

}?

else?

returntemp;

//mu為正–返回結(jié)果?

}?

}?

return0;

}?/*******************************************************************************?Function:defuzzify?Description:計算模糊輸出的重心并調(diào)用函數(shù)把它?轉(zhuǎn)換成可被系統(tǒng)使用的輸出量?Parameters:無.?Returns:無.?SideEffects:outputs[][]數(shù)組被清零.

*******************************************************************************/

voiddefuzzify(void)

{?

unsignedlongnumerator,denominator;?

unsignedcharj;?

numerator=0;

//恢復(fù)總數(shù)值?

denominator=0;?

for(j=0;j<MF_TO(shè)T;j++)?

//計算總和值?

numerator+=(outputs[j]*output_memf[j]);?

denominat(yī)or+=outputs[j];?

outputs[j]=0;//清零輸出作為參考使用

if(denominator)?

//確保分母是0的情況不發(fā)生

fuzzy_out=numerator/denominator;//確定COG

}?

else?

{

fuzzy_out=DEFAULT_VALUE;//沒有規(guī)則被觸發(fā)?

}?

}?

}?/*******************************************************************************

Function:fuzzy_engine

Description:實施規(guī)則基中的規(guī)則?Parameters:無?Returns:無。

SideEffects:無

********************************************************************************/

unsignedcharbdataclause_val;

//保存當(dāng)前的分支進行快速訪問

sbitclause_type=clause_val^7;

//表示分支是否是條件分支或者是結(jié)果分支?voidfuzzy_engine(ucharinput)?

{?

bitthen;

//當(dāng)正在分析結(jié)果時置位?

unsignedcharif_val,

//保存當(dāng)前規(guī)則中條件分支中的值?

clause,

//規(guī)則基中當(dāng)前的分支?

mu,

//保存當(dāng)前分支中的值?

label=0;

//被條件使用的成員函數(shù)?

then=0;

//設(shè)第一個分支是條件分支?

if_val=MU_MAX;

//maxoutmuforthefirstrule?

for(clause=0;clause〈RULE_TOT;clause++)?

//遍歷每條規(guī)則

clause_val=rules[clause];

//讀入當(dāng)前的分支?

if(!clause_type)?

{

//當(dāng)前的分支是不是條件分支?

if(then)

//是否正在分析結(jié)果...?

then=0;

if_val=MU_MAX;

//復(fù)位mu?

mu=compute_memval(input,label);

//得到條件分支的值

if_val=mu;?

label++;

}?

else?

//當(dāng)前分支是結(jié)果?

then=1;

//置位標(biāo)志位,如果當(dāng)前規(guī)則的mu比參考的值要大,保存這個值作為新的模糊輸出?

if(outputs[clause_val&0x07]〈if_val)?

{?

outputs[clause_val&0x07]=if_val;?

}?

}?

}?

defuzzify();//用COG方法計算模糊輸出和反模糊輸出?4.2軟件主要子程序4。2。1霍爾元件角速度采樣及顯示子程序該程序主要功能是使用霍爾元件和七段數(shù)碼管對角速度進行采樣和顯示,程序流程圖如圖4-2。開始開始初始化傳感器跳過讀序列號號延時初始化讀取角速度并顯示跳過讀序列號啟動速度轉(zhuǎn)換跳過序列號圖4—2霍爾元件采樣顯示流程圖霍爾元件測角速度:/*VIICC.H*/#pragmadbcdsmall#include<intrins.h〉?#include<reg52.h〉

#defineNOPnop();nop();nop();nop()

#defineSDAP1^7?#defineSCLP1^6?

voidsta();?voidcack();?voidstop();?voidmnack();?voidmack();?voidwrbyt(ucharshu);?voidwrnbyta(ucharslaw,uchargg[],ucharn);?voidwrnbyt(ucharslaw,ucharff[],ucharnumber);?ucharrdbyt();?voidrdnbyt(ucharslar,ucharqq[],ucharnumber);?源程序由9個函數(shù)組成,程序清單如下:

voidsta()/*啟動I2C總線*/?{?SDA=1;?SCL=1;?NOP;?SDA=0;?NOP;

SCL=0;?}

?voidstop()/*停止I2C總線?*/?{?SDA=0;

SCL=1;?NOP;SDA=1;?NOP;

SCL=0;?}??voidmack()/*發(fā)送應(yīng)答位*/?{?SDA=0;?SCL=1;?NOP;?SCL=0;

SDA=1;?}

?voidmnack()/*發(fā)送非應(yīng)答位*/

SDA=1;?SCL=1;

NOP;

SCL=0;?SDA=0;

?voidcack()/*應(yīng)答位檢查*/

{

SDA=1;?SCL=1;?F0=0;?if(SDA==1)

F0=1;?SCL=0;?nop();?}?/*向虛擬I2C總線上發(fā)送1個數(shù)據(jù)字節(jié)*/?voidwrbyt(ucharshu)

uchari;?for

溫馨提示

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

評論

0/150

提交評論