线代控制理论倒立摆实验.docx

上传人:b****6 文档编号:6091619 上传时间:2023-01-03 格式:DOCX 页数:16 大小:579.96KB
下载 相关 举报
线代控制理论倒立摆实验.docx_第1页
第1页 / 共16页
线代控制理论倒立摆实验.docx_第2页
第2页 / 共16页
线代控制理论倒立摆实验.docx_第3页
第3页 / 共16页
线代控制理论倒立摆实验.docx_第4页
第4页 / 共16页
线代控制理论倒立摆实验.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

线代控制理论倒立摆实验.docx

《线代控制理论倒立摆实验.docx》由会员分享,可在线阅读,更多相关《线代控制理论倒立摆实验.docx(16页珍藏版)》请在冰豆网上搜索。

线代控制理论倒立摆实验.docx

线代控制理论倒立摆实验

线性系统倒立摆实验

1.实验目的

通过实验进一步熟悉和掌握基于状态空间模型的控制系统分析和设计方法,了解这些方法的原理,掌握这些方法解决实际问题的步骤,熟悉相关的MATLAB命令和编程方法,体会这些方法特点和优势。

2.实验内容

实验对象:

小车倒立摆系统

系统参数:

M-小车质量(kg)

m-摆杆质量(kg)

b-小车摩擦系数(N/m/sec)

l-摆杆连接点到质心的长度(m)

I-摆杆的转动惯量

q-摆杆以向下平衡位置为基准的角位移

j-摆杆以向上平衡位置为基准的角位移

x-小车位移

F-作用于小车上的力

3.系统建模过程

假设系统各结构参数如下:

小车质量M=0.4kg

摆质量m=0.25kg

小车的摩擦系数b=0.15N/m/sec

小车与摆的连接点到摆质量中心的长度l=0.4m

摆的质量惯性矩I=0.005kg.m^2

施加在小车上的力F

推车位置坐标X

小车倒立摆系统的受力分析图

总结小车在水平方向上的受力,可以得到以下运动方程。

(1)

总结摆在水平方向上的受力,可以得到以下反作用力表达式

(2)

如果将上述方程式代入第一个方程式中,则将获得该系统的两个控制方程式之一。

(3)

为了获得该系统的第二运动方程,求和摆垂直的力。

(4)

为了消去上面方程式中的

项,求摆的力矩,以得到以下方程式。

(5)

结合这最后两个表达式,将获得第二个控制方程。

(6)

对方程进行线性化。

(7)

(8)

(9)

将以上近似值代入非线性控制方程后,我们得出了两个线性化的运动方程。

注意

已代替输入

(10)

(11)

4.系统数学模型建立

1.系统传递函数:

为了获得线性化系统方程的传递函数,我们必须首先对系统方程进行拉普拉斯变换,假设初始条件为零。

产生的拉普拉斯变换如下所示。

(12)

(13)

从上面的传递函数可以看出,原点既有极点又有零点。

这些可以被消去,传递函数变为以下;

(18)

其次,

可以以类似的方式得出以推车位置作为输出的传递函数,从而得出以下结论。

(19)

2.系统状态空间表达式的建立

如果将线性运动方程重新排列成一系列的一阶微分方程,则它们也可以状态空间的形式表示。

由于方程是线性的,因此可以将它们转化为下面的状态空间表达式

 

5、系统模型的数学实现

①建立系统传递函数

源代码:

M=0.4;

m=0.25;

b=0.15;

I=0.005;

g=9.8;

l=0.4;

M=0.5;

m=0.2;

b=0.1;

I=0.006;

g=9.8;

l=0.3;

q=(M+m)*(I+m*l^2)-(m*l)^2;

s=tf('s');

P_cart=(((I+m*l^2)/q)*s^2-(m*g*l/q))/(s^4+(b*(I+m*l^2))*s^3/q-((M+m)*m*g*l)*s^2/q-b*m*g*l*s/q);

P_pend=(m*l*s/q)/(s^3+(b*(I+m*l^2))*s^2/q-((M+m)*m*g*l)*s/q-b*m*g*l/q);

sys_tf=[P_cart;P_pend];

inputs={'u'};

outputs={‘x';‘phi'};

set(sys_tf,'InputName',inputs)

set(sys_tf,'OutputName',outputs)

sys_tf

运行结果:

②系统的状态空间模型

源代码:

M=0.4;

m=0.25;

b=0.15;

I=0.005;

g=9.8;

l=0.4;

p=I*(M+m)+M*m*l^2;%denominatorfortheAandBmatrices

A=[0100;

0-(I+m*l^2)*b/p(m^2*g*l^2)/p0;

0001;

0-(m*l*b)/pm*g*l*(M+m)/p0];

B=[0;

(I+m*l^2)/p;

0;

m*l/p];

C=[1000;

0010];

D=[0;

0];

states={'x''x_dot''phi''phi_dot'};

inputs={'u'};

outputs={'x';'phi'};

sys_ss=ss(A,B,C,D,'statename',states,'inputname',inputs,'outputname',outputs)

运行结果:

 

六、系统的分析

①系统的开环脉冲响应

源代码:

M=0.4;

m=0.25;

b=0.15;

I=0.005;

g=9.8;

l=0.4;

q=(M+m)*(I+m*l^2)-(m*l)^2;

s=tf('s');

P_cart=(((I+m*l^2)/q)*s^2-(m*g*l/q))/(s^4+(b*(I+m*l^2))*s^3/q-((M+m)*m*g*l)*s^2/q-b*m*g*l*s/q);

P_pend=(m*l*s/q)/(s^3+(b*(I+m*l^2))*s^2/q-((M+m)*m*g*l)*s/q-b*m*g*l/q);

sys_tf=[P_cart;P_pend];

inputs={'u'};

outputs={'x';'phi'};

set(sys_tf,'InputName',inputs)

set(sys_tf,'OutputName',outputs)

t=0:

0.01:

1;

impulse(sys_tf,t);

title('Open-LoopImpulseResponse')

 

运行结果:

 

②系统开环阶跃响应

将以下代码剪切到M文件下,可以得到系统开环阶跃响应

t=0:

0.05:

10;

u=ones(size(t));

[y,t]=lsim(sys_tf,u,t);

plot(t,y)

title('Open-LoopStepResponse')

axis([03050])

legend('x','phi')

运行结果:

系统开环极点分布:

 

七、系统控制

方法一:

根据给定的系统性能指标,参照希望极点(主导极点对)的确定方法,确定系统的闭环希望极点,实现小车倒立摆基于性能指标的极点配置控制。

①系统的各部分结构连接框图

全状态反馈控制系统的示意图如下所示:

源代码:

A=sys_d.a;

B=sys_d.b;

C=sys_d.c;

D=sys_d.d;

Q=C'*C;

Q(1,1)=5000;

Q(3,3)=100

R=1;

[K]=dlqr(A,B,Q,R)

Ac=[(A-B*K)];

Bc=[B];

Cc=[C];

Dc=[D];

states={'x''x_dot''phi''phi_dot'};

inputs={'r'};

outputs={'x';'phi'};

sys_cl=ss(Ac,Bc,Cc,Dc,Ts,'statename',states,'inputname',inputs,'outputname',outputs);

 

t=0:

0.01:

5;

r=0.2*ones(size(t));

[y,t,x]=lsim(sys_cl,r,t);

[AX,H1,H2]=plotyy(t,y(:

1),t,y(:

2),'plot');

set(get(AX

(1),'Ylabel'),'String','cartposition(m)')

set(get(AX

(2),'Ylabel'),'String','pendulumangle(radians)')

title('StepResponsewithDigitalLQRControl')

A=sys_d.a;

B=sys_d.b;

C=sys_d.c;

D=sys_d.d;

Q=C'*C;

Q(1,1)=5000;

Q(3,3)=100

R=1;

[K]=dlqr(A,B,Q,R)

运行结果如下:

 

源代码:

Ac=[(A-B*K)];

Bc=[B];

Cc=[C];

Dc=[D];

states={'x''x_dot''phi''phi_dot'};

inputs={'r'};

outputs={'x';'phi'};

sys_cl=ss(Ac,Bc,Cc,Dc,Ts,'statename',states,'inputname',inputs,'outputname',outputs);

t=0:

0.01:

5;

r=0.2*ones(size(t));

[y,t,x]=lsim(sys_cl,r,t);

[AX,H1,H2]=plotyy(t,y(:

1),t,y(:

2),'plot');

set(get(AX

(1),'Ylabel'),'String','cartposition(m)')

set(get(AX

(2),'Ylabel'),'String','pendulumangle(radians)')

title('StepResponsewithDigitalLQRControl')

运行结果:

 

②小车倒立摆基于状态观测器的状态反馈控制

输入源代码:

Ace=[(A-B*K)(B*K);

zeros(size(A))(A-L*C)];

Bce=[B*Nbar;

zeros(size(B))];

Cce=[Cczeros(size(Cc))];

Dce=[0;0];

states={'x''x_dot''phi''phi_dot''e1''e2''e3''e4'};

inputs={'r'};

outputs={'x';'phi'};

sys_est_cl=ss(Ace,Bce,Cce,Dce,Ts,'statename',states,'inputname',inputs,'outputname',outputs);

t=0:

0.01:

5;

r=0.2*ones(size(t));

[y,t,x]=lsim(sys_est_cl,r,t);

[AX,H1,H2]=plotyy(t,y(:

1),t,y(:

2),'plot');

set(get(AX

(1),'Ylabel'),'String','cartposition(m)')

set(get(AX

(2),'Ylabel'),'String','pendulumangle(radians)')

title('StepResponsewithDigitalObserver-BasedState-FeedbackControl')

 

运行结果:

 

系统状态极点:

 

方法三小车倒立摆的线性二次型最优控制

由于我们的能控矩阵是4x4,所以矩阵的秩必须是4。

我们将使用MATLAB生成可控性矩阵,并使用MATLAB命令秩测试矩阵的秩。

将以下附加命令添加到m文件并在MATLAB命令窗口中运行将产生以下输出。

源代码:

Q=C'*C;

R=1;

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

Ac=[(A-B*K)];

Bc=[B];

Cc=[C];

Dc=[D];

states={'x''x_dot''phi''phi_dot'};

inputs={'r'};

outputs={'x';'phi'};

sys_cl=ss(Ac,Bc,Cc,Dc,'statename',states,'inputname',inputs,'outputname',outputs);

t=0:

0.01:

5;

r=0.2*ones(size(t));

[y,t,x]=lsim(sys_cl,r,t);

[AX,H1,H2]=plotyy(t,y(:

1),t,y(:

2),'plot');

set(get(AX

(1),'Ylabel'),'String','cartposition(m)')

set(get(AX

(2),'Ylabel'),'String','pendulumangle(radians)')

title('StepResponsewithLQRControl')

运行结果:

 

经补偿输入源代码:

Q=C'*C;

Q(1,1)=5000;

Q(3,3)=100

R=1;

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

Ac=[(A-B*K)];

Bc=[B];

Cc=[C];

Dc=[D];

states={'x''x_dot''phi''phi_dot'};

inputs={'r'};

outputs={'x';'phi'};

sys_cl=ss(Ac,Bc,Cc,Dc,'statename',states,'inputname',inputs,'outputname',outputs);

t=0:

0.01:

5;

r=0.2*ones(size(t));

[y,t,x]=lsim(sys_cl,r,t);

[AX,H1,H2]=plotyy(t,y(:

1),t,y(:

2),'plot');

set(get(AX

(1),'Ylabel'),'String','cartposition(m)')

set(get(AX

(2),'Ylabel'),'String','pendulumangle(radians)')

title('StepResponsewithLQRControl')

输出响应曲线:

闭环极点:

 

8、心得体会

实验中,我们组对于采用状态空间方法对小车倒立摆模型进行数学建模,运用Matlab软件对系统的开环传递函数和系统的状态空间模型进行数学分析和实现。

我们发现系统的开环特性不稳定,加入控制器和反馈后稳定性得到改善。

我们分别使用小车倒立摆基于性能指标的极点配置控制,小车倒立摆基于状态观测器的状态反馈控制,小车倒立摆的线性二次型最优控制在采用状态空间方法设计控制系统并完成实验以后,我们对状态空间法的使用变得更加熟悉,在实验中将MATLAB与状态空间法结合起来,让计算变得简单,也熟悉了MATLAB中的各种功能和命令。

实验一开始我们并没有得到合乎理想的曲线,在经过一系列计算和调试,反复修改源代码之后,才得到了比较理想的曲线。

经过这一系列的锻炼,我们对控制器的补偿操作也更加得心应手,受益匪浅,也了解了MATLAB最基本的使用方法,学会使用MATLAB绘制传递函数曲线,求取开环闭环极点零点,还学会构造函数模型,具备了一定独立求解的能力。

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

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1