用MatlabSimulink学控制.docx

上传人:b****1 文档编号:15036372 上传时间:2023-06-29 格式:DOCX 页数:11 大小:159.52KB
下载 相关 举报
用MatlabSimulink学控制.docx_第1页
第1页 / 共11页
用MatlabSimulink学控制.docx_第2页
第2页 / 共11页
用MatlabSimulink学控制.docx_第3页
第3页 / 共11页
用MatlabSimulink学控制.docx_第4页
第4页 / 共11页
用MatlabSimulink学控制.docx_第5页
第5页 / 共11页
用MatlabSimulink学控制.docx_第6页
第6页 / 共11页
用MatlabSimulink学控制.docx_第7页
第7页 / 共11页
用MatlabSimulink学控制.docx_第8页
第8页 / 共11页
用MatlabSimulink学控制.docx_第9页
第9页 / 共11页
用MatlabSimulink学控制.docx_第10页
第10页 / 共11页
用MatlabSimulink学控制.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

用MatlabSimulink学控制.docx

《用MatlabSimulink学控制.docx》由会员分享,可在线阅读,更多相关《用MatlabSimulink学控制.docx(11页珍藏版)》请在冰点文库上搜索。

用MatlabSimulink学控制.docx

用MatlabSimulink学控制

控制器设计中的状态空间法

目录一览

系统

1、建模

2、分析

控制

3、PID

4、根轨迹

5、频率

6、状态空间

7、数字化

Simulink

8、建模

9、控制

控制器设计中的状态空间法(State-SpaceMethodsforControllerDesign)

控制器设计中的频率分析法就是在频域中分析系统的一些特征,而状态空间法就是在时域中分析、设计系统。

下面通过一个例子来学习状态空间法设计控制器。

1、建立数学模型

由牛顿定律与KVL建立有:

设各参数取值分别为:

M=0、05kg,R=1Ω,L=0、01H,K=0、0001,g=9、8m/s,取h=0、01m(假设此时的电流为1、4A),在其附近线性化系统:

其中,

控制变量u为输入电压

关心的输出为

可以写出状态空间方程,从而确定A,B,C,D。

A=[010;9800-2、8;00-100];

B=[0;0;100];

C=[100];

2、分析数学模型

poles=eig(A)

执行后结果有一正值31、3050,表示开环系统不稳定。

可以验证:

t=0:

0、01:

2;

u=zeros(size(t));

x0=[0、0100];

sys=ss(A,B,C,0);

[y,t,x]=lsim(sys,u,t,x0);

plot(t,y)

title('OPen-LoopResponsetoNon-ZeroINitialCondition')

xlabel('Time(sec)')

ylabel('BallPosition(m)')

3、使用极点位置设计控制器(ControlDesignUsingPolePlacement)

如果我们能够知道各时刻各状态变量的值,即用传感器实时测量磁质质量块的位置、速度,电路中的电流,称为full-state。

设计控制器作用于原系统如下所示:

如上图,简化起见,暂时不考虑

闭环反馈系统的状态空间方程变为:

这样系统的极点位置就变为

的特征值,因此我们可以通过改变矩阵K的值来得到目标极点,进而实现目标响应,而这就就是状态空间法控制系统的关键。

Matlab提供了 place(A,B,P) 及 acker(A,B,P) (多个极点处于同一位置时使用)函数来确定目标极点所对应的K值,其中P为目标极点向量。

p1=-20+20i;

p2=-20-20i;

p3=-100;//为三阶系统确定两个主极点,近似为我们熟悉的二阶系统,便于分析

K=place(A,B,[p1p2p3]);

sys_c1=ss(A-B*K,B,C,0);

lsim(sys_c1,u,t,x0);//绘制系统的零输入响应

xlabel('Time(sec)')

ylabel('BallPosition(m)')//轴标

由响应曲线可见,结果相当理想。

当然设置不同的极点会对应不同的动态响应,当动态响应不满足要求时,就要对应调节极点位置,比如动态响应过慢时,尝试向左移动主极点的位置,以得到更快的动态响应。

现在来考虑初始状态为0,输入信号为阶跃信号时的情况,为了使得系统的线性化有效,阶跃值应当选取的尽可能小,重写输入:

u=0、001*ones(size(t));

lsim(sys_c1,u,t);

axis([02-4E-60]);

执行上面的程序发现虽然系统稳定,但输出值并没有跟随阶跃信号。

可以通过前置控制量Nbar来解决这个问题:

Matlab中使用函数 rscale、m来确定Nbar的合适值,Nbar= rscale(sys,K) (sys为原开环系统状态空间方程),现在:

Nbar=rscale(sys,K);

lsim(sys_c1,Nbar*u,t);

axis([0201、2*10^-3])

此时系统输出稳定在0、001。

当然,并非所有的系统都可以用这种方法来实现控制,系统具有可控性的充要条件就是系统的可控性矩阵(controllabiltymatrix,CO)满秩。

Matlab提供了ctrb(A,B) 及 ctr(sys) 来得到可控性矩阵(参数皆为原开环系统的)。

而矩阵的秩可由rank函数得到。

如判断例子系统的可控性:

rank(ctrb(A,B))

结果为3,CO满秩,即系统可控。

4、设计观察器(ObserverDesign)

在实际情况中我们常常不能获得所有状态量的当前值,这就是就需要设计观察器来估计它们,如下所示:

上边观察器只适用于y=Cx即D=0的系统,观察器基本就是控制系统的复制,它们有相同的输入,微分方程也基本相同。

这里先只考虑非0初始值,输入为0时的响应。

首先分析观察器,观察器的极点为

的特征值,由于我们需要观察器有比对象系统快得多的响应,我们将观察器传递函数的极点取的大五倍,使其有比系统快得多的响应。

通常观察器的初始状态为0,使得误差初始值与系统相等,即为x0,观察系统响应(为了同时得到估计误差,此时将新的状态向量

定义为

由此根据系统框图得到新的系统矩阵

输入矩阵

输出矩阵

):

op1=-100;

op2=-101;

op3=-102;//观察器的极点

L=place(A',C',[op1op2op3])';//由A,C,以及观察器极点确定L

At=[A-B*K,B*K;zeros(size(A)),A-L*C];

Bt=[B*Nbar;zeros(size(B))];

Ct=[C,zeros(size(C))];//新的状态空间参数

sys=ss(At,Bt,Ct,0);

lsim(sys,zeros(size(t)),t,[x0x0]);//绘制系统的零输入响应

title('LinearSimulationResults(withobserver)')

xlabel('Time(sec)')

ylabel('BallPosition(m)')//标题、轴标

与可控性对应,系统就是否具有可观性的充要条件就是观测性矩阵(observabilitymatrix,OB)满秩。

Matlab提供了obsv(A,C) 及 obsv(sys) 来得到可观性矩阵(参数皆为原开环系统的),如判断例子系统的可观性:

rank((obsv(A,C)))

结果为3,OB满秩,即系统可控。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2