Matlab 仿真——单自由度倒立摆(2)系统分析

109
0
2021年1月20日 09时37分

文章目录

 

    • 0. 受控对象与设计要求
      • 0.1 受控对象
      • 0.2 设计要求
    • 1. 开环冲激响应
    • 2. 开环阶跃响应
    • 3. 引用

 

0. 受控对象与设计要求

 

这里列出上一篇文章的结果

 

0.1 受控对象

 

1610872416(1)

 

其中:

 

1610872451(1)

 

0.2 设计要求

 

对于倒立摆,当小车受到1Nsec的冲激响应的时候:

 

  1. θ的稳定时间 < 5s
  2. |θ-θ0| < 0.05 radians

 

对于整个系统,当小车收到0.2m的阶跃信号的时候:

 

  1. x 与 θ 的稳定时间 < 5s
  2. x 的上升时间 < 0.5s
  3. |θ-θ0| < 0.05 radians (也就是20°)
  4. 对于x和θ来说,稳态误差 < 2%

 

1. 开环冲激响应

 

首先定义我们的系统

 

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)

 

先看一下该系统的冲激响应

 

linearSystemAnalyzer('step',sys_tf,0:0.1:5)

 

微信图片_20210117163444

 

可以看得出系统不收敛(要注意的是我们之前进行过小角度假设,因此这张阶跃响应图片只在小范围内等效于实际运动情况,所以基本上大于1.5弧度之后的运动已经没有参考价值了),我们再看一下零极点位置

 

微信图片_20210117163510

 

微信图片_20210117163519

 

正如我们观察到的一样,果然两个系统都有极点在虚轴右边,因此系统不稳定。

 

2. 开环阶跃响应

 

Matlab可以让我们求取LTI系统任意输入的输出,现在我们看看一个阶跃输入的输出长什么样子(你也可以通过上面的分析工具直接查看)

 

t = 0:0.05:10;
u = ones(size(t));
[y,t] = lsim(sys_tf,u,t);
plot(t,y)
title('Open-Loop Step Response')
axis([0 3 0 50])
legend('x','phi')

 

输出

 

微信图片_20210117163543

 

看一下系统的开环性能

 

step_info = lsiminfo(y,t);
cart_info = step_info(1)
pend_info = step_info(2)

 

1610872568(1)

 

系统也是不稳定,因此这里我们必须要设计控制器来稳定这个系统。

 

3. 引用

 

https://ctms.engin.umich.edu/CTMS/index.php?example=InvertedPendulum&section=SystemAnalysis

发表评论

后才能评论