基于Matlab的控制系统仿真(质量块弹簧阻尼器系统PID控制器设计)

目录

重点函数:

sys = tf(num, den)

 [y, t] = step(sys, t)

 gain = dcgain(sys)

 info = stepinfo(sys)

 controller = pid(Kp,Ki,Kd)

 sys_cl = feedback(sys1,sys2)

任务一:求阶跃响应

任务二:比例控制

任务三:比例微分控制

任务四:比例积分控制

任务五:比例积分微分控制

 PID调参技巧

 曲线太多,查看不方便解决办法


重点函数:

sys = tf(num, den)

tf(num, den) 是指用于创建传递函数(transfer function)的函数。这种函数通常用于控制系统分析和设计中,用于描述输入和输出之间的关系。

在 MATLAB 或类似的数学计算环境中,numden 分别是传递函数的分子和分母多项式的系数。具体来说,num 是分子多项式的系数,den 是分母多项式的系数。这些系数用于描述传递函数的特性,从而分析和设计控制系统。例子如下:

num = [1];      % 分子多项式的系数,例如 1 的系数为 [1]
den = [1, 10, 20]; % 分母多项式的系数,例如 s^2 + 10s + 20 的系数为 [1 10 20]
sys = tf(num, den); % 创建传递函数对象

 [y, t] = step(sys, t)

step(sys, t) 是用于计算传递函数 sys 对于给定时间向量 t 的阶跃响应。阶跃响应是在系统输入发生单位阶跃变化时系统的输出响应。

sys 是之前通过 tf(num, den) 创建的传递函数对象,而 t 是一个时间向量,表示您要模拟的时间范围。step(sys, t) 函数将返回在时间向量 t 上的系统的输出响应,也就是阶跃响应。例子如下:

num = [1];      % 分子多项式的系数,例如 1 的系数为 [1]
den = [1, 10, 20]; % 分母多项式的系数,例如 s^2 + 10s + 20 的系数为 [1 10 20]
sys = tf(num, den); % 创建传递函数对象

t = 0:0.1:5; % 时间范围从 0 到 5,步长为 0.1
[y, t] = step(sys, t); % 计算阶跃响应

% 绘制阶跃响应曲线
plot(t, y);
xlabel('时间');
ylabel('响应');
title('传递函数的阶跃响应');

 gain = dcgain(sys)

dcgain(sys) 是用于计算传递函数 sys 的直流增益(DC gain)的函数。

直流增益是指在频率为零时,传递函数的增益值。它反映了系统在稳态下对于恒定输入的放大倍数。直流增益对于分析系统的稳定性和性能非常重要。

info = stepinfo(sys)

stepinfo(sys) 是用于计算传递函数 sys 的阶跃响应的一些性能指标的函数。这些性能指标包括上升时间、峰值时间、超调量、稳态误差等,这些指标可以帮助您评估系统的响应特性。例子如下:

num = [1];      % 分子多项式的系数,例如 1 的系数为 [1]
den = [1, 10, 20]; % 分母多项式的系数,例如 s^2 + 10s + 20 的系数为 [1 10 20]
sys = tf(num, den); % 创建传递函数对象

info = stepinfo(sys); % 计算阶跃响应性能指标
disp(info)

其中参数含义:

参数含义注释
RiseTime

上升时间

上升到 90% 的时间,单位为秒
TransientTime过渡时间

SettlingTime稳态时间系统在某个误差范围内首次进入并保持的时间,单位为秒
SettlingMin稳定最小值系统稳定后的最小值
SettlingMax稳定最大值系统稳定后的最大值
Overshoot超调量系统响应相对于最终值的最大超过量,以百分比表示
Undershoot欠冲量系统响应低于最终值的最大量,以百分比表示
Peak峰值表示系统响应的最大值
PeakTime峰值时间系统响应的最大峰值出现的时间,单位为秒

 controller = pid(Kp,Ki,Kd)

pid(Kp,Ki,Kd) 函数是MATLAB中用于创建PID(比例-积分-微分)控制器对象的函数。PID控制器是一种常见的控制器类型,用于调节系统的性能,以使其达到期望的响应。

调用pid(Kp, Ki, Kd)函数会返回一个PID控制器对象,该对象可以用于构建闭环控制系统。通过将PID控制器对象与系统传递函数相乘,可以创建一个带有PID控制的闭环系统。例子如下:

% 创建PID控制器对象
Kp = 1.0;
Ki = 0.5;
Kd = 0.2;
controller = pid(Kp, Ki, Kd);

% 打印PID控制器对象的详细信息
disp(controller);

 sys_cl = feedback(sys1,sys2)

sys_cl = feedback(sys1,sys2) 函数是用于创建闭环系统的MATLAB函数。在控制系统中,闭环反馈是一种常见的控制策略,用于调节系统的性能和稳定性。

任务一:求阶跃响应

        用MATLAB编程求开环阶跃响应,并可视化其响应曲线,写出被控对象的传递函数的直流增益、单位阶跃输入的最终值上升时间和稳定时间。

clear;
close all;
m = 1;
b = 10;
k = 20;
F = 1;
num = [1];      % 分子多项式系数
den = [m b k];  % 分母多项式系数
sys = tf(num, den);  % 创建传递函数模型

% 计算开环阶跃响应
t = 0:0.01:5;
[y, t] = step(sys, t);

% 可视化开环阶跃响应
figure;
plot(t, y);
title('开环阶跃响应');
xlabel('Time');
ylabel('Output');
grid on;

% 计算传递函数的直流增益
gain = dcgain(sys);
% 计算单位阶跃输入的最终值
final_value = y(end);
% 计算单位阶跃性能指标
info = stepinfo(sys);

% 显示结果
disp(['直流增益: ', num2str(gain)]);
disp(['最终值: ', num2str(final_value)]);
disp(['上升时间: ', num2str(info.RiseTime)]);
disp(['稳定时间: ', num2str(info.SettlingTime)]);

任务二:比例控制

用MATLAB编程,调节的   值,减小原系统上升时间,稳定时间和稳态误差,将阶跃响应曲线可视化,写出  的最佳范围。

clear;
close all;
m = 1;
b = 10;
k = 20;
F = 1;

num = [1];      % 分子多项式系数
den = [m b k];  % 分母多项式系数
sys = tf(num, den);  % 创建被控对象传递函数模型
% 显示被控对象传递函数模型参数
disp('sys Controller Parameters:');
disp(sys);

% 初始化阶跃响应数据
t = 0:0.01:5;
y_data = [];

% 设置Kp值范围
Kp_range = 10: 5: 100;  

% 初始化存储变量
rise_time = zeros(size(Kp_range));
settling_time = zeros(size(Kp_range));
steady_state_error = zeros(size(Kp_range));

% 循环遍历不同的Kp值
for i = 1:length(Kp_range)
    Kp = Kp_range(i);
    
    % 设计控制器
    controller = pid(Kp);
    
    % 创建闭环系统
    sys_cl = feedback(controller * sys, 1);
    
    % 获取阶跃响应数据
    [y, ~] = step(sys_cl, t);
    y_data = [y_data, y];

    % 计算阶跃响应特性
    step_info = stepinfo(sys_cl);
    
    % 存储阶跃响应特性
    rise_time(i) = step_info.RiseTime;
    settling_time(i) = step_info.SettlingTime;
    
    % 计算稳态误差
    steady_state_error(i) = 1 - dcgain(sys_cl);
end

% 可视化阶跃响应曲线
figure;
plot(t, y_data);
xlabel('Time');
ylabel('Output');
title('Step Response for Different Kp Values');
legend(cellstr(num2str(Kp_range', 'Kp = %0.1f')));
grid on;

% 绘制阶跃响应特性
figure;
subplot(3, 1, 1);
plot(Kp_range, rise_time, 'b');
xlabel('Kp');
ylabel('Rise Time');
title('Rise Time');

subplot(3, 1, 2);
plot(Kp_range, settling_time, 'r');
xlabel('Kp');
ylabel('Settling Time');
title('Settling Time');

subplot(3, 1, 3);
plot(Kp_range, steady_state_error, 'g');
xlabel('Kp');
ylabel('Steady State Error');
title('Steady State Error');

任务三:比例微分控制

用MATLAB编程,调节的   值,减少超调和稳定时间,将阶跃响应曲线可视化。

clear;
close all;
m = 1;
b = 10;
k = 20;
F = 1;

num = [1];      % 分子多项式系数
den = [m b k];  % 分母多项式系数
sys = tf(num, den);  % 创建被控对象传递函数模型
% 显示被控对象传递函数模型参数
disp('sys Controller Parameters:');
disp(sys);

% 初始化阶跃响应数据
t = 0:0.01:5;
y_data = [];

%设置Kp
Kp = 21;
% 设置Kd值范围
Kd_range = 0: 1: 10;  

% 初始化存储变量
rise_time = zeros(size(Kd_range));
settling_time = zeros(size(Kd_range));
steady_state_error = zeros(size(Kd_range));
Overshoot = zeros(size(Kd_range));

% 循环遍历不同的Kd值
for i = 1:length(Kd_range)
    Kd = Kd_range(i);
    
    % 设计控制器
    controller = pid(Kp,0,Kd);
    
    % 创建闭环系统
    sys_cl = feedback(controller * sys, 1);
    
    % 获取阶跃响应数据
    [y, ~] = step(sys_cl, t);
    y_data = [y_data, y];

    % 计算阶跃响应特性
    step_info = stepinfo(sys_cl);
    
    % 存储阶跃响应特性
    rise_time(i) = step_info.RiseTime;
    settling_time(i) = step_info.SettlingTime;
    Overshoot(i) = step_info.Overshoot;

    % 计算稳态误差
    steady_state_error(i) = 1 - dcgain(sys_cl);
end

% 可视化阶跃响应曲线
figure;
plot(t, y_data);
xlabel('Time');
ylabel('Output');
title('Step Response for Different Kp Values');
legend(cellstr(num2str(Kd_range', 'Kp = %0.1f')));
grid on;

% 绘制阶跃响应特性
figure;
subplot(4, 1, 1);
plot(Kd_range, rise_time, 'b');
xlabel('Kp');
ylabel('Rise Time');
title('Rise Time');

subplot(4, 1, 2);
plot(Kd_range, settling_time, 'r');
xlabel('Kp');
ylabel('Settling Time');
title('Settling Time');

subplot(4, 1, 3);
plot(Kd_range, steady_state_error, 'g');
xlabel('Kp');
ylabel('Steady State Error');
title('Steady State Error');

subplot(4, 1, 4);
plot(Kd_range, Overshoot, 'g');
xlabel('Kp');
ylabel('Overshoot');
title('Overshoot');

任务四:比例积分控制

用MATLAB编程,调节   和   参数,消除稳态误差,并可视化其阶跃响应曲线。

clear;
close all;
m = 1;
b = 10;
k = 20;
F = 1;

num = [1];      % 分子多项式系数
den = [m b k];  % 分母多项式系数
sys = tf(num, den);  % 创建被控对象传递函数模型
% 显示被控对象传递函数模型参数
disp('sys Controller Parameters:');
disp(sys);

% 初始化阶跃响应数据
t = 0:0.01:5;
y_data = [];

Kp = 80;
% 设置Ki值范围
Ki_range = 100: 10: 250;  

% 初始化存储变量
rise_time = zeros(size(Ki_range));
settling_time = zeros(size(Ki_range));
steady_state_error = zeros(size(Ki_range));
Overshoot = zeros(size(Ki_range));

% 循环遍历不同的Kd值
for i = 1:length(Ki_range)
    Ki = Ki_range(i);
    
    % 设计控制器
    controller = pid(Kp,Ki,0);
    
    % 创建闭环系统
    sys_cl = feedback(controller * sys, 1);
    
    % 获取阶跃响应数据
    [y, ~] = step(sys_cl, t);
    y_data = [y_data, y];

    % 计算阶跃响应特性
    step_info = stepinfo(sys_cl);
    
    % 存储阶跃响应特性
    rise_time(i) = step_info.RiseTime;
    settling_time(i) = step_info.SettlingTime;
    Overshoot(i) = step_info.Overshoot;

    % 计算稳态误差
    steady_state_error(i) = 1 - dcgain(sys_cl);
end

% 可视化阶跃响应曲线
figure;
plot(t, y_data);
xlabel('Time');
ylabel('Output');
title('Step Response for Different Ki Values');
legend(cellstr(num2str(Ki_range', 'Ki = %0.1f')));
grid on;

% 绘制阶跃响应特性
figure;
subplot(4, 1, 1);
plot(Ki_range, rise_time, 'b');
xlabel('Kp');
ylabel('Rise Time');
title('Rise Time');

subplot(4, 1, 2);
plot(Ki_range, settling_time, 'r');
xlabel('Kp');
ylabel('Settling Time');
title('Settling Time');

subplot(4, 1, 3);
plot(Ki_range, steady_state_error, 'g');
xlabel('Kp');
ylabel('Steady State Error');
title('Steady State Error');

subplot(4, 1, 4);
plot(Ki_range, Overshoot, 'g');
xlabel('Kp');
ylabel('Overshoot');
title('Overshoot');

 

任务五:比例积分微分控制

用MATLAB编程,调节   和   参数,使设计的系统没有超调,上升时间快且没有稳态误差,并可视化其阶跃响应曲线。

clear;
close all;
m = 1;
b = 10;
k = 20;
F = 1;

num = [1];      % 分子多项式系数
den = [m b k];  % 分母多项式系数
sys = tf(num, den);  % 创建被控对象传递函数模型
% 显示被控对象传递函数模型参数
disp('sys Controller Parameters:');
disp(sys);

% 初始化阶跃响应数据
t = 0:0.01:5;
y_data = [];

Kp = 80;
ki = 160;
% 设置Kd值范围
Kd_range = 1: 0.5: 8;  %6.5

% 初始化存储变量
rise_time = zeros(size(Kd_range));
settling_time = zeros(size(Kd_range));
steady_state_error = zeros(size(Kd_range));
Overshoot = zeros(size(Kd_range));

% 循环遍历不同的Kd值
for i = 1:length(Kd_range)
    Kd = Kd_range(i);
    
    % 设计控制器
    controller = pid(Kp,ki,Kd);
    
    % 创建闭环系统
    sys_cl = feedback(controller * sys, 1);
    
    % 获取阶跃响应数据
    [y, ~] = step(sys_cl, t);
    y_data = [y_data, y];

    % 计算阶跃响应特性
    step_info = stepinfo(sys_cl);
    
    % 存储阶跃响应特性
    rise_time(i) = step_info.RiseTime;
    settling_time(i) = step_info.SettlingTime;
    Overshoot(i) = step_info.Overshoot;

    % 计算稳态误差
    steady_state_error(i) = 1 - dcgain(sys_cl);
end

% 可视化阶跃响应曲线
figure;
plot(t, y_data);
xlabel('Time');
ylabel('Output');
title('Step Response for Different Kd Values');
legend(cellstr(num2str(Kd_range', 'Kd = %0.1f')));
grid on;

% 绘制阶跃响应特性
figure;
subplot(4, 1, 1);
plot(Kd_range, rise_time, 'b');
xlabel('Kp');
ylabel('Rise Time');
title('Rise Time');

subplot(4, 1, 2);
plot(Kd_range, settling_time, 'r');
xlabel('Kp');
ylabel('Settling Time');
title('Settling Time');

subplot(4, 1, 3);
plot(Kd_range, steady_state_error, 'g');
xlabel('Kp');
ylabel('Steady State Error');
title('Steady State Error');

subplot(4, 1, 4);
plot(Kd_range, Overshoot, 'g');
xlabel('Kp');
ylabel('Overshoot');
title('Overshoot');

 PID调参技巧

先内环再外环;先空载再带载。

比例积分PID控制可解决大多数系统。

1、确定比例系数Kp:

确定比例增益Kp时,首先去掉PID的积分项和微分项。输入设定为系统允许的最大值的60%~70%,由0逐渐加大比例增益Kp,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益Kp,设定PID的比例增益Kp为当前值的60%~70%。比例增益Kp调试完成。
2、确定积分系数Ki:

比例增益Kp确定后,设定一个较小的积分时间常数Ki的初值,然后逐渐加大Ki ,直至系统出现振荡,之后在反过来,逐渐减小Ki,直至系统振荡消失。记录此时的Ki,设定PID的积分系数Ki为当前值的50%~66%。积分时间常数Ki调试完成。

3、确定微分系数Kd:

微分时间常数Kd一般不用设定,为0即可。若要设定,与确定Kp和Ki的方法相同,取不振荡时的30%。

曲线太多,查看不方便解决办法

Matlab图窗曲线太多,标签颜色分辨度不高的解决方法_matlab 多条曲线标注不清晰_^存的博客-CSDN博客

  • 9
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 弹簧质量阻尼器是一种常用于机械系统中的元件,用来减振和控制振动。PID 控制是一种经典的控制方法,在不同领域都有广泛的应用。利用 MATLAB开发弹簧质量阻尼器模型的 PID 控制,可以实现对系统振动的稳定控制。 首先,我们需要建立弹簧质量阻尼器的模型。这个模型可以是一个动力学系统,以质量弹簧阻尼器为基础。我们可以使用微分方程来描述系统动力学,并将其转化为 MATLAB 中的差分方程形式。 接下来,我们需要设计 PID 控制。PID 控制由比例(P)、积分(I)和微分(D)三个部分组成。比例部分通过响应系统当前误差,进行参数调整。积分部分通过响应系统累积误差,进行参数调整。微分部分通过响应系统误差变化的速率,进行参数调整。调整后的参数可以使系统达到期望的稳定性和响应速度。 在 MATLAB 中,我们可以使用 PID 控制工具箱来设计 PID 控制。该工具箱提供了一系列函数和方法,用于系统建模、PID 参数调整和控制效果分析。我们可以根据系统的特性和需求,调整 PID 控制的参数,使其满足系统的要求。 最后,我们可以通过 MATLAB 来进行系统仿真和调试。通过输入不同的外部激励信号,我们可以验证 PID 控制的性能和稳定性。如果发现问题或者不满意的地方,我们可以调整 PID 参数,并再次进行仿真和调试,直到达到预期的结果。 总结起来,使用 MATLAB 开发弹簧质量阻尼器模型的 PID 控制可以帮助我们实现对系统振动的稳定控制。通过建立模型、设计 PID 控制、进行仿真和调试,我们可以优化系统的性能,提高系统的稳定性和响应速度。 ### 回答2: 弹簧质量阻尼器是一种用于减震和振动控制的装置。它由弹簧质量阻尼器组成。弹簧用于提供弹性力,质量用于增加系统的惯性,阻尼器用于控制振动的幅度和速率。 弹簧质量阻尼器模型的PID控制是一种常见的控制方法,适用于控制系统的自动调节和稳定。该控制方法基于对系统误差的反馈,通过调节控制的比例、积分和微分参数来实现系统的稳定和响应速度的优化。 在MATLAB开发弹簧质量阻尼器模型的PID控制可以按照以下步骤进行: 1. 定义系统模型:根据实际情况建立弹簧质量阻尼器的动态模型。可以使用二阶或更高阶的微分方程来描述系统的运动。 2. 参数估计:通过实验或理论分析来估计系统的参数,包括弹簧的刚度系数、质量质量阻尼器阻尼系数。 3. 设计PID控制:根据系统的特性和性能要求,设计合适的PID控制。通过调整比例、积分和微分参数来优化系统的响应。 4. 仿真和调试:使用MATLAB进行系统仿真,并对PID控制的性能进行调试和优化。可以通过改变控制参数、增加滤波等方法来改善系统的控制性能。 5. 实验验证:根据仿真结果,进行实验验证。通过对实际弹簧质量阻尼器系统的控制进行测试和评估,验证PID控制的效果和稳定性。 总的来说,弹簧质量阻尼器模型的PID控制是一种常见且有效的方法,可用于减震和振动控制。通过MATLAB开发和调试,可以实现系统的稳定和性能的优化。 ### 回答3: 弹簧质量阻尼器是一种常见的机电传动元件,也称为弹簧质量振动系统。其模型可以用一个质量弹簧阻尼器以及外部力的共同作用下振动的系统来描述。在控制系统中,我们可以使用PID控制来控制弹簧质量阻尼器模型。 PID控制是一种经典的控制算法,由比例(P)、积分(I)和微分(D)三部分组成。PID控制的作用是通过根据系统的误差信号来调整输出信号,以使系统的输出能够尽快地达到设定值,并保持在稳定状态。 在使用MATLAB进行弹簧质量阻尼器模型的PID控制开发时,我们可以按照以下步骤进行: 1. 确定弹簧质量阻尼器模型的数学表达式,包括质量弹簧阻尼器和外部力的关系。 2. 建立PID控制的数学模型,并确定各个控制参数的初值。 3. 使用MATLAB中的控制系统工具箱来进行PID控制的建模和调参。 4. 根据模型的实际情况,选择合适的控制策略,例如位置控制、速度控制或者力控制。 5. 使用MATLAB进行仿真和调试,通过调整PID控制的参数(比例、积分和微分系数)来使系统的输出尽快地达到设定值并保持稳定状态。 6. 进行实际硬件实现,将PID控制弹簧质量阻尼器模型相连接,通过采样和控制算法的实时计算,控制实际系统的运动。 通过上述步骤,我们可以使用MATLAB进行弹簧质量阻尼器模型的PID控制开发。在实际应用中,我们可以根据具体系统的要求和性能指标,进一步优化和调整PID控制的参数,以提高系统的控制精度和动态性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值