基于 MATLAB 的控制系统设计与分析

1、项目内容与要求

        三级项目设计(用MATLAB完成):

  1. 完成对一个任意二阶或多阶系统输入阶跃、斜坡、抛物线或任意信号的暂态响应曲线,并分析其相关性能。
  2. 完成一个任意系统的根轨迹,要求输入系统参数,即可得到系统根轨迹。
  3. 完成一个任意系统的频率响应特性绘制(幅频特性和相频特性),要求输入系统参数,即可得到系统响应曲线。

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所示。

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  根轨迹示例一
4  根轨迹示例二

3.完成任意系统的频率响应特性绘制输入振荡环节G(s) = 1/(s^2 + 0.2s + 1),输出伯德图如图5所示;输入积分环节G(s) = 1/s,输出伯德图如图6所示。

5  振荡环节的伯德图

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

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值