临界比例法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+sKi+Kd⋅s 是一个非因果模型,因为它的分子(Kd⋅s)的阶数高于分母(1)的阶数。因此,不能直接使用 "zoh"、"foh" 或 "impulse" 方法来转换PID控制器。
具体编码:
注意PID的参数可以逐步添加。
% 定义闭环传递函数 G(s)
s = tf('s'); % 定义传递函数变量s
G = 1 / ((s + 1) * (s + 2)); % 给定的闭环传递函数% 定义PID控制器
% PID控制器的传递函数为:C(s) = Kp + Ki/s + Kd*s
%----这里可调整,从进行PID参数整定-------------
Kp = 5; % 比例增益
% Ki = 0.1; % 积分增益
% Kd = 0.01; % 微分增益
C = Kp + Ki / s + Kd * s; % PID控制器传递函数% 将连续时间系统转换为离散时间系统
Ts = 0.1; % 采样时间
% PID 不能用c2d函数,可用 双线性变换.PID控制器 C(s)=Kp+
%s Ki +Kd⋅s 是一个非因果模型,因为它的分子(Kd⋅s)的阶数高于分母(1)的阶数。
Gz = c2d(G, Ts, 'zoh'); % 使用零阶保持(ZOH)方法进行转换
% Cz = c2d(C, Ts, 'zoh'); % 使用零阶保持(ZOH)方法进行转换Cz = c2d(C, Ts, 'tustin');% 双线性离散% 闭环系统
Tz = feedback(Cz * Gz, 1); % 闭环传递函数,单位反馈
% 仿真时间
t = 0:Ts:10; % 仿真时间从0到10秒,步长为采样时间Ts% 仿真阶跃响应
figure;
step(Tz, t); % 绘制离散时间系统的阶跃响应
title('阶跃响应');
xlabel('时间/秒');
ylabel('响应');
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)
-
将积分增益(Ki)和微分增益(Kd)设置为0,仅使用比例增益(Kp)。
-
逐步增加Kp,直到系统的输出开始出现持续振荡。
-
记录此时的比例增益值,称为临界增益(Ku),以及振荡的周期,称为临界周期(Pu)。
2. 根据Ziegler-Nichols公式计算PID参数
根据Ziegler-Nichols方法,PID参数可以通过以下公式计算:
-
比例增益(Kp):Kp=0.6×Ku
-
积分增益(Ki):Ki=2×Kp/Pu
-
微分增益(Kd):Kd=Kp×Pu/8
示例
假设通过实验,你发现系统的临界增益(Ku)为2.5,临界周期(Pu)为1.5秒。(测试应该为KU=32,PU=1.1,我无法在推荐的参数获得结果)
根据上述公式,可以计算出PID参数:
-
Kp=0.6×2.5=1.5
-
Ki=2×1.5/1.5=2.0
-
Kd=1.5×1.5/8=0.28125
他们没有使用ZOH。。
% 定义闭环传递函数 G(s)
s = tf('s'); % 定义传递函数变量s
G = 1 / ((s + 1) * (s + 2)); % 给定的闭环传递函数% 定义PID控制器
Kp = 1.5; % 比例增益
Ki = 2.0; % 积分增益
Kd = 0.28125; % 微分增益
C = Kp + Ki / s + Kd * s; % PID控制器传递函数% 闭环系统
T = feedback(C * G, 1); % 闭环传递函数,假设单位反馈% 仿真时间
t = 0:0.01:10; % 仿真时间从0到10秒,步长为0.01秒% 仿真阶跃响应
figure;
step(T, t); % 绘制闭环系统的阶跃响应
title(strcat('阶跃响应 KP=', num2str(Kp),',Ki=',num2str(Ki),'Kd=',num2str(Kd) ));
xlabel('时间 (秒)');
ylabel('响应');
grid on;
5 上pidtune工具包
pidtune
是 MATLAB 中用于自动调整 PID 控制器参数的工具,其工作原理基于系统模型的分析,通过优化算法平衡控制系统的性能和鲁棒性。以下是 pidtune
的工作原理及使用方法的详细说明:
pidtune
的工作原理
-
系统模型分析:
-
pidtune
首先需要一个线性时不变(LTI)模型,如传递函数(tf
)或状态空间(ss
)模型。 -
它通过分析系统的开环特性(如增益、相位、零点和极点)来确定合适的 PID 参数。
-
-
性能与鲁棒性平衡:
-
pidtune
通过优化算法自动调整 PID 参数,以实现快速响应(性能)和足够的稳定裕度(鲁棒性)。 -
用户可以通过指定目标带宽(
wc
)或相位裕度等参数,进一步调整控制系统的性能。
-
-
控制器类型选择:
-
pidtune
支持多种控制器类型,包括 PI、PD、PID、PIDF(带微分滤波器)以及两自由度(2-DOF)PID 控制器。 -
用户可以根据系统需求选择合适的控制器类型。
-
-
交互式调整:
-
在 MATLAB 的 Live Editor 中,
pidtune
提供了交互式调参功能,用户可以实时调整控制器性能,并生成相应的 MATLAB 代码
-
使用 pidtune
的基本步骤
-
定义系统模型:
-
使用
tf
或ss
创建系统的传递函数或状态空间模型。
matlab复制
sys = tf([1], [1, 3, 2]); % 示例传递函数
-
-
调用
pidtune
:-
指定控制器类型(如
'PI'
、'PID'
等),pidtune
将返回优化后的 PID 参数。
matlab复制
[C, info] = pidtune(sys, 'PID'); % 自动调整 PID 参数
-
-
分析结果:
-
返回的
C
是优化后的 PID 控制器对象,info
包含闭环稳定性、带宽和相位裕度等信息。
matlab复制
disp(C); % 显示 PID 参数 disp(info); % 显示性能和鲁棒性信息
-
-
高级选项:
-
用户可以通过
pidtuneOptions
设置更多选项,如目标带宽、相位裕度等。
matlab复制
opts = pidtuneOptions('CrossoverFrequency', 1.5, 'PhaseMargin', 60); C = pidtune(sys, 'PID', opts);
-
-
验证性能:
-
使用
step
或bode
函数验证闭环系统的阶跃响应或频率响应。
-
step(feedback(C * sys, 1));
代码
% 定义系统传递函数
s = tf('s');
G = 1 / ((s + 1) * (s + 2));% 使用pidtune自动整定PID参数
[pid, info] = pidtune(G, 'PID');% 查看整定后的PID参数
disp('整定后的PID参数:');
disp(pid);% 绘制闭环阶跃响应
T = feedback(pid * G, 1);
step(T);
title('自动整定后的闭环阶跃响应');
6 GA算法
6.1. 遗传算法(GA)的基本原理
遗传算法是一种模拟生物进化过程的优化算法,通过选择、交叉和变异等操作,逐步逼近问题的最优解。其基本流程包括以下几个步骤:
-
初始化种群:随机生成一组初始解,每个解称为一个“个体”或“染色体”,通常用一组参数表示。
-
计算适应度:对每个个体计算其适应度(fitness),适应度函数通常根据问题的目标来评估个体的优劣。
-
选择操作:根据适应度选择优秀的个体,适应度高的个体有更大的概率被选中,用于生成下一代。
-
交叉操作:随机选择两个个体,通过某种方式交换部分基因,生成新的个体。
-
变异操作:对新生成的个体进行随机的小幅度变异,以增加种群的多样性,防止算法陷入局部最优。
-
终止条件判断:如果满足终止条件(如达到最大迭代次数或适应度达到预设阈值),则停止迭代,否则返回步骤2。
6.2. 遗传算法在PID参数优化中的应用
PID控制器的性能依赖于其三个参数:比例增益(Kp)、积分增益(Ki)和微分增益(Kd)。遗传算法可以通过优化这些参数来提高PID控制器的性能。
具体步骤如下:
-
初始化种群:随机生成一组PID参数(Kp、Ki、Kd),作为初始种群。
-
计算适应度:对每个个体(一组PID参数),构建PID控制器并计算闭环系统的性能指标(如超调量、调节时间、稳态误差等)。通常使用积分平方误差(ISE)或积分绝对误差(IAE)作为适应度函数。
-
选择操作:根据适应度选择优秀的个体,适应度高的个体有更大的概率被选中。
-
交叉操作:随机选择两个个体,交换部分参数值,生成新的个体。
-
变异操作:对新生成的个体进行随机的小幅度变异,例如随机调整Kp、Ki或Kd的值。
-
终止条件判断:如果满足终止条件(如达到最大迭代次数或适应度达到预设阈值),则停止迭代,输出最优的PID参数。
6.3 实现代码
% 清除变量和关闭所有图形窗口
clear; close all;% 定义被控对象 G(s)
s = tf('s');
G = 1 / ((s + 1) * (s + 2)); % 给定的被控对象传递函数% 定义目标函数(适应度函数)
objective = @(pid) optimizePID(pid, G);% 遗传算法优化PID参数
nvars = 3; % PID参数数量:Kp, Ki, Kd
lb = [0, 0, 0]; % 参数下界
ub = [10, 10, 10]; % 参数上界
options = optimoptions('ga', 'Display', 'iter', 'PopulationSize', 100, 'MaxGenerations', 100);% 运行遗传算法
[x, fval] = ga(objective, nvars, [], [], [], [], lb, ub, [], options);% 输出优化后的PID参数
Kp = x(1);
Ki = x(2);
Kd = x(3);
disp(['优化后的PID参数:Kp = ', num2str(Kp), ', Ki = ', num2str(Ki), ', Kd = ', num2str(Kd)]);% 构建PID控制器并验证闭环性能
C = pid(Kp, Ki, Kd); % 使用MATLAB的pid函数构建PID控制器
T = feedback(C * G, 1); % 闭环传递函数% 绘制阶跃响应
figure;
step(T);
title('优化后的闭环阶跃响应');
grid on;% 目标函数:优化PID参数
function cost = optimizePID(pid, G)% 在函数中重新定义传递函数变量ss = tf('s');Kp = pid(1);Ki = pid(2);Kd = pid(3);C = Kp + Ki / s + Kd * s; % 构建PID控制器传递函数T = feedback(C * G, 1); % 闭环传递函数% 获取阶跃响应的性能指标info = stepinfo(T);steadyStateValue = dcgain(T); % 计算稳态值cost = info.Overshoot + info.SettlingTime + abs(1 - steadyStateValue); % 最小化超调、调节时间和稳态误差
end
遗传算法通过模拟生物进化过程,能够有效地优化PID控制器的参数。通过合理设计适应度函数和遗传操作,遗传算法可以在复杂的参数空间中找到最优解,从而显著提高PID控制器的性能
相关文章:

临界比例法PID调整-附带pidtune工具和GA算法
代码已上传:计算机控制系统PID参数整定法资源-CSDN文库 1背景 为了模拟PID参数整定,把教材上的案例进行分析。 1题目 单位闭环传递函数,开环传函G(s)1/((s1)(s2)), Ts0.1s, PID调整器输出后,接零阶保持器ZOH。 2 代码 PID含积…...

LabVIEW基于双通道FFT共轭相乘的噪声抑制
对于双通道采集的含噪信号,通过FFT获取复数频谱后,对第二通道频谱取共轭并与第一通道频谱相乘,理论上可增强相关信号成分并抑制非相关噪声。此方法适用于通道间信号高度相关、噪声独立的场景(如共模干扰抑制)。以下为L…...

小程序SSL证书过期怎么办?
SSL证书就像小程序的“安全锁”,一旦过期,用户访问时会被提示“不安全”,轻则流失客户,重则数据泄露!作为企业负责人,如何快速解决证书过期问题?又该如何避免再次踩坑?这篇指南给你答…...
ELK日志分析实战
ELK日志分析实战:从异常流量定位提权攻击 摘要:本文通过模拟真实攻防场景,结合ELK技术栈(ElasticsearchLogstashKibana),演示如何从海量服务器日志中快速定位异常流量并追踪提权攻击行为。包含完整的日志收…...

阿里云操作系统控制台实战评测:提升云资源管理与监控效率
文章目录 前言产品介绍操作系统控制台体验阿里云操作系统开通 帮助与总结建议 前言 随着云计算和虚拟化技术的发展,操作系统控制台作为运维管理的核心工具之一,在现代IT环境中发挥着越来越重要的作用。它提供了一种更加直观、高效的方式来管理操作系统&…...

Docker构建启动jar包
Docker构建启动jar包 1、首先是把java服务打包成jar包 mvn clean install -Dmaven.skip.testtrue package -Pprod这个命令的意思是,跳过测试,打包prod环境。 2、编写Dockerfile文件 # 拉取jdk8作为基础镜像 FROM registry.supos.ai/library/openjdk:…...

微信小程序使用的SSL证书在哪里申请?
在数字化时代,微信小程序已成为众多企业和个人开发者触达用户的重要平台。然而,随着网络安全威胁的日益严峻,确保小程序数据传输的安全性显得尤为重要。SSL证书,作为加密通信的基石,是保障小程序安全不可或缺的一环。 …...

基于langchain+llama2的本地私有大语言模型实战
Langchain功能 LangChian 作为一个大语言模型(LLM, Large Language Model)开发框架,是 LLM 应用架构的重要一环。借助 LangChain,我们可以创建各种应用程序,包括聊天机器人和智能问答工具。 AI模型:包含各…...

如何使用postman来测试接口
一、postman的介绍与下载 可参考: https://blog.csdn.net/freeking101/article/details/80774271 二、api获取网站 阿里云API应用市场 地址:云市场_镜像市场_软件商店_建站软件_服务器软件_API接口_应用市场 - 阿里云 三、具体测试过程 可模拟浏览…...
深入剖析B树、B+树与B*树:从二叉树到多叉树的演进
引言 在计算机科学中,树结构是数据存储和检索的核心工具之一。从二叉树到二叉排序树,再到平衡二叉树,我们已经看到了这些数据结构在高效处理数据方面的优势。然而,随着数据量的爆炸式增长,二叉树的局限性逐渐显现出来…...
《算法篇:三数之和问题的两种解法》
问题描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 给定数组 nums [-1, 0,…...

【2025】基于springboot+uniapp的乡村旅游小程序系统统(源码、万字文档、图文修改、调试答疑)农家乐预约
乡村旅游小程序系统通过 Spring Boot 与 uniapp 技术栈的深度整合,为乡村旅游产业打造了一个功能全面、交互流畅、性能稳定的综合服务平台。系统根据不同角色(管理员、商家、用户)的业务需求,提供了针对性的功能模块,实…...
DeepSeek Kimi详细生成PPT的步骤
以下是使用 DeepSeek 和 Kimi 协作生成 PPT 的详细步骤,结合了两者的优势实现高效创作: 第一步:使用 DeepSeek 生成 PPT 大纲或内容 明确需求并输入提示词 在 DeepSeek 的对话界面中,输入具体指令,要求生成 PPT 大纲或…...

【Film】MM-StoryAgent:沉浸式叙事故事书视频生成,具有跨文本、图像和音频的多代理范式
MM-StoryAgent:沉浸式叙事故事书视频生成,具有跨文本、图像和音频的多代理范式 https://arxiv.org/abs/2503.05242 MM-StoryAgent: Immersive Narrated Storybook Video Generation with a Multi-Agent Paradigm across Text, Image and Audio The rapid advancement of larg…...

Tweak Power:全方位电脑系统优化的高效工具
在日常使用电脑时,系统性能的下降、垃圾文件的堆积以及硬盘的老化等问题常常困扰着用户。为了提升电脑性能、优化系统运行,许多人会选择系统优化工具。然而,国内一些系统优化软件常常因为广告过多或功能冗杂而让人望而却步。此时,…...

LVDS系列3:Xilinx的IOBUFDS原语
前面两节讲解了差分转单端的IBUFDS原语和单端转差分的OBUFDS原语,今天来讲一个同时带有两者功能的原语IOBUFDS; 前述的IBUFDS原语只能接收外部差分信号,此时连接管脚为input管脚,OBUFDS只能向外部输出差分信号,此时连接…...

Git和GitHub基础教学
文章目录 1. 前言2. 历史3. 下载安装Git3.1 下载Git3.2 安装Git3.3 验证安装是否成功 4. 配置Git5. Git基础使用5.1 通过Git Bash使用5.1.1 创建一个新的仓库。5.1.1.1 克隆别人的仓库5.1.1.2 自己创建一个本地仓库 5.1.2 管理存档 5.2 通过Visual Studio Code使用 6. Git完成远…...
Django-ORM-select_related
Django-ORM-select_related 作用使用场景示例无 select_related 的查询有 select_related 的查询 如何理解 "只发起一次查询,包含所有相关作者信息"1. select_related 的工作原理2. 具体示例解析3. 为什么只发起一次查询 数据库中的books量巨大࿰…...
蓝桥杯 k倍区间
题目描述 给定一个长度为 NN 的数列,A1,A2,⋯ANA1,A2,⋯AN,如果其中一段连续的子序列 Ai,Ai1,⋯AjAi,Ai1,⋯Aj ( i≤ji≤j ) 之和是 KK 的倍数,我们就称这个区间 [i,j][i,j] 是 K 倍区间。 你能求出数列中总共有多少个 KK 倍区间…...

数据结构(蓝桥杯常考点)
数据结构 前言:这个是针对于蓝桥杯竞赛常考的数据结构内容,基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中,时间复杂度不能超过10的7次方(1秒)到10的8次方(2秒) 空间限制&#x…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...