基于Matlab的燃料電池系統(tǒng)過氧量模糊PID控制方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種燃料電池過氧量的控制方法,特別是一種基于Matlab的燃料電 池系統(tǒng)過氧量模糊PID控制方法。
【背景技術(shù)】
[0002] 由于燃料電池具有功率密度高,可在較低的操作溫度下運(yùn)行,噪音低,操作方 便,固態(tài)電解質(zhì)便于攜帶等優(yōu)點(diǎn),所以被普遍看作最有可能發(fā)展成混合動(dòng)力汽車的動(dòng)力裝 置。當(dāng)外部連接的負(fù)載突然啟動(dòng),燃料電池的輸出突增或突降,為了能夠滿足各種外界的刺 激,則需要能夠快速對(duì)燃料電池補(bǔ)充或者減少供給反應(yīng)原料的能力。反應(yīng)原料的供給將決 定著燃料電池的輸出功率,氫氣/氧氣的流量和壓力的控制,水和熱的管理都影響著燃料 電池的工作效率。當(dāng)氧氣供給不足,導(dǎo)致過氧比降低可能導(dǎo)致饑餓現(xiàn)象的產(chǎn)生,質(zhì)子交換膜 馬上退化,此時(shí)將會(huì)降低燃料電池的工作效率和對(duì)質(zhì)子交換膜造成永久性的損壞。為了防 止膜的退化和延長燃料電池的工作壽命,控制過氧量有著重要的意義。目前大部分工業(yè)現(xiàn) 場(chǎng)使用傳統(tǒng)PID控制器控制燃料電池系統(tǒng)運(yùn)行期間的過氧量控制,傳統(tǒng)的PID控制器的三 個(gè)參數(shù)Kpa nKD是固定不變的,但是我們的機(jī)器隨著運(yùn)行的時(shí)間增加其內(nèi)部的參數(shù)會(huì)發(fā)現(xiàn) 一些變化,那么誤差也會(huì)隨著變化,原先的PID三個(gè)參數(shù)也許就不再適用。由于燃料電池 系統(tǒng)具有時(shí)變性,強(qiáng)耦合性以及電池內(nèi)部工作參數(shù)的不確定性,在加上外界負(fù)載和環(huán)境溫 度的擾動(dòng),使得傳統(tǒng)PID控制難以保證發(fā)電系統(tǒng)能夠在不同運(yùn)行條件下獲得理想的輸出電 壓。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明的目的在于,提供一種基于Matlab的燃料電池系統(tǒng)過氧量模糊PID控制方 法。本發(fā)明實(shí)現(xiàn)在線重新整定PID控制器的參數(shù),且更加快速的達(dá)到平衡狀態(tài),也具有更小 的振蕩,大大提尚了控制精度。
[0004] 本發(fā)明的技術(shù)方案:基于Matlab的燃料電池系統(tǒng)過氧量模糊PID控制方法,其特 征在于,按下述步驟進(jìn)行:
[0005] ①基于Matlab或simulink仿真平臺(tái)建立燃料電池動(dòng)態(tài)模型,通過該燃料電池動(dòng) 態(tài)模型得到燃料電池的輸出電壓、過氧量;
[0006] ②針對(duì)所述的燃料電池動(dòng)態(tài)模型構(gòu)造過氧量模糊PID控制器,過氧量模糊PID控 制器由模糊控制器和PID調(diào)節(jié)器組成;
[0007] ③模糊控制器根據(jù)計(jì)算得到的電壓誤差和電壓誤差變化率,對(duì)其進(jìn)行模糊化處 理,利用控制邏輯進(jìn)行模糊推理和逆模糊化,整定出精確的控制參數(shù)Kp、K n KD,并修改PID 調(diào)節(jié)器參數(shù),進(jìn)而實(shí)現(xiàn)燃料電池過氧量的控制。
[0008] 前述的基于Matlab的燃料電池系統(tǒng)過氧量模糊PID控制方法中,所述模糊控制器 的隸屬函數(shù)選取為高斯函數(shù),該隸屬函數(shù)是一條方程曲線,定義了每個(gè)點(diǎn)在輸入空間映射 到一個(gè)隸屬值,且其值在〇和1之間。
[0009] 前述的基于Matlab的燃料電池系統(tǒng)過氧量模糊PID控制方法中,所述模糊控制器 的隸屬函數(shù)的語言變量采用七個(gè)等級(jí),語言值分別是" (NL) "," (NM) "," (NS) ","(0) "," (PS) ","(PM)',,"(PL)',。
[0010] 前述的基于Matlab的燃料電池系統(tǒng)過氧量模糊PID控制方法中,所述模糊控制器 采用的是兩個(gè)輸入三個(gè)輸出的模式。
[0011] 前述的基于Matlab的燃料電池系統(tǒng)過氧量模糊PID控制方法中,所述電壓誤差 e(k)和電壓誤差變化率ec(k)由下列方程式計(jì)算得到:
[0012] e (k) = y (k) ~r (k)
[0013] ec(k) = (y (k)-r (k))/Ts
[0014] 式中,y(k)是燃料電池的輸出電壓,r(k)作為參考輸入,Ts作為采樣時(shí)間周期。
[0015] 前述的基于Matlab的燃料電池系統(tǒng)過氧量模糊PID控制方法中,所述控制邏輯 為:
[0016] A.當(dāng)誤差e的絕對(duì)值較大時(shí),在保證系統(tǒng)相對(duì)穩(wěn)定的情況下,比例系數(shù)Kp取較大 的值使系統(tǒng)快速達(dá)到穩(wěn)態(tài);在系統(tǒng)初始時(shí),為了避免系統(tǒng)由于誤差產(chǎn)生的微分飽和,增強(qiáng)系 統(tǒng)的穩(wěn)定性,微分系數(shù)K d采用相對(duì)小的值;為了防止在運(yùn)行操作過程中系統(tǒng)響應(yīng)出現(xiàn)過大 的超調(diào)量,采用偏小的1值,以此達(dá)到限制積分環(huán)節(jié)的作用。
[0017] B.當(dāng)eXec>0,若誤差呈現(xiàn)變大的趨勢(shì),此時(shí)應(yīng)采取措施將誤差變化趨勢(shì)扭轉(zhuǎn),采 用較大的K p值,K :選擇中間值,K D取較小值,以此快速的減小誤差達(dá)到穩(wěn)態(tài);若誤差呈現(xiàn)變 小的趨勢(shì),則保持原參數(shù)進(jìn)行微調(diào)。
[0018] C.當(dāng)eXeC〈0或e = 0,此時(shí)誤差呈現(xiàn)變小的趨勢(shì)或者接近平衡點(diǎn),則不改變參數(shù) 變化值。
[0019] D.當(dāng)eXec〈0, e辛0,此時(shí)系統(tǒng)的輸出結(jié)果與參考對(duì)象值成平行狀態(tài)且存在一定 的誤差,為了降低系統(tǒng)的誤差且保持好系統(tǒng)的穩(wěn)態(tài)性能,Kp選擇中間值,K 1取較小值,KJlJ 不宜取太大值。
[0020] 前述的基于Matlab的燃料電池系統(tǒng)過氧量模糊PID控制方法中,基于所述控制邏 輯建立下列參數(shù)整定程序:
[0021] Rl: if (e is NL) and (ec is NL) then (Kp is PL) (K1 is 0) (KD is 0)
[0022] R2: if (e is NL) and (ec is NM) then (Kp is PM) (K1 is 0) (KD is 0)
[0023] R3: if (e is NL) and (ec is NS) then (Kp is PS) (K1 is PS) (KD is 0)
[0024] R4: if (e is NL) and (ec is 0) then (Kp is 0) (K1 is PL) (KD is PS)
[0025] R5: if (e is NL) and (ec is PS) then (Kp is NS) (K1 is NM) (KD is 0)
[0026] R6: if (e is NL) and (ec is PM) then (Kp is NS) (K1 is NM) (KD is 0)
[0027] R7: if (e is NL) and (ec is PL) then (Kp is PM) (K1 is 0) (KD is 0)
[0028] R8: if (e is NM) and (ec is NL) then (Kp is PL) (K1 is 0) (KD is 0)
[0029] R9: if (e is NM) and (ec is NM) then (Kp is PM) (K1 is 0) (KD is 0)
[0030] RlO: if (e is NM) and (ec is NS) then (Kp is PS) (K1 is 0) (KD is NS)
[0031] Rll: if (e is NM) and (ec is 0) then (Kp is 0) (K1 is PL) (KD is PM)
[0032] R12:if(e is NM)and(ec is PS) then (Kp is NS) (K1 is NM) (KD is PS)
[0033] R13:if(e is NM)and(ec is PM) then (Kp is NS) (K1 is NM) (KD is 0)
[0034] R14: if (e is NM) and (ec is PL) then (Kp is NL) (K1 is 0) (KD is 0)
[0035] R15: if (e is NS) and (ec is NL) then (Kp is PL) (K1 is 0) (KD is 0)
[0036] R16:if(e is NS)and(ec is NM)then(Kp is PM) (K1 is 0) (KD is NS)
[0037] R17:if(e is NS)and(ec is NS) then (Kp is PS) (K1 is 0) (KD is NM)
[0038] R18: if (e is NS) and (ec is 0) then (Kp is 0) (K1 is PL) (KD is PM)
[0039] R19:if(e is NS)and(ec is PS) then (Kp is NS) (K1 is NM) (KD is PL)
[0040] R20:if(e is NS)and(ec is PM) then (Kp is NM) (K1 is NS) (KD is NS)
[0041] R21: if (e is NS) and (ec is PL) then (Kp is NL) (K1 is 0) (KD is 0)
[0042] R22: if (e is 0) and (ec is NL) then (Kp is PL) (K1 is 0) (KD is NM)
[0043] R23:if(e is 0)and(ec is NM)then(Kp is PS) (K1 is 0) (KD is PM)
[0044] R24: if (e is 0) and (ec is NS) then (Kp is PS) (K1 is 0) (KD is PL)
[0045] R25: if (e is 0) and (ec is 0) then (Kp is 0) (K1 is PL) (KD is PL)
[0046] R26:if(e is 0)and(ec is PS) then (Kp is 0) (K1 is PM) (KD is PL)
[0047] R27:if(e is 0)and(ec is PM) then (Kp is NM) (K1 is NS) (KD is PM)
[0048] R28: if (e is 0) and (ec is PL) then (Kp is NL) (K1 is 0) (KD is PM)
[0049] R29:if(e is PS)and(ec is NL)then(Kp is PM) (K1 is 0) (KD is PM)
[0050] R30: if (e is PS) and (ec is NM) then (Kp is PS) (K1 is 0) (KD is PM)
[0051] R31: if (e is PS) and (ec is NS) then (Kp is 0) (K1 is PS) (KD is PL)
[0052] R32: if (e is PS) and (ec is 0) then (Kp is NS) (K1 is PL) (KD is PL)
[0053] R33: if (e is PS) and (ec is PS) then (Kp is 0) (K1 is PM) (KD is PL)
[0054] R34: if (e is PS) and (ec is PM) then (Kp is NS) (K1 is NS) (KD is NM)
[0055] R35: if (e is