IT评测·应用市场-qidao123.com

标题: 临界比例法PID调整-附带pidtune工具和GA算法 [打印本页]

作者: 忿忿的泥巴坨    时间: 2025-3-15 14:26
标题: 临界比例法PID调整-附带pidtune工具和GA算法
代码已上传:计算机控制系统PID参数整定法资源-CSDN文库



1背景

为了模拟PID参数整定,把讲义上的案例进行分析。


1题目

单位闭环通报函数,开环传函G(s)=1/((s+1)(s+2)), Ts=0.1s, PID调整器输出后,接零阶保持器ZOH。
2 代码 

PID含积分环节TI/s,
PID控制器 C(s)=Kp+Ki/s​+Kd⋅s 是一个非因果模型,因为它的分子(Kd⋅s)的阶数高于分母(1)的阶数。因此,不能直接使用 "zoh"、"foh" 或 "impulse" 方法来转换PID控制器。
具体编码:
注意PID的参数可以徐徐添加。
  1. % 定义闭环传递函数 G(s)
  2. s = tf('s'); % 定义传递函数变量s
  3. G = 1 / ((s + 1) * (s + 2)); % 给定的闭环传递函数
  4. % 定义PID控制器
  5. % PID控制器的传递函数为:C(s) = Kp + Ki/s + Kd*s
  6. %----这里可调整,从进行PID参数整定-------------
  7. Kp = 5; % 比例增益
  8. % Ki = 0.1; % 积分增益
  9. % Kd = 0.01; % 微分增益
  10. C = Kp + Ki / s + Kd * s; % PID控制器传递函数
  11. % 将连续时间系统转换为离散时间系统
  12. Ts = 0.1; % 采样时间
  13. % PID 不能用c2d函数,可用 双线性变换.PID控制器 C(s)=Kp+
  14. %s Ki +Kd⋅s 是一个非因果模型,因为它的分子(Kd⋅s)的阶数高于分母(1)的阶数。
  15. Gz = c2d(G, Ts, 'zoh'); % 使用零阶保持(ZOH)方法进行转换
  16. % Cz = c2d(C, Ts, 'zoh'); % 使用零阶保持(ZOH)方法进行转换
  17. Cz = c2d(C, Ts, 'tustin');% 双线性离散
  18. % 闭环系统
  19. Tz = feedback(Cz * Gz, 1); % 闭环传递函数,单位反馈
  20. % 仿真时间
  21. t = 0:Ts:10; % 仿真时间从0到10秒,步长为采样时间Ts
  22. % 仿真阶跃响应
  23. figure;
  24. step(Tz, t); % 绘制离散时间系统的阶跃响应
  25. title('阶跃响应');
  26. xlabel('时间/秒');
  27. ylabel('响应');
  28. grid on;
复制代码
3临界比例整定过程(未达到最优)

3.1 KI=KD=0,徐徐增大P






KP=32 基本等副振荡。Tr=1.1s



3.2 查表

控制度=1.2, 进行PI查表
T=0.05*Tr=0.05*1.1=0.055s.
KP=0.49*32=16
KI=0.91*1.1=1s

代入PI参数

效果并欠好, 稳态误差太大,阐明积分效果欠好。加大ki


稳态误差没有了。增长D
3.2 查表,加入D

KD=0.47s
 

没有达到最好的效果。


4 用AI来寻优

以下是基于Ziegler-Nichols方法调整PID参数的步骤:
1. 确定临界增益(Ku)和临界周期(Pu)

2. 根据Ziegler-Nichols公式计算PID参数

根据Ziegler-Nichols方法,PID参数可以通过以下公式计算:

示例

假设通过实验,你发现系统的临界增益(Ku)为2.5,临界周期(Pu)为1.5秒。(测试应该为KU=32,PU=1.1,我无法在推荐的参数获得效果)

根据上述公式,可以计算出PID参数:



他们没有使用ZOH。。
  1. % 定义闭环传递函数 G(s)
  2. s = tf('s'); % 定义传递函数变量s
  3. G = 1 / ((s + 1) * (s + 2)); % 给定的闭环传递函数
  4. % 定义PID控制器
  5. Kp = 1.5; % 比例增益
  6. Ki = 2.0; % 积分增益
  7. Kd = 0.28125; % 微分增益
  8. C = Kp + Ki / s + Kd * s; % PID控制器传递函数
  9. % 闭环系统
  10. T = feedback(C * G, 1); % 闭环传递函数,假设单位反馈
  11. % 仿真时间
  12. t = 0:0.01:10; % 仿真时间从0到10秒,步长为0.01秒
  13. % 仿真阶跃响应
  14. figure;
  15. step(T, t); % 绘制闭环系统的阶跃响应
  16. title(strcat('阶跃响应 KP=', num2str(Kp),',Ki=',num2str(Ki),'Kd=',num2str(Kd) ));
  17. xlabel('时间 (秒)');
  18. ylabel('响应');
  19. grid on;
复制代码
5 上pidtune工具包

pidtune 是 MATLAB 中用于自动调整 PID 控制器参数的工具,其工作原理基于系统模型的分析,通过优化算法均衡控制系统的性能和鲁棒性。以下是 pidtune 的工作原理及使用方法的详细阐明:
pidtune 的工作原理

使用 pidtune 的基本步骤

                step(feedback(C * sys, 1));
代码
  1. % 定义系统传递函数
  2. s = tf('s');
  3. G = 1 / ((s + 1) * (s + 2));
  4. % 使用pidtune自动整定PID参数
  5. [pid, info] = pidtune(G, 'PID');
  6. % 查看整定后的PID参数
  7. disp('整定后的PID参数:');
  8. disp(pid);
  9. % 绘制闭环阶跃响应
  10. T = feedback(pid * G, 1);
  11. step(T);
  12. title('自动整定后的闭环阶跃响应');
复制代码


6 GA算法


6.1. 遗传算法(GA)的基本原理

遗传算法是一种模拟生物进化过程的优化算法,通过选择、交叉和变异等操作,徐徐逼近问题的最优解。其基本流程包罗以下几个步骤:
6.2. 遗传算法在PID参数优化中的应用

PID控制器的性能依赖于其三个参数:比例增益(Kp)、积分增益(Ki)和微分增益(Kd)。遗传算法可以通过优化这些参数来提高PID控制器的性能。
具体步骤如下:




6.3 实当代码

  1. % 清除变量和关闭所有图形窗口
  2. clear; close all;
  3. % 定义被控对象 G(s)
  4. s = tf('s');
  5. G = 1 / ((s + 1) * (s + 2)); % 给定的被控对象传递函数
  6. % 定义目标函数(适应度函数)
  7. objective = @(pid) optimizePID(pid, G);
  8. % 遗传算法优化PID参数
  9. nvars = 3; % PID参数数量:Kp, Ki, Kd
  10. lb = [0, 0, 0]; % 参数下界
  11. ub = [10, 10, 10]; % 参数上界
  12. options = optimoptions('ga', 'Display', 'iter', 'PopulationSize', 100, 'MaxGenerations', 100);
  13. % 运行遗传算法
  14. [x, fval] = ga(objective, nvars, [], [], [], [], lb, ub, [], options);
  15. % 输出优化后的PID参数
  16. Kp = x(1);
  17. Ki = x(2);
  18. Kd = x(3);
  19. disp(['优化后的PID参数:Kp = ', num2str(Kp), ', Ki = ', num2str(Ki), ', Kd = ', num2str(Kd)]);
  20. % 构建PID控制器并验证闭环性能
  21. C = pid(Kp, Ki, Kd); % 使用MATLAB的pid函数构建PID控制器
  22. T = feedback(C * G, 1); % 闭环传递函数
  23. % 绘制阶跃响应
  24. figure;
  25. step(T);
  26. title('优化后的闭环阶跃响应');
  27. grid on;
  28. % 目标函数:优化PID参数
  29. function cost = optimizePID(pid, G)
  30.     % 在函数中重新定义传递函数变量s
  31.     s = tf('s');
  32.    
  33.     Kp = pid(1);
  34.     Ki = pid(2);
  35.     Kd = pid(3);
  36.     C = Kp + Ki / s + Kd * s; % 构建PID控制器传递函数
  37.     T = feedback(C * G, 1); % 闭环传递函数
  38.     % 获取阶跃响应的性能指标
  39.     info = stepinfo(T);
  40.     steadyStateValue = dcgain(T); % 计算稳态值
  41.     cost = info.Overshoot + info.SettlingTime + abs(1 - steadyStateValue); % 最小化超调、调节时间和稳态误差
  42. end
复制代码


遗传算法通过模拟生物进化过程,能够有效地优化PID控制器的参数。通过合理设计适应度函数和遗传操作,遗传算法可以在复杂的参数空间中找到最优解,从而显着提高PID控制器的性能



















免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4