看了一下,修正了一系列问题得到如下结果;
%Integration Separation PID Controller
clear all;
close all;
ts=15;
%Delay plant
sys=tf([1],[50,1],'inputdelay',45);
d=45/ts+1;%d:delay
dsys=c2d(sys,ts,'zoh');
[num,den]=tfdata(dsys,'v')
nb=length(num)-1;
na=length(den)-1;
u_1=0;u_2=0;u_3=0;u_4=0;u_5=1;
y_1=0;y_2=0;y_3=0;
error_1=0;error_2=0;
ei=0;
L=100;
y=zeros(1,L);
u=zeros(1,L);
yd=16*[ones(1,L)];
for k=7:1:100
time(k)=k*ts;
%Delay plant
%y(k)=-den(2)*y_1+num(2)*u_5;
y(k)=num*u(k-d:-1:k-d-nb)'-den(1,2:na+1)*y(k-1:-1:k-na)';
%I separation
%yd(k)=16;
error(k)=yd(k)-y(k);
ei=ei+error(k);%*ts;
M=2;
if M==1 %Using integration separation
if abs(error(k))>=30&abs(error(k))<=40
beta=0.3;
elseif abs(error(k))>=20&abs(error(k))<=30
beta=0.6;
elseif abs(error(k))>=10&abs(error(k))<=20
beta=0.9;
else
beta=1.0;
end
elseif M==2
beta=1.0; %Not using integration separation
end
kp=1.2*d/50;%2.0;
ki=kp*ts/(2*d);%0.07;
kd=kp*0.5*d/ts;%3.0;
u(k)=kp*error(k)+kd*(error(k)-error_1)+beta*ki*ei;%u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+beta*ki*ei;
if u(k)>=110 % Restricting the output of controller
u(k)=110;
end
if u(k)<=-110
u(k)=-110;
end
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=y(k);
error_2=error_1;
error_1=error(k);
end
figure(1);
plot(time,yd,'r',time,y,'k:','linewidth',2);
xlabel('time(s)');ylabel('yd,y');
legend('Ideal position signal','Position tracking');
figure(2);
plot(time,u,'r','linewidth',2);
xlabel('time(s)');ylabel('Control input');
PID.jpg
(72.78 KB, 下载次数: 10)
2012-9-30 09:50 上传
最后
以上就是缓慢灯泡最近收集整理的关于matlab 滞后一期,关于滞后时间的问题的全部内容,更多相关matlab内容请搜索靠谱客的其他文章。
发表评论 取消回复