资源描述
系统辨识与自适应控制
三阶极点配置控制文字说明与本课程感想
一 课题前申
设有数学模型
其中
设计控制器为
其中 和 为待定多项式,且 为首一多项式, 为参考输入。
这样构成的控制系统方框图见图,表达式如下。
极点配置系统控制方框图
闭环特征多项式为
控制的任务是,在不考虑干扰的情况下,使控制输出与期望输出相等,即
从而有
其中Am, Bm分别为期望的传递函数分母多项式和分子多项式。且两者互
质。一般说来,前者由系统性能要求确定,后者根据系统稳态要求和过程不稳
定零点确定。
将过程的B分成两部分:
其中,前者为不稳定和阻尼差的零点,后者为稳定零点。根据工程经验,控制器的引入可抵消过程的稳定零点,保留不稳定零点和阻尼差的零点,同时该零点应保留在期望传递函数分子中。于是
其中, 是为了消除稳态误差。各式化简整理,左边分子分母对消 B+ ,并考虑右边分子分母的阶次低于左边,为使其相等,右边分子分母同乘多项式A0,从而有
化简
由此有
两边同乘 B+ ,有
即
由上可的
又因为
A、 B-,和d均为已知,当Am A0 确定以后,可求出多项式F1和G。当A和B-互质时,满足该等式的解有无穷组。为使问题有解 ,不妨假设式左边两项有相同的阶次,并规定
并且右边的阶次小于等于左边阶次.本算法引入了diophantine函数解决了该方程有唯一解的问题,使复杂的问题简单化。
二 三阶极点配置控制
本例题是基于二阶极点配置自校正控制研究完成。
设被控对象为
要求的期望特征多项式为
且稳态输出无误差。
采用零阶保持器,并采用采样周期Ts=0.5s,对上述系统离散化得 ;
其零点是z1=-3.1212. z2=-0.2258;
闭环特征多项式离散化后为
(1) 考虑系统零点不被对消的情况
离散化系统的零点为z1=-3.1212. z2=-0.2258;为了不让这个零点与控制器极点对消,即
B+=1, B-=0.01743 z^2 + 0.05833 z + 0.01229
为使系统无误差,Bm’=Am(1)/B^-(1)从程序运行中得0.04569.
Bm=0.0083+0.0292Z^(-1)+0.0065Z^(-2)
此时VAL取0.1
零点未对消仿真图像
(2) 考虑系统零点被对消的情况
离散化系统的零点为z1=-3.1212. z2=-0.2258; 为了让这个零点与控制器极点对消,即
B+=(1-3.1212Z^(-1))(1-0.2258Z^(-1)),
B-=0.01229
为使系统无误差,Bm’=Am(1)/B^-(1)从程序运行中得0.5659. Bm=0.0103+0.0337Z^(-1)
此时VAL取3.25
零点对消仿真图像
三 附程序及文字解释
u %极点配置控制(PPC)(连续系统离散化)极点未对消
clear all; close all;
%被控对象离散化
den=[1 1 1 0]; num=[1]; Ts=0.5; Td=0; %连续系统对象参数
sys=tf(num,den,'inputdelay',Td); %连续系统传递函数
dsys=c2d(sys,Ts,'zoh'); %离散化
[dnum,a]=tfdata(dsys,'v'); %提取离散系统数据
na=length(a)-1; b=dnum(2:na+1); nb=length(b)-1;
d=Td/Ts+1; %纯延时
%期望特性离散化
den=[1 2*0.7*1 1^2 0.5]; num=[1];
sys=tf(num,den);
dsys=c2d(sys,Ts,'zoh');
[dnum,Am]=tfdata(dsys,'v'); %提取Am
nam=length(Am)-1; %期望特征多项式阶次
%多项式B的分解
br=roots(b); %求B的根.br =-3.2626,-0.2385
b0=b(1); b1=1; %b0为B-;b0 = 0.0182.b1为B+.b1=1
Val=0.1; %通过修改临界值,确定B零点是否对消(零点绝对值小于临界值,则被抵消)
for i=1:nb %分解B-、B+
if abs(br(i))>=Val
b0=conv(b0,[1 -br(i)]);
else
b1=conv(b1,[1 -br(i)]);
end
end
Bm1=sum(Am)/sum(b0);Bm=Bm1*b0; %确定多项式Bm.Bm =0.0440
%确定多项式A0
na0=2*na-1-nam-(length(b1)-1); %观测器最低阶次
A0=1;
for i=1:na0
A0=conv(A0,[1 0.5]); %生成观测器
end
%计算Diophantine方程,得到F、G、R
[F1,G]=diophantine(a,b0,d,A0,Am); %注意,此处为b0
F=conv(F1,b1); R=Bm1*A0;
nf=length(F)-1; ng=length(G)-1; nr=length(R)-1;
L=400; %控制步数
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
yrk=zeros(na,1); %期望输出初值
yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4+d,1)]; %期望输出
for k=1:L
time(k)=k*Ts;
y(k)=-a(2:na+1)*yk+b*uk(d:d+nb); %采集输出数据
u(k)=(-F(2:nf+1)*uk(1:nf)+R*[yr(k+d:-1:k+d-min(d,nr));yrk(1:nr-d)]-G*[y(k);yk(1:ng)])/F(1); %求控制量
%更新数据
for i=d+nb:-1:2
uk(i)=uk(i-1);
end
uk(1)=u(k);
for i=na:-1:2
yk(i)=yk(i-1);
yrk(i)=yrk(i-1);
end
yk(1)=y(k);
yrk(1)=yr(k);
end
subplot(2,1,1);
plot(time,yr(1:L),'r:',time,y);
xlabel('t'); ylabel('y_r(t)、y(t)');
legend('y_r(t)','y(t)');
subplot(2,1,2);
plot(time,u);
xlabel('t'); ylabel('u(t)');
u %极点配置控制(PPC)(连续系统离散化)极点已对消
clear all; close all;
%被控对象离散化
den=[1 1 1 0]; num=[1]; Ts=0.5; Td=0; %连续系统对象参数
sys=tf(num,den,'inputdelay',Td); %连续系统传递函数
dsys=c2d(sys,Ts,'zoh'); %离散化
[dnum,a]=tfdata(dsys,'v'); %提取离散系统数据
na=length(a)-1; b=dnum(2:na+1); nb=length(b)-1;
d=Td/Ts+1; %纯延时
%期望特性离散化
den=[1 2*0.7*1 1^2 0.5]; num=[1];
sys=tf(num,den);
dsys=c2d(sys,Ts,'zoh');
[dnum,Am]=tfdata(dsys,'v'); %提取Am
nam=length(Am)-1; %期望特征多项式阶次
%多项式B的分解
br=roots(b); %求B的根.br =-3.2626,-0.2385
b0=b(1); b1=1; %b0为B-;b0 = 0.0182.b1为B+.b1=1
Val=3.25; %通过修改临界值,确定B零点是否对消(零点绝对值小于临界值,则被抵消)
for i=1:nb %分解B-、B+
if abs(br(i))>=Val
b0=conv(b0,[1 -br(i)]);
else
b1=conv(b1,[1 -br(i)]);
end
end
Bm1=sum(Am)/sum(b0);Bm=Bm1*b0; %确定多项式Bm.Bm =0.0440
%确定多项式A0
na0=2*na-1-nam-(length(b1)-1); %观测器最低阶次
A0=1;
for i=1:na0
A0=conv(A0,[1 0.5]); %生成观测器
end
%计算Diophantine方程,得到F、G、R
[F1,G]=diophantine(a,b0,d,A0,Am); %注意,此处为b0
F=conv(F1,b1); R=Bm1*A0;
nf=length(F)-1; ng=length(G)-1; nr=length(R)-1;
L=400; %控制步数
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
yrk=zeros(na,1); %期望输出初值
yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4+d,1)]; %期望输出
for k=1:L
time(k)=k*Ts;
y(k)=-a(2:na+1)*yk+b*uk(d:d+nb); %采集输出数据
u(k)=(-F(2:nf+1)*uk(1:nf)+R*[yr(k+d:-1:k+d-min(d,nr));yrk(1:nr-d)]-G*[y(k);yk(1:ng)])/F(1); %求控制量
%更新数据
for i=d+nb:-1:2
uk(i)=uk(i-1);
end
uk(1)=u(k);
for i=na:-1:2
yk(i)=yk(i-1);
yrk(i)=yrk(i-1);
end
yk(1)=y(k);
yrk(1)=yr(k);
end
subplot(2,1,1);
plot(time,yr(1:L),'r:',time,y);
xlabel('t'); ylabel('y_r(t)、y(t)');
legend('y_r(t)','y(t)');
subplot(2,1,2);
plot(time,u);
xlabel('t'); ylabel('u(t)');
u diophantine函数
function [F1,G]=diophantine(A,B,d,A0,Am)
%***********************************************************************
%功能:Diophanine方程的求解
%调用格式:[F1,G]=diophantine(A,B,d,A0,Am)
%输入参数:多项式A、B系数向量、纯延迟d、多项式A0、Am系数向量(行向量)
%输出参数:Diophanine方程的解F1、G(行向量)
%***********************************************************************
dB=[zeros(1,d) B];
na=length(A)-1; nd=length(dB)-1;
T1=conv(A0,Am); nt=length(T1); T=[T1';zeros(na+nd-nt,1)];
%得到Sylvester 矩阵
AB=zeros(na+nd);
for i=1:na+1
for j=1:nd
AB(i+j-1,j)=A(i);
end
end
for i=1:nd+1
for j=1:na
AB(i+j-1,j+nd)=dB(i);
end
end
%得到F1,G
L=(AB)\T;
F1=[ L(1:nd)]';
G=[ L(nd+1:na+nd)]';
展开阅读全文