深入详解PID三项的作用与特性(抛开公式,以常识认识PID)

2023-05-16

深入探讨PID三项作用与特性(纯以常识方式对PID进行数学理论分析)

1. 经典PID的理解(抛弃公式,以常识认识PID) 源文献

  PID指的就是比例、积分、微分三项的结合,其中比例项输入的是误差值、积分项输入是误差值的累加、微分项输入的是误差

的变化。例如水缸的目标水位是1米,现在的水位是0.2米,那现在的水位跟目标水位相差1-0.2=0.8;也就是误差值 E为0.8。

  第一次加水后水位上升到0.6米,那么加水后的误差值E为:1-0.6=0.4;加水后的误差累加值Ec为:0.8+0.4=1.2;加水

后的误差变化值Ed为:0.4-0.8=-0.4;

  以上就列举了PID各项的输入值来源。接下来就以简单的例子开始讲解各项的调节作用:

  下面三个链接其实是一样的:点击任意一个即可,对PID完全陌生的建议了解一下PID各项的作用再回来接着往下看:

比例控制的作用:在此就不多赘述,移步到这看吧:比例调节作用

积分控制的作用:在此就不多赘述,移步到这看吧:积分调节作用

微分控制的作用:在此就不多赘述,移步到这看吧:微分调节作用

  看到了这里对PID三项的作用有所了解了吧!个人觉得他文章里面对微分作用的解析不太好理解。我再解析一下。

  微分项具有超前调节的作用,那么他是怎么实现超前调节的呢?回到本文开头,谈到的微分项输入值Ed是加水后水位与目

标水位的差值0.4减去未加水水位与目标水位的差值0.8等于-0.4,其物理意义就是测量到了误差的变化率,负号表示以目前的水位上升趋势

来说过快了,需要将水位上升速度减缓(过快可能存在某一个时刻水位超过1米,那么微分就显得有作用了),那么微分项就会将本次加水

量在比例和积分基础上减小一点,让本次加水少一点,减缓水位上涨的速度。(暂且这么理解吧!微分就是抑制瞬态变化过程)

  至此,PID数学表达式和其物理意义的作用大概也烂熟于心了。

总结来说:

  比例的作用是根据偏差量成比例的调节系统控制量,减少偏差,比例越大,系统调节越快,过大会造成过调(产生震荡),比

例小,系统调节慢,过小达不到目标值(静态误差)。若想系统响应尽量快的情况下,尽量让系统不会震荡。整定比例很重要。

  积分的作用,仅仅是消除比例作用下的误差。积分只是辅助作用,若积分项参数太大会给系统引入震荡,过小消除不了静态误差。

  微分作用是根据偏差的变化趋势调节系统控制量,在偏差发生较大变化前引入一个早期的校正。一般来说大多数系统用到比例

和积分就足够了,引入微分作用过强会引入震荡。

2. 再说PID

  我是看完这篇文献才下决心写这篇文章记录自己学习的成果,如果你跟我一样有耐心,花一天时间仔细看看这个文献:由入门到精通吃透PID

  PID的一个最重要的核心就是系统输出量与系统偏差的关系,我们希望通过控制系统的输出量减小系统的误差。

比例环的输出特性

  老生常谈,比例调节就是将系统的误差乘以一个比例增益作为系统的输出,偏差就是系统测得的值减去我们设定的目标值;比

如我们小车现在车速是10米/秒,我们设定的目标是3米/秒,那么他的动态偏差就是7米/秒。

用一个数学表达式即为:系统输出量 = 比例增益 * 动态偏差

  根据这个概念性的公式我们可以知道,系统的输出形成的波形与动态偏差的波形100%相似,所有的波峰、零点以及波谷都发生

在同一时刻。单纯的比例调节具有很好的跟随性。

积分环的输出特性

  只要系统存在误差,那么积分项都会按照一定的频率将误差累加起来。跟比例项一样我们列出一个概念性的公式:***系统输出

量 = 积分增益 * 偏差的积分***,那么:偏差的积分 = 偏差的积分 + 动态偏差。动态偏差即是实时的偏差的意思。

  分析上面两个公式,积分增益为一常数,系统的输出量只与偏差的积分有关,那么积分项的输出波形是否跟比例项一样都是与

动态偏差的波形100%相似呢?答案是否定的。系统输出的波形至于偏差的积分有关,偏差的积分什么时候达到最大值,系统输出就达到最

大即系统输出波形达到波峰。从第二个公式可以看出,偏差的积分是动态偏差的累加,假设现在有一个震荡的系统,观察下图:在这里插入图片描述

  t1时刻之后系统开始存在偏差,此时偏差开始积分;t2时刻,系统测量值达到最大值,即系统偏差达到最大值。观察上图,在t1

到t3时间内,测量值曲线很明显都高于目标值,那么在这段时间内偏差为正值,积分项会在这段时间内越加值越大,直至t3时刻积分项达到

最大值,即偏差的积分到达波峰,但此时动态偏差处于零点位置,按照理想的系统,当系统偏差为0时,我们希望系统的输出量也为0,但是

在这时候,积分项达到最大值,系统输出也会达到积分最大值作用于系统,那就是说积分项的输出量滞后于系统的偏差。滞后的时间为t3-

t2。反观t2时刻,系统偏差达到最大值,而积分项到t3时刻才达到最大值,这也说明积分项的滞后性。从数学图形的立场上看,积分即使对

图形求面积,t3时刻积分项的值就是在t1到t3时间内系统误差与目标值围起来的面积。

微分环的输出特性

  微分项的作用就如前面所说,具有超前调节的作用,抑制瞬态变化,但微分项需要掌控它的微分时间以及微分项系数的大小,

过大会引起系统震荡,过小系统收敛不够快。

  本文主要阐述pid三项的作用,以及三项的特性,最难懂得就是积分项导致系统的滞后性。

  整定PID参数的方法是先将系统设置为纯比例控制系统,即令Pi=Pd=0;比例系数由小到大逐渐增加,增加到系统刚好出现震荡

(大幅低频震荡)记录此时比例系数为Km;下面列出三个参数的数学公式:

Kp = 0.6Km (也可以是Kp=0.8Km,主要看哪个让系统更稳定)
Ki = Kp* π π π / ω
Kd = Kp* π π π / ( 4*ω )

  其中Km是系统刚好震荡是的比例系数,ω为系统震荡时极坐标下的震荡频率。

  以上是本人的一点小见解,如有纰漏,不正确的地方,还请指教!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入详解PID三项的作用与特性(抛开公式,以常识认识PID) 的相关文章

  • 单相Boost功率因数校正电路(PFC)设计与仿真(Simulink & Saber):第一章 PFC基础知识与电路参数设计

    写在前面 教程是根据Mathworks公司的有源功率因数校正教程 点这里跳转 和那日沙等老师编著的 电力电子 电机控制系统的建模及仿真 改写的 设计思路基本与之一致 嫌看文章麻烦的同学可以直接跳转看视频和查阅相关书籍 Simulink仿真部
  • 关于ARM_math数学库的使用

    关于ARM math数学库的使用 ARM math好强大的好吧 话不多说 请看截图 各种数学库看到没有 好强大的说 其实使用这些写函数 最快上手的方法就是看官方手册 话不多说 上官方链接arm math库的官网 举个栗子 一般步骤 1 首先
  • PID控制器开发笔记之九:基于前馈补偿的PID控制器的实现

    对于一般的时滞系统来说 设定值的变动会产生较大的滞后才能反映在被控变量上 从而产生合理的调节 而前馈控制系统是根据扰动或给定值的变化按补偿原理来工作的控制系统 其特点是当扰动产生后 被控变量还未变化以前 根据扰动作用的大小进行控制 以补偿扰
  • 基于LabVIEW的PID算法解读

    记录一下 方便以后翻阅 下图是基本的PID算法实现方式 以及实现PID控制器所需的假设和转换 为实现PID控制器 LabVIEW要求算法对输入信号进行采样并离散积分和微分操作 一 误差计算 e k SP k PV k 上式中 e k 表示当
  • 基于MATLAB的模糊pi控制器的设计

    基于MATLAB的模糊pi控制器的设计 模糊规则隶属函数的建立 a newfis fuzzypid 添加第一个输入变量e a addvar a input e 1 1 a addmf a input 1 N zmf 1 1 3 a addm
  • PID算法与PID自整定算法

    本文是由于研发恒温槽项目故需要了解PID控制算法和PID自整定算法 为方便本人日后需要故作此记录 直接粘贴代码吧 这是PID位置式控温算法 函数名 void Pid positional float speed 用途 PID输出 说明 参数
  • PID算法理论,运用,代码编写详解

    什么是PID 我相信能来看这篇文章的应该都知道什么是PID PID就是一种控制算法 利用比例运算 P 积分运算 I 和微分运算 D 一起控制某一事件 当然也可以只运用其中一个也可以两两结合 运用举例 比如我们家里都会有的那个电热水器 有点热
  • 三个闭环负反馈PID调节系统:电流环、速度环和位置环的关系

    三个闭环负反馈PID调节系统 电流环 速度环和位置环的关系 伺服电机为了达到生产的精准控制 电机一般采用三环控制 这主要是为了使伺服电机系统形成闭环控制 所谓三环就是3个闭环负反馈PID调节系统 电压映射电流变化 电流映射转矩大小 转矩大小
  • docker和主机之间的PID映射

    docker 命名空间与主机命名空间有何不同以及 pid 如何在这两者之间映射 谁能给我一个想法 有助于使用源代码在主机和 docker 之间映射 pid 的简单方法 您可以在中找到映射 proc PID status文件 它包含这样一行
  • 在Qt中fork后获取进程的PID

    我正在创建一个成功分叉的 Qt C 控制台应用程序 当我在 fork 之前调用 QCoreApplication applicationPid 然后在 fork 之后 在子进程中 调用 QCoreApplication applicatio
  • 什么是 .pid 文件以及它包含什么?

    我最近遇到了一个扩展名为 pid 的文件 并查看了它的内部 但没有找到太多内容 这文档 says Pid 文件是包含进程标识号 pid 的文件 该文件存储在文件系统的明确定义位置 从而允许其他程序找到正在运行的脚本的 pid 任何人都可以对
  • C - 获取用popen打开的进程的PID

    我有一个用 C 编写的程序 它使用 popen 打开另一个程序 我想获取该程序的 pid 或某种处理程序 以便在一定时间限制后 或者在它超出某些 ram 和 stdout 限制时杀死它 我认为这必须用ptrace来完成 它需要PID 但我不
  • 如何在 OSX 10.9 中从 ProcessSerialNum 获取 PID?

    GetProcessPID在 OSX 10 9 中被标记为已弃用 并附有注释 使用适当的 processIdentifier 属性 NSRunningApplication 对象 问题是构造类方法NSRunningApplication没有
  • 子进程和父进程ID

    只是与子进程块中的父 pid 值混淆了 我的程序如下 int main int argc char argv pid t pid pid fork if pid 1 perror fork failure exit EXIT FAILURE
  • 识别 DNS​​ 请求的 PID 源 (Windows XP)

    我希望确定发出 DNS 请求的进程 查看查询给了我一个线索 但并不能帮助我确定确切的过程 我可以在 Wireshark 中看到本地端口号 但请求太短暂 无法被 TCPView 接收 有没有可以捕获 DNS 请求和 PID 的日志记录工具 过
  • IIS应用程序池PID

    有谁熟悉获取与进程 ID 关联的应用程序池的方法吗 我正在使用 Win32 Process 查询 W3WP 服务并返回 PID 现在我正在尝试获取与其关联的应用程序池 在 Windows Server 2008 上 情况发生了变化 in s
  • 在 python 中,是否有跨平台的方法来确定哪个进程正在侦听给定端口?

    在linux下 我可以使用lsof i如以下函数所示 def FindProcessUsingPort portnum import os fp os popen lsof i s portnum lines fp readlines fp
  • 如何通过MATLAB命令获取外部程序(由MATLAB调用)的PID?

    我很好奇如何获取 MATLAB 在 Windows 中 调用的外部程序的 PID 例如 我通过命令调用 MATLAB 中的记事本 记事本 exe or 系统 记事本 exe 我想在调用此记事本后立即获取它的PID 由于一台计算机上可能会同时
  • 多处理时如何获取每个进程ID

    我有一些问题 因为我是 Python 和 Pyside 的新手 我有N个进程同时运行 由于这些进程需要一些时间才能完成其工作 因此最终用户可能想要取消特定进程 因此 我需要一种方法来了解进程的 ID 以便将此功能添加到程序中 有一个answ
  • docker 容器无法启动,因为现有的 pid 文件

    当我启动 docker 容器时 它会失败 因为现有的 pid 文件 root newhope sergio docker logs sharp shockley httpd pid 1 already running httpd pid 1

随机推荐