@wuqi0616
2017-10-28T05:44:11.000000Z
字数 5274
阅读 903
自抗扰技术(ADRC)
标签(空格分隔): 未分类
数学模型:
同步误差:
耦合位置误差:
设计设定点位置同步控制器:
%% Set-Point Position Control
clear;clc;
%% 参数配置
H=diag([0.1 0.2 0.3 0.4]);C=diag([10 12 14 15]);%假设H,C阵
I=eye(4);%单位矩阵
T=[2,-1,0,-1;-1,2,-1,0;0,-1,2,-1;-1,0,-1,2];%同步转换矩阵
a=0.5*eye(4);%k控制增益
N=I+a*T;%耦合转换矩阵
h=0.005;%反馈时间5ms
maxit=20/h;%20s采样点个数
h0=20*h;h1=20*h;h2=20*h;h3=20*h;h4=20*h;%各跟踪微分器滤波因子
xd=zeros(1,maxit);%设定值,4轴相同
x1=zeros(4,maxit+1);%状态变量x1
x2=zeros(4,maxit+1);%状态变量x2
e1=zeros(4,maxit+1);%位置误差e
e2=zeros(4,maxit+1);%位置误差导数e’
E1=zeros(4,maxit+1);%耦合位置误差E
E2=zeros(4,maxit+1);%耦合位置误差导数E’
vv=zeros(2,maxit+1);%xd的跟踪微分器1
vv2=zeros(3,maxit+1);%xd的跟踪微分器2
zz1=zeros(2,maxit+1);%1轴输出信号的跟踪微分器
zz2=zeros(2,maxit+1);%2轴输出信号的跟踪微分器
zz3=zeros(2,maxit+1);%3轴输出信号的跟踪微分器
zz4=zeros(2,maxit+1);%4轴输出信号的跟踪微分器
%% 设定点位置同步控制器参数
KP=30*eye(4);%P
KD=5*eye(4);%D
KE=0*eye(4);
for k=1:maxit
%% 设定值xd=6
xd(k)=6;
%% xd的跟踪微分器1
fh=fhan(vv(1,k)-xd(k),vv(2,k),r,h0);
vv(1,k+1)=vv(1,k)+h*vv(2,k); % x
vv(2,k+1)=vv(2,k)+h*fh; %v
%% xd的跟踪微分器2
fhh=fhan(vv2(1,k)-vv(2,k),vv2(2,k),r,h0);
vv2(1,k+1)=vv2(1,k)+h*vv2(2,k); % v
vv2(2,k+1)=vv2(2,k)+h*fhh; % a
%% 输出y
y=[x1(1,k),x1(2,k),x1(3,k),x1(4,k)]’;
%1轴输出信号的跟踪微分器
fh1=fhan(zz1(1,k)-y(1),zz1(2,k),r1,h1);
zz1(1,k+1)=zz1(1,k)+h*zz1(2,k);
zz1(2,k+1)=zz1(2,k)+h*fh1;
%2轴输出信号的跟踪微分器
fh2=fhan(zz2(1,k)-y(2),zz2(2,k),r2,h2);
zz2(1,k+1)=zz2(1,k)+h*zz2(2,k);
zz2(2,k+1)=zz2(2,k)+h*fh2;
%3轴输出信号的跟踪微分器
fh3=fhan(zz3(1,k)-y(3),zz3(2,k),r3,h3);
zz3(1,k+1)=zz3(1,k)+h*zz3(2,k);
zz3(2,k+1)=zz3(2,k)+h*fh3;
%4轴输出信号的跟踪微分器
fh4=fhan(zz4(1,k)-y(4),zz4(2,k),r4,h4);
zz4(1,k+1)=zz4(1,k)+h*zz4(2,k);
zz4(2,k+1)=zz4(2,k)+h*fh4;
%位置误差
e1(:,k)=[vv(1,k)-zz1(1,k),vv(1,k)-zz2(1,k),vv(1,k)-zz3(1,k),vv(1,k)-zz4(1,k)]’;
%位置误差导数
e2(:,k)=[vv(2,k)-zz1(2,k),vv(2,k)-zz2(2,k),vv(2,k)-zz3(2,k),vv(2,k)-zz4(2,k)]’;
%耦合位置误差
E1(:,k)=N*e1(:,k);
%耦合位置误差导数
E2(:,k)=N*e2(:,k);
F=tanh(E2(:,k));
%% 控制器
U=KP*E1(:,k)+KD*E2(:,k)+(I/N)*KE*e2(:,k);
Tempx2=[x2(1,k),x2(2,k),x2(3,k),x2(4,k)]’;
%% 离散控制
Tempx11=y+h*Tempx2;
Tempx22=Tempx2+h*(I/H)*((-1)*C*Tempx2+U);
%% 输出序列
x1(1,k+1)=Tempx11(1);x2(1,k+1)=Tempx22(1);
x1(2,k+1)=Tempx11(2);x2(2,k+1)=Tempx22(2);
x1(3,k+1)=Tempx11(3);x2(3,k+1)=Tempx22(3);
x1(4,k+1)=Tempx11(4);x2(4,k+1)=Tempx22(4);
end
同理:
%% Set-Point Tracking Control
设定点轨迹同步跟踪控制器参数
KP=20*eye(4);
KD=5*eye(4);
KE=0*eye(4);
KH=0.3*eye(4);
KC=2*eye(4);
KN=0;
%% 控制器
U=KH*(vv2(2,k)*[1,1,1,1]’)+KC*(vv2(1,k)*[1,1,1,1]’)+KP*E1(:,k)+KD*E2(:,k)+(I/N)*KE*e2(:,k)+F*KN;
2、考虑用不同误差组合方式实现“非线性PD”
%% Set-Point Position Control
%% (1)u=\beta_1 fal(e_1,\alpha_1,delta)+\beta_2 fal(e_2,\alpha_2,delta)\\
Beta1=30*eye(4);
Beta2=2*eye(4);
alpha1=0.75;alpha2=1.5;delta=20*h;
%% (2)u=-fhan(e_1,e_2,r_n,h_n)\\
rn=30;hn=30*h;
%% (3)u=-fhan(e_1,ce_2,r_2,h_2)\\
rn=30;hn=30*h;c=2;
同理:
%% Set-Point Tracking Control
%% (1)u=\beta_1 fal(e_1,\alpha_1,delta)+\beta_2 fal(e_2,\alpha_2,delta)\\
Beta1=20*eye(4);
Beta2=20*eye(4);
alpha1=0.6;alpha2=1.2;delta=h;
%% (2)u=-fhan(e_1,e_2,r_n,h_n)\\
rn=20;hn=30*h;
%% (3)u=-fhan(e_1,ce_2,r_2,h_2)\\
rn=20;hn=30*h;c=2;
1、考虑用两个跟踪微分器来实现“非线性PD”
设定点位置控制
放大(“Set-Point Position Control”)图:
可以看到4个轴在大致3秒的时候就达到目标位置了。而位置误差和位置同步误差也在大致3秒的时候就收敛到0了。
设定点轨迹跟踪控制
放大(“Set-Point Tracking Control”)图:
可以看到4个轴在大致4秒的时候就达到目标位置了。而位置误差和位置同步误差也在大致4秒的时候就收敛到0了。
2、考虑用不同误差组合方式实现“非线性PD”
设定点位置控制
从这里可以看出,在同样的增益下,三种不同误差组合方式中第一种效果最好(暂态特性最好)。但是第一种的效果仍然与线性PD组合效果相近。
设定点轨迹跟踪控制
Sun D, Shao X, Feng G. A Model-Free Cross-Coupled Control for Position Synchronization of Multi-Axis Motions: Theory and Experiments[J]. IFAC Proceedings Volumes, 2005, 38(1):1-6.