matlab实现PID参数功能的简单仿真_gif

复制代码
clc 
clear
close all

% 定义系统传递函数
G = tf(2,[6 5 1]);                    % 二阶系统传递函数

% 合并后的GIF文件名
filename_all = 'PID_All.gif';  

% 创建单个图窗
figure(1); clf;
set(gcf, 'Position', [100, 100, 800, 600]);  % 设置图窗大小,保证帧捕获完整

%% 1. 比例系数Kp的动态过程
Kp_list = 0:0.1:5;
for idx = 1:length(Kp_list)
    Kp = Kp_list(idx);
    G1 = Kp;                          % 比例控制
    sys = feedback(G1 * G, 1);        % 单位负反馈系统
    
    % 绘制阶跃响应
    step(sys);                       
    axis([0 14 0 1.6]);
    title(['比例控制: Kp = ', num2str(Kp, '%.1f')], 'FontSize', 12);
    xlabel('时间 (s)', 'FontSize', 10);
    ylabel('输出', 'FontSize', 10);
    grid on;
    pause(0.05);
    
    % 捕获帧并写入GIF
    frame = getframe(1);    
    im = frame2im(frame);    
    [imind, cm] = rgb2ind(im, 256);  
    if idx == 1 && length(Kp_list) == 1  % 处理单帧情况
        imwrite(imind, cm, filename_all, 'gif', 'Loopcount', inf, 'DelayTime', 0.1);
    else
        if idx == 1  % 第一帧(比例阶段起始)
            imwrite(imind, cm, filename_all, 'gif', 'Loopcount', inf, 'DelayTime', 0.1);
        else
            imwrite(imind, cm, filename_all, 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);
        end
    end
end

%% 2. 积分系数Ki的动态过程
Kp = 5;
Ki_list = 0:0.02:1;
for idx = 1:length(Ki_list)
    Ki = Ki_list(idx);
    G1 = tf([Kp Ki], [1 0]);          % PI控制
    sys = feedback(G1 * G, 1);        % 单位负反馈系统
    
    % 绘制阶跃响应
    step(sys);                       
    axis([0 14 0 1.6]);
    title(['PI控制: Kp = ', num2str(Kp), ', Ki = ', num2str(Ki, '%.2f')], 'FontSize', 12);
    xlabel('时间 (s)', 'FontSize', 10);
    ylabel('输出', 'FontSize', 10);
    grid on;
    pause(0.05);
    
    % 捕获帧并写入GIF
    frame = getframe(1);    
    im = frame2im(frame);    
    [imind, cm] = rgb2ind(im, 256);  
    imwrite(imind, cm, filename_all, 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);
end

%% 3. 微分系数Kd的动态过程
Kp = 5;
Ki = 1;
Kd_list = 0:0.1:5.5;
for idx = 1:length(Kd_list)
    Kd = Kd_list(idx);
    G1 = tf([Kd, Kp, Ki], [1,0]);     % PID控制
    sys = feedback(G1 * G, 1);        % 单位负反馈系统
    
    % 绘制阶跃响应
    step(sys);                       
    axis([0 14 0 1.6]);
    title(['PID控制: Kp = ', num2str(Kp), ', Ki = ', num2str(Ki), ', Kd = ', num2str(Kd, '%.1f')], 'FontSize', 12);
    xlabel('时间 (s)', 'FontSize', 10);
    ylabel('输出', 'FontSize', 10);
    grid on;
    pause(0.05);
    
    % 捕获帧并写入GIF
    frame = getframe(1);    
    im = frame2im(frame);    
    [imind, cm] = rgb2ind(im, 256);  
    imwrite(imind, cm, filename_all, 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);
end

disp(['GIF文件已生成:', fullfile(pwd(), filename_all)]);
复制代码
clc 
clear
close all

% 定义系统传递函数
G = tf(2,[6 5 1]);                    % 二阶系统传递函数

%% 1. 比例系数Kp的功能展示(图窗1,生成Kp_GIF.gif)
filename_kp = 'Kp_Function.gif';
figure(1); clf;
set(gcf, 'Position', [100, 100, 800, 600]);  % 设置图窗位置和大小
Kp_list = 0:0.1:5;

for idx = 1:length(Kp_list)
    Kp = Kp_list(idx);
    G1 = Kp;                          % 比例控制
    sys = feedback(G1 * G, 1);        % 单位负反馈系统
    
    % 绘制阶跃响应
    step(sys);                       
    axis([0 14 0 1.6]);
    title(['比例系数Kp的功能展示', newline, '当前Kp = ', num2str(Kp, '%.1f')], 'FontSize', 12);
    xlabel('时间 (s)', 'FontSize', 10);
    ylabel('系统输出', 'FontSize', 10);
    grid on;
    pause(0.05);
    
    % 捕获帧并写入GIF
    frame = getframe(1);    
    im = frame2im(frame);    
    [imind, cm] = rgb2ind(im, 256);  
    if idx == 1
        imwrite(imind, cm, filename_kp, 'gif', 'Loopcount', inf, 'DelayTime', 0.1);
    else
        imwrite(imind, cm, filename_kp, 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);
    end
end

%% 2. 积分系数Ki的功能展示(图窗2,生成Ki_GIF.gif)
filename_ki = 'Ki_Function.gif';
figure(2); clf;
set(gcf, 'Position', [200, 200, 800, 600]);
Kp = 5;  % 固定Kp
Ki_list = 0:0.02:1;

for idx = 1:length(Ki_list)
    Ki = Ki_list(idx);
    G1 = tf([Kp Ki], [1 0]);          % PI控制
    sys = feedback(G1 * G, 1);        % 单位负反馈系统
    
    % 绘制阶跃响应
    step(sys);                       
    axis([0 14 0 1.6]);
    title(['积分系数Ki的功能展示(Kp固定为5)', newline, '当前Ki = ', num2str(Ki, '%.2f')], 'FontSize', 12);
    xlabel('时间 (s)', 'FontSize', 10);
    ylabel('系统输出', 'FontSize', 10);
    grid on;
    pause(0.05);
    
    % 捕获帧并写入GIF
    frame = getframe(2);    
    im = frame2im(frame);    
    [imind, cm] = rgb2ind(im, 256);  
    if idx == 1
        imwrite(imind, cm, filename_ki, 'gif', 'Loopcount', inf, 'DelayTime', 0.1);
    else
        imwrite(imind, cm, filename_ki, 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);
    end
end

%% 3. 微分系数Kd的功能展示(图窗3,生成Kd_GIF.gif)
filename_kd = 'Kd_Function.gif';
figure(3); clf;
set(gcf, 'Position', [300, 300, 800, 600]);
Kp = 5;  % 固定Kp
Ki = 1;  % 固定Ki
Kd_list = 0:0.1:5.5;

for idx = 1:length(Kd_list)
    Kd = Kd_list(idx);
    G1 = tf([Kd, Kp, Ki], [1, 0]);     % PID控制
    sys = feedback(G1 * G, 1);        % 单位负反馈系统
    
    % 绘制阶跃响应
    step(sys);                       
    axis([0 14 0 1.6]);
    title(['微分系数Kd的功能展示(Kp=5, Ki=1)', newline, '当前Kd = ', num2str(Kd, '%.1f')], 'FontSize', 12);
    xlabel('时间 (s)', 'FontSize', 10);
    ylabel('系统输出', 'FontSize', 10);
    grid on;
    pause(0.05);
    
    % 捕获帧并写入GIF
    frame = getframe(3);    
    im = frame2im(frame);    
    [imind, cm] = rgb2ind(im, 256);  
    if idx == 1
        imwrite(imind, cm, filename_kd, 'gif', 'Loopcount', inf, 'DelayTime', 0.1);
    else
        imwrite(imind, cm, filename_kd, 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);
    end
end

disp('三个参数的功能展示GIF已生成,保存在当前工作目录!');

大佬们的链接汇总(学习参考):

深入浅出PID控制算法(二)------------PID算法离散化和增量式PID算法原理及Matlab实现_离散pid-CSDN博客

matlab模糊控制工具箱使用和模糊控制pid实例参考_模糊控制调试参数-CSDN博客

PID控制算法详解及其在电机控制中的应用-CSDN博客

PID控制算法简介-CSDN博客

相关推荐
weixin_307779136 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
菜鸟~noob2337 小时前
【太空电子战】从CCS到Meadowlands:反通信系统的二十年演进史【含matlab代码】
开发语言·matlab
菜鸟~noob2331 天前
【太空电子战】Meadowlands作战验收:美国太空军可逆干扰能力的里程碑【含matlab代码】
matlab·电子战
菜鸟~noob2332 天前
【Bonjour】华为Peerium架构深度解析:从冯·诺依曼到百万处理器“一台计算机”,附MATLAB性能仿真【含matlab代码,可直接运行】
开发语言·matlab·华为·peerium
民乐团扒谱机2 天前
【手把手通信仿真】FSK与GFSK调制原理对比及MATLAB全实现,附频谱波形分析
matlab·蓝牙·微电子·通信技术·通信原理·gfsk·fsk
ι:3 天前
单相桥式全控整流仿真从零复现教学
windows·学习·matlab·simulink
菜鸟~noob2333 天前
【电子战】第14篇:TOA 定位——圆交汇与到达时间【含matlab代码】
开发语言·matlab
简简单单做算法3 天前
基于灰狼算法和贝叶斯联合优化的BiLSTM(GWO-BO-BiLSTM)一维时间序列预测算法matlab仿真
matlab·一维时间序列预测·gwo-bo-bilstm
Evand J4 天前
【MATLAB例程|图像滤波降噪13】局部噪声方差自适应滤波(LNR)图像降噪与效果展示。附完整例程的下载链接
图像处理·计算机视觉·matlab·滤波·代码·降噪
weixin_307779134 天前
C++代码实现MATLAB中的ode23t函数功能
开发语言·c++·算法·matlab