我是靠谱客的博主 缓慢灯泡,这篇文章主要介绍matlab 滞后一期,关于滞后时间的问题,现在分享给大家,希望可以做个参考。

看了一下,修正了一系列问题得到如下结果;

%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 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

7ab2a1e16de3b25989758cc82a7f2c26.png

最后

以上就是缓慢灯泡最近收集整理的关于matlab 滞后一期,关于滞后时间的问题的全部内容,更多相关matlab内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部