深入淺出PID控制算法(二)————PID算法離散化和增量式PID算法原理及Matlab實現

引言

上篇介紹了連續系統的PID算法,但是計算機控制是一種採樣控制,他只能根據採樣時刻的偏差來計算控制量,因此計算機控制系統中,必須對公式進行離散化,具體就是用求和代替積分,用向後差分來代替微分,使模擬PID離散化爲數字形式的差分方程。

準備工作

在採樣週期足夠小時,可以作如下近似:
這裏寫圖片描述
式中

  • T————爲採樣週期
  • k————爲採樣序號,k=0,1,2….

用這種近似方法,可以得到兩種形式數字PID控制算法

位置式PID算法

由前面推倒很容易得到離散化後的表達式
這裏寫圖片描述
由此式可以看出數字調節的輸出u(k)跟過去的所有偏差信號有關,計算機需要對e(i)進行累加,運算量太大,一般不用,重點說明增量式PID算法。

增量式PID算法

由於增量式PID的算法不夠方便,不僅對偏差進行累加,佔用過多的存儲單元,而且不方便寫程序,所以需要進行一些改進,對位置式取增量,方法如下:
這裏寫圖片描述

Matlab仿真

分析過程

1、對G(s)進行離散化即進行Z變換得到Z傳遞函數G(Z);
2、分子分母除以z的最高次數即除以z的最高次得到;
3、由z的位移定理Z[e(t-kt)]=z^k*E(z)逆變換得到差分方程;
4、PID編程實現
具體實現細節在代碼註釋中已經給出

    %設一被控對象G(s)=50/(0.125s^2+7s),  
    %用增量式PID控制算法編寫仿真程序  
    %(輸入分別爲單位階躍、正弦信號,採樣時間爲1ms,控制器輸出限幅:[-3,3],  
    %  仿真曲線包括系統輸出及誤差曲線)。  

    ts=0.001;                 %採樣時間  
    sys=tf(50,[0.125,7, 0]); %tf是傳遞函數  即被控對象函數G();  
    dsys=c2d(sys,ts,'z');    %把控制函數離散化取Z變換n階定常離散系統差分方程
                                %在零初始條件下取Z變換:
                                %dsys即Y(z)/U(z)
    [num,den]=tfdata(dsys,'v');% 離散化後提取分子、分母    
    u_1=0.0;  
    u_2=0.0;  
    y_1=0.0;  
    y_2=0.0;  
    x=[0,0,0]';  
    error_1=0;  
    error_2=0;  
    %核心代碼

    for k=1:1:1000  
    time(k)=k*ts;                        %採樣次數  
    S=1;  
    if S==1                         %階躍輸入
        kp=6.5;ki=0.1;kd=1;             %初始化PID    
        rin(k)=1;                    %Step Signal   
    elseif S==2                     %正弦輸入
        kp=10;ki=0.1;kd=15;             
        rin(k)=0.5*sin(2*pi*k*ts);    %Sine Signal     即實際輸入      
    end 

    du(k)=kp*x(1)+kd*x(2)+ki*x(3);      %PID Controller   控制係數    
    u(k)=u_1+du(k);                     %真正的PID輸出應該爲du+前一時刻的輸出
    if u(k)>=3         
       u(k)=3;  
    end  
    if u(k)<=-3  
       u(k)=-3;  
    end  

    %Linear model 難點就是把傳遞函數轉化爲差分方程,以實現PID控制。 
    yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;          %實際輸出 num爲dsys分子多項式係數,den爲dsys分母多項式係數,從n階定常離散系統差分方程變化來的。
    error(k)=rin(k)-yout(k);                                       % 誤差 輸入-輸出 
    u_2=u_1;                                                       %保存上上次輸入   爲下次計算  
    u_1=u(k);                                                      %保存上一次控制係數   爲下次計算  
    y_2=y_1;                                                       %保存上上次次輸出   爲下次計算  
    y_1=yout(k);                                                   %保存上一次輸出   爲下次計算  

    x(1)=error(k)-error_1;                                         %KP的係數  
    x(2)=error(k)-2*error_1+error_2;                               %KD的係數  
    x(3)=error(k);                                                 %KI的係數
    error_2=error_1;                                                %上次的變上上次誤差
    error_1=error(k);                                               %這次的變上次的誤差
    end 


    figure(1);  
    plot(time,rin,'b',time,yout,'r');                        %輸入 和實際控制輸出  
    xlabel('time(s)'),ylabel('rin,yout');   
   figure(2);  
    plot(time,error,'r')                                     %時間誤差輸出曲線  
    xlabel('time(s)');ylabel('error'); 

仿真效果(PID調參後)

這裏寫圖片描述
這裏寫圖片描述

調參過程

(1)
確定比例係數Kp
確定比例係數Kp時,首先去掉PID的積分項和微分項,可以令Ti=0、Td=0,使之成爲
純比例調節。輸入設定爲系統允許輸出最大值的60%~70%,比例係數Kp由0開始逐漸增大,直至系統出現振盪;再反過來,從此時的比例係數Kp逐漸減小,直至系統振盪消失。記錄此時的比例係數Kp,設定PID的比例係數Kp爲當前值的60%~70%。
(2)
確定積分時間常數Ti
比例係數Kp確定之後,設定一個較大的積分時間常數Ti,然後逐漸減小Ti,直至系統出現振盪,然後再反過來,逐漸增大Ti,直至系統振盪消失。記錄此時的Ti,設定PID的積分時間常數Ti爲當前值的150%~180%。
(3)
確定微分時間常數Td
微分時間常數Td一般不用設定,爲0即可,此時PID調節轉換爲PI調節。如果需要設定,則與確定Kp的方法相同,取不振盪時其值的30%。
(4)
系統空載、帶載聯調
對PID參數進行微調,直到滿足性能要求。

Simulink仿真部分

這裏使用Simulink仿真也非常的方便,只需要設定好PID控制器的參數和傳遞函數即可
這裏寫圖片描述
這裏注意Filter coefficient這個參數起前向濾波作用,這裏取得1
這裏寫圖片描述

微分環節的缺點,就是誤差e變化微弱的時候,如果D過大會產生過大的修正量,導致震動不但不減小反而擴大。
濾波器的作用就是濾除高頻修正,使D更好用,說白了是一個改進型

這裏寫圖片描述

這裏寫圖片描述

運行後雙擊示波器查看結果
這裏寫圖片描述

這裏寫圖片描述

結論

  (1)對於PID 參數採用 MATLAB 進行整定和仿真,使用起來不僅快捷、方便,而且更爲直觀,同時也避免了傳統方法反覆修改參數調試。
  (2)系統的響應速度會隨Kp值的增大而加快,同時也有助於靜差的減小,而Kp值過大則會使系統有較大超調,穩定性變壞;此外,系統的動作會因爲過小的Kp值減慢。
  (3)超調的減小、振盪變小以及系統穩定性的增加都取決於積分時間Ti的增大,但是系統靜差消除時間會因爲Ti的增大而變長。
  (4)增大微分時間Td對於系統的穩定性、系統響應速度的加快以及系統超調量的減小都會有所幫助。但是如果Td過大,則會使得調節時間較長,超調量也會增大;如果Td過小,同樣地也會發生以上狀況。
  (5)總之PID 參數的整定必須考慮在不同時刻三個參數的作用以及彼此之間的作用關係。

相關Matlab代碼和Simulink仿真文件已經上傳,可自行下載https://download.csdn.net/download/kilotwo/10329949

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章