自动控制大作业--西安电子科技大学--matlab实现,运行完美实现!(8)

2020-04-18 06:32

um=6;

kp=0.85;ki=9.0;kd=0.0;

rin=30;

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

u(k)=kp*x(1)+kd*x(2)+ki*x(3);

if u(k)>=um u(k)=um; end

if u(k)<=-um u(k)=-um; end

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-yout(k);

M=2; %M为1或2 if M==1 if u(k)>=um if error(k)>0 alpha=0; else

alpha=1; end

elseif u(k)<=-um if error(k)>0 alpha=1; else

alpha=0; end else

alpha=1; end

elseif M==2 alpha=1; end

u_3=u_2;u_2=u_1;u_1=u(k); y_3=y_2;y_2=y_1;y_1=yout(k);

error_1=error(k); x(1)=error(k);

x(2)=(error(k)-error_1)/ts; x(3)=x(3)+alpha*error(k)*ts; xi(k)=x(3); end M=1;

if M==1 if u(k)>=um

if error(k)>0 alpha=0; else

alpha=1; end

elseif u(k)<=-um if error(k)>0 alpha=1; else alpha=0; end else

alpha=1; end

elseif M==2 alpha=1; end

u_3=u_2;u_2=u_1;u_1=u(k); y_3=y_2;y_2=y_1;y_1=yout(k); error_1=error(k);

x(1)=error(k); x(2)=(error(k)-error_1)/ts; x(3)=x(3)+alpha*error(k)*ts;

xi(k)=x(3);

figure(1); subplot(311);

plot(time,rin,'b',time,yout,'r');

xlabel('time(s)');ylabel('Position tracking'); subplot(312); plot(time,u,'r');

xlabel('time(s)');ylabel('Controller output'); subplot(313); plot(time,xi,'r');

xlabel('time(s)');ylabel('Integration');

输出:

M=1时 Position tracking4020000.10.20.30.4time(s)0.50.60.70.8Controller output100-1000.10.20.30.4time(s)0.50.60.70.8Integration0.10.05000.10.20.30.4time(s)0.50.60.70.8 M=2时

Position tracking50000.10.20.30.4time(s)0.50.60.70.8Controller output100-1000.10.20.30.4time(s)0.50.60.70.8Integration21000.10.20.30.4time(s)0.50.60.70.8 结论:

加抗积分饱和后超调量明显减小,而且系统能较快的达到稳定值,系统的稳定性和精确性得到改善。积分饱和和积分分离是两个不同的概念,从他们的原理可知,积分分离是偏差来决定是否加入积分作用;而积分饱和则是由前一控制器的输出值和当前的偏差值的情况共同决定是否加积分作用。

源程序:

clear 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;u_2=0;u_3=0;u_4=0;u_5=0; y_1=0;y_2=0;y_3=0; yy_1=0;

error_1=0;error_2=0;ei=0;

sys1=tf([1],[0.04,1]); dsys1=c2d(sys1,ts,'tucsin'); [num1,den1]=tfdata(dsys1,'v'); f_1=0;

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

rin(k)=1;

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;

D(k)=0.50*rands(1); yyout(k)=yout(k)+D(k);

filty(k)=-den1(2)*f_1+num1(1)*(yyout(k)+yy_1); error(k)=rin(k)-filty(k);

if abs(error(k))<=0.20 ei=ei+error(k)*ts; else

ei=0; end

kp=0.50;ki=0.10;kd=0.020;

u(k)=kp*error(k)+ki*ei+kd*(error(k)-error_1)/ts;

M=2; %M为1或者2 if M==1

u(k)=u(k); elseif M==2

if abs(error(k))<=0.10 u(k)=0; end end

if u(k)>=10 u(k)=10; end

if u(k)<=-10 u(k)=-10;


自动控制大作业--西安电子科技大学--matlab实现,运行完美实现!(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:五年级奥数之最小公倍数(一)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: