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