5.5 综合实例及MATLAB/Simulink应用

下面通过两个综合实例,讲述MATLAB/Simulink在本章中的应用。

【例5-18】 某随动系统的结构如图5.43所示。利用MATLAB完成如下工作:

143-2

图5.43 随动系统的结构图

(1)对给定的随动系统建立数学模型;

(2)分析系统的稳定性,并且绘制阶跃响应曲线;

(3)计算系统的稳态误差;

(4)大致分析系统的总体性能,并给出理论上的解释。

解:利用MATLAB求解的基本步骤如下。

【步骤1】 求取系统的传递函数。

首先需要对系统框图进行化简。不难看出,题目中给出的系统包含两级反馈:外环是单位负反馈;内环则是二阶系统与微分环节构成的负反馈。可以利用MATLAB中的feedback函数计算出系统的传递函数。代码如下:

  1. clc; % 清除屏幕显示
  2. clear all; % 清除工作空间中的所有变量
  3. num1 = [20]; den1 = [1 2 0]; % 传递函数的分子、分母多项式系数
  4. sys1 = tf(num1,den1); % 二阶系统的传递函数
  5. num2 = [0.1 0]; den2 = [0 1]; % 微分环节传递函数的分子、分母多项式系数
  6. sys2 = tf(num2,den2); % 微分环节的传递函数
  7. sys_inner = feedback( sys1, sys2 ); % 内环反馈的传递函数
  8. sys_outer = feedback( sys_inner,1 ) % 外环反馈的传递函数

程序运行的结果为:

  1. Transfer function:
  2. 20
  3. -----------------
  4. s^2 + 4 s + 20

这样,就得出了系统的总体传递函数,即144-1

【步骤2】 进行稳定性分析。

根据求得的传递函数,对系统进行稳定性分析。可以采用roots命令求出传递函数分母多项式的根(即系统的极点),判断其实部是否都为负值;还可以利用pzmap直接绘制出系统的零极点,观察其分布。代码如下:

  1. % 根据求得的系统传递函数,利用 roots 命令判断系统的稳定性
  2. den = [1 4 20]; % 闭环系统传递函数分母多项式系数
  3. roots(den) % 求闭环系统特征多项式的根
  4. pzmap(sys_outer); % 利用 pzmap 命令绘制系统的零极点图
  5. grid on; % 在图像中显示网格线

程序运行的结果如下:

  1. ans = -2.0000 + 4.0000i
  2. -2.0000 - 4.0000i

可见,系统特征根均具有负实部,因此闭环系统是稳定的。

系统的零极点分布如图5.44所示。

145-1

图5.44 系统的零极点分布图

从图中也不难看出,极点(在图中用“×”标识)都在左半平面,系统稳定。这与用roots命令得出的结论完全相同。在实际应用中,采用pzmap更为形象,而且代码更加简单。

【步骤3】 求取阶跃响应。

计算系统的阶跃响应:可以采用MATLAB编程实现,还可以利用Simulink对系统进行建模,直接观察响应曲线。MATLAB程序代码如下:

  1. % 计算系统的阶跃响应
  2. num = [20]; den = [1 4 20]; % 闭环系统传递函数分子、分母多项式系数
  3. [y,t,x] = step(num,den) % 计算闭环系统的阶跃响应
  4. plot(x,y); % 绘制阶跃响应曲线
  5. grid on; % 在图像中显示网格线

程序运行的结果如图5.45所示。其中,横坐标表示响应时间,纵坐标表示系统输出。

145-2

图5.45 系统阶跃响应曲线

采用Simulink对系统进行建模,如图5.46所示。其中,示波器Scope用来观察系统的响应曲线;示波器error用来观察系统的误差曲线。这里放置了3个信号源:阶跃信号、速度信号及加速度信号。选择不同的信号源,可以从Scope中得到系统的不同响应曲线。

145-3

图5.46 利用Simulink对系统建模

用step信号激励系统,得到的输出如图5.47所示。

145-05

图5.47 系统阶跃响应曲线

这与编程得到的结果是完全相同的。

【步骤4】 分析系统的响应特性。

在上面的语句[y,t,x]=step(num,den)执行之后,变量y中就存放了系统阶跃响应的具体数值。从响应曲线中不难看出,系统的稳态值为1。可以利用如下代码计算系统的超调量:

  1. % 计算系统的超调量
  2. y_stable = 1; % 阶跃响应的稳态值
  3. max_response = max(y); % 闭环系统阶跃响应的最大值
  4. sigma = ( max_response - y_stable ) / y_stable % 阶跃响应的超调量

程序运行的结果为:

  1. sigma = 0.2076

同时可看出,系统的稳态误差为0。示波器error的波形显示如图5.48所示。

146-01

图5.48 系统误差曲线

可见,当阶跃输入作用系统2 s之后,输出就基本为1了。

还可以精确计算出系统的上升时间、峰值时间及调整时间。如上所述,y中存储了系统阶跃响应的数据;同时,x中存放了其中每个数据对应的时间。编写代码如下:

  1. % 计算系统的上升时间
  2. for i = 1 : length(y) % 遍历响应曲线
  3. if y(i) > y_stable % 如果某个时刻系统的输出值大于稳态值
  4. break; % 循环中断
  5. end
  6. end
  7. tr = x(i) % 计算此时对应的时间,就是阶跃响应的上升时间
  8. % 计算系统的峰值时间
  9. [max_response, index] = max(y); % 查找系统阶跃响应的最大值
  10. tp = x(index) % 计算此时对应的时间,就是阶跃响应的峰值时间
  11. % 计算系统的调整时间 ---> 取误差带为 2%
  12. for i = 1 : length(y) % 遍历响应曲线
  13. if max(y(i:length(y))) <= 1.02 * y_stable % 如果当前响应值在误差带内
  14. if min(y(i:length(y))) >= 0.98 * y_stable
  15. break; % 循环退出
  16. end
  17. end
  18. end
  19. ts = x(i) % 计算此时对应的时间,就是系统阶跃响应的调整时间

程序运行的结果如下:

  1. tr = 0.5245
  2. tp = 0.7730
  3. ts = 1.8773

即上升时间为0.52 s,峰值时间为0.77 s,并且系统在经过1.88 s后进入稳态。

综合利用MATLAB编程和Simulink仿真,可以很方便地对系统的响应性能进行分析。

【例5-19】已知某二阶系统的传递函数为147-1

(1)将自然频率固定为ωn=1, ζ=0,0.1,…,1,2,3,5,分析ζ变化时系统的单位阶跃响应;

(2)将阻尼比ζ固定为ζ=0.55,分析自然频率ωn变化时系统的单位阶跃响应(ωn的变化范围为0.1~1)。

解:利用MATLAB建立控制系统的数学模型,并且同时显示ωn=1,ζ(阻尼系数)取不同值时系统的阶跃响应曲线,代码如下:

  1. clc; % 清除屏幕显示
  2. clear; % 清除工作空间中的所有变量
  3. t = linspace(0,20,200)'; % 设置仿真时间
  4. omega = 1; % 设置二阶系统的自然频率
  5. omega2 = omega^2; % 计算自然频率的平方
  6. zuni = [0, 0.1, 0.2, 0.5, 1, 2, 3, 5]; % 设置阻尼系数向量
  7. num = omega2; % 二阶系统传递函数的分子多项式系数
  8. for k = 1 : 8 % 循环8次,分别计算在8种不同阻尼系数下系统的阶跃响应
  9. den = [1 2 * zuni(k) *omega omega2]; % 二阶系统传递函数分母多项式系数
  10. sys = tf(num,den); % 二阶系统的传递函数
  11. y(:,k) = step(sys,t); % 计算在当前阻尼系数下二阶系统的阶跃响应值
  12. end
  13. figure(1); % 开启新的图形显示窗口
  14. plot(t,y(:,1:8)); % 在一幅图像上依次绘制出上述8条阶跃响应曲线
  15. grid; % 显示网格线
  16. gtext('zuni=0'); gtext('zuni=0.1'); gtext('zuni=0.2'); gtext('zuni=0.5');
  17. % 为曲线添加标注
  18. gtext('zuni=1'); gtext('zuni=2'); gtext('zuni=3'); gtext('zuni=5');
  19. % 为曲线添加标注

运行程序,结果如图5.49所示。

147-2

图5.49 固定自然频率,阻尼比变化时系统的阶跃响应曲线

从图5.49中不难看出,当固定自然频率后,改变二阶系统的阻尼系数ζ,在ζ<1时并不会改变阶跃响应的振荡频率;而当ζ>1时,阶跃响应曲线不再振荡,系统过阻尼。此外,当阻尼系数ζ为0时,系统的阶跃响应为等幅振荡;当0<ζ<1时,系统欠阻尼,阶跃响应曲线的振荡幅度随ζ的增大而减小,动态特性变好;当ζ>1时,系统的过渡过程时间随着ζ的增加而逐渐变长,系统响应变慢,动态特性反而下降。

利用MATLAB在一幅图像上绘制ζ=0.55,ωn从0.1变化到1时系统的阶跃响应曲线,代码如下:

  1. clc; % 清除屏幕显示
  2. clear all; % 清除工作空间中的所有变量
  3. t = linspace(0,20,200)'; % 设置仿真时间
  4. zuni = 0.55; % 设定阻尼系数
  5. omega = [0.1, 0.2, 0.4, 0.7, 1]; % 设置自然频率向量
  6. omega2 = omega.^2; % 计算自然频率的平方
  7. for k = 1 : 5 % 循环5次,分别计算在5种不同的自然频率下系统的阶跃响应
  8. num = omega2(k); % 二阶系统传递函数分子多项式系数
  9. den = [1 2 * zuni *omega(k) omega2(k)]; % 二阶系统传递函数分母多项式系数
  10. sys = tf(num,den); % 二阶系统的传递函数
  11. y(:,k) = step(sys,t); % 计算在当前自然频率下,二阶系统的阶跃响应值
  12. end
  13. figure(2); % 开启新的图形显示窗口
  14. plot(t,y(:,1:5)); % 在一幅图像上依次绘制出上述5条阶跃响应曲线
  15. grid; % 显示网格线
  16. gtext('omega=0.1'); gtext('omega=0.2'); gtext('omega=0.4'); % 为曲线添加标注
  17. gtext('omega=0.7'); gtext('omega=1.0'); % 为曲线添加标注

运行代码,结果如图5.50所示。

148-1

图5.50 固定阻尼系数,自然频率变化时系统的阶跃响应曲线

由图可知:当自然频率ωn从0.1变化到1时,系统的振荡频率加快,上升时间减少,过渡过程时间减少;系统响应更加迅速,动态性能变好。

自然频率ωn决定了系统阶跃响应的振荡频率。ωn越大,系统的振荡频率越高,响应速度也越快;阻尼系数ζ决定了系统的振荡幅度;当ζ<1时,系统欠阻尼,阶跃响应有超调;当ζ>1时,系统过阻尼,阶跃响应没有超调,但是响应速度大大减缓,过渡过程时间很长。经验证明,ζ=0.7时,系统的阶跃响应最好,在实际的工程应用中,通常选取ζ=0.7。

【例5-20】 已知某晶闸管-直流电机单闭环系统的结构图如图5.51所示。试分别用Simukink系统仿真和Simukink动态结构图仿真其单位阶跃响应和单位脉冲响应。

149-1

图5.51 系统结构图

解:利用Simulink的求解的基本步骤如下。

【步骤1】 在Simulink中建立该系统的动态模型,如图5.52所示,并将模型存为“Samples_5_20.mdl”。

149-2

图5.52 Simulink中的系统动态模型

【步骤2】 求取系统的线性状态空间模型,并求取单位阶跃响应和脉冲响应。

在MATLAB命令窗口中运行以下命令:

  1. [A,B,C,D]=linmod('Samples_5_20'); %提取Simulink模型的线性状态空间模型
  2. sys=ss(A,B,C,D);
  3. figure(1); step(sys); %求取单位阶跃响应
  4. figure(2); impulse(sys); %求取单位脉冲响应

程序运行后,输出的阶跃曲线和脉冲曲线如图5.53和5.54所示。

149-3

图5.53 系统的单位阶跃响应曲线

149-4

图5.54 系统脉冲响应曲线

【步骤3】 利用Simulink系统模型图仿真。

进行单位阶跃响应和单位脉冲响应仿真的系统仿真图如图5.55所示,其中,在step模块中,设置跳变时间为0,初始值为0,终止值为1,采样时间为0;impulse模块中,脉冲类型选为“Time based”,幅值设置为100,脉宽设置为1。

150-1

图5.55 Simulink中的系统动态仿真模型

进行阶跃响应仿真时,将step模块作为输入信号;脉冲响应仿真时,将impulse模型作为输入信号,运行后,输出的阶跃曲线和脉冲曲线如图5.56和5.57所示。

150-04

图5.56 系统单位阶跃响应

150-05

图5.57 系统脉冲响应

习 题

【5.1】 设单位负反馈控制系统的开环传递函数为150-2

(1)试绘制K=10、100时闭环系统的阶跃响应曲线,并计算稳态误差、上升时间、超调量和过渡过程时间;

(2)绘制K=1000时闭环系统的阶跃响应曲线,与K=10、100所得结果相比较,分析增益系数与系统稳定性的关系;

(3)利用roots命令,确定使系统稳定时K的取值范围。

【5.2】 给定单位负反馈控制系统的开环传递函数G(s)分别为150-3150-4150-5,试判定闭环系统的稳定性,并确定当输入为阶跃信号时系统的稳态误差(如果系统稳定)。

【5.3】 已知某单位负反馈控制系统的开环传递函数为150-6。利用MATLAB中的Simulink工具,绘制系统的结构图;并且在K取不同值时,分别绘制系统的阶跃响应曲线、冲激响应曲线以及斜坡输入响应曲线。

【5.4】 设系统的微分方程为151-1,其中,y(t)为系统的输出变量,r(t)为系统的输入变量。

(1)利用MATLAB建立上述控制系统的数学模型;

(2)绘制系统的单位阶跃响应曲线和单位冲激响应曲线。

【5.5】 设单位负反馈控制系统的开环传递函数为151-2

(1)利用MATLAB建立上述控制系统的数学模型;

(2)利用MATLAB绘制系统的单位阶跃响应曲线和单位冲激响应曲线;

(3)利用LTI Viewer工具绘制系统的单位阶跃响应曲线和单位冲激响应曲线。

【5.6】 已知某单位负反馈控制系统的开环传递函数为151-3

(1)假定系统的阻尼系数为0.5,计算此时的系统增益K;

(2)当K=5时,绘制闭环系统的阶跃响应曲线,并计算上升时间、稳态时间、超调量以及静态误差。

【5.7】 已知控制系统的特征方程分别为s3+3s2+2s+24=0和s5+3s4+12s3+24s2+32s+48=0,试判断系统的稳定性,如果不稳定,计算系统在右半s平面的根的数目。

【5.8】 已知单位负反馈控制系统的开环传递函数G(s)为151-4151-5151-6,试分别确定其静态位置误差系数、静态速度误差系数以及静态加速度误差系数,并计算当输入信号为r(t)=2t时系统的静态误差。