二级倒立摆系统的控制与仿真.docx

上传人:b****6 文档编号:15413158 上传时间:2023-07-04 格式:DOCX 页数:14 大小:106.68KB
下载 相关 举报
二级倒立摆系统的控制与仿真.docx_第1页
第1页 / 共14页
二级倒立摆系统的控制与仿真.docx_第2页
第2页 / 共14页
二级倒立摆系统的控制与仿真.docx_第3页
第3页 / 共14页
二级倒立摆系统的控制与仿真.docx_第4页
第4页 / 共14页
二级倒立摆系统的控制与仿真.docx_第5页
第5页 / 共14页
二级倒立摆系统的控制与仿真.docx_第6页
第6页 / 共14页
二级倒立摆系统的控制与仿真.docx_第7页
第7页 / 共14页
二级倒立摆系统的控制与仿真.docx_第8页
第8页 / 共14页
二级倒立摆系统的控制与仿真.docx_第9页
第9页 / 共14页
二级倒立摆系统的控制与仿真.docx_第10页
第10页 / 共14页
二级倒立摆系统的控制与仿真.docx_第11页
第11页 / 共14页
二级倒立摆系统的控制与仿真.docx_第12页
第12页 / 共14页
二级倒立摆系统的控制与仿真.docx_第13页
第13页 / 共14页
二级倒立摆系统的控制与仿真.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

二级倒立摆系统的控制与仿真.docx

《二级倒立摆系统的控制与仿真.docx》由会员分享,可在线阅读,更多相关《二级倒立摆系统的控制与仿真.docx(14页珍藏版)》请在冰点文库上搜索。

二级倒立摆系统的控制与仿真.docx

二级倒立摆系统的控制与仿真

二级倒立摆系统的控制与仿真

一、引言

在计算机参与的具有联系受控对象的控制系统中,有必要对联系控制系统设计数字控制器的必要,一般对于联系的控制对象设计数字控制器的方法有:

第一种是应用联系系统理论得到的联系控制规律,再将控制规律离散化,用控制器实现,第二种是将联系的控制对象离散化,用离散控制理论设计控制器参数,数字再设计就是根据连续系统及相应的控制规律如何重新设计对应的离散系统与相应的离散控制规律。

我们采用的是最优等价准则、双线性变换法、平均增益法进行数字再设计。

二、LQR控制器设计

(1)二级倒立摆系统的状态空间模型

设线性定常系统为

x’=A*x(t)+B*u(t),y=C*x(t)

其初始条件为x(t)=x0;

其中:

A=[0,1,0,0;40,0,0,0;0,0,0,1;-6,0,0,0];B=[0;-2;0;0.8];

C=[1,0,0,0;0,0,1,0]

(2)系统的能控性判定

n=size(A);Tc=ctrb(A,B);nc=rank(Tc)

n=66nc=6

从运行结果可知,系统的阶次为6,能控性矩阵的秩也为6,因此系统是能控的。

(3)系统的能观性判定

To=obsv(A,C);no=rank(To)

no=6

从运行结果可知,能观性矩阵的秩为6,与系统的阶次相等,因此系统是能观测的。

(4)LQR控制设计

基于一级倒立摆系统具有能控性和能观性,因此可采用LQR进行控制,经大量反复试验和仿真,选取R=0.2,

Q=[100000;0640000;00256000;000000;000000;000000];

F=lqr(A,B,Q,R)得到:

F=

2.2361106.6465-155.46205.17194.9639-24.5330

三、仿真曲线

采用LQR控制方式,设初始状态为x(0)=[1,-1,0,0]’,在相同采样周期T下应用数字再设计方法对一级倒立摆系统进行仿真,其中F(T)分别取为:

1.F(T)=F1(T)=F

2.F(T)=F2(T)=F[I+(A+BF)T/2]

3.F(T)=F3(T)=F[I-(A+BF)/2]-1

(1)T=0.013s,øc=e(A+BF)T时系统的极点、状态x1、x2、x3的离散仿真曲线

A=[0,0,0,1,0,0;0,0,0,0,1,0;0,0,0,0,0,1;0,0,0,0,0,0;0,77.0642,-21.1927,0,0,0;0,-38.5321,37.8186,0,0,0];

B=[0;0;0;1;5.7012;-0.0728];

C=[1,0,0,0,0,0;0,1,0,0,0,0;0,0,1,0,0,0];

D=[0;0;0];

Q=[100000;0640000;00256000;000000;000000;000000];

R=0.2;

F=lqr(A,B,Q,R)

T=0.013;

[G,H]=c2d(A-B*F,B,T);%%离散一的函数

p0=eig(G),

x0=[1-10.5000]';

[y,xt]=dinitial(G,B,C,D,x0);

t=0:

0.1:

(t-1)/10;

subplot(3,1,1),x1=[100000]*x';%%响应曲线

plot(t,x1);grid;title('状态变量x1的响应曲线')

subplot(3,1,2),x2=[010000]*x';

plot(t,x2);grid;title('状态变量x2的响应曲线')

subplot(3,1,3),x3=[001000]*x';

plot(t,x3);grid;title('状态变量x3的响应曲线')

p0=

0.8647+0.0473i

0.8647-0.0473i

0.9224+0.0618i

0.9224-0.0618i

0.9932+0.0066i

0.9932-0.0066i

图1øc=e(A+BF)T

(2)T=0.013s,øc=ø+ΓF1(T)时系统的极点、状态x1、x2、x3的离散仿真曲线

A=[0,0,0,1,0,0;0,0,0,0,1,0;0,0,0,0,0,1;0,0,0,0,0,0;0,77.0642,-21.1927,0,0,0;0,-38.5321,37.8186,0,0,0];

B=[0;0;0;1;5.7012;-0.0728];

C=[1,0,0,0,0,0;0,1,0,0,0,0;0,0,1,0,0,0];

D=[0;0;0];

Q=[100000;0640000;00256000;000000;000000;000000];

R=0.2;

F=lqr(A,B,Q,R)

T=0.013;

[Ad,B]=c2d(A,B,T);%%离散二的函数

Ad=Ad-B*F;

p1=eig(Ad)

x0=[1-10.5000]';

[y,xt]=dinitial(Ad,B,C,D,x0);

t=0:

0.1:

(t-1)/10;

subplot(3,1,1),x1=[100000]*x';%%显示程序

plot(t,x1);grid;title('状态变量x1的响应曲线')

subplot(3,1,2),x2=[010000]*x';

plot(t,x2);grid;title('状态变量x2的响应曲线')

subplot(3,1,3),x3=[001000]*x';

plot(t,x3);grid;title('状态变量x3的响应曲线')

p1=

0.8349+0.0388i

0.8349-0.0388i

0.9247+0.0561i

0.9247-0.0561i

0.9932+0.0066i

0.9932-0.0066i

图2øc=ø+ΓF1(T)

(3)T=0.013s,øc=ø+ΓF2(T)时系统的极点、F(T)值和状态x1、x2、x3的离散仿真曲线

A=[0,0,0,1,0,0;0,0,0,0,1,0;0,0,0,0,0,1;0,0,0,0,0,0;0,77.0642,-21.1927,0,0,0;0,-38.5321,37.8186,0,0,0];

B=[0;0;0;1;5.7012;-0.0728];

C=[1,0,0,0,0,0;0,1,0,0,0,0;0,0,1,0,0,0];

D=[0;0;0];

Q=[100000;0640000;00256000;000000;000000;000000];

R=0.2;

F=lqr(A,B,Q,R)

T=0.013;

P2=(A-B*F)*T/2;%%离散3的函数

F2=F*(eye(size(P2))+P2)

[Add,B]=c2d(A,B,T);

Ad=[Add-B*F2];

p2=eig(Ad)

x0=[1-10.5000]';

[y,x,t]=dinitial(Ad,B,C,D,x0);

t=0:

0.1:

(t-1)/10;

subplot(3,1,1),x1=[100000]*x';%%显示程序

plot(t,x1);grid;title('状态变量x1的响应曲线')

subplot(3,1,2),x2=[010000]*x';

plot(t,x2);grid;title('状态变量x2的响应曲线')

subplot(3,1,3),x3=[001000]*x';

plot(t,x3);grid;title('状态变量x3的响应曲线')

F2=

1.723690.8365-126.54814.00124.5195-19.9211

p2=

0.8676+0.0465i

0.8676-0.0465i

0.9224+0.0627i

0.9224-0.0627i

0.9932+0.0066i

0.9932-0.0066i

图3øc=ø+ΓF2(T)

(4)T=0.013s,øc=ø+ΓF3(T)时系统的极点、F(T)值和状态x1、x2、x3的离散仿真曲线

A=[0,0,0,1,0,0;0,0,0,0,1,0;0,0,0,0,0,1;0,0,0,0,0,0;0,77.0642,-21.1927,0,0,0;0,-38.5321,37.8186,0,0,0];

B=[0;0;0;1;5.7012;-0.0728];

C=[1,0,0,0,0,0;0,1,0,0,0,0;0,0,1,0,0,0];

D=[0;0;0];

Q=[100000;0640000;00256000;000000;000000;000000];

R=0.2;

F=lqr(A,B,Q,R)

T=0.013;

P3=(A-B*F)*T/2;%%离散4的函数

F3=F*(eye(size(P3))-P3)^-1

[Add,B]=c2d(A,B,T);

Ad=[Add-B*F3];

p3=eig(Ad),

[y,x,t]=dinitial(Ad,B,C,D,x0);

t=0:

0.1:

(t-1)/10;

subplot(3,1,1),x1=[100000]*x';%%显示程序

plot(t,x1);grid;title('状态变量x1的响应曲线')

subplot(3,1,2),x2=[010000]*x';

plot(t,x2);grid;title('状态变量x2的响应曲线')

subplot(3,1,3),x3=[001000]*x';

plot(t,x3);grid;title('状态变量x3的响应曲线')

F3=

1.777992.1683-129.23654.12384.5459-20.3464

p3=

0.8655+0.0476i

0.8655-0.0476i

0.9222+0.0622i

0.9222-0.0622i

0.9932+0.0066i

0.9932-0.0066i

图4øc=ø+ΓF3(T)

由上面的1-4图我们可以知道:

F(T)分别取F1(T),F2(T),F3(T)构成的闭环离散系统时仿真曲线基本一致,相应情况的闭环极点也基本相同,而取F(T)=F3(T)时,从系统的极点看,用øc=ø+ΓF3(T)代替øc=e(A+BF)T构成闭环系统的精确度相当好。

(5)当T=0.07s时,重新运行上述程序,运行结果及仿真曲线如下:

F=

2.2361106.6465-155.46205.17194.9639-24.5330

p0=

0.4410+0.1336i

0.4410-0.1336i

0.6133+0.2309i

0.6133-0.2309i

0.9635+0.0344i

0.9635-0.0344i

p1=

-1.6200

0.4446

0.6537+0.1930i

0.6537-0.1930i

0.9634+0.0345i

0.9634-0.0345i

F2=

-0.523321.51580.2283-1.13212.57090.3004

p2=

1.5961

0.4379

0.6521+0.1966i

0.6521-0.1966i

0.9634+0.0345i

0.9634-0.0345i

F3=

0.636951.2148-58.62291.49543.2064-9.0394

p3=

0.5960+0.3519i

0.5960-0.3519i

0.5336+0.1127i

0.5336-0.1127i

0.9636+0.0342i

0.9636-0.0342i

图5T=0.07s,øc=e(A+BF)T仿真曲线

图6T=0.07s,øc=ø+ΓF1(T)仿真曲线

图7T=0.07s,øc=ø+ΓF2(T)仿真曲线

图8T=0.07s,øc=ø+ΓF3(T)时仿真曲线

由以上图5-8可知,当F(T)取F1(T)或F2(T)构成闭环离散系统时,仿真曲线已经发散,系统变得不稳定了,而用F(T)=F3(T)构成闭环离散系统时,该仿真曲线与øc=e(A+BF)T时系统的仿真曲线基本一致,并且相应的闭环极点仍保持一定的精度。

五、结束语

从两次仿真结果可知,当采样时间很小时,人们通常用连续系统的状态反馈矩阵F构成闭环离散系统,这没有多大问题。

但是随着采样时间的增大,仍采取这种方法,则闭环系统的状态响应变坏,甚至出现不稳定现象。

这时应用闭环系统离散化的状态矩阵F(T)=F[I-(A+BF)/2]-1作为状态反馈矩阵构成离散化的闭环系统才是一种既简单而又具有较高精度的方法。

六、试验心得

通过此次试验对Matlab的一些应用有了一定的了解,在仿真的过程也碰到了不少问题,开始的有某些函数打错了一些字,在commend框的提示下解决一些问题,还有就是程序中的一些问题,开始参考的程序中漏了一句程序[Add,B]=c2d(A,B,T),使得运行出现错误,经过自己的调试和查找资料,最后终于顺利的完成了试验,于此同时对Matlab有了较好的兴趣,并且发现了其功能的强大,在往后自己会去深刻的学习这个软件,并且多和论坛中的高手交流交流。

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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