南京鐵道職業(yè)技術(shù)學(xué)院 黃克亞
模糊控制技術(shù)單片機(jī)軟件實(shí)現(xiàn)方法研究
南京鐵道職業(yè)技術(shù)學(xué)院 黃克亞
光伏陣列是一個(gè)強(qiáng)非線性系統(tǒng),太陽(yáng)能電池的工作情況很難用精確的數(shù)學(xué)模型來(lái)描述,因此采用模糊控制的方法來(lái)進(jìn)行太陽(yáng)能電池最大功率點(diǎn)的跟蹤是非常合適的,在實(shí)際操作中采用嵌入模糊控制器的方法來(lái)實(shí)現(xiàn)模糊控制。模糊控制器的第n時(shí)刻的輸入量為第n時(shí)刻的功率變化量E(n)和第n-1時(shí)刻的占空比步長(zhǎng)值A(chǔ)(n-1),第n時(shí)刻的輸出量為第n時(shí)刻的占空比步長(zhǎng)值A(chǔ)(n)。通過(guò)對(duì)光伏電池輸出功率P與電壓V之間的特性曲線分析,并且考慮到外界環(huán)境因素(溫度、日照強(qiáng)度)對(duì)光伏陣列輸出功率的影響,得到模糊控制規(guī)則如表1所示。
表1 MPPT模糊控制規(guī)則
將語(yǔ)言變量E,A分別定義為8個(gè)模糊子集,其中A(n-1)和A(n)變量子集的論域相同,統(tǒng)一將其命名為A。
E={NB,NM,NS,NO,PO,PS,PM,PB};
A={NB,NM,NS,PS,PM,PB}。
其中NB、NM、NS、NO、PO、PS、PM、PB分別表示負(fù)大、負(fù)中、負(fù)小、負(fù)0、正0、正小、正中、正大等模糊概念。并將它們的論域規(guī)定為14個(gè)和12個(gè)等級(jí),即:
E={-6,-5,-4,-3,-2,-1,-0,+0,+1,+2,+3,+4,+5,+6};
A={-6,-5,-4,-3,-2,-1,+1,+2,+3,+4,+5,+6}。
1.軟件總體構(gòu)思。使用單片機(jī)系統(tǒng)實(shí)現(xiàn)模糊控制具有一定的難度,它是由控制算法的復(fù)雜性和單片機(jī)資源的有限性共同決定的。需要指出的是單片機(jī)最擅長(zhǎng)是8位無(wú)符號(hào)數(shù)運(yùn)算,由于模糊控制系統(tǒng)比較復(fù)雜,要涉及小數(shù)和負(fù)數(shù)。一種方法是通過(guò)區(qū)間變換,將數(shù)值擴(kuò)大,從而避免單片機(jī)做負(fù)數(shù)和小數(shù)運(yùn)算,從而獲得較高的效率,但是變換過(guò)程比較麻煩,使得設(shè)計(jì)過(guò)程過(guò)于復(fù)雜,且與仿真系統(tǒng)難以對(duì)應(yīng)。
隨著存儲(chǔ)器技術(shù)的發(fā)展和高級(jí)語(yǔ)言開(kāi)發(fā)工具的支持,使我們有了足夠的空間和效率,能夠處理小數(shù)和負(fù)數(shù)運(yùn)算,所以本系統(tǒng)沒(méi)有進(jìn)行論域變換而是直接處理小數(shù)和負(fù)數(shù),使得設(shè)計(jì)更容易與仿真相對(duì)應(yīng),且連貫性較好。模糊控制主要解決論域變換,隸屬函數(shù)的存儲(chǔ)和計(jì)算,控制規(guī)則的存儲(chǔ)和計(jì)算等一系列操作。
2.變換論域。在進(jìn)入模糊計(jì)算之前,須將系統(tǒng)輸入量功率差實(shí)際值e(n)和上次擾動(dòng)步長(zhǎng)實(shí)際值a(n-1)映射到模糊控制系統(tǒng)的論域值E(n)和A(n-1)上,即分別乘以功率差量化因子Ke和擾動(dòng)步長(zhǎng)量化因子Ka。Ke、Ka通過(guò)下式來(lái)確定:
3.隸屬函數(shù)的存儲(chǔ)和計(jì)算。要實(shí)現(xiàn)模糊控制首先就要將隸屬函數(shù)存儲(chǔ)到計(jì)算機(jī)中去,這樣當(dāng)系統(tǒng)完成物理實(shí)時(shí)采集之后,就可以計(jì)算出相應(yīng)的隸屬度進(jìn)行下一步的計(jì)算。隸屬函數(shù)最基本的形狀是三角形,其在數(shù)字單片機(jī)中通常采用三點(diǎn)法來(lái)存儲(chǔ)。如圖1所示。
圖1 三角形隸屬函數(shù)存儲(chǔ)
采用三點(diǎn)法存儲(chǔ)一個(gè)隸屬函數(shù)需要保存3個(gè)數(shù)據(jù):2個(gè)數(shù)據(jù)表示三角形的底點(diǎn),1個(gè)表示其頂點(diǎn)。對(duì)于圖1所示的變量E子集NM的三角形隸屬函數(shù),A、B、C 3點(diǎn)的坐標(biāo)分別為:A(-6,0)、B(-4.5,1)、C(-3,0)。若將A、B、C 3點(diǎn)的X軸坐標(biāo)用XA、XB、XC來(lái)表示,以此求一個(gè)特定輸入量x的隸屬度U(x)時(shí),則需要考慮以下3種情況。
(1)X≤XA或X≥XC時(shí)U(x)=0。
(2)XA<X≤XB時(shí)U(x)=(X-XA)/(XB-XA)*1。
(3)XB<X<XC時(shí)U(x)=(XC-X)/(XC-XB)*1。
由此可見(jiàn),只需將A、B、C 3個(gè)點(diǎn)的x軸坐標(biāo)值存放在單片機(jī)的內(nèi)部ROM中,表示為(-6,-4.5,-3),就可以利用編程求得論域中某一特定的輸入量隸屬于該模糊量的隸屬度。
誤差E與前次步長(zhǎng)值A(chǔ)(n-1)以小數(shù)形式存儲(chǔ)并且在每一次采樣周期會(huì)都被刷新,所以將其以浮點(diǎn)數(shù)形式存放于單片機(jī)的內(nèi)部RAM中,起始地址分別為C0H和E0H。當(dāng)輸入變量E=-5、A(n-1)=-4則用三點(diǎn)法求出的模糊輸入量。在內(nèi)存中的存放形式如表2所示。
表2 E、A(n-1)在內(nèi)部RAM中的存放形式和值
4.模糊規(guī)則存儲(chǔ)及模糊輸出計(jì)算。根據(jù)已有知識(shí)或?qū)<医?jīng)驗(yàn)形成控制規(guī)則表,仿真的時(shí)候直接用“IF…THEN…”語(yǔ)句輸入控制規(guī)則即可,但是單片機(jī)在具體執(zhí)行時(shí)首先是要先將控制規(guī)則存到ROM當(dāng)中,運(yùn)行時(shí)采樣計(jì)算得到新的E和A(n-1)之后再?gòu)拇鎯?chǔ)器中取出規(guī)則進(jìn)行運(yùn)算,最終形成輸出。
(1)存儲(chǔ)控制規(guī)則。若要存儲(chǔ)為表1所示模糊控制規(guī)則表,可以看出整個(gè)模糊控制規(guī)則表共有48條控制規(guī)則,每一條控制規(guī)則有2個(gè)前置條件稱為前件1和前件2和一個(gè)輸出稱為后件。在數(shù)字單片機(jī)中對(duì)輸入的模糊量進(jìn)行推理時(shí),必須將所描述控制過(guò)程的控制規(guī)則都存儲(chǔ)在單片機(jī)的內(nèi)存ROM中,由于規(guī)則的數(shù)目較多,因而在單片機(jī)中必須以節(jié)省內(nèi)存、便于查找為原則進(jìn)行存放。
將以上控制規(guī)則存儲(chǔ)在單片機(jī)ROM中時(shí),可令語(yǔ)言變量E的取值NB、NM、NS、NO、PO、PS、PM、PB分別與數(shù)字0、1、2、3、4、5、6、7相對(duì)應(yīng)。即NB≡0、NM≡1、NS≡2、NO≡3、PO≡4、PS≡5、PM≡6、PB≡7。令語(yǔ)言變量A的取值NB、NM、NS、PS、PM、PB分別與數(shù)字0、1、2、3、4、5相對(duì)應(yīng)。即NB≡0、NM≡1、NS≡2、PS≡3、PM≡4、PB≡5。
經(jīng)過(guò)這樣定義后,可用4位二進(jìn)制數(shù)表示輸入或輸出語(yǔ)言變量的各個(gè)取值,每條控制規(guī)則的2個(gè)前件可用1個(gè)字節(jié)來(lái)表示,其中高4位表示第1前件的模糊取值,低4位表示第2前件的模糊取值,后件用1個(gè)字節(jié)的低4位表示,高4位全部置1以標(biāo)識(shí)為后件。這樣1條控制規(guī)則占2個(gè)單元,表1共48條規(guī)則,占96個(gè)字節(jié),設(shè)起始地址為0F00H。則表1的第1列的模糊控制規(guī)則存儲(chǔ)形式如表3所示。
表3 部分模糊控制規(guī)則表在ROM中的存儲(chǔ)形式
(2)模糊規(guī)則推理。首先從控制規(guī)則ROM存儲(chǔ)區(qū)(0F00H)取第1條規(guī)則前件字節(jié)的高4位乘以4作為地址偏移量,然后加上模糊化后的模糊輸入量E在內(nèi)存RAM中存放的首地址(C0H),則可從RAM內(nèi)模糊量E的存放區(qū)域中,查找出當(dāng)前特定的模糊輸入量E隸屬該規(guī)則第1前件所取語(yǔ)言變量值NB的隸屬度UNB(E)。同理還可查找出當(dāng)前特定的步長(zhǎng)值A(chǔ)(n-1)隸屬該規(guī)則第2前件所取語(yǔ)言變量值NB的隸屬度UNB(A(n-1))。
然后取2個(gè)前件的隸屬度的最小值作為該條規(guī)則后件所取的語(yǔ)言變量值PB的隸屬度,則有UPB(U)=min{UNB(E),UNB(A(n-1))}。
取規(guī)則的后件字節(jié)的低4位乘以4作為地址偏移量,加上模糊輸出量的U存放區(qū)首址(設(shè)為A0H),可求得對(duì)應(yīng)于后件取值為PB的隸屬函數(shù)存放單元地址,最后將UPB(U)存放于該單元中。這樣就完成了第1條規(guī)則的模糊推理,后面規(guī)則推理類同。當(dāng)由另1條規(guī)則求得UPB(U)時(shí),應(yīng)與單元中原來(lái)的數(shù)比較,取大者存入。
用強(qiáng)度轉(zhuǎn)移法進(jìn)行模糊推理的過(guò)程,并以第1條規(guī)則為例說(shuō)明該模糊推理方法的程序流程。如圖2所示。
圖2 強(qiáng)度轉(zhuǎn)移法模糊推理過(guò)程
單片機(jī)通過(guò)對(duì)每一條規(guī)則用強(qiáng)度轉(zhuǎn)移法進(jìn)行推理,從而得到所有模糊輸出量的隸屬度,存放在RAM內(nèi)模糊輸出量存放區(qū)的對(duì)應(yīng)單元中。根據(jù)表2提供的數(shù)據(jù)計(jì)算模糊數(shù)據(jù)輸出A(n)的值如表4所示。
表4 一次推理模糊輸出的值及在RAM中的存放形式
用強(qiáng)度轉(zhuǎn)移法進(jìn)行推理時(shí),如果某條規(guī)則中有一前件的隸屬度為0,則無(wú)論另一前件的隸屬度為何值,其后件的隸屬度都為0,即這條規(guī)則對(duì)當(dāng)前模糊輸出量的作用力為0。因此,對(duì)一特定輸入,一般最多有4條規(guī)則推理后有效。在編程時(shí),可以先查詢規(guī)則前件隸屬度是否為0,若是,則不需進(jìn)行比較。這樣可以提高單片機(jī)的執(zhí)行速度。
5.輸出量的反模糊化。在單片機(jī)中,經(jīng)過(guò)模糊推理后得到的是模糊輸出量及其相應(yīng)的隸屬度,而用于最終輸出的控制量必須是一個(gè)精確量,一般都采用重心法來(lái)求取,即求出其所有模糊輸出量的重心,為了簡(jiǎn)化計(jì)算過(guò)程通常把輸出隸屬函數(shù)定義為單點(diǎn)或取各輸出隸屬函數(shù)的中心元素來(lái)代表其模糊量的輸出范圍,這樣可以把原來(lái)重心法的積分運(yùn)算轉(zhuǎn)化為求和與求商運(yùn)算,大大減少了單片機(jī)的計(jì)算量,而且又保留了重心法的優(yōu)點(diǎn)。
論文首先給出光伏陣列最大輸出功率的模糊控制方法,隨后討論了如何使用單片機(jī)編程方法實(shí)現(xiàn)模糊控制技術(shù),給出模糊控制器總體框圖。討論了論域變換、隸屬函數(shù)存取與隸屬度計(jì)算、模糊推理、反模糊等相關(guān)內(nèi)容。提供了用單片機(jī)編程實(shí)現(xiàn)模糊控制的完整方法。