智慧控制基礎實驗3:數字PID控制

HNU君陌發表於2020-12-30

一、實驗目的

1.掌握數字PID控制的程式設計方法
2.實現連續系統與離散系統PID控制的MATLAB程式設計

二、實驗原理

PID控制器是一種線性控制器,它根據給定值r(t)與實際輸出值c(t)構成偏差:e(t)=r(t)-c(t)。將偏差的比例§、積分(I)和微分(D)通過線性組合構成控制量,對受控物件進行控制。PID控制系統結構框圖下圖所示。
在這裡插入圖片描述

PID控制系統結構框圖
在這裡插入圖片描述為系統的輸入訊號,在這裡插入圖片描述為系統的輸出,控制器的輸出訊號在這裡插入圖片描述
其控制規律為:
在這裡插入圖片描述

KP是比例係數,KI是積分常數,KD是微分常數。
PID控制器由比例(P)環節、積分(I)環節和微分(D)環節組合而成。比例(P)環節:將控制系統的給定輸入與系統反饋所形成的偏差訊號成比例的放大,偏差一旦產生,控制器立即產生控制作用,以減少偏差。比例環節能夠提高控制系統的響應速度,增大比例係數KP,可以加快調節,但KP過大,控制系統會產生較大的超調,甚至導致系統不穩定。積分(I)環節:主要是消除系統的靜態誤差,提高系統的無差度,同時提高控制系統的響應速度。積分作用的強弱取決於積分常數KI,積分常數KI越大,積分作用越強,反之則越弱。微分(D)環節:反映偏差訊號的變化率,調節誤差的微分輸出,能夠在系統誤差突變時,在系統中引入一個有效的早期修正訊號,以加快系統的動作速度,減少調節時間,從而改善系統的動態效能。

三、實驗內容

1.連續系統的數字 PID 控制模擬:

假設被控物件為電機模型,其傳遞函式為在這裡插入圖片描述,其中在這裡插入圖片描述 。輸入訊號為在這裡插入圖片描述,採用PID控制,請根據如下程式碼選擇合適的KP、KD引數,使得跟蹤曲線誤差儘可能小,並記錄最小誤差情況下的KP和KD值。

2.設被控物件為

在這裡插入圖片描述

取樣時間為1ms,對其進行離散化。針對離散系統的階躍訊號、正弦訊號和方波訊號的位置響應,設計離散PID控制器。其中S為訊號選擇變數,S=1是階躍跟蹤,S=2是方波跟蹤,S=3是正弦跟蹤。請根據如下程式碼選擇合適的Kp、Ki、Kd引數,觀察三組訊號跟蹤曲線響應速度、超調量和穩態誤差的變化,選擇最好的一組跟蹤效果最好階躍跟蹤、方波跟蹤和正弦跟蹤曲線,並記錄下各自對應的Kp、Ki、Kd值。

四、實驗過程

1.數字PID控制模擬

(1)首先新建函式檔案,用於建立連續函式物件的微分方程函式
在這裡插入圖片描述

(2)初始化介面如圖
在這裡插入圖片描述

(3)將指導書中提供的程式碼貼上到檔案中

function dy=chap1_1f(t,y,flag,para)
u=para;
J=0.0067;B=0.1;

dy=zeros(2,1);
dy(1) = y(2);
dy(2) = -(B/J)*y(2) + (1/J)*u;

(4)儲存,檔案型別為m檔案,注意需要放到環境路徑資料夾,或者將資料夾路徑設定為環境路徑
在這裡插入圖片描述

(5)將指導書中的主程式程式碼複製到命令列視窗中並執行

% chap1_1.m
%Discrete PID control for continuous plant
clear all;
close all;
ts=0.001;  %Sampling time
xk=zeros(2,1);
e_1=0;
u_1=0;

for k=1:1:2000
time(k) = k*ts;

rin(k)=0.50*sin(1*2*pi*k*ts);
  
para=u_1;              % D/A
tSpan=[0 ts];
[tt,xx]=ode45('chap1_1f',tSpan,xk,[],para);
xk = xx(length(xx),:);    % A/D
yout(k)=xk(1); 

e(k)=rin(k)-yout(k);
de(k)=(e(k)-e_1)/ts; 

u(k)=KP*e(k)+KD*de(k);
%Control limit
if u(k)>10.0
   u(k)=10.0;
end
if u(k)<-10.0
   u(k)=-10.0;
end

u_1=u(k);
e_1=e(k);
end
figure(1);
plot(time,rin,'r',time,yout,'b');
xlabel('time(s)'),ylabel('rin,yout');
figure(2);
plot(time,rin-yout,'r');
xlabel('time(s)'),ylabel('error');

(6)產生如圖報錯
在這裡插入圖片描述

(7)修改程式碼中KP,KD的值,令KP=20,KD=0.5
在這裡插入圖片描述
在這裡插入圖片描述

(8)執行後得到影像如圖,此時KP=20,KD=0.5
在這裡插入圖片描述
在這裡插入圖片描述

(9)分析:輸出跟隨輸入,PD控制中,微分控制可以改善動態效能,調節時間縮短,允許加大比例控制,使穩態誤差減小,提高了控制精度

2.被控物件

(1)在主程式中新增KP,KI,KD的具體數值
在這裡插入圖片描述

(2)令KP=1.5,KI=2,KD=0.05

% chap1_1.m
%Discrete PID control for continuous plant
clear all;
close all;

ts=0.001;
sys=tf(5.235e005,[1,87.35,1.047e004,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');

u_1=0.0;u_2=0.0;u_3=0.0;
y_1=0.0;y_2=0.0;y_3=0.0;
x=[0,0,0]';
error_1=0;
for k=1:1:1500
time(k)=k*ts;

%S=input('?s= ');%
S=1;
if S==1
    kp=1.5;ki=2;kd=0.05;          
    rin(k)=1;                            %Step Signal
elseif S==2
    kp=1.5;ki=2;kd=0.05;          
    rin(k)=sign(sin(2*2*pi*k*ts));  %Square Wave Signal
elseif S==3
    kp=1.5;ki=2;kd=0.05;             %Sine Signal
    rin(k)=0.5*sin(2*2*pi*k*ts);           
end

u(k)=kp*x(1)+kd*x(2)+ki*x(3);   %PID Controller
%Restricting the output of controller
if u(k)>=10       
   u(k)=10;
end
if u(k)<=-10
   u(k)=-10;
end
%Linear model
yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4)*u_3;

error(k)=rin(k)-yout(k);

%Return of parameters
u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=yout(k);
   
x(1)=error(k);                 %Calculating P
x(2)=(error(k)-error_1)/ts;  %Calculating D
x(3)=x(3)+error(k)*ts;        %Calculating I
error_1=error(k);
end
figure(1);
plot(time,rin,'k',time,yout,'k');
xlabel('time(s)'),ylabel('rin,yout'); 

(3)執行主程式,結果如下
在這裡插入圖片描述

相關文章