控制建模matlab练习09:超前补偿器
此练习主要是:关于超前补偿器。
①为什么使用超前补偿器;
②使用超前补偿器前后的效果;
一、为什么使用超前补偿器
- 以下图,闭环反馈系统为例,开环传递函数为G(s);
- 首先,先分析一下当前系统的根轨迹,以及闭环系统的瞬态响应如何;
1、效果一:未使用超前补偿器
- 在matlab中,绘制当前系统的根轨迹,以及不同K值下的闭环系统的阶跃响应。
- 代码如下:
clc;clear;close all;
%% 定义G(s)
s = tf('s');
G_s = 1/((s+1)*(s+3));figure(1);
rlocus(G_s);figure(2);
K=2;
step (feedback(K*G_s,1));
hold on;
K=100;
step (feedback(K*G_s,1));
legend('K=2', 'K=100');
- 从根轨迹图看出,有两根根轨迹,分别从极点x=-1和x=-3,相向中间靠拢,最后沿着渐近线x=-2继续指向无穷。
- 这也意味着,不管增益K增加到多大,其闭环系统所对应根的绝对值的最大就是到2。
- 也就是当K增大到一定程度,不管再如何增加,都不会提高响应速度了。
- 从单位阶跃响应图看出,不管K=2还是增大到K=100,可以发现,最后的收敛速度都是一致的,都大概在2秒的时候达到系统稳态。
- 所以此时无论如何增大K,都无法加快系统达到稳定的时间。
2、效果二:使用超前补偿器
- 使用PD控制通常可以提高系统的响应速度,但PD控制也具有缺陷,因此引入超前补偿器可以避免PD控制的缺陷。
- 超前补偿器的设计思路:同时为系统增加一个极点和零点,且零点的位置比极点更加靠近虚轴。
- 以下图,加入超前补偿器后,超前补偿器是C(s)。
- 在matlab中,绘制对应的根轨迹,以及闭环系统的阶跃响应。
- 代码如下:
clc;clear;close all;
%% 定义G(s)
s = tf('s');
G_s = 1/((s+1)*(s+3));
K=100;
t = 0: .1: 5;
%% 绘制原传递函数根轨迹及其响应
subplot(2,2,1);
rlocus(G_s);
title('原系统根轨迹');
subplot(2,2,2);
sys_1 = feedback(K*G_s, 1)
step (sys_1,t);
title('原系统单位阶跃响应');
%%%% 定义补偿器C(s)
sz = -5;
sp = -10;
C_s = (s-sz)/(s-sp);
%% 使用补偿器后的根轨迹及其响应
subplot(2,2,3);
rlocus(G_s*C_s);
title('增加超前补偿器系统根轨迹');
subplot(2,2,4);
sys_2 = feedback(K*G_s*C_s, 1)
step (sys_2,t);
title('增加超前补偿器系统单位阶跃响应');
二、运行结果及分析
- 从运行结果看出,增加超前补偿器后的根轨迹,渐近线从x=-2左移到x=-4多,也就是根整体被向左拉了,因此,响应速度自然就会增加。
- 从单位阶跃响应图看出,增加超前补偿器后,达到稳态的时间,从原来的2秒提升到1秒左右。
- 所以,超前补偿器的一个应用:就是可以提高系统的响应速度。
学习来源:《控制之美》[卷1],王天威