在高精度伺服控制中,前馈控制可用来提高系统的跟踪性能。经典控制理论中的前馈控制设计是基于复合控制思想,当闭环系统为连续系统时,使前馈环节与闭环系统的传递函数之积为1,从而实现输出完全复现输入。作者利用前馈控制的思想,针对PID控制设计了前馈补偿,以提高系统的跟踪性能,其结构如图所示:
设计前馈控制器为:
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');