【 PID 算法 】PID 算法基础

article/2025/9/17 15:02:01

前言:

这两天打算找个实习,奈何感觉自己有点菜,所以,就补习了一下知识,说一下,这个PID算法吧。

一、简介

PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。也就是说,PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。

顾名思义,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应用最为广泛的一种控制算法,该控制算法出现于20世纪30至40年代,适用于对被控对象模型了解不清楚的场合。实际运行的经验和理论的分析都表明,运用这种控制规律对许多工业过程进行控制时,都能得到比较满意的效果。PID控制的实质就是根据输入的偏差值,按照比例、积分、微分的函数关系进行运算,运算结果用以控制输出

二、闭环控制

这里有一个闭环控制与开环控制的概念,先说一下最简单的开环控制,就是不控制(好简单,哈哈哈)。

1. 开环控制

开环控制,就是控制回路不形成环,也就是,输出没有影响到输入的情况,输入只管输入,不依赖于输出。

这种情况下,可能系统由于外界干扰的等情况,导致输出并不是我们预期的输出,而是有一些偏差,这就不太好了。

在这里插入图片描述
粘一个知乎博主的图吧,就是如果想走到目标位置,由于外界影响走到了实际位置,但是因为是开环控制,输出并不会在行进过程中影响输入,也就是人并不会自动的根据输出来调整走的方向。这样就不太好。

2. 闭环控制

所谓闭环控制,就是输出影响输入,闭环控制是将输出量直接或间接反馈到输入端形成闭环、参与控制的控制方式。这样的话,当输出出现偏差的时候,就可以根据偏差来影响输入,进而调整下次输出的偏差。从而保持一种稳定情况。
在这里插入图片描述
如上图所示,假定在时刻T有:
输入【input(t)】、输出【output(t)】、误差【err(t) = input(t) - output(t)】、PID输出【u(t)】

系统真正的执行是执行的PID的输出值。系统的输出值,回到输入的地方,与当前时刻的输入进行误差计算,进而影响系统的执行过程。像这种输出影响输入的,就属于闭环控制。

如果上面开环控制部分:如果人的眼睛可以看到系统的执行输出,就可以影响人所进行的前进决策,从而调整系统的误差。这感觉就像形成了一个闭环控制。

三、PID算法的控制架构

在这里插入图片描述
如上图所示,就是PID算法的控制架构,它主要分为三个部分,并且这三个部分都是简单的相加就决定了u(t)。算是很简单的控制算法了。

接下来依次说一下:比例控制算法,积分控制算法,微分控制算法。

四、比例控制算法(P)

比例控制算法,我感觉应该是PID算法中比较核心的部分,感觉他是整个PID中的主力,至于其他的像积分控制算法,和微分控制算法,是为了消除误差,减少震荡。

如果在某一个环境中,如将水倒入水缸中,假设水缸的目的水位为1m,即r(t)为一个常量D=1m,

  1. 此时水缸为空,则当前的目的水位为0m,故此时误差e(t)为1m。此时的PID系统只有比例控制算法,故,u(t)=Kp * e(t),假设Kp为0.1,故此时u(t)为0.1m,将0.1m的水倒进水缸中去。
  2. 水缸中有了0.1m的水,此时的误差就为0.9m,故此时需要加入0.09m的水,可以想象,这里就是一个累加的过程,最终终将会将水缸倒满。

在理想状态下,其实有比例控制算法就完全可以满足要求,但是,如果水缸漏水怎么办,如每当你放入0.05m的水,水缸就漏0.05m的水,这就导致最后水缸是永远填不满的,并且水缸水位保持固定,这就导致了这个误差会是一个稳定值,称为稳态误差,也就是这个误差通过PID算法计算出来的u(t)完全没有起到作用。

( 在实际情况中,这种类似水缸漏水的情况往往更加常见,比如控制汽车运动,摩擦阻力就相当于是“漏水”,控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水”)

五、积分控制算法(I)

积分控制算法,就是为了消除稳态误差,由于积分是从0时刻一直积分到当前时刻 t,并且是对e(t)函数进行积分。

  1. 在到达节点位置之前,e(t)始终是正的,也就是它的积分始终是大于0的,如果系统存在稳态误差的话,由于误差一直不变,但是积分变呀,积分会一直积下去,之前的稳态误差是中和了比例控制算法的值,现在有一个一直增长的积分,导致每次u(t)的输出也在一直的增大,从而稳态误差就被消除了。到最后,误差为零了,而此时的e(t)也为0了,积分也就固定在某一个值了。从而每次的稳态误差就都可以被消除掉。
  2. 如果到达节点位置之后了,也就是冲过了节点的指定位置,这时候误差就变为了负的,然后由于积分正负可以相减,同样可以很好的适应这种情况。

六、微分控制算法(D)

用了积分控制算法,现在可以消除稳定误差了,但是考虑下面几种情况:

  1. 现在的情况是不存在稳态误差,但是存在积分控制算法,那么问题就出现了,当到达了目的位置后,哪怕误差已经是0了,但是积分控制算法那里还是一个整数,导致下一次输出u(t)仍然为一个整数,而不是0,这样的话,就会越过目的位置,虽然之后误差就变成了负数,又会回落回目的位置,但是这样始终是震荡的,而不是一直稳定下去。
  2. 在初始状态下,如果Kp或者Ki设置的过大,则会导致u(t)的变化幅度过大。

综上,在上述情况下,加入微分控制就很有必要,其实微分控制的作用就是防止幅度过大,导致震荡或者超调,微分就是为了在输出斜率变的太大之前,在系统中引入一个有效的早期修正信号。微分可以防止震荡。

当存在稳态误差的时候,由于微分对于常数的求导是0,故微分不能解决稳态误差的问题。单独使用意义不大,故需要与比例积分共同配合使用,构成PD或PID控制。

七、PID算法公式

PID算法公式如下图所示,Kp作用于所有的项,然后给积分部分再额外配一个系数,给微分项再额外配一个系数。
在这里插入图片描述

Kp —— 比例增益,Kp与比例度成倒数关系;
Tt —— 积分时间常数;
TD —— 微分时间常数;
u(t) —— PID控制器的输出信号;
e(t) —— 给定值 r (t) 与测量值之差。

这样再一看这个PID算法是不是就一目了然了呢。

接下来说一下公式推导。

1. 位置式

由于PID算法原型是连续函数,这样的一个操作在计算机中怕是不太行,所以需要将其离散化。从时刻0开始每隔 △t 时间间隔进行数据采样,则会形成下列一系列时间节点

(e0,e1,e2,e3 … ek)

相应的有

(u0,u1,u2,u3 … uk)

则有积分为离散化累加,微分为与上一时刻节点的连线斜率:
在这里插入图片描述

不过不影响理解,可以看到对于积分部分和微分部分,把 △t 都写成了T,然后把Kp都乘了进去 。然后对于以上的式子,给他们配一个统一的系数,即称积分部分为Ki,微分部分为Kd,则有如下式子:

在这里插入图片描述
这样的话,就清晰很多了,并且离散化的数值有利于计算机实现。

2. 增量式

这时设 △u(k) = u(k) - u(k-1) ,最终得到的增量式PID的离散公式如下:
在这里插入图片描述

八、结语

关于PID算法应该是超级简单的,下面我贴一个视频演示,以及两个我主要参考的博客吧。
在这里插入图片描述

PID控制算法原理(抛弃公式,从本质上真正理解PID控制)
简易PID算法的快速扫盲(超详细+过程推导+C语言程序)


http://chatgpt.dhexx.cn/article/D7EOHorn.shtml

相关文章

org.springframework.data.mapping.PropertyReferenceException: No property item found for type BItem!

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property item found for type BItem! 后来发现在Service层 PageRequest.of里排序的参数必须是 实体类字段 希望能帮助到您

5G NR PDSCH、PUSCH资源分配

通信就是把数据承载在特定的时间和频率上,传输到数据接收方,数据接收方在在相应的时间和频率上把数据接收下来。其实,把数据承载在哪个时间和频率上,对应的就是资源分配的过程。我们今天主要讨论5G NR中的资源分配过程。 目录 1…

电动汽车充电桩中的漏电保护应用分析 RCD的分类和选型

一、漏电流的产生分类 一般漏电流分为四种,分别为:半导体元件漏电流、电源漏电流、电容漏电流和滤波器漏电流 1、半导体原件漏电流 PN结在截止时流过的很微小的电流。D-S正向偏置,G-S反向偏置,导电沟道打开后,D到S才…

RuntimeError: expected scalar type Double but found Float

最近在使用 sequitur库 快速搭建自编码器时遇到 RuntimeError: expected scalar type Double but found Float 涉及代码 import torch from sequitur.models import LINEAR_AEmodel LINEAR_AE(input_dim300,encoding_dim20,h_dims[120, 60],h_activNone,out_activNone )mode…

报错:RuntimeError: expected scalar type Double but found Float

这个问题是深度学习,用pytorch跑的时候出现的 解决办法:这个是格式问题,希望的格式是double,但得到的是float。字面意思是这个,但是并不是非要把格式改成double,这个时候应该在出错的前面几处代码设个断点…

关于USB Type A/B/C的区别和基本知识

USB 1.0   USB规格第一次是于1995年,由Intel、IBM、Compaq、Microsoft、NEC、Digital、North Telecom等七家公司组成的USBIF(USB Implement Forum)共同提出,USBIF于1996年1月正式提出USB1.0规格,频宽为1.5Mbps.不过因为当时支持USB的周边装…

USB TYPE A B C 引脚定义

----------------------------------------------------------------------------------------------------------------------------------------------------------

认识USB-TYPEA/B/C/micro/mini

1、USB分类 标准 根据标准分类的话大致分为以下,不同协议对用户而言最大的区别就是速率上和物理上接口的区别,从USB3.2之后TYPE C就成为唯一支持的接口了,相较其他接口支持双通道传输。 接插件 按照物理接插件分类如下: 2、接插…

STM32硬件SPI通过fm17550读取身份证UID,识别银行卡,识别TYPEA与TYPEB

上面是我的微信和QQ群,欢迎新朋友的加入。 目录 1.硬件平台 2.驱动实现 3.循环扫卡测试程序 4.TYPEB射频卡扫描 5.TYPEA射频卡扫描 6.身份证UID读取 1.硬件平台 1.STM32F103FM17550 2.卡片类型:身份证、TYPEA/B卡、银行卡 2.驱动实现 1.硬件S…

PUSCH repetition type A

NR Rel-15/16学习笔记 PUSCH repetition type A概念解释repetition次数的配置方法Rel-15Rel-16 repetition type A与PUSCH 时域资源分配repetition type A 与PUSCH 跳频配置是否进行跳频跳频参数配置Intra-slot & Inter-slot 配置Frequency Hopping offset 配置根据offset计…

常见几种USB接口引脚定义,Type A、Type B、Micro USB、Mini USB、Type C

USB2.0母座接口分为有好几种类型,有A型、B型、Mini型等。 Type A S、S- 代表:电源线正、负 D、D- 代表:数据线正、负 Type B 多用于多媒体设备,最为常见的可能就是打印机的数据接口,多是用于数据的传输。 Micro …

GPON Type B保护

GPON TYPE B保护的组网图如图1所示,相应的保护范围包括OLT的主用和备用PON端口,主用和备用光纤。 场景一:PON口工作过程中主用光纤断,如图2所示。 Standby PON口在进入Standby状态后,启动上行光信号检测功能。 Active…

ISO/IEC 14443协议浅谈:TYPE A与TYPE B

ISO/IEC14443规定了邻近卡(PICC)的物理特性;需要供给能量的场的性质与特征,以及邻近耦合设备(PCDs)和邻近卡(PICCs)之间的双向通信;卡(PICCs)进入邻近耦合设备(PCDs)时的轮寻,通信初始化阶段的字符格式,帧结构,时序信息;非接触的半…

物联16:4 ISO/IEC 14443-3 防冲突、防碰撞算法、Type A、Type B

ISO/IEC14443-3 防冲突、防碰撞算法、TypeA、Type B 防冲突原理 1 前言 当2张或2张以上的同类型的PICC卡同时进入RF(Radio Frequency)区域时,多张卡同时接收到PCD机发出的查询命令。会根据卡上的控制逻辑,同时返回响应命令。这样就造成了卡…

5GNR漫谈9:PDSCH和PUSCH资源映射(频域type0/type1和时域typeA/typeB/typeC)

在漫谈6中,我们了解了PDSCH和PUSCH这两个信道,在将比特数据调制为复数的星座图符号后,映射到具体的时频资源位置。映射的具体过程由先频域后时域,即一个OFDM符号的RB子载波上映射完成后,再映射下一个OFDM符号的RB子载波…

Type-C与Type-A、Type-B接口

日常工作中,经常会接触到手机的接口。目前,在我们雨滴科技的ITAB-01工业平板上,USB(Universal Serial Bus)使用的接口是Type-C。Type系列的接口除了Type-C,还有Type-A和Type-B。 手机经过的一段时间的迅猛发…

USB:Type-A、Type-B、Type-C、miniUSB、microUSB接口类型区分

通用串行总线(universal serial bus,USB)自推出以来,成功替代串口和并口,已经成为计算机和各种设备不可或缺的接口。 USB的优点不用多说,网上有很多,今天主要小结一下USB的各种接口类型,避免被各种各样的U…

安卓开发之WebView的使用

文章预览 前言1.什么是WebView?2.相关方法 一、WebView简单使用1.1、环境准备1.2、MyWebChromClient.java1.3、MyWebViewClient1.4、MainActivity.java1.5、activity_main.xml 二、效果预览 前言 1.什么是WebView? Android内置webkit内核的高性能浏览器…

安卓WebView的使用

一、WebView简介 WebView是Android中的原生UI控件,主要用于在app应用中方便地访问远程网页或本地html资源。同时,WebView也在Android中充当Java代码和JS代码之间交互的桥梁。实际上,也可以将WebView看做一个功能最小化的浏览器。 安卓官方Web…

安卓WebView(H5)调用原生相机及相册

在开始叙述正文之前笔者先声明一下应用场景:例如在网页上的即时通讯需要能拍照或者从图库选择图片来进行上传,此场景下就可以用到这篇文章的内容 正文 首先,如果你已经把相机以及访问文件夹的权限都加上了并且WebView的基础操作都做完了,就差…