• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计

人工智能 chuchu 2265次浏览 0个评论

文章目录

 

    • 0. 受控对象与设计要求
      • 0.1 受控对象
      • 0.2 设计要求
      • 0.3 系统结构
    • 1. 根轨迹设计
    • 2. PID控制
    • 3. 那小车呢?
    • 4. 几个问题
    • 5. 引用

 

0. 受控对象与设计要求

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

0.1 受控对象

 
Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计  

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%

 

0.3 系统结构

  由上一节我们知道该系统的控制结构框图:  
在这里插入图片描述   该系统的转换方程为:  
Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计   在开始设计PID控制器之前,我们先在Matlab里面定义好我们的受控对象  

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_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);

 

1. 根轨迹设计

  本节我们用根轨迹法来为该不稳定系统设计一个控制器。通过下面的代码显示当一个比例控制系数K从0到无穷大时的闭环根轨迹  

rlocus(P_pend)
title('Root Locus of Plant (under Proportional Control)')

 
在这里插入图片描述   不难发现有一段轨迹线无论K怎么变化,始终都在s平面右半边。也就是说无论K怎么变化,该系统始终不稳定。   为了解决这个问题,我们需要在原点处添加一个极点来抵消原点零点的影响,然后再通过添加修改控制器把s平面右边的极点统统拉到左平面以稳定整个系统。  

C = 1/s;
rlocus(C*P_pend)
title('Root Locus with Integral Control')

 
在这里插入图片描述   我们看一下零极点  

zeros = zero(C*P_pend)
poles = pole(C*P_pend)

 
Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计   新的系统有一个零点和四个极点,刨去相同位置下的零极点,那么根轨迹相应的有三条。新的根轨迹同样有一段永远在虚轴右边,一般来说我们通过增加零点把根轨迹往虚轴左边拉。由根轨迹的知识可知根轨迹与s平面实轴的交点在:  
Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计   因此如果我们添加一个最小相位零点的话(负零点),系统 与虚轴的交点为:  
Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计   因此最远我们大概可以把轨迹拖到-0.1的位置(这个结论是怎么得到的),回忆我们估计2%稳定时间的公式:  
Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计   因此,上述操作并不能使系统5秒的稳定时间满足条件。  

2. PID控制

  上述分析后我们知道给我们的微分控制器添加零点可以把根轨迹拖到s平面左边,但是拖得又不够左边。一种可行的方法是添加多一个零点。如果我们把两个零点放在负实轴极点中间,那么根轨迹会收敛于这两个极点。假设我们添加了-3 和 -4 两个零点  

z = [-3 -4];
p = 0;
k = 1;
C = zpk(z,p,k);
rlocus(C*P_pend)
title('Root Locus with PID Controller')

 
在这里插入图片描述   现在我们来看看新的系统是否满足设计要求。要求1,我们希望稳定时间<5秒,因此主极点的实部需要在4/(-5)= – 0.8 的左边才行,我们的主极点明显满足要求。要求2,我们希望超调不超过0.05弧度,因此就要求我们的系统有足够的阻尼,把主极点放在靠近实轴的地方会增大阻尼系数。我们运行以下代码来定位一个K,并输出响应K值下面新系统的零极点。  

 [k,poles] = rlocfind(C*P_pend)

  Matlab会弹出一个窗口然你选择根轨迹的位置,然后帮你输出对应根轨迹下的K值以及相应的零极点。我们在接近实轴的地方大概找了一个点  
在这里插入图片描述   然后matlab输出(不同人点的位置极有可能不一样,所以差不多就好)  
Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计   如此这般,我们就得到了一个新系统,我们再看看该系统是否满足超调性能  

K = 24.6;
T = feedback(P_pend,K*C);
impulse(T)
title('Impulse Disturbance Response of Pendulum Angle under PID Control');

 
在这里插入图片描述   通过仿真,第二个设计要求也满足了!  

3. 那小车呢?

  就跟上一节我们讲到的那样,该系统是单输入二输出系统,其系统框图为  
在这里插入图片描述   整理一下  
在这里插入图片描述   于是上面我们设计好了控制器之后,我们的输入对于小车的输出转换方程为  
Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计   我们把设计好的控制器和小车的转换方程代入进T2(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);
T2 = feedback(1,P_pend*C)*P_cart;
t = 0:0.01:8.5;
impulse(T2, t);
title('Impulse Disturbance Response of Cart Position under PID Control');
1
2
3
4
5

 
在这里插入图片描述   可以发现为了保持倒立摆的稳定,小车的运动是发散的。因此,显然我们不能用SISO的设计方法去处理SIMO的系统。  

4. 几个问题

 

  1. 为什么要加原点极点?
  2. 为啥添加的最小相位零点取值接近0?
  3. 2% 稳定时间公式的依据在哪里?
  4. 主极点放在实轴附近增大阻尼系数的依据来源于哪里?

 

5. 引用

 

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

 


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明Matlab 仿真——单自由度倒立摆(4)根轨迹法控制器设计
喜欢 (0)

您必须 登录 才能发表评论!

加载中……