Matlab--基于前馈补偿的PID控制算法及其仿真

在高精度伺服控制中,前馈控制可用来提高系统的跟踪性能。经典控制理论中的前馈控制设计是基于复合控制思想,当闭环系统为连续系统时,使前馈环节与闭环系统的传递函数之积为1,从而实现输出完全复现输入。作者利用前馈控制的思想,针对PID控制设计了前馈补偿,以提高系统的跟踪性能,其结构如图所示:
Matlab--基于前馈补偿的PID控制算法及其仿真_第1张图片
设计前馈控制器为:
U f = y d ( s ) 1 G s U_{f}=y_{d}(s)\displaystyle\frac {1}{G{s}} Uf=yd(s)Gs1
总控制输出为PID控制输出+前馈控制输出
u f = u p + u f ( t ) u_{f}=u_{p}+u_{f}(t) uf=up+uf(t)
写成离散形式为
u k = u p + u f u_{k}=u_{p}+u_{f} uk=up+uf

%PID Feedforward Controler
clear all;
close all;

ts=0.001;
sys=tf(133,[1,25,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');

u_1=0;u_2=0;
y_1=0;y_2=0;

error_1=0;ei=0;
for k=1:1:1000
time(k)=k*ts;
   
A=0.5;F=3.0;
yd(k)=A*sin(F*2*pi*k*ts); 
dyd(k)=A*F*2*pi*cos(F*2*pi*k*ts);            %%一次微分
ddyd(k)=-A*F*2*pi*F*2*pi*sin(F*2*pi*k*ts);   %%二次微分

%Linear model  线性模型
y(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;

error(k)=yd(k)-y(k);                          %%误差

ei=ei+error(k)*ts;                            %%积分误差

up(k)=80*error(k)+20*ei+2.0*(error(k)-error_1)/ts;  %%PID的u输出

uf(k)=25/133*dyd(k)+1/133*ddyd(k);

M=2;
if M==1        %Only using PID
	u(k)=up(k);
elseif M==2    %PID+Feedforward
	u(k)=up(k)+uf(k);     %%%总控制输出为PID控制输出+前馈控制输出
end

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

u_2=u_1;u_1=u(k);
y_2=y_1;y_1=y(k);
error_1=error(k);
end
figure(1);
subplot(211);
plot(time,yd,'r',time,y,'k:','linewidth',2);
xlabel('time(s)');ylabel('yd,y');
legend('Ideal position signal','Position tracking');
subplot(212);
plot(time,error,'r','linewidth',2);
xlabel('time(s)');ylabel('error');
figure(2);
plot(time,up,'k',time,uf,'b',time,u,'r','linewidth',2);
xlabel('time(s)');ylabel('up,uf,u');

你可能感兴趣的:(Matlab)