深入淺出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 引數的整定必須考慮在不同時刻三個引數的作用以及彼此之間的作用關係。