12.7 综合实例及MATLAB/Simulink应用
下面通过一个综合实例,讲述MATLAB/Simulink在本章中的应用。
【例12-12】 给定单位负反馈离散控制系统,其采样周期为1s,开环传递函数为与零阶保持器ZOH串联;同时,开环增益为K。求闭环系统稳定的条件,并且绘制K取不同值时闭环系统的阶跃响应曲线。
解:使用MATLAB/Simunlink求解本题的基本步骤如下。
【步骤1】 建立系统的数学模型。
首先,建立上述系统的数学模型,MATLAB代码如下:
- clc; % 清除屏幕显示
- clear; % 清除工作空间中的所有变量
- % 建立控制系统的数学模型
- Ts = 1; % 采样周期
- num = [1 1]; % 传递函数分母多项式系数
- den =[1 0 0]; % 传递函数分子多项式系数
- sys_continue = tf(num,den) % 连续系统的传递函数
- sys_discrete = c2d(sys_continue,Ts,'zoh') % 离散系统的传递函数
- sys_k = 1; %系统的开环增益
- sys_open = sys_k * sys_discrete % 系统的开环传递函数
程序运行的结果为:
- % 系统的开环传递函数
- Transfer function:
- 1.5 z - 0.5
- -------------
- z^2 - 2 z + 1
- Sampling time: 1
【步骤2】 绘制系统的根轨迹。
欲确定使闭环系统稳定的K的范围,需要绘制上述离散控制系统的根轨迹图,找出根轨迹和单位圆的交点。程序代码如下:
- % 绘制离散控制系统的根轨迹图
- figure(1); % 开启新的绘图窗口
- rlocus(sys_discrete); % 绘制离散控制系统的根轨迹
运行结果如图12.39所示。
图12.39 离散控制系统的根轨迹图
从图12.39中可以读到交点处的开环增益为K=0,K=2;也就是说,使闭环系统稳定的K的范围是0<K<2。为了验证这一结论,可以绘制系统的幅频特性曲线和Nyquist曲线,观察其稳定性。MATLAB代码如下:
- % K = 2 时系统的频率特性曲线
- sys_k = 2; % 设定系统增益为2
- figure(2); % 开启新的图形窗口
- margin(sys_k * sys_discrete); % 绘制离散控制系统的Bode图
- % K = 2 时系统的 Nyquist 曲线
- figure(3); % 开启新的图形窗口
- [dnum,dden] = tfdata(sys_k * sys_discrete,'v') % 提取开环传递函数的零极点
- dnyquist(dnum, dden, Ts) % 绘制离散控制系统的Nyquist曲线
- grid on; % 显示网格线
程序运行的结果如图12.40和图12.41所示。
图12.40 离散控制系统的幅频特性曲线
图12.41 离散控制系统的Nyquist曲线
从图中不难看出,当K=2时,系统处于临界稳定状态。幅频特性曲线显示,此时相角裕量为0,增益裕量为0;Nyquist曲线则恰好穿过(-1,0)点。可以确定,系统稳定时K的取值范围为(0, 2)。
【步骤3】 分析系统的阶跃响应。
给K赋不同的值(这里,令K=1、2、3),观察相应的阶跃响应曲线。MATLAB代码如下:
- % K 取不同值时系统的阶跃响应曲线
- sys_k = 1; % 设定系统增益为1
- figure(4); % 开启新的图形窗口
- sys_close = feedback(sys_k * sys_discrete,1); % 计算闭环系统的传递函数
- [dnumc,ddenc] = tfdata(sys_close,'v'); % 提取闭环传递函数的零极点
- dstep(dnumc,ddenc,25); % 绘制闭环控制系统的阶跃响应曲线
- sys_k = 2; % 设定系统增益为2
- figure(5); % 开启新的图形窗口
- sys_close = feedback(sys_k * sys_discrete,1); % 计算闭环系统的传递函数
- [dnumc,ddenc] = tfdata(sys_close,'v'); % 提取闭环传递函数的零极点
- dstep(dnumc,ddenc,25); % 绘制闭环控制系统的阶跃响应曲线
- sys_k = 3; % 设定系统增益为3
- figure(6); % 开启新的图形窗口
- sys_close = feedback(sys_k * sys_discrete,1); % 计算闭环系统的传递函数
- [dnumc,ddenc] = tfdata(sys_close,'v'); % 提取闭环传递函数的零极点
- dstep(dnumc,ddenc,25); % 绘制闭环控制系统的阶跃响应曲线
程序运行的结果如图12.42、图12.43和图12.44所示。
图12.42 K=1时闭环系统的阶跃响应曲线
图12.43 K=2时闭环系统的阶跃响应曲线
图12.44 K=3时系统的阶跃响应曲线
从以上几幅图中不难看出,当K=1时,闭环系统稳定,阶跃响应曲线收敛,并且系统的静态误差为0;当K=2时,闭环系统临界稳定,阶跃响应曲线等幅振荡;当K=3时,闭环系统不稳定,阶跃响应曲线很快发散。这与上面对K值的讨论结果是完全符合的。
【步骤4】 分析采样周期对系统稳定性的影响。
进一步考察采样周期对系统稳定性的影响。取Ts=0.5和Ts=2,分别计算系统的阶跃响应,代码如下:
- % 考察采样周期对系统稳定性的影响
- sys_k = 2; % 设定系统增益为2
- figure(7); % 开启新的图形窗口
- Ts = 0.5; % 设定采样周期为0.5 s
- sys_discrete = c2d(sys_continue,Ts,'zoh') % 计算离散系统的开环传递函数
- sys_close = feedback(sys_k * sys_discrete,1); % 计算离散系统的闭环传递函数
- [dnumc,ddenc] = tfdata(sys_close,'v'); % 提取闭环传递函数的零极点
- dstep(dnumc,ddenc,25); % 绘制闭环控制系统的阶跃响应曲线
- sys_k = 2; % 设定系统增益为2
- figure(8); % 开启新的图形窗口
- Ts = 2; % 设定采样周期为2 s
- sys_discrete = c2d(sys_continue,Ts,'zoh') % 计算离散系统的开环传递函数
- sys_close = feedback(sys_k * sys_discrete,1); % 计算离散系统的闭环传递函数
- [dnumc,ddenc] = tfdata(sys_close,'v'); % 提取闭环传递函数的零极点
- dstep(dnumc,ddenc,25); % 绘制闭环控制系统的阶跃响应曲线
程序运行结果如图12.45和图12.46所示。
图12.45 Ts=0.5, K=2时系统的阶跃响应曲线
图12.46 Ts=2, K=2时系统的阶跃响应曲线
结果显示,离散控制系统的稳定性不仅与开环增益有关,还与采样周期密切相关。原本临界稳定的系统,在缩短采样周期后变得稳定;加大采样周期则使得系统不稳定。理论计算表明,只有当KT<2时,题设中的离散控制系统才是稳定的。
习 题
【12.1】 给定连续对象的传递函数为
(1)利用MATLAB建立上述控制系统的传递函数模型;
(2)将得到的传递函数模型转化成离散的脉冲传递函数G(z)。
【12.2】 给定离散控制系统的脉冲传递函数为
利用MATLAB中的dimpulse命令绘制出以下几种情况下系统的脉冲响应曲线:
(1) p=±1;
(2) p=±0.8;
(3) p=±0.5;
(4) p=±0.3;
(5) p=0。
【12.3】 给定离散控制系统的脉冲传递函数为
其中,p1, p2是一对共轭极点。利用MATLAB中的impulse命令绘制以下几种情况下系统的脉冲响应曲线:
(1) p1,2=-0.8±0.6i;
(2) p1,2=0.8±0.6i;
(3) p1,2=-0.8;
(4) p1,2=0.8;
(5) p1,2=-0.5±0.866i;
(6) p1,2=0.5±0.866i;
(7) p1,2=0.5±0.4i;
(8) p1,2=0.5±0.4i;
(9) p1,2=±li。
【12.4】 利用MATLAB中的dstep命令绘制第3题几种情况下的阶跃响应曲线。
【12.5】 某离散控制系统结构如图12.A所示。
图12.A 习题
(1)利用MATLAB建立上述控制系统的模型;
(2)分别取不同的增益值K和周期值T,绘制系统的阶跃响应曲线,分析系统的稳定性;
(3)比较各条曲线之间的异同,并从中得出结论。
【12.6】 给定离散控制系统的结构如图12.B所示。
图12.B 习题
(1)利用MATLAB建立上述控制系统的模型;
(2)采样周期为1 s,判断系统的稳定性,并绘制系统的阶跃响应曲线。