线代控制理论倒立摆实验Word文档格式.docx
《线代控制理论倒立摆实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《线代控制理论倒立摆实验Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
摆的质量惯性矩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)
OutputName'
outputs)
sys_tf
运行结果:
②系统的状态空间模型
M=0.4;
m=0.25;
b=0.15;
I=0.005;
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'
outputs={'
sys_ss=ss(A,B,C,D,'
statename'
states,'
inputname'
inputs,'
outputname'
六、系统的分析
①系统的开环脉冲响应
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)
Open-LoopStepResponse'
)
axis([03050])
legend('
'
系统开环极点分布:
七、系统控制
方法一:
根据给定的系统性能指标,参照希望极点(主导极点对)的确定方法,确定系统的闭环希望极点,实现小车倒立摆基于性能指标的极点配置控制。
①系统的各部分结构连接框图
全状态反馈控制系统的示意图如下所示:
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];
r'
sys_cl=ss(Ac,Bc,Cc,Dc,Ts,'
outputs);
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),'
pendulumangle(radians)'
StepResponsewithDigitalLQRControl'
A=sys_d.a;
运行结果如下:
②小车倒立摆基于状态观测器的状态反馈控制
输入源代码:
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];
e1'
e2'
e3'
e4'
sys_est_cl=ss(Ace,Bce,Cce,Dce,Ts,'
r=0.2*ones(size(t));
[y,t,x]=lsim(sys_est_cl,r,t);
StepResponsewithDigitalObserver-BasedState-FeedbackControl'
系统状态极点:
方法三小车倒立摆的线性二次型最优控制
由于我们的能控矩阵是4x4,所以矩阵的秩必须是4。
我们将使用MATLAB生成可控性矩阵,并使用MATLAB命令秩测试矩阵的秩。
将以下附加命令添加到m文件并在MATLAB命令窗口中运行将产生以下输出。
K=lqr(A,B,Q,R)
sys_cl=ss(Ac,Bc,Cc,Dc,'
StepResponsewithLQRControl'
经补偿输入源代码:
输出响应曲线:
闭环极点:
8、心得体会
实验中,我们组对于采用状态空间方法对小车倒立摆模型进行数学建模,运用Matlab软件对系统的开环传递函数和系统的状态空间模型进行数学分析和实现。
我们发现系统的开环特性不稳定,加入控制器和反馈后稳定性得到改善。
我们分别使用小车倒立摆基于性能指标的极点配置控制,小车倒立摆基于状态观测器的状态反馈控制,小车倒立摆的线性二次型最优控制在采用状态空间方法设计控制系统并完成实验以后,我们对状态空间法的使用变得更加熟悉,在实验中将MATLAB与状态空间法结合起来,让计算变得简单,也熟悉了MATLAB中的各种功能和命令。
实验一开始我们并没有得到合乎理想的曲线,在经过一系列计算和调试,反复修改源代码之后,才得到了比较理想的曲线。
经过这一系列的锻炼,我们对控制器的补偿操作也更加得心应手,受益匪浅,也了解了MATLAB最基本的使用方法,学会使用MATLAB绘制传递函数曲线,求取开环闭环极点零点,还学会构造函数模型,具备了一定独立求解的能力。