线代控制理论—倒立摆实验
- 格式:docx
- 大小:589.84 KB
- 文档页数:12
线性系统倒立摆实验
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.15 N / m / sec
小车与摆的连接点到摆质量中心的长度l=0.4 m
摆的质量惯性矩I=0.005 kg.m ^ 2
施加在小车上的力F
推车位置坐标X
小车倒立摆系统的受力分析图
总结小车在水平方向上的受力,可以得到以下运动方程。
(1)
总结摆在水平方向上的受力,可以得到以下反作用力表达式。
(2)
如果将上述方程式代入第一个方程式中,则将获得该系统的两个控制方程式之一。
(3)
为了获得该系统的第二运动方程,求和摆垂直的力。
(4)
为了消去上面方程式中的和项,求摆的力矩,以得到以下方程式。
(5)
结合这最后两个表达式,将获得第二个控制方程。
(6)
对方程进行线性化。
(7)
(8)
(9)
将以上近似值代入非线性控制方程后,我们得出了两个线性化的运动方程。注意已代替输入。
(10)
(11)
4.系统数学模型建立
1.系统传递函数:
为了获得线性化系统方程的传递函数,我们必须首先对系统方程进行拉普拉斯变换,假设初始条件为零。产生的拉普拉斯变换如下所示。
(12)
(13)
从上面的传递函数可以看出,原点既有极点又有零点。这些可以被消去,传递函数变为以下; (18)
其次,可以以类似的方式得出以推车位置作为输出的传递函数,从而得出以下结论。(19)
2.系统状态空间表达式的建立
如果将线性运动方程重新排列成一系列的一阶微分方程,则它们也可以状态空间的形式表示。由于方程是线性的,因此可以将它们转化为下面的状态空间表达式
五、系统模型的数学实现
①建立系统传递函数
源代码:
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; %denominator for the A and B matrices
A = [0 1 0 0;
0 -(I+m*l^2)*b/p (m^2*g*l^2)/p 0;
0 0 0 1;
0 -(m*l*b)/p m*g*l*(M+m)/p 0];
B = [ 0;
(I+m*l^2)/p;
0;
m*l/p];
C = [1 0 0 0;
0 0 1 0];
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;