PID输出反馈回路调控算法原理

news2024/10/5 23:31:03

本文章学习研究PID闭环回路控制算法,介绍帮助大家理解这个算法,希望看后觉得有用就三连支持一下。

目录

认识PID:

PID算法知识理论学习:

 首先看PID原理的框图:

一、比例算法P:

二、积分算法I:

三、微分算法D:


 

认识PID:

PID算法的应用领域:

PID算法主要运用在自动控制系统中,常见的领域包括工业控制、机器人控制、航空航天、汽车控制、水处理、温度控制、流量控制等。

PID算法可以根据系统的反馈信号来实时调整控制参数,使系统的输出能够快速稳定地达到预期值。通过PID算法的应用,可以提高系统的稳定性、精度和响应速度,从而实现自动控制。

PID算法的输入一般就俩个:是当前反馈传感器的值与用户设定值,然后根据俩者的误差,直接计算出其期望功率,从而加快或减少电机转速.

PID算法知识理论学习:

 首先看PID原理的框图:

从这个图中我们了解到,整个计算过程其实是对于“误差”,来进行一系列计算的,输入也只要有设定值Sv与反馈值Pv,它的输出计算是根据历史、当前、趋势来进行计算的,参照传感器数据达标与否,用户设定值与其误差为多少,来进行输出上的自动调整,整个流程从而形成回路

现在我们通过传感器采样从开机以来所有采样点的数据序列(理论上时间间隔越短越好)

X1、X2、... 、Xn-1、Xn ,然后从这三方面挖掘PID的三个算法原理:

 

以下是网上找的图,可以对照看看:

其中R(t)是设定,U(t)是输出,C(t)是传感器反馈

 

一、比例算法P:

公式:Pout=Kp*Ek  其中( Ek=Sv-Xk

Ek是误差的意思,Sv是用户设定值,Xk是传感器传回的数据,Kp是一个比例,是需要根据实际情况进行调整的。

 

原理:

这个算法是直接根据误差来进行比例上的计算,将误差乘以比例,直接输出,误差有三种情况:

Ek>0:当前未达标、Ek=0:正好达标、Ek<0:当前超标。根据这三种情况,比例性地放大、缩小偏差值。

系统上会控制输出更快速得接近目标值

单独使用的缺点:

因为Pout=Kp*Ek  ,所以 Ek=0:正好达标时,输出也为0,有误差才起左右,没误差就不动了。

系统上体现单独使用容易产生震荡:

下图为震荡的演示:

比例过大导致起初有许多超调,这个图的演示其实不太准确,但大致表现出单独的比例算法对于物理惯性的稳定方面有所劣势:

 

二、积分算法I:

 公式:Iout=Ki*Sk  其中( Sk=E1+E2+...+Ek-1+Ek

 Sk是指开机以来的偏差的相加的值,Ki是积分的比例,是需要根据实际情况进行调整的。

 

原理:

这个算法累加过去的误差,根据历史值来计算输出。过去总体未达标:给增强信号,过去整体超标:给减弱信号,累计误差有三种情况:

 Sk>0:过去整体不达标, Sk=0:过去整体达标, Sk<0:过去整体超标

系统上会累计减小误差

单独使用的缺点:

Sk=0,就会无输出

过多的累计历史误差,会有历史遗留问题,有些历史误差是不需要过多被累计的

三、微分算法D:

 公式:Dout=Kd*Dk  其中( Dk=Ek-Ek-1

Dk是指最近俩次偏差值的相减,预示着一种趋势

原理:

微分考虑最近的俩次偏差值,获取一种趋势;

Dk>0:上升趋势,Dk=0:不变趋势,Dk<0:下降趋势

系统上,D算法可以抵消P算法单独使用带来的计算溢出,但调整不当会有反冲现象:

 下图为反冲的演示:

D算法占比过大,大致演示反冲,图不准确,但大致是这意思~

 

单独使用的缺点:

 这个没法单独使用

调整PID有关思路:

齐格勒—尼克尔斯经验法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

new Vue () 中的 render 函数与 templete 模板

首先新建一个空的 Vue 项目&#xff0c;我们会在 main.js 文件中发现如下代码 import Vue from vue import App from ./App.vue// 关闭vue的生产提示 Vue.config.productionTip falsenew Vue({render: h > h(App), }).$mount(#app) $mount(#app) &#xff1a;可以参考之前…

Git使用--多人协作

多人协作 多⼈协作git branch -rgit checkout -b dev origin/dev 远程分⽀删除后&#xff0c;本地git branch -a依然能看到的解决办法git remote show origingit remote prune origin 多⼈协作 截止到目前&#xff0c;我们学习了如下Git的相关知识&#xff1a; 基本完成Git的…

Wireshark抓包验证TCP协议的三次握手与四次挥手

TCP的基本知识与Wireshark TCP的一些先知知识可以看下面的文章&#xff0c;了解TCP协议的基本原理&#xff0c;与报文的首部格式。 https://blog.csdn.net/weixin_52308622/article/details/131141490?spm1001.2014.3001.5501 https://blog.csdn.net/weixin_52308622/artic…

30天自制操作系统 day2 换种方式制作磁盘镜像 makefile

制作磁盘镜像工具 用的是它自己写的工具&#xff0c;叫edimg。使用方式如下 edimg imgin:../z_tools/fdimg0at.tek wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img读取fdimg0at.tek&#xff0c;在读取ipl.bin&#xff0c;从ipl.bin的开头读512个字节到fdim…

《TCP IP网络编程》第八章

第 8 章 域名及网络地址 DNS 是对IP地址和域名进行相互转换的系统&#xff0c;其核心是 DNS 服务器。域名就是我们常常在地址栏里面输入的地址&#xff0c;将比较难记忆的IP地址变成人类容易理解的信息。 计算机内置的默认DNS服务器并不知道网络上所有域名的IP地址信息。若该DN…

第 355 场 LeetCode 周赛

A 按分隔符拆分字符串 简单模拟 class Solution { public:vector<string> splitWordsBySeparator(vector<string> &words, char separator) {vector<string> res;for (auto &s: words) {int n s.size();for (int i 0, j 0; i < n;) {while (j …

C++——String类的增删查改

目录 前言 1.String类的增删查改 1.1增 实验代码&#xff1a; 运行结果&#xff1a; 实验代码&#xff1a; 运行结果:​编辑 1.2删 实验代码&#xff1a; 结果: 1.3查找 练习&#xff1a;查找文件后缀 运行结果&#xff1a; 1.4 改 前言 上篇博客中&#xff0c;我介绍了St…

VisualStudio如何进行插件开发?

文章目录 0.引言1.工具准备2.创建插件项目&#xff08;VSIX&#xff09;3.自定义VSIX属性4.创建一个command命令5.设置command名称6.编写command功能7.调试插件8.安装插件 0.引言 使用Visual Studio插件可以极大地提升开发效率、提供更好的集成环境、丰富扩展生态系统、方便调试…

【团队协作开发】IDEA中Git新建自己的dev工作分支,合并到master主分支教程(极其简单,新手)

文章目录 一、创建新dev工作分支二、push到自己的远程dev工作分支三、工作分支合并到master主分支1、先切换到master主分支2、将远程工作dev分支的内容merge到当前master分支中3、将merge提交到远程master分支 一、创建新dev工作分支 创建完新dev分支以后将默认切换到新dev分支…

K8S 证书过期后,kubeadm 重新生成证书

前言 K8S 各个组件需要与 api-server 进行通信&#xff0c;通信使用的证书都存放在 /etc/kubernetes/pki 路径下&#xff0c;kubeadm 生成的证书默认有效为 1 年&#xff0c;因此需要定时更新证书&#xff0c;否则证书到期会导致整个集群不可用。 本篇文章主要介绍如何通过 k…

openGauss学习笔记-17 openGauss 简单数据管理-表达式

文章目录 openGauss学习笔记-17 openGauss 简单数据管理-表达式17.1 简单表达式17.2 条件表达式17.3 子查询表达式17.4 数组表达式17.5 行表达式 openGauss学习笔记-17 openGauss 简单数据管理-表达式 表达式类似一个公式&#xff0c;我们可以将其应用在查询语句中&#xff0c…

SpringMVC注解介绍(二)

目录 1.RequestPart上传文件 2.获取Cookie 1.使用CookieValue 3.获取Session 3.1SessionAttribute 4.设置Session 4.1HttpSession设置Session 5.获取Header 5.1RequestHeader 6.返回数据 1.返回Json对象 7.请求转发或请求重定向 7.1forward和redirect区别 7.2请求…

element的el-upload实现多个图片上传以及预览与删除

<el-form-itemlabel"实验室照片:"prop"labUrlList"v-if"ruleForm.labHave"><el-upload:action"urlUpload":headers"loadHeader"list-type"picture-card":file-list"ruleForm.labUrlList"class…

LabVIEW在IMAQ图像中手动选择多个ROI

LabVIEW在IMAQ图像中手动选择多个ROI 设计了一个VI&#xff0c;用于在图像上生成和叠加一系列感兴趣区域&#xff08;ROI&#xff09;&#xff0c;并在IMAQ图像控件中显示它们。想挑选其中的一些进行后续处理。可以在控件中手动选择 ROI 吗&#xff1f; 以编程方式生成的 ROI…

MYSQL练习二答案

练习2答案 构建数据库 数据库 数据表 answer开头表为对应题号答案形成的数据表 表结构 表数据 答案&#xff1a; 1、修改emp表中sal字段为salary SQL语句 ALTER TABLE emp change sal salary double结果&#xff1a; 2、查找年薪在20000到30000之间的所有员工信息并按照 工…

Vue中scoped样式

scoped样式&#xff1a; 作用&#xff1a;让样式在局部生效&#xff0c;防止冲突 写法&#xff1a;<style scoped> 目录结构: Student.vue: 中的背景颜色设置的orange橙色 <template><div class"demo"><h2>学生姓名&#xff1a;{{name}}<…

文本预处理——文本张量表示方法

目录 文本张量表示one-hot编码word2vecword embedding 文本张量表示 one-hot编码 word2vec word embedding

四,Eureka 第四章

2.1.3 增加依赖 <!--添加依赖--><dependencies><!--Eureka Server--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>&l…

uniapp app nfc读取IC卡数据

先勾选权限 判断当前设备是否支持NFC以及是否打开了NFC功能 var main plus.android.runtimeMainActivity(); var NfcAdapter plus.android.importClass("android.nfc.NfcAdapter"); var _nfcAdapter NfcAdapter.getDefaultAdapter(main); console.log(NFC,_nfcA…

43:Three.js - 中

一、相机 相机&#xff0c;类似于眼睛&#xff0c;用于在3D舞台中&#xff0c;放置在不同的位置&#xff0c;实现通过不同的角度观察物体。 查看 Three.js 的文档&#xff0c;可以看到 Camera 是一个抽象类&#xff0c;一般不直接使用&#xff0c;其他类型的 Camera 实现了这个…