南京鐵道職業技術學院 黃克亞
模糊控制技術單片機軟件實現方法研究
南京鐵道職業技術學院 黃克亞
光伏陣列是一個強非線性系統,太陽能電池的工作情況很難用精確的數學模型來描述,因此采用模糊控制的方法來進行太陽能電池最大功率點的跟蹤是非常合適的,在實際操作中采用嵌入模糊控制器的方法來實現模糊控制。模糊控制器的第n時刻的輸入量為第n時刻的功率變化量E(n)和第n-1時刻的占空比步長值A(n-1),第n時刻的輸出量為第n時刻的占空比步長值A(n)。通過對光伏電池輸出功率P與電壓V之間的特性曲線分析,并且考慮到外界環境因素(溫度、日照強度)對光伏陣列輸出功率的影響,得到模糊控制規則如表1所示。

表1 MPPT模糊控制規則
將語言變量E,A分別定義為8個模糊子集,其中A(n-1)和A(n)變量子集的論域相同,統一將其命名為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分別表示負大、負中、負小、負0、正0、正小、正中、正大等模糊概念。并將它們的論域規定為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.軟件總體構思。使用單片機系統實現模糊控制具有一定的難度,它是由控制算法的復雜性和單片機資源的有限性共同決定的。需要指出的是單片機最擅長是8位無符號數運算,由于模糊控制系統比較復雜,要涉及小數和負數。一種方法是通過區間變換,將數值擴大,從而避免單片機做負數和小數運算,從而獲得較高的效率,但是變換過程比較麻煩,使得設計過程過于復雜,且與仿真系統難以對應。
隨著存儲器技術的發展和高級語言開發工具的支持,使我們有了足夠的空間和效率,能夠處理小數和負數運算,所以本系統沒有進行論域變換而是直接處理小數和負數,使得設計更容易與仿真相對應,且連貫性較好。模糊控制主要解決論域變換,隸屬函數的存儲和計算,控制規則的存儲和計算等一系列操作。
2.變換論域。在進入模糊計算之前,須將系統輸入量功率差實際值e(n)和上次擾動步長實際值a(n-1)映射到模糊控制系統的論域值E(n)和A(n-1)上,即分別乘以功率差量化因子Ke和擾動步長量化因子Ka。Ke、Ka通過下式來確定:

3.隸屬函數的存儲和計算。要實現模糊控制首先就要將隸屬函數存儲到計算機中去,這樣當系統完成物理實時采集之后,就可以計算出相應的隸屬度進行下一步的計算。隸屬函數最基本的形狀是三角形,其在數字單片機中通常采用三點法來存儲。如圖1所示。

圖1 三角形隸屬函數存儲
采用三點法存儲一個隸屬函數需要保存3個數據:2個數據表示三角形的底點,1個表示其頂點。對于圖1所示的變量E子集NM的三角形隸屬函數,A、B、C 3點的坐標分別為:A(-6,0)、B(-4.5,1)、C(-3,0)。若將A、B、C 3點的X軸坐標用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個點的x軸坐標值存放在單片機的內部ROM中,表示為(-6,-4.5,-3),就可以利用編程求得論域中某一特定的輸入量隸屬于該模糊量的隸屬度。
誤差E與前次步長值A(n-1)以小數形式存儲并且在每一次采樣周期會都被刷新,所以將其以浮點數形式存放于單片機的內部RAM中,起始地址分別為C0H和E0H。當輸入變量E=-5、A(n-1)=-4則用三點法求出的模糊輸入量。在內存中的存放形式如表2所示。

表2 E、A(n-1)在內部RAM中的存放形式和值
4.模糊規則存儲及模糊輸出計算。根據已有知識或專家經驗形成控制規則表,仿真的時候直接用“IF…THEN…”語句輸入控制規則即可,但是單片機在具體執行時首先是要先將控制規則存到ROM當中,運行時采樣計算得到新的E和A(n-1)之后再從存儲器中取出規則進行運算,最終形成輸出。
(1)存儲控制規則。若要存儲為表1所示模糊控制規則表,可以看出整個模糊控制規則表共有48條控制規則,每一條控制規則有2個前置條件稱為前件1和前件2和一個輸出稱為后件。在數字單片機中對輸入的模糊量進行推理時,必須將所描述控制過程的控制規則都存儲在單片機的內存ROM中,由于規則的數目較多,因而在單片機中必須以節省內存、便于查找為原則進行存放。
將以上控制規則存儲在單片機ROM中時,可令語言變量E的取值NB、NM、NS、NO、PO、PS、PM、PB分別與數字0、1、2、3、4、5、6、7相對應。即NB≡0、NM≡1、NS≡2、NO≡3、PO≡4、PS≡5、PM≡6、PB≡7。令語言變量A的取值NB、NM、NS、PS、PM、PB分別與數字0、1、2、3、4、5相對應。即NB≡0、NM≡1、NS≡2、PS≡3、PM≡4、PB≡5。
經過這樣定義后,可用4位二進制數表示輸入或輸出語言變量的各個取值,每條控制規則的2個前件可用1個字節來表示,其中高4位表示第1前件的模糊取值,低4位表示第2前件的模糊取值,后件用1個字節的低4位表示,高4位全部置1以標識為后件。這樣1條控制規則占2個單元,表1共48條規則,占96個字節,設起始地址為0F00H。則表1的第1列的模糊控制規則存儲形式如表3所示。

表3 部分模糊控制規則表在ROM中的存儲形式
(2)模糊規則推理。首先從控制規則ROM存儲區(0F00H)取第1條規則前件字節的高4位乘以4作為地址偏移量,然后加上模糊化后的模糊輸入量E在內存RAM中存放的首地址(C0H),則可從RAM內模糊量E的存放區域中,查找出當前特定的模糊輸入量E隸屬該規則第1前件所取語言變量值NB的隸屬度UNB(E)。同理還可查找出當前特定的步長值A(n-1)隸屬該規則第2前件所取語言變量值NB的隸屬度UNB(A(n-1))。
然后取2個前件的隸屬度的最小值作為該條規則后件所取的語言變量值PB的隸屬度,則有UPB(U)=min{UNB(E),UNB(A(n-1))}。
取規則的后件字節的低4位乘以4作為地址偏移量,加上模糊輸出量的U存放區首址(設為A0H),可求得對應于后件取值為PB的隸屬函數存放單元地址,最后將UPB(U)存放于該單元中。這樣就完成了第1條規則的模糊推理,后面規則推理類同。當由另1條規則求得UPB(U)時,應與單元中原來的數比較,取大者存入。
用強度轉移法進行模糊推理的過程,并以第1條規則為例說明該模糊推理方法的程序流程。如圖2所示。

圖2 強度轉移法模糊推理過程
單片機通過對每一條規則用強度轉移法進行推理,從而得到所有模糊輸出量的隸屬度,存放在RAM內模糊輸出量存放區的對應單元中。根據表2提供的數據計算模糊數據輸出A(n)的值如表4所示。

表4 一次推理模糊輸出的值及在RAM中的存放形式
用強度轉移法進行推理時,如果某條規則中有一前件的隸屬度為0,則無論另一前件的隸屬度為何值,其后件的隸屬度都為0,即這條規則對當前模糊輸出量的作用力為0。因此,對一特定輸入,一般最多有4條規則推理后有效。在編程時,可以先查詢規則前件隸屬度是否為0,若是,則不需進行比較。這樣可以提高單片機的執行速度。
5.輸出量的反模糊化。在單片機中,經過模糊推理后得到的是模糊輸出量及其相應的隸屬度,而用于最終輸出的控制量必須是一個精確量,一般都采用重心法來求取,即求出其所有模糊輸出量的重心,為了簡化計算過程通常把輸出隸屬函數定義為單點或取各輸出隸屬函數的中心元素來代表其模糊量的輸出范圍,這樣可以把原來重心法的積分運算轉化為求和與求商運算,大大減少了單片機的計算量,而且又保留了重心法的優點。
論文首先給出光伏陣列最大輸出功率的模糊控制方法,隨后討論了如何使用單片機編程方法實現模糊控制技術,給出模糊控制器總體框圖。討論了論域變換、隸屬函數存取與隸屬度計算、模糊推理、反模糊等相關內容。提供了用單片機編程實現模糊控制的完整方法。