1. 程式人生 > >深入淺出PID控制演算法(一)————連續控制系統的PID演算法及MATLAB模擬

深入淺出PID控制演算法(一)————連續控制系統的PID演算法及MATLAB模擬

引言

PID是Proportional(比例)、Integral(積分)、Differential(微分)三者的縮寫。PID調節是連續控制系統中技術最成熟、應用最廣泛的調節方式。PID調節實質是根據輸入的偏差值,按照比例、積分、微分的函式關係進行運算,運算結果用以控制輸出。
之前在專案中也用到過不少PID的演算法,但大多屬於一知半解的狀態,或者胡亂調節的程度,最近在學習的過程偶然對PID有了一些新的認識,現在進行一些記錄。

連續系統的PID控制

PID控制是將誤差訊號e(t)的比例(P),積分(I)和微分(D)通過線性組合構成控制量進行控制,其輸出訊號為:
這裡寫圖片描述
對此式進行拉普拉斯變換,並且整理後得到模擬PID調節器的傳遞函式為:
這裡寫圖片描述

  • Kp——比例係數
  • Ti——積分時間常數
  • Td——微分時間常數
  • e(t)——偏差
  • u(t)——控制量

這裡寫圖片描述
模擬PID控制系統框圖
這裡寫圖片描述

對PID引數的簡單理解

從上面的式子中可以看出
比例控制Kp能提高系統的動態響應速度,迅速反映誤差,從而減少誤差,但是不能消除誤差,簡單來說就是越大越快越小越慢但是可能會超調或者過慢有很多弊端,並且太大了會不穩定。
Ki為積分控制作用,一般就是消除穩態誤差,只要系統存在誤差積分作用就會不斷積累,輸出控制量來消除誤差,如果偏差為零這時積分才停止,但是積分作用太強會使得超調量加大,甚至使系統出現震盪,那麼問題來了,這個積分作用太強太弱是啥意思呢,我的理解是:積分作用就相當與容錯率高的意思,你容錯太多了才開始調節那不就是超調量太大了麼,反之你容錯率低,剛剛誤差一點你就馬上進行調節,這樣不就容易引起震盪了嘛,所以不管怎麼說這個積分調節都有點滯後的意思在裡面,不管你容錯多少這個誤差都發生了,那麼有沒有辦法對這種誤差進行預測呢,就是需要微分環節了。
Kd為微分控制

,微分顯然與變化率有關,你可以把它理解為導數,它可以減小超調量來克服震盪,使系統穩定性提高,同時加快響應速度,使系統更快有更好的動態效能,這就像個“預言家”,它可以根據變化率來判斷系統快要上升還是下降來提前改變系統的控制量這就與積分作用形成互補,這樣一來系統就幾乎完美了。

用MATLAB軟體對PID控制做簡單的模擬

說了這麼多有些抽象,這就用matlab來簡單模擬一下就明瞭了。
建立二階負反饋控制系統,其開環傳遞函式為:
這裡寫圖片描述

比例控制

輸出與輸入偏差成比例,即直接將誤差訊號放大或縮小。比例控制的傳遞函式為:

G(s)=Kp

取不同的比例係數,繪製系統的單位階躍響應曲線:

Gs = tf(2
,conv([3,1],[2,1])); %Gs是傳遞函式,conv是可以理解為因式分解(3s+1)(2s+1) Kp = [0.5,2,5,10]; %取不同的比例係數,類似陣列 for m = 1:4 sys = feedback(Kp(m)*Gs,1); %feedback(G,H),(G,H需事先設定)。 %其中G是傳遞函式,H為反饋函式,表示一個控制系統G,對其進行負反饋H(要求正反饋用-H)。這裡前面寫上比例環節與系統的串聯,後面的1表示負反饋 step(sys); %求階躍響應,可以用形如step(feedback(G,H)) hold on; end

這裡寫圖片描述
隨著KP值的增大,系統響應速度加快,但系統的超調也隨著增加,調節時間也隨著增長。當KP增大到一定值後,閉環系統將趨於不穩定。

比例控制具有抗干擾能力強、控制及時、過渡時間短的優點,但存在穩態誤差,增大比例係數可提高系統的開環增益,減小系統的穩態誤差,從而提高系統的控制精度,但這會降低系統的相對穩定性,甚至可能造成閉環系統的不穩定,因此,在系統校正和設計中,比例控制一般不單獨使用。

微分控制

輸出與輸入偏差的微分成比例,即與偏差的變化速度成比例。微分控制(與比例控制同時使用)的傳遞函式為:

G(s)=Kp(1+TdS)

取不同的微分系數,繪製系統的單位階躍響應曲線:

Kp = 10;
Td = [0,0.4,1,4];
for m = 1:4
  G1 = tf([Kp*Td(m),Kp],[0,1]);            %這個地方要注意 (Kp*Td(m)*S+Kp)/1=Kp(1+TdS)
  sys = feedback(G1*Gs,1);                 %前面是微分環節與系統的串聯,負反饋
  step(sys); hold on;
end

這裡寫圖片描述
隨著Td值的增大,系統超調量逐漸減小,動態特徵有改善。

自動控制系統在克服誤差的調節過程中可能會出現振盪甚至不穩定,原因是存在有較大慣性或有滯後的元件,具有抑制誤差的作用,其變化總是落後於誤差的變化,在控制器質中僅引入比例項是不夠的,比例項的作用僅是放大誤差的幅值,而微分項能預測誤差的變化趨勢,這樣,具有比例+微分的控制器,就能提前使抑制誤差的控制作用等於零,甚至為負值,從而避免被控量的嚴重超調,改善動態特性。

微分控制反映誤差的變化率,只有當誤差隨時間變化時,微分控制才會對系統起作用,而對無變化或緩慢變化的物件不起作用。另外,微分控制對純滯後環節不能起到改善控制品質的作用,反而具有放大高頻噪聲訊號的缺點。

積分控制

輸出與輸入偏差的積分成比例,即與誤差的積累成比例。積分控制(與比例控制同時使用)的傳遞函式為:

G(s)=Kp(1+1/Ti⋅1/s)

取不同的積分系數,繪製系統的單位階躍響應曲線:

Kp = 2;
Ti = [3,6,12,24];
for m = 1:4
  G1 = tf([Kp,Kp/Ti(m)],[1,0]);              %這裡也是(KpS+Kp/Ti)/s
  sys = feedback(G1*Gs,1);
  step(sys); hold on;
end

這裡寫圖片描述
加入積分控制後,消除了系統穩態誤差,但隨著TI值的增大,達到穩態的過渡時間也逐漸加長。

積分項對誤差取決於時間的積分,隨著時間的增加,積分項會增大。這樣,即使誤差很小,積分項也會隨著時間的增加而加大,它推動控制器的輸出增大,使穩態誤差進一步減小,直到等於零,但會使系統穩定性降低,過渡時間也加長。

比例積分微分控制,即PID控制

傳遞函式為:

G(s)=Kp(1+1/T⋅1/s+TdS)

取適當的比例、積分、微分系數,繪製系統的單位階躍響應曲線:


Kp = 100;                                %取固定比例係數
Ti = 2.2;
Td =7;

   G1 = tf([Kp*Td,Kp,Kp/Ti],[0,1,0]);     %(Kp*Td*S^2+Kp*s+Kp/Ti)/s=Kp(Tds+1+1/STi)
    sys = feedback(G1*Gs,1);
    step(sys);
    hold on;

這裡寫圖片描述
PID控制通過積分作用消除誤差,而微分控制可縮小超調量、加快系統響應,是綜合了PI控制和PD控制長處並去除其短處的控制。

Matlab-PID調節器

在較新版本的MATLAB中有應用程式,下有諸多的調節器,用起來簡直不要太方便啊,簡單介紹一下PID調節器,我的是R2015a:
這裡寫圖片描述
在已知被控物件傳函的情況下,對單位負反饋中的PID進行調節,使得單位階躍響應達到最佳。

  • 點選Plant下的Import輸入被調節物件的傳函,傳函是從matlab 工作區中選的,可以傳入多個一起調節;

  • Type可以用來改變PID的型別(P/I/PI/PD/PID/PDF/PIDF);

  • Domain可以選擇是時域調節還是頻域調節,時域調節是調節response time(響應時間)和transient behavior(暫態特性),頻域調節是調節bandwidth(頻寬)和phase margin(相角裕度)。點選圖示可以加快或者減慢調節;

  • show parameter可以看控制器的引數(視窗的最下端也有)和曲線的特性(超調量,穩定性等等);

  • Export選中想要獲得的PID引數,可以輸出到工作區中;

點選曲線上的點可以顯示該點的橫縱座標。
這裡寫圖片描述

總結

本文對連續系統的PID控制從理論和實際的角度進行了剖析,並且學會了用Matlab進行模擬,可以看到Matlab可以方便的進行PID引數的整定調節,在實際操作前可以通過此來進行大量模擬來獲得可靠的資料為調節和應用節約了大量成本。現在對PID有了初步的認識那麼如何應用到程式中去呢,這就需要PID演算法的離散化了,這將在後面的文章中進行講解,謝謝你這麼好看讀完了這篇文章,希望對你有所幫助^_^.