---------------------------------------------------------------------------------------------------------------------
轉載:木南創智博客:https://www.cnblogs.com/foxclever/
---------------------------------------------------------------------------------------------------------------------
01:基本PID
1.1、PID算法基本原理
PID算法是控制行業最經典、最簡單、而又最能體現反饋控制思想的算法。對於一般的研發人員來說,設計和實現PID算法是完成自動控制系統的基本要求。這一算法雖然簡單,但真正要實現好,卻也需要下一定功夫。首先我們從PID算法最基本的原理開始分析和設計這一經典命題。
PID算法的執行流程是非常簡單的,即利用反饋來檢測偏差信號,並通過偏差信號來控制被控量。而控制器本身就是比例、積分、微分三個環節的加和。其功能框圖如下:
根據上圖我們考慮在某個特定的時刻t,此時輸入量為rin(t),輸出量為rout(t),於是偏差就可計算為err(t)=rin(t)-rout(t)。於是PID的基本控制規律就可以表示為如下公式:
其中Kp為比例帶,TI為積分時間,TD為微分時間。PID控制的基本原理就是如此。
1.2、PID算法的離散化
上一節簡單介紹了PID算法的基本原理,但要在計算機上實現就必須將其離散化,接下來我們就說一說PID算法的離散化問題。在實現離散化之前,我們需要對比例、積分、微分的特性做一個簡單的說明。
比例就是用來對系統的偏差進行反應,所以只要存在偏差,比例就會起作用。積分主要是用來消除靜差,所謂靜差就是指系統穩定后輸入輸出之間依然存在的差值,而積分就是通過偏差的累計來抵消系統的靜差。而微分則是對偏差的變化趨勢做出反應,根據偏差的變化趨勢實現超前調節,提高反應速度。
1.2.1.位置式PID
在實現離散前,我們假設系統采樣周期為T。假設我們檢查第K個采樣周期,很顯然系統進行第K次采樣。此時的偏差可以表示為err(K)=rin(K)-rout(K),那么積分就可以表示為:err(K)+ err(K+1)+┈┈,而微分就可以表示為:(err(K)- err(K-1))/T。於是我們可以將第K次采樣時,PID算法的離線形式表示為:
也可以記為:
這就是所謂的位置型PID算法的離散描述公式。我們知道還有一個增量型PID算法,那么接下來我們推到一下增量型PID算法的公式。
1.2.2.增量型PID
上面的公式描述了第k個采樣周期的結果,那么前一時刻也就是k-1個采樣周期就不難表示為:
那么我們再來說第K個采樣周期的增量,很顯然就是U(k)-U(k-1)。於是我們用第k個采樣周期公式減去第k-1個采樣周期的公式,就得到了增量型PID算法的表示公式:
當然,增量型PID必須記得一點,就是在記住U(k)=U(k-1)+∆U(k)。
1.3、基本特點
前面講述並且實現了PID控制器,包括位置型PID控制器和增量型PID控制器。界限來我們對這兩種類型的控制器的特點作一個簡單的描述。
位置型PID控制器的基本特點:
- 位置型PID控制的輸出與整個過去的狀態有關,用到了偏差的累加值,容易產生累積偏差。
- 位置型PID適用於執行機構不帶積分部件的對象。
- 位置型的輸出直接對應對象的輸出,對系統的影響比較大。
增量型PID控制器的基本特點:
- 增量型PID算法不需要做累加,控制量增量的確定僅與最近幾次偏差值有關,計算偏差的影響較小。
- 增量型PID算法得出的是控制量的增量,對系統的影響相對較小。
- 采用增量型PID算法易於實現手動到自動的無擾動切換。
2.改進型PID: 針對積分項的積分分離優化算法
2.1、基本思想
我們已經講述了PID控制引入積分主要是為了消除靜差,提高控制精度。但在過程的啟動、結束或大幅度增減設定值時,短時間內系統輸出有很大偏差,會造成PID運算的積分累積,引起超調或者振盪。為了解決這一干擾,人們引入了積分分離的思想。其思路是偏差值較大時,取消積分作用,以免於超調量增大;而偏差值較小時,引入積分作用,以便消除靜差,提高控制精度。
具體的實現步驟是:根據實際情況,設定一個閾值;當偏差大於閾值時,消除積分僅用PD控制;當偏差小於等於閾值時,引入積分采用PID控制。則控制算法可表示為:
其中β稱為積分開關系數,其取值范圍為:
由上述表述及公式我們可以知道,積分分離算法的效果其實與ε值的選取有莫大關系,所以ε值的選取實際上是實現的難點,ε值過大則達不到積分分離的效果,而ε值過小則難以進入積分區,ε值的選取存在很大的主觀因素。
對於經典的增量式PID算法,似乎沒有辦法由以上的公式推導而來,因為β隨着err(k)的變化在不是修改着控制器的表達式。其實我們可以換一種角度考慮,每次系統調節未定后,偏差應該為零,然后只有當設定值改變時,系統才會響應而開始調節。設定值的改變實際上是一個階躍變化,此時的控制輸出記為U0,開始調節時,其調節增量其實與之前的一切沒有關系。所以我們就可以以變化時刻開始為起點,而得到帶積分分離的增量算法,以保證在啟動、停止和快速變化時防止超調。公式如下:
其中β的取值與位置型PID算法一致。可能有人會擔心偏差來回變化,造成積分作用的頻繁分離和引入,進而使上述的增量表達式無法實現。其實我們分析一下就能發現,在開始時,由於設定值變化引起的偏差大而分離了積分作用,在接近設定值時,偏差變小就引入了積分,一邊消除靜差,而后處於穩態,直到下一次變化。
2、算法實現
這一部分,我們根據前面對其基本思想的描述,來實現基於積分分離的PID算法實現,同樣是包括位置型和增量型兩種實現方式。首先我們來看一下算法的實現過程,具體的流程圖如下:
有上圖我們知道,與普通的PID算法的區別,只是判斷偏差的大小,偏差大時,為PD算法,偏差小時為PID算法。
3、總結
積分分離算法的思想非常簡單。當然,對於β的取值,很多人提出了改進措施,例如分多段取值,設定多個閾值ε1、ε2、ε3、ε4等,不過這些閾值也需要根據實際的系統來設定。除了分段取值外,甚至也有采用函數關系來獲取β值。當然,這樣處理后就不再是簡單的積分分離了,特別是在增量型算法中,實際上已經演變為一種變積分算法了。已經偏離了積分分離算法的設計思想,在后面我們會進一步說明。
3.改進型PID : 抗積分飽和的PID算法
1、抗積分飽和的基本思想
所謂積分飽和就是指系統存在一個方向的偏差,PID控制器的輸出由於積分作用的不斷累加而擴大,從而導致控制器輸出不斷增大,執行機構達到極限位置,超出正常范圍進入飽和區。當系統出現反響的偏差時,需要首先從飽和區退出,而不能對反向的偏差進行快速的響應。這時系統就像失控一樣, 造成控制性能惡化, 這種現象稱為積分飽和現象或積分失控現象。
為了解決積分飽和的問題,人們引入了抗積分飽和的PID算法。所謂抗積分飽和算法,其思路是在計算U(k)的時候,先判斷上一時刻的控制量U(k-1)是否已經超出了限制范圍。若U(k-1)>Umax,則只累加負偏差;若U(k-1)<Umin,則只累加正偏差。從而避免控制量長時間停留在飽和區。
2、算法實現
抗積分飽和的思想很簡單,解釋在控制器輸出的最大最小值附近限制積分的累積情況,以防止在恢復時沒有響應。根據前面得分系我們可以得到如下的流程圖:
3、總結
所謂抗積分飽和就是防止由於長期存在一個方向的偏差而對相反方向的偏差遲滯響應。本文的方法是在達到極值后將不再對這一方向的偏差做出反應相反只對另一方向的偏差做出反應。事實上由於偏差的存在有可能造成輸出值超限的情況,所以還需要對輸出值作出限制。
04.改進型PID: 梯形積分PID算法
從微積分的基本原理看,積分的實現是在無限細分的情況下進行的矩形加和計算。但是在離散狀態下,時間間隔已經足夠大,矩形積分在某些時候顯得精度要低了一些,於是梯形積分被提出來以提升積分精度。
1、梯形積分基本思路
在PID控制其中,積分項的作用是消除余差,為了盡量減小余差,應提高積分項的運算精度。在積分項中,默認是按矩形方式來計算積分,將矩形積分改為梯形積分可以提高運算精度。其計算公式為:
於是如果在位置型PID算法中引入梯形積分則可以修改計算公式如下:
同樣要在增量型PID算法中引入梯形積分則可以修改計算公式如下:
2、算法實現
從微積分的角度來說,當積分時間到無限小時,矩形積分與梯形積分是沒有區別的。但事實上我們的采樣時間不可能無限小,而且也不可能是連續的,那么采樣周期越大,那么矩形近似於實際曲線間的偏差就越大,而梯形積分則可以更加接近實際曲線,所以采用梯形積分代替矩形積分就可以得到更高的精度。
3、總結
積分項的引入目的就是為了消除系統的余差,那么積分項的計算精度越高,對消除系統的余差就越有利。梯形積分相較於矩形積分其精度有比較大的提高,所以對消除余差也就越有效。
05.改進型PID: 變積分PID算法
在普通的PID控制算法中,由於積分系數Ki是常數,所以在整個控制過程中,積分增量是不變的。然而,系統對於積分項的要求是,系統偏差大時,積分作用應該減弱甚至是全無,而在偏差小時,則應該加強。積分系數取大了會產生超調,甚至積分飽和,取小了又不能短時間內消除靜差。因此,如何根據系統的偏差大小改變積分速度,對提高系統的品質是有必要的。變積分PID算法正好可以滿足這一要求。
1、變積分的基本思想
變積分PID的基本思想是設法改變積分項的累加速度,使其與偏差大小相對應:偏差越大,積分越慢; 偏差越小,積分越快。設定系數為f(err(k)),它是err(k)的函數。當|err(k)|增大時,f減小,反之增大。變積分的PID積分項表達式為:
其中f(err(k))與|err(k)|的函數關系可根據具體情況設定,可以是線性的也可以是非線性的,通常比較簡單的設置如下:
由以上公式可知,f(err(k))的值在[0,1]區間變化,當偏差值|err(k)|大於分離區間A+B時,不對當前偏差err(k)進行累加;當偏差值|err(k)|小於B時,加入當前偏差err(k)進行累加;介於B和A+B的區間時,按一定函數關系隨err(k)變化。於是變積分PID算法可以表示為:
上述的f(err(k))函數只是我們列舉的一種,事實上可以采取任何可行的方式,甚至是非線性函數,只要更符合控制對象的特性。
對於用增量型PID算法的變積分表示如下:
看到這個公式,很多人可能會發覺與前面的積分分離算法的公式很象。特別是在增量型算法中,它們的形式確實是一樣的,但表達的意思確是有一定區別,那么我們來看看有什么不同呢?在后面我們再作總結。
2、算法實現
變積分實際上是通過對偏差的判斷,讓積分以不同的速度累計。這一系數介於0-1之間,可以通過多種方式實現,在這里我們按線性方式實現。變積分的控制流程圖如下:
3、總結
變積分實際上有一定的專家經驗在里面,因為限值的選取以及采用什么樣的函數計算系數,有很大的靈活性。
我們在前面做了積分分離的算法,這次又說了變積分的算法。他們有相通的地方,也有不同的地方,下面對他們進行一些說明。
首先這兩種算法的設計思想是有區別的。積分分離的思想是偏差較大時,取消積分;而偏差較小時引入積分。變積分的實現是想是設法改變積分項的累加速度,偏差大時減弱積分;而偏差小時強化積分。有些所謂改進型的積分分離算法實際已經脫離了積分分離的基本思想,而是動態改變積分系數。就這一點而言,特別是在增量型算法中,已經屬於變積分的思想了。
其次,對於積分分離來說,該操作是針對整個積分項操作,這一點在位置型PID算法中,表現的尤為明顯。而對於變積分來說,是針對當前偏差的積分累計,就是說只影響當前這次的積分部分。再者,具體的實現方式也存在區別,特別是在位置型PID方式下尤為明顯。
我們在這里討論它們的區別原因,佷顯然就是我們沒辦法同時采用這兩種優化方式,只能分別實現,在后面我們將實現基於積分項的優化。
從PID控制的基本原理我們知道,微分信號的引入可改善系統的動態特性,但也存在一個問題,那就是容易引進高頻干擾,在偏差擾動突變時尤其顯出微分項的不足。為了解決這個問題人們引入低通濾波方式來解決這一問題。
06.改進型PID: 不完全微分PID算法
1、不完全微分的基本思想
微分項有引入高頻干擾的風險,但若在控制算法中加入低通濾波器,則可使系統性能得到改善。方法之一就是在PID算法中加入一個一階低通濾波器。這就是所謂的不完全微分,其結構圖如下:
或者是另一種形式:
在這里我們考慮第一種結構形式。在這種情況下,微分與一階慣性環節結合,其微分部分的計算公式可表示如下:
其中α的取值在0和1之間,有濾波常數和采樣周期確定。據此我們將其增量化,則可以得到為不完全微分的增量計算公式:
或者表示為:
這兩種表示方式是等價的,第二種表示法與我們的完全微分PID算法增量型式表示更接近,好理解。而且與位置型的表示法也更為一致,所以我們選擇第二種表示法。
2、算法實現
經過前面的分析及公式推導,我們想要實現不完全微分其實已經相當容易了。為了便於理解,我們保持比例和積分為基本的格式,只對微分部分采用不完全微分算法。
3、總結
不完全微分方式在微分環節采用了低通濾波有效地提高了微分項的特性。其中α的取值是一個0~1之間的數。兩個極限值,在0時其實就是沒有濾波的普通微分環節;而取1時,則沒有微分作用。所以α的取值對不完全微分的效果是至關重要的,一般要根據被控對象的特性來確定。
前面已經實現了各種的PID算法,然而在某些給定值頻繁且大幅變化的場合,微分項常常會引起系統的振盪。為了適應這種給定值頻繁變化的場合,人們設計了微分先行算法。
07.改進型PID: 微分先行PID算法。
1、微分先行算法的思想
微分先行PID控制是只對輸出量進行微分,而對給定指令不起微分作用,因此它適合於給定指令頻繁升降的場合,可以避免指令的改變導致超調過大。微分先行的基本結構圖:
根據上面的結構圖,我們可以推出PID控制器的輸出公式,比例和積分是不變的只是微分部分變為只對對象輸出積分,記為y,我們對微分部分引入一階慣性濾波:,可記微分部分的傳遞函數如下:
於是微分部分可以推導出如下的公式:
前面我們在推導PID的公式時曾規定:Kd=Kp*Td/T,於是我們將其帶入公式可得:
於是我們就可以得到微分先行的離散化公式:
這即是位置型PID的計算公式了,我們也可以使用前面的方法推導增量型的計算公式如下:
從上面的公式我們發現,微分部分只與測量值有關,而且與連續的幾個測量值都有關。而與設定值沒有關系,設定值的階躍變化不會造成高頻的干擾。
2、算法實現
前面我們已經簡單的介紹了微分現行的基本結構,也推導了位置型以及增量型公式,接下來我們根據前面對其基本思想的描述,來實現基於微分先行的PID算法實現,同樣是包括位置型和增量型兩種實現方式。
3、總結
我所理解的就是PI對偏差作用,D只對輸出起作用,微分先行由於微分部分只對測量值起作用所以可以消除設定值突變的影響,還可以引入低通濾波,甚至在必要時將比例作用也可進行相應的改進。其實用於設定值會頻繁改變的過程對象,防止設定值的頻繁波動造成系統的不穩定。該控制對於改善系統的動態特性是有好處的,但勢必影響響應的速度,需全面考慮。
08.改進型PID: 考慮死區PID算法
在計算機控制系統中,由於系統特性和計算精度等問題,致使系統偏差總是存在,系統總是頻繁動作不能穩定。為了解決這種情況,我們可以引入帶死區的PID算法。
1、帶死區PID的基本思想
帶死區的PID控制算法就是檢測偏差值,若是偏差值達到一定程度,就進行調節。若是偏差值較小,就認為沒有偏差。用公式表示如下:
其中的死區值得選擇需要根據具體對象認真考慮,因為該值太小就起不到作用,該值選取過大則可能造成大滯后。
帶死區的PID算法,對無論位置型還是增量型的表達式沒有影響,不過它是一個非線性系統。
除以上描述之外還有一個問題,在零點附近時,若偏差很小,進入死去后,偏差置0會造成積分消失,如是系統存在靜差將不能消除,所以需要人為處理這一點。
2、算法實現
前面我們描述了帶死區的PID控制的基本思想。在接下來我們來實現這一思想,同樣是按位置型和增量型來分別實現。
3、總結
引入死區的主要目的是消除穩定點附近的波動,由於測量值的測量精度和干擾的影響,實際系統中測量值不會真正穩定在某一個具體的值,而與設定值之間總會存在偏差,而這一偏差並不是系統真實控制過程的反應,所以引入死區就能較好的消除這一點。
當然,死區的大小對系統的影響是不同的。太小可能達不到預期的效果,而太大則可能對系統的正常變化造成嚴重滯后,需要根據具體的系統對象來設定。
09.改進型PID: 引入前饋補償PID算法。
對於一般的時滯系統來說,設定值的變動會產生較大的滯后才能反映在被控變量上,從而產生合理的調節。而前饋控制系統是根據擾動或給定值的變化按補償原理來工作的控制系統,其特點是當擾動產生后,被控變量還未變化以前,根據擾動作用的大小進行控制,以補償擾動作用對被控變量的影響。前饋控制系統運用得當,可以使被控變量的擾動消滅在萌芽之中,使被控變量不會因擾動作用或給定值變化而產生偏差,它較之反饋控制能更加及時地進行控制,並且不受系統滯后的影響。
1、前饋控制基本思想
在高精度伺服控制中,前饋控制可用來提高系統的跟蹤性能。經典控制理論中的前饋控制設計是基於復合控制思想的,當閉環系統為連續系統時,使前饋環節與閉環系統的傳遞函數之積為1,從而實現輸出完全復現輸入。其系統結構圖如下:
從上圖中,我們可以發現前饋環節的傳遞函數是被控對象的倒數。那么就是在使用前饋控制前我們需要對被控對象的模型有了解,才能有針對性的設計出合適的前饋控制器。也就說,每個系統的前饋控制器都是不一樣的,每個前饋控制器都是專用的。
要實施前饋控制,首先我們必須得到被控系統的近似模型,這個模型越接近真實的系統,控制的效果就越明顯。在這里我們假定一個被控對向的模型為:
那么前饋控制器是被控對象的倒數,於是我們可以推導出前饋控制器的輸入輸出表達式為:
我們將其離散化,就可以得到我們想要實現的前饋控制器的輸出公式。前饋控制器的輸入是設定值,所以表示如下:
2、算法實現
經過上面的分析我們可以實現一個前饋控制器,前饋控制器的輸出與設定值當前值、前一拍的值以及前兩拍的只有關。也就是說如果設定值長時間不變化,該前饋控制器是不起作用的。當然每一個前饋控制器都是不一樣的。
3、總結
前饋控制器是一種補償控制,或者說模型控制,其特點就是必須能得到被控對象的精確模型或者近似模型才能起到較好的控制效果。對於時滯系統的模型控制有很多方法,前饋控制是其中比較簡單和應用較廣的算法。
系統中存在頻率高、幅度大、可測量而不可控的擾動時,可選用前饋控制。當控制系統控制通道滯后時間長、反饋控制又不能獲得良好效果時,可選用前饋控制。
10.改進型PID: 步進式PID算法
對於一般的PID控制系統來說,當設定值發生較大的突變時,很容易產生超調而使系統不穩定。為了解決這種階躍變化造成的不利影響,人們發明了步進式PID控制算法。
1、步進式PID的基本思想
所謂步進式PID算法,實際就是在設定值發生階躍變化時,不直接對階躍信號進行響應,而是在一定的時間內逐步改變設定值,直至使設定值達到目標值。這種逐步改變設定值的辦法使得對象運行平穩。適用於高精度伺服系統的位置跟蹤。
佷顯然,這一方法並未改變PID控制器本身,而是對設定值做了前期處理。所以其結構框圖與控制方程與其他的PID控制算法是一致的。
為了對設定值做必要處理,以使其不知快速變化,有多種方法。比較常用的是建立線性變化函數的辦法。我們可以規定設定值從0-100%的變化時間為T,則可以確定設定值變化的斜率絕對值,或者說是步長。知道補償后,我們就可以根據不常來不斷修改設定值,直到目標值。可用公式描述為:
其中SPt為設定值目標值,SPs為設定值的起始值,sl為步長,k為步長的變化系數:
而控制器本身的位置型和增量型表達式都保持不變。
2、算法實現
步進式PID的實質是將設定值的突變修改為平緩的變化,這一處理方式在控制中有大量應用。處理設定值變化過程的流程如下所示:
3、總結
所謂步進式實質是對設定值進行平緩變化處理,防止因為設定值的跳變而引起系統的波動。這一辦法雖然能夠減少階躍跳變的干擾,但也會讓系統的響應速度變慢,當然這要根據需要來處理,因為步長的選擇決定了作用大小,補償越小約平緩,相應的響應速度也越慢。
11.專家PID算法
專家PID算法是專家系統與PID算法的結合與應用優化,所以我們接下來先簡單了解專家控制。
1、專家控制的基本思想
專家控制是智能控制的一個分支,是專家系統的理論和技術同控制理論、方法與技術相結合,在無對象模型的情況下,模仿領域專家的經驗來實現對被控對象的控制。
專家控制一般由知識庫和推理機構構成主體框架,按照某種策略及時選用恰當的規則進行推理輸出,實現控制。其基本結構如下:
有上圖我們不難發現影響專家控制器控制精確性的主要是知識庫表達的准確性以及推理機的正確性。知識庫越完備、越准確那么對你被控對像的狀態識別也就越准確。當然,推理機設計的差別也會對控制結果有影響。
專家控制器一般來說分為2中實現形式,被稱之為直接型專家控制器和間接型專家控制器。所謂直接型專家控制器就是用專門設計的專家控制器直接對被控對象進行控制的方法。該控制器任務和功能都比較簡單,一般都是實時在線運行,直接對被控對象進行控制。其結構圖如下:
而所謂間接型專家控制器是指專家控制器作為其他控制器的輔助方式或者相互結合的控制方式來實現的一種控制器。專家系統通過高層決策來影響控制器輸出,而這種高層決策可以是在線也可以是離線,器不會直接控制被控對象。其結構圖如下:
所以我們所要討論的專家PID算法應該是一種直接型專家控制器,因為專家系統決策與PID算法是結合在一起的,並沒有獨於PID算法的專家控制器,而是專家決策直接決定PID算法機器輸出,這與直接型專家控制的定義是相符的。
2、專家PID的設計思路
專家PID控制就是基於被控對象和控制規律的各種知識,而不需要知道被控對象的精確模型,利用專家經驗來設計PID參數。怎么來實現這一過程呢?我們來分析並推導這一算法。
我們假設當前為第k采樣,當前偏差為e(k),同樣前一采樣時刻的偏差為e(k-1),而前兩個采樣時刻的偏差為e(k-1),則可以得到兩次的偏差增量為:
清楚了以上公式,我們再設定偏差的一個極大值,記為Mmax;設定一個偏差較大的中間值,記為Mmid;設定一個偏差的極小值,記為Mmin。根據以上偏差、偏差增量以及偏差極值的設定,我們分析如下:
(1)如果|e(k)|>Mmax
這種情況說明偏差的絕對值已經很大了,不論偏差變化趨勢如何,都應該考慮控制器的輸入應按最大(或最小)輸出,以達到迅速調整偏差的效果,使偏差絕對值以最大的速度減小。
這種情況下其實相當於實施開環控制,是一種對偏差出現極限情況的快速響應。
(2)如果|e(k)|≤Mmax
這種情況我們需要更具系統的變化趨勢來分析,具體的情況實施不同的控制方式,我們引入偏差增量來協助分析。
(2.1)當e(k)*∆e(k)>0或者∆e(k)=0時
這種情況說明偏差在朝向偏差絕對值增大的方向變化,或者偏差為某一固定值,此時我們再判斷偏差的絕對值與偏差的中間值Mmid之間的關系。
(2.1.1)此時如果|e(k)|>Mmid,說明偏差也較大,可考慮由控制器實施較強的控制作用,以達到扭轉偏差絕對值向減小的方向變化,並迅速減小偏差的絕對值。
(2.1.2)此時如果|e(k)|≤Mmid,說明盡管偏差是向絕對值增大的方向變化,但是偏差絕對值本身並不是很大,可以考慮控制器實施一般的控制作用,只需要扭轉偏差的變化趨勢,使其向偏差絕對值減小的方向變化即可。
(2.2)當e(k)*∆e(k)<0且∆e(k)*∆e(k-1)>0或者e(k)=0時,說明偏差的絕對值向減小的方向變化,或者已經達到平衡狀態,此時保持控制器輸出不變即可。即:U(k)=U(k-1)。
(2.3)當e(k)*∆e(k)<0且∆e(k)*∆e(k-1)<0時,說明偏差處於極限狀態。如果此時偏差的絕對值較大,|e(k)|>Mmid,可以考慮實施較強控制作用。
如果此時偏差絕對值較小,|e(k)|<Mmid,可以考慮實施較弱控制作用。
其中,k1為增益放大系數,k1取大於1的值;k2為增益抑制系數,取大於0而小於1的值。
(3)如果|e(k)|<Mmin
這種情況實際上說明偏差絕對值很小,這種偏差有可能是系統靜差引起的,此時必須要引入積分作用,實施PID控制或者PI控制。
Kp和Ki可以適當減小,以減小控制作用。當偏差小到一定程度后,甚至可以引入死區的概念,是系統穩定下來而不需要去進行調節。
3、專家PID算法實現
前面我們了解了專家PID控制器的基本原理,並分析了一個較為常見的專家PID的控制規則。分析規則的過程其實也是一個推理的基本過程,所以我們得到了基本的規則庫同時也有相應的推理機,接下來我們就來實現這一算法。
4、專家PID總結
本節我們實現了一個專家PID控制器,這是一種專家規則直接與PID算法相結合的直接型專家控制器。通過分析PID的調節過程總結了5條規則,以這5條規則為基礎實現了上述的算法。當然這只是一個普遍型的規則庫,對於不同的被控對象和控制要求,我們可以采用不同的判斷規則,而且各參數的選取需依賴於專家經驗,所以規則的獲取和使用也會有不同方式。
12.模糊PID算法
在現實控制中,被控系統並非是線性時不變的,往往需要動態調整PID的參數,而模糊控制正好能夠滿足這一需求,所以在接下來的這一節我們將討論模糊PID控制器的相關問題。模糊PID控制器是將模糊算法與PID控制參數的自整定相結合的一種控制算法。可以說是模糊算法在PID參數整定上的應用。
1、模糊算法的原理
模糊算法是一種基於智能推理的算法,雖然稱之為模糊算法其實並不模糊,實際上是一種逐步求精的思想。一個模糊控制器主要是由模糊化,模糊推理機和精確化三個功能模塊和知識庫(包括數據庫和規則庫)構成的。在此我們近討論模糊控制的幾個主要問題。
1.1、輸入量的量化
輸入數據都是精確的,要實現模糊算法需要現對其實現量化。所謂量化就是通過量化函數將輸入量投射到一定的數字級別,一般都是相對於0對稱的數字區間。具體投射到怎樣的區間根據實際情況而定,因為這會直接影響到計算的精度。
1.2、模糊化
模糊化是模糊算法非常重要的一步,首先確定對應各語言變量的模糊子集,然后根據量化的結果,我們就可以判斷該輸入所屬的集合並計算出對應的隸屬度。計算隸屬度的方法有很多,最常用的是使用三角形隸屬度函數或梯形隸屬度函數等來計算獲得。
1.3、規則庫
規則庫是基於控制量的模糊化而的味道的,是實現模糊推理的基礎,很大程度上依賴於經驗來完成。規則庫的表現形式可以有多種,具體實現的形式根據我們實現的方便。
1.4、推理機
推理決策才是模糊控制的核心,它利用知識庫中的信息和模糊運算方式,模擬人的推理決策的思想方法,在一定的輸入條件下激活相應的控制規則給出適當的模糊控制輸出。
1.5、精確化
我們通過模糊推理,得到一系列的模糊表達,需要進行解模糊操作才能得到緊缺的數據。常用的解模糊方法有:
- 最大隸屬度法——計算簡單,適用於控制要求不高場合。
- 重心法——輸出更平滑,但計算難度大
- 加權平均法——一般在工業上應用最廣泛
1.6、工程量化
系統控制輸出是一個精確的數,但不是可以直接用於對象控制的物理量,所以在最后還要按照我們的需要進行轉換。比如對應PID的參數則可進行必要的轉換和修正在輸出給PID控制器。
2、模糊PID算法的設計
前面簡單的描述了模糊算法的基本原理,接下來我們將討論如何將其應用於PID控制當中。所謂模糊PID控制是以偏差e及偏差的變化ec為輸入,利用模糊控制規則在線對PID參數進行調整,以滿足不同的偏差e和偏差的增量ec對PID參數的不同要求。其結構圖如下:
2.1、輸入值的模糊化
輸入值的模糊化就是將用於計算的輸入對應到標准化的數值區間,並根據量化結果和模糊化子集得到該輸入對子集的隸屬度。我們在使用偏差e和偏差增量ec作為輸入實現控制參數調整則需要對e和ec進行模糊化。
首先,我們確定e和ec的模糊子集,對於PID控制我們選則:負大[NB]、負中[NM]、負小[NS]、零[ZO]、正小[PS]、正中[PM]、正大[PB]等7個語言變量就能夠有足夠精度表達其模糊子集。所以我們定義e和ec的模糊子集均為{NB,NM,NS,ZO,PS,PM,PB}。
確定了模糊子集,我們怎么將e和ec的具體值和模糊集對應上呢?我們需要引入量化函數。要確定量化函數,我們先引入e和ec模糊集對應的論域,定義為{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6}。對於任何一個物理量測量信號都有一個量程范圍,我們記為Vmax和Vmin,和自然在PID調節時設定值的范圍預期相同,所以偏差e的范圍就是Vmin-Vmax到Vmax-Vmin的范圍內,而偏差的增量范圍則是其兩倍。這里我們采用線性方式量化,則其函數關系為:
利用上述的量化函數就可以將e和ec量化,我們可以采用如4舍5入的方式獲取確定的模糊子集。但考慮到e和ec的變化是連續變化的,4舍5入對控制精度可能存在影響,所以我們引入隸屬度來實現這一過程。
最后我們確定e和ec在模糊子集上的隸屬度。隸屬度是一個介於0和1之間的值,用以描述對應一個輸入屬於某一個模糊自己的程度。一般我們描述成隸屬度函數,可采用的隸屬度函數很多,我們在次采用線性的隸屬度函數,或者稱為三角隸屬度函數,其函數關系如下:
如果我們量化后的結果是1,那么屬於ZO的隸屬度為0.5,同樣屬於PS的隸屬度也是0.5。至此,模糊化全部完成。
2.2、建立模糊規則表
前面我們簡述了輸入的模糊化,但模糊推理才是模糊控制的根本。為了實現模糊推理首先我們要建立模糊推理的規則庫或者稱知識庫,然后建立推理機進行推理。
首先,我們來建立模糊規則庫,在這里我們要對Kp、Ki和Kd三個參數進行調整,所以要建立這3個變量的模糊規則庫。
(1)、Kp模糊規則設計
在PID控制器中,Kp值的選取決定於系統的響應速度。增大Kp能提高響應速度,減小穩態偏差;但是,Kp值過大會產生較大的超調,甚至使系統不穩定減小Kp可以減小超調,提高穩定性,但Kp過小會減慢響應速度,延長調節時間。因此,調節初期應適當取較大的Kp值以提高響應速度,而在調節中期,Kp則取較小值,以使系統具有較小的超調並保證一定的響應速度;而在調節過程后期再將Kp值調到較大值來減小靜差,提高控制精度。基於上述描述我們定義Kp的模糊規則如下:
(2)、Ki模糊規則設計
在系統控制中,積分控制主要是用來消除系統的穩態偏差。由於某些原因(如飽和非線性等),積分過程有可能在調節過程的初期產生積分飽和,從而引起調節過程的較大超調。因此,在調節過程的初期,為防止積分飽和,其積分作用應當弱一些,甚至可以取零;而在調節中期,為了避免影響穩定性,其積分作用應該比較適中;最后在過程的后期,則應增強積分作用,以減小調節靜差。依據以上分析,我們制定的Ki模糊規則如下:
(3)、Kd模糊規則設計
微分環節的調整主要是針對大慣性過程引入的,微分環節系數的作用在於改變系統的動態特性。系統的微分環節系數能反映信號變化的趨勢,並能在偏差信號變化太大之前,在系統中引入一個有效的早期修正信號,從而加快響應速度,減少調整時間,消除振盪.最終改變系統的動態性能。因此,Kd值的選取對調節動態特性影響很大。Kd值過大,調節過程制動就會超前,致使調節時間過長;Kd值過小,調節過程制動就會落后,從而導致超調增加。根據實際過程經驗,在調節初期,應加大微分作用,這樣可得到較小甚至避免超調;而在中期,由於調節特性對Kd值的變化比較敏感,因此,Kd值應適當小一些並應保持固定不變;然后在調節后期,Kd值應減小,以減小被控過程的制動作用,進而補償在調節過程初期由於Kd值較大所造成的調節過程的時間延長。依據以上分析,我們制定Kd的模糊規則如下:
接下來,根據偏差E和偏差增量EC模糊化的結果以及規則庫推理出∆Kp、∆Ki、∆Kd對應的模糊子集。由於前面我們設計的是采用隸屬度函數來定義輸入輸出量在模糊子集的隸屬度,所以推理出來的∆Kp、∆Ki、∆Kd的模糊子集通常是一個由模糊變量組成的矩陣。而輸入量E和EC則是一個由模糊變量組成的向量。
最后,我們需要明確不同的模糊變量所對應的量化數據。這個量化數據與物理量的對應則根據具體的不同對象是完全不一樣的。
2.3、解模糊處理
對於求得的目標對象,我們還需要將其你模糊處理以使其與具體的物理量相對應。在模糊PID調解中,我們需要的是Kp,Ki和Kd,所以我們需要根據模糊推理的結果得到我們想要的Kp,Ki和Kd值。
我們前面設計了三角隸屬度函數,並采用相同的量化目標即論域{-6,6},所以在某一時刻,輸入輸出所處的模糊變量的隸屬度是相同的,基於這一基礎,我們采用重心法計算各輸出量的量化值。其公式如下:
其實因為我們采用的隸屬度函數的特性,在任何方向的計算隸屬度的和均為1,所以分母可以省略。於是每一個對象的計算實際上就是矩陣操作,公式如下:
如果使用的是量化值,則還需要轉為實際值,關於這一點直接使用物理量值也是沒問題的,怎么處理根據實際需要確定。得到增量后,我們也可以引入系數來放大和縮小Kp,Ki和Kd變化量,具體實現公式如下:,其中∆K為我們所計算得到的值,而α為系數,設定增量對最終只的影響。
3、模糊PID算法實現
前面我們描述了算法的全過程,接下來我們編碼實現之。首先我們依然需要定義一個模糊PID控制器的結構對象。
4、總結
模糊PID算法是模糊算法在PID參數整定上的應用,與純粹的模糊控制算法是有區別的。普通的模糊控制器適用於直接推理控制器的輸出,而模糊PID算法使用模糊算法修改PID參數,最終的控制器輸出依然是由PID控制器來實現的。
模糊控制本身是非常復雜且具體應用方式很多。大多是針對特定對象的專業控制器,已經脫離了PID這種通用性控制器的范疇。此外比較熱門的還有模糊多變量控制器是屬於先進控制系統(APC)的范疇,有機會再討論。
13.單元神經PID算法
神經網絡是模擬人腦思維方式的數學模型。神經網絡是智能控制的一個重要分支,人們針對控制過程提供了各種實現方式,在本節我們主要討論一下采用單神經元實現PID控制器的方式。
1、單神經元的基本原理
單神經元作為構成神經網絡的基本單位,具有自學習和自適應能力,且結構簡單而易於計算。接下來我們討論一下單神經元模型的基本原理。
(1)、單神經元模型
所謂單神經元模型,是對人腦神經元進行抽象簡化后得到一種稱為McCulloch-Pitts模型的人工神經元,如下圖所示。
根據上圖所示,對於第i個神經元,x1、x2、……、xN是神經元接收到的信息,ω1、ω2、……、ωN為連接強度,又稱之為權。采用某種運算方式把輸入信號的作用結合起來,得到他們總的結果,稱之為“凈輸入”通常用neti表示。根據所采用的運算方式的不同,凈輸入有不同的表示形式,比較常用的是線性加權求和,其表達式如下:
其中,θi是神經元i的閾值。
而神經元i的輸出yi可以表示為其當前狀態的函數,這個函數我們稱之為激活函數。一般表示如下:
(2)、采用的學習規則
學習是神經網絡的基本特征,而學習規則是實現學習過程的基本手段。學習規則主要實現對神經元之間連接強度的修正,即修改加權值。而學習過程可分為有監督學習和無監督學習兩類。它們的區別簡單的說,就是是否引入期望輸出參與學習過程,引入了則稱之為有督導學習。較為常用的學習規則有三種:
a、無監督Hebb學習規則
Hebb學習是一類相關學習,它的基本思想是:如果神經元同時興奮,則它們之間的連接強度的增強與它們的激勵的乘積成正比。以Oi表示單元i的激活值,以Oj表示單元j的激活值,以ωij表示單元j到單元i的連接強度,則Hebb學習規則可用下式表示:
b、有監督Delta學習規則
在Hebb學習規則中,引入教師信號,將式Oj換成網絡期望目標輸出dj和網絡實際輸出Oj之差,即為有監督Delta學習規則,即:
c、有監督Hebb學習規則
將無監督Hebb學習規則和有監督Delta學習規則兩者結合起來,就組成有監督Hebb學習規則,即:
在以上各式中,η稱之為學習速度。
2、單神經元PID的基本原理
在前面我們說明了單神經元的基本原理,接下來我們討論如何將其應用的PID控制中。前面我們已經知道了神經元的輸入輸出關系,在這里我們考慮PID算法的增量型表達式:
若是我們記:x1(k)=err(k),x2(k)=err(k)- err(k-1),x3(k)=err(k)- 2err(k-1)+err(k-2),同時將比例、積分、微分系數看作是它們對應的加權,並記為ωi(k)。同時我們引進一個比例系數K,則可將PID算法的增量型公式改為:
其中,
我們將PID的增量公式已經改為單神經元的輸入輸出表達形式,還需要引進相應的學習規則就可以得到單神經元PID控制器了。在這里我們采用有監督Hebb學習規則於是可以得到學習過程:
從學習規則的定義,我們知道在上式中,Z(k)= err(k)。而U(k)= U(k-1)+∆U(k),ω(k)= ω(k-1)+∆ω(k)。到這里實際上已經得到了單神經元PID的算法描述。
3、單神經元PID的軟件實現
有了前面的准備,我們就可以開始編寫基於單神經元的PID控制程序了。
4、單神經元PID總結
前面我們已經分析並實現了單神經元PID控制器,在本節我們來對它做一個簡單的總結。
與普通的PID控制器一樣,參數的選擇對調節的效果有很大影響。對單神經元PID控制器來說,主要是4個參數:K、ηp、ηi、ηd,我們總結一下相關參數選取的一般規律。
(1)對連接強度(權重ω)初始值的選擇並無特殊要求。
(2)對階躍輸入,若輸出有大的超調,且多次出現正弦衰減現象,應減少增益系數K,維持學習速率ηp、ηi、ηd不變。若上升時間長,而且無超調,應增大增益系數K以及學習速率ηp、ηi、ηd。
(3)對階躍輸入,若被控對象產生多次正弦衰減現象,應減少比例學習速率ηp,而其它參數保持不變。
(4)若被控對象響應特性出現上升時間短,有過大超調,應減少積分學習速率ηi,而其它參數保持不變。
(5)若被控對象上升時間長,增大積分學習速率ηi又會導致超調過大,可適當增加比例學習速率ηp,而其它參數保持不變。
(6)在開始調整時,微分學習速率ηd應選擇較小值,在調整比例學習速率ηp、積分學習速率ηi和增益系數K使被控對象達到較好特性后,再逐漸增加微分學習速率ηd,而其它參數保持不變。
(7)K是系統最敏感的參數,K值的變化相當於P、I、D三項同時變化。應在開始時首先調整K,然后再根據需要調整學習速率。
在單神經元PID控制器中,上述這些參數對調節效果的影響如何呢?一般情況下具有如下規律。
(1)在積分學習率、微分學習率不變的情況下,比例系數學習率越大則超調量越小,但是響應速度也會越慢;
(2)在比例學習率、微分學習率不變的情況下,積分系數學習率越大則響應會越快,但是超調量也會越大。
(3)在比例學習率、積分學習率不變的情況下,微分學習率對單神經元PID控制器的控制效果影響不大。
最后我們需要明白,單神經元PID算法是利用單神經元的學習特性,來智能的調整PID控制過程。單神經元可以實現自學習,這正好可以彌補傳統PID算法的不足。正如前面所說,學習是它的最大特點,那么不同的學習算法對其性能的影響會很大,所以改進學習規則算法對提高性能有很大幫助。