高分悬赏!请高手逐行解释这个Matlab程序,越详细越好,急用啊!一经采用,追加悬赏! 200
%PIDControllerclearall;closeall;ts=0.001;sys=tf(5.235e005,[1,87.35,1.047e004,0]);dsys...
%PID Controller
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=3;
if S==1
kp=0.50;ki=0.001;kd=0.001;
rin(k)=1; %Step Signal
elseif S==2
kp=0.50;ki=0.001;kd=0.001;
rin(k)=sign(sin(2*2*pi*k*ts)); %Square Wave Signal
elseif S==3
kp=1.5;ki=1.0;kd=0.01; %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'); 展开
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=3;
if S==1
kp=0.50;ki=0.001;kd=0.001;
rin(k)=1; %Step Signal
elseif S==2
kp=0.50;ki=0.001;kd=0.001;
rin(k)=sign(sin(2*2*pi*k*ts)); %Square Wave Signal
elseif S==3
kp=1.5;ki=1.0;kd=0.01; %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'); 展开
2个回答
展开全部
%PID Controller
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');存储数据到v指令函数
u_1=0.0;u_2=0.0;u_3=0.0;条件函数
r_1=rand;产生随机数
y_1=0;y_2=0;y_3=0;
x=[0,0,0]';
error_1=0; 出错条件
for k=1:1:3000常数比例为:
time(k)=k*ts; 时间常数
kp=1.0;ki=2.0;kd=0.01; pid的条件函数值
S=1; 时间秒
if S==1 %Triangle Signal 赋值三角函数1时
if mod(time(k),2)<1 假如当前值
rin(k)=mod(time(k),1); 则两项相等
else 特殊事件时
rin(k)=1-mod(time(k),1);结果这样后
end 结束
rin(k)=rin(k)-0.5;这样后
end结束程序
if S==2 %Sawtooth Signal赋值三角函数2时
rin(k)=mod(time(k),1.0);
end 程序结束
if S==3 %Random Signal赋值三角函数2时
rin(k)=rand; 为k,则随机
vr(k)=(rin(k)-r_1)/ts; %Max speed is 5.0最大限制速度调节函数
while abs(vr(k))>=5.0 并且不小于5时则
rin(k)=rand;
vr(k)=abs((rin(k)-r_1)/ts);
end
End结束程序
u(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller如果算式成立
则pid控制程序限制控制器输出
%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); 强制赋值错误时判别报错
r_1=rin(k);
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微分偏移错误
xi(k)=x(3);结果为
error_1=error(k);
D=0;积分关闭则
if D==1 %Dynamic Simulation Display 模拟动态显示赋值的等式
plot(time,rin,'b',time,yout,'r');调试过程值
pause(0.00000000000000000);暂停值
end
End程序结束
plot(time,rin,'r',time,yout,'b');在线显示的情况赋值表现
xlabel('time(s)');ylabel('rin,yout');画面上x和y轴的显示条件赋值表现
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');存储数据到v指令函数
u_1=0.0;u_2=0.0;u_3=0.0;条件函数
r_1=rand;产生随机数
y_1=0;y_2=0;y_3=0;
x=[0,0,0]';
error_1=0; 出错条件
for k=1:1:3000常数比例为:
time(k)=k*ts; 时间常数
kp=1.0;ki=2.0;kd=0.01; pid的条件函数值
S=1; 时间秒
if S==1 %Triangle Signal 赋值三角函数1时
if mod(time(k),2)<1 假如当前值
rin(k)=mod(time(k),1); 则两项相等
else 特殊事件时
rin(k)=1-mod(time(k),1);结果这样后
end 结束
rin(k)=rin(k)-0.5;这样后
end结束程序
if S==2 %Sawtooth Signal赋值三角函数2时
rin(k)=mod(time(k),1.0);
end 程序结束
if S==3 %Random Signal赋值三角函数2时
rin(k)=rand; 为k,则随机
vr(k)=(rin(k)-r_1)/ts; %Max speed is 5.0最大限制速度调节函数
while abs(vr(k))>=5.0 并且不小于5时则
rin(k)=rand;
vr(k)=abs((rin(k)-r_1)/ts);
end
End结束程序
u(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller如果算式成立
则pid控制程序限制控制器输出
%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); 强制赋值错误时判别报错
r_1=rin(k);
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微分偏移错误
xi(k)=x(3);结果为
error_1=error(k);
D=0;积分关闭则
if D==1 %Dynamic Simulation Display 模拟动态显示赋值的等式
plot(time,rin,'b',time,yout,'r');调试过程值
pause(0.00000000000000000);暂停值
end
End程序结束
plot(time,rin,'r',time,yout,'b');在线显示的情况赋值表现
xlabel('time(s)');ylabel('rin,yout');画面上x和y轴的显示条件赋值表现
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询