引言
上篇介紹了連續系統的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=; %采樣時間
sys=tf(,[,, ]); %tf是傳遞函數 即被控對象函數G();
dsys=c2d(sys,ts,'z'); %把控制函數離散化取Z變換n階定常離散系統差分方程
%在零初始條件下取Z變換:
%dsys即Y(z)/U(z)
[num,den]=tfdata(dsys,'v');% 離散化後提取分子、分母
u_1=;
u_2=;
y_1=;
y_2=;
x=[,,]';
error_1=;
error_2=;
%核心代碼
for k=::
time(k)=k*ts; %采樣次數
S=;
if S== %階躍輸入
kp=;ki=;kd=; %初始化PID
rin(k)=; %Step Signal
elseif S== %正弦輸入
kp=;ki=;kd=;
rin(k)=*sin(*pi*k*ts); %Sine Signal 即實際輸入
end
du(k)=kp*x()+kd*x()+ki*x(); %PID Controller 控制系數
u(k)=u_1+du(k); %真正的PID輸出應該為du+前一時刻的輸出
if u(k)>=
u(k)=;
end
if u(k)<=-
u(k)=-;
end
%Linear model 難點就是把傳遞函數轉化為差分方程,以實作PID控制。
yout(k)=-den()*y_1-den()*y_2+num()*u_1+num()*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()=error(k)-error_1; %KP的系數
x()=error(k)-*error_1+error_2; %KD的系數
x()=error(k); %KI的系數
error_2=error_1; %上次的變上上次誤差
error_1=error(k); %這次的變上次的誤差
end
figure();
plot(time,rin,'b',time,yout,'r'); %輸入 和實際控制輸出
xlabel('time(s)'),ylabel('rin,yout');
figure();
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