1、项目内容与要求
三级项目设计(用MATLAB完成):
- 完成对一个任意二阶或多阶系统输入阶跃、斜坡、抛物线或任意信号的暂态响应曲线,并分析其相关性能。
- 完成一个任意系统的根轨迹,要求输入系统参数,即可得到系统根轨迹。
- 完成一个任意系统的频率响应特性绘制(幅频特性和相频特性),要求输入系统参数,即可得到系统响应曲线。
2、项目原理和实现步骤
2.1项目原理
控制系统设计和分析是工程机械、电子、电气、化工等领域中常见的任务。在控制系统中,通过对输入信号进行处理,利用反馈机制的原理将输出信号与期望信号之间的误差减至最小,从而达到有效地控制系统的目的。MATLAB 作为一种强大的数学计算和可视化工具,在控制系统设计和分析中得到了广泛的应用。
2.2实现步骤
1. 完成对任意系统输入信号的暂态响应分析,步骤如下:
1)定义系统的传递函数 H(s) 或状态空间模型。
2)使用 MATLAB 的 ‘step’, ‘lsim’, ‘impulse’ 等函数模拟不同的输入信号,如阶跃、斜坡和抛 物线。
3)分别绘制输入和输出信号的时域曲线,并计算性能参数,如上升时间、峰值时间、调节时 间、超调量和稳态误差等。
4)根据得到的性能参数,对控制系统进行评估和改进。
2. 完成任意系统的根轨迹绘制,步骤如下:
1) 定义系统的传递函数 H(s) 或状态空间模型。
2) 使用 MATLAB 的 ‘rlocus’ 函数绘制系统的根轨迹。
3) 根据根轨迹分析系统的稳定性和阻尼比等重要性能指标。
3. 完成任意系统的频率响应特性绘制,步骤如下:
1)定义系统的传递函数 H(s) 或状态空间模型。
2)使用 MATLAB 的 ‘bode’ 函数绘制系统的频率响应特性,包括幅频特性和相频特性。
3) 分析系统的带宽、截止频率、增益裕度和相位裕度等指标,对系统进行性能评估。
本次仿真项目的第2和第3题将通过设计 GUI 界面来实现,通过 MATLAB 的 GUI 工具箱(如 GUIDE)设计合适的用户界面,方便用户输入和展示分析结果。
3、仿真结果及分析
1. 定义一个二阶系统,ωn = 10 rad/s, ζ = 0.8,输入阶跃、斜坡、抛物线或任意信号的暂态响应曲线如图1所示,每个曲线对应的动态特性评估指标如图2所示。
由图2可以看出,阶跃信号的暂态响应曲线的上升时间和过渡时间较短,表明系统的响应速度比较快,系统能够快速地响应输入信号;调节时间很短,表明系统可以很快地达到稳态,这是二阶系统的优点之一;系统存在一定的超调,超调量为1.5165。这表明系统的稳定性可能不够好,存在一定的振荡;系统的峰值为1.0152,峰值时间为0.5238秒,这表明系统会在响应过程中出现一个峰值。这可能对实际应用造成一些问题;在这个系统中,低调量为0。这表明系统在响应信号时没有出现过度调整的情况。综上所述,该系统的响应速度快,但也存在一定的稳定性问题和峰值问题。在实际应用中,需要综合考虑这些因素并进行调整。
2. 完成任意系统的根轨迹绘制。输入G(s) = 1/(s^3 + 6s^2 + 8s),输出根轨迹如图3所示;输入G(s) = (4s^2 + 3s + 1)/(3s^3 + 5s^2 + s),输出根轨迹如图4所示。
3.完成任意系统的频率响应特性绘制。输入振荡环节G(s) = 1/(s^2 + 0.2s + 1),输出伯德图如图5所示;输入积分环节G(s) = 1/s,输出伯德图如图6所示。
由图5和图6的伯德图可以看出,振荡环节主要用于实现快速响应,使系统能够快速地跟随参考信号,并且在没有稳定性问题的情况下产生快速的、可控的振荡。使用振荡环节可以减小过渡过程和上下限之间的波动。然而,振荡环节也存在一些不足之处。它可能导致系统的稳定性问题,特别是如果未能正确地设计振荡环节增益,则可能引起系统产生过于强烈的振荡,从而对系统的性能和稳定性产生负面影响。相比之下,积分环节可以消除恒定的稳态误差。使用积分环节也可以大大降低系统在稳态运行过程中产生的误差,从而提供更好的响应和性能。然而,当系统的稳态误差较小时,添加积分环节可能会导致系统的过度冲击和稳定性问题。此外,积分环节的响应速度较慢,因此其对系统的过渡过程和动态响应速度会产生影响。
4、总结体会
通过完成这三个项目的设计仿真,我对控制系统的几个重要方面有了更深入的理解:
对于控制系统的暂态响应分析,我们需要对系统的阶数、稳定性和系统设计参数等因素进行深入研究。通过使用MATLAB等工具,我们可以方便地预测系统的响应曲线、超调量、调节时间等相关性能指标,并确定可能的改进方案和措施。
通过绘制系统的根轨迹,我们可以更加深入地了解系统的稳定性和性能。根轨迹可以直观地反映系统的阶数、极点和零点等信息,并为系统的控制设计提供重要的参考依据。使用MATLAB等工具可以更轻松地进行根轨迹的计算和分析。
对于系统的频率响应特性,我们需要对系统的传递函数、带宽和相位角等因素进行分析。通过使用MATLAB等工具,我们可以方便地绘制出系统的幅频响应和相频响应曲线,以更好地分析和优化系统的响应特性。
5、代码
1.对一个二阶系统输入阶跃、斜坡、抛物线或任意信号,输出的暂态响应曲线。
clc;clear;close all;
% 定义二阶系统参数
omega_n = 10; % 自然频率
zeta = 0.8; % 阻尼比
sys = tf(omega_n^2, [1, 2*zeta*omega_n, omega_n^2]); % 生成二阶系统模型
% 输入阶跃信号
t = 0:0.01:10;
u = ones(size(t));
figure;
subplot(2,2,1);
lsim(sys, u, t); % 直接绘制系统暂态响应曲线
ylim([0,1.1]);
title('Step Response');
s = stepinfo(sys); % 计算并输出系统性能指标
disp(s);
% 输入斜坡信号
u = t;
subplot(2,2,2);
lsim(sys, u, t);
title('Ramp Response');
s = stepinfo(sys);
disp(s);
% 输入抛物线信号
u = t.^2;
subplot(2,2,3);
lsim(sys, u, t);
title('Parabolic Response');
s = stepinfo(sys);
disp(s);
% 输入自定义信号
u = sin(3*t) + 0.5*t;
subplot(2,2,4);
lsim(sys, u, t);
title('Customized Response');
s = stepinfo(sys);
disp(s);
2.在GUI界面完成对任意系统的根轨迹的绘制
function RootLocus_GUI()
close all;
% 创建GUI界面
f = figure('Name', '根轨迹工具', 'Position',[300,300,800,300]);
% 创建左侧输入框和右边的绘图区
p_input = uipanel('Title','输入参数','Position',[.025 .1 .35 .8], 'FontSize',12,'Parent',f);
p_output = uipanel('Title','根轨迹','Position',[.4 .1 .55 .8], 'Parent',f);
% 左侧输入框中添加界面控件
uicontrol(p_input, 'Style', 'text', 'String', 'Numerator:', 'Position', [10 200 100 30], 'HorizontalAlignment', 'left','FontSize',12);
edt_num = uicontrol(p_input, 'Style', 'edit', 'Position', [120 207 150 20], 'Tag', 'numerator', 'HorizontalAlignment', 'left', 'FontSize',12);
uicontrol(p_input, 'Style', 'text', 'String', 'Denominator:', 'Position', [10 150 100 30], 'HorizontalAlignment', 'left','FontSize',12);
edt_den = uicontrol(p_input, 'Style', 'edit', 'Position', [120 157 150 20], 'Tag', 'denominator', 'HorizontalAlignment', 'left', 'FontSize',12);
btn_calc = uicontrol(p_input, 'Style', 'pushbutton', 'String', '计算根轨迹', 'Position', [100 50 120 40], 'FontSize',12, 'Callback', @calcRootLocus);
% 右侧绘图区
ah = axes('Parent', p_output);
% 计算根轨迹
function calcRootLocus(~,~)
% 读取用户输入的参数
num_input = str2num(get(edt_num, 'String'));
den_input = str2num(get(edt_den, 'String'));
% 判断输入是否合法
if isempty(num_input) || isempty(den_input)
errordlg('请输入正确的参数!', '参数错误', 'modal');
return;
end
num = num_input;
den = den_input;
% 绘制根轨迹图像
rlocus(num, den);
sgrid();
axis equal;
end
end
3.在GUI界面完成对任意系统的频率响应特性绘制(幅频特性和相频特性)
function BodePlot_GUI()
close all;
% 创建GUI界面
f = figure('Name', '柏德图工具', 'Position',[300,300,600,500]);
% 创建左侧输入框和右边的绘图区
p_input = uipanel('Title','输入参数','Position',[.025 .1 .35 .8], 'FontSize',12,'Parent',f);
p_output = uipanel('Title','柏德图','Position',[.4 .1 .55 .8], 'Parent',f);
% 左侧输入框中添加界面控件
uicontrol(p_input, 'Style', 'text', 'String', '分子:', 'Position', [10 200 50 30], 'HorizontalAlignment', 'left','FontSize',12);
edt_num = uicontrol(p_input, 'Style', 'edit', 'Position', [60 207 150 20], 'Tag', 'numerator', 'HorizontalAlignment', 'left', 'FontSize',12, 'String', '1');
uicontrol(p_input, 'Style', 'text', 'String', '分母:', 'Position', [10 150 50 30], 'HorizontalAlignment', 'left','FontSize',12);
edt_den = uicontrol(p_input, 'Style', 'edit', 'Position', [60 157 150 20], 'Tag', 'denominator', 'HorizontalAlignment', 'left', 'FontSize',12, 'String', '[1,0.2,1]');
btn_calc = uicontrol(p_input, 'Style', 'pushbutton', 'String', '计算柏德图', 'Position', [100 50 120 40], 'FontSize',12, 'Callback', @plotBode);
% 右侧绘图区
ah = axes('Parent', p_output);
% 计算柏德图
function plotBode(~,~)
% 读取用户输入的分子和分母
num_input = str2num(get(edt_num, 'String'));
den_input = str2num(get(edt_den, 'String'));
% 检查输入参数是否合法
if isempty(num_input) || isempty(den_input)
errordlg('请输入正确的参数!', '参数错误', 'modal');
return;
end
num = num_input;
den = den_input;
% 绘制柏德图
bode(num, den);
grid on;
end
end