经典PID算法

article/2025/9/16 17:30:57

首先感谢黄工,公众号strongerHuang,以下为三篇文章整合而成。

文章链接:
https://mp.weixin.qq.com/s/6Ew431m4nXhScpNVp8mGxQ
https://mp.weixin.qq.com/s/JYWnu67HEx2uMrntcUhggQ
https://mp.weixin.qq.com/s/IrTehHvTofXWP_BapoN1NQ

在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可贵的是,在我所接触的控制算法当中,PID控制算法又是最简单,最能体现反馈思想的控制算法,可谓经典中的经典。经典的未必是复杂的,经典的东西常常是简单的,而且是最简单的,想想牛顿的力学三大定律吧,想想爱因斯坦的质能方程吧,何等的简单!简单的不是原始的,简单的也不是落后的,简单到了美的程度。

在这里插入图片描述
一、什么是PID
PID,即比例Proportion、积分Integral和微分Derivative三个单词的缩写。可以通过调整这三个单元的增益Kp,Ki和Kd来调定其特性,PID控制器主要适用于基本上线性,且动态特性不随时间变化的系统。

利用偏差,纠正偏差。 闭环自动控制技术是基于反馈的概念以减少不确定性,在闭环自动控制原理中,我们把它叫做“PID控制器”,拿控制电机来说,参考下面模型:
在这里插入图片描述

二、PID原理
常规的模拟 PID 控制系统原理框图如下:
在这里插入图片描述
该系统由模拟 PID 控制器和被控对象组成。

上面框图中, r(t) 是给定值, y(t) 是系统的实际输出值,给定值与实际输出值构成控制偏差e(t) = r(t) − y(t),设定值减去测量值.

e(t) 作为 PID 控制的输入, u(t)作为 PID 控制器的输出和被控对象的输入。 所以模拟 PID 控制器的控制规律为:
在这里插入图片描述三个重要的参数:
Kp:控制器的比例系数.
Ti:控制器的积分时间,也称积分系数.
Td:控制器的微分时间,也称微分系数.

1、P - 比例部分:调控现在 是系统对当前误差的调整能力
比例环节的作用是对偏差瞬间作出反应。偏差一旦产生控制器立即产生控制作用, 使控制量向减少偏差的方向变化。 控制作用的强弱取决于比例系数Kp, 比例系数Kp越大,控制作用越强, 则过渡过程越快, 控制过程的静态偏差也就越小; 但是Kp越大,也越容易产生振荡, 破坏系统的稳定性。 故而, 比例系数Kp选择必须恰当, 才能过渡时间少, 静差小而又稳定的效果。

比例控制考虑当前误差,误差值和一个正值的常数Kp(表示比例)相乘。如下图,不同比例增益Kp下,受控变数对时间的变化(Ki和Kd维持定值):在这里插入图片描述

2、I - 积分部分 纠正过去 是系统消除静差的手段
从积分部分的数学表达式可以知道, 只要存在偏差, 则它的控制作用就不断的增加; 只有在偏差e(t)=0时, 它的积分才能是一个常数,控制作用才是一个不会增加的常数。 可见,积分部分可以消除系统的偏差。

积分环节的调节作用虽然会消除静态误差,但也会降低系统的响应速度,增加系统的超调量。积分常数Ti越大,积分的积累作用越弱,这时系统在过渡时不会产生振荡; 但是增大积分常数Ti会减慢静态误差的消除过程,消除偏差所需的时间也较长, 但可以减少超调量,提高系统的稳定性。

当 Ti 较小时, 则积分的作用较强,这时系统过渡时间中有可能产生振荡,不过消除偏差所需的时间较短。所以必须根据实际控制的具体要求来确定Ti 。

积分控制考虑过去误差,将过去一段时间的误差之和乘以一个正值的常数Ki。如下图,不同积分增益Ki下,受控变数对时间的变化(Kp和Kd维持定值):
在这里插入图片描述

3、D - 微分部分 把握未来 是系统对未来的预测,抑制超调
实际的控制系统除了希望消除静态误差外,还要求加快调节过程。在偏差出现的瞬间,或在偏差变化的瞬间, 不但要对偏差量做出立即响应(比例环节的作用), 而且要根据偏差的变化趋势预先给出适当的纠正。为了实现这一作用,可在 PI 控制器的基础上加入微分环节,形成 PID 控制器。

微分环节的作用是阻止偏差的变化。它是根据偏差的变化趋势(变化速度)进行控制。偏差变化的越快,微分控制器的输出就越大,并能在偏差值变大之前进行修正。微分作用的引入, 将有助于减小超调量, 克服振荡, 使系统趋于稳定, 特别对髙阶系统非常有利, 它加快了系统的跟踪速度。但微分的作用对输入信号的噪声很敏感,对那些噪声较大的系统一般不用微分, 或在微分起作用之前先对输入信号进行滤波。

微分控制考虑将来误差,计算误差的一阶导,并和一个正值的常数Kd相乘。如下图,不同微分增益Kd下,受控变数对时间的变化(Kp和Ki维持定值):
在这里插入图片描述
三、参数调试
PID的参数调试是指通过调整控制参数(比例增益、积分增益/时间、微分增益/时间)让系统达到最佳的控制效果。

稳定性(不会有发散性的震荡)是首要条件,此外,不同系统有不同的行为,不同的应用其需求也不同,而且这些需求还可能会互相冲突。
在这里插入图片描述
PID只有三个参数,在原理上容易说明,但PID参数调试是一个困难的工作,因为要符合一些特别的判据,而且PID控制有其限制存在。历史上有许多不同的PID参数调试方式,包括齐格勒-尼科尔斯方法等,其中也有一些已申请专利。

1.稳定性
若PID控制器的参数未挑选妥当,其控制器输出可能是不稳定的,也就是其输出发散,过程中可能有震荡,也可能没有震荡,且其输出只受饱和或是机械损坏等原因所限制。不稳定一般是因为过大增益造成,特别是针对延迟时间很长的系统。

2.最佳性能
PID控制器的最佳性能可能和针对过程变化或是设定值变化有关,也会随应用而不同。

两个基本的需求是调整能力(regulation,干扰拒绝,使系统维持在设定值)及命令追随 (设定值变化下,控制器输出追随设定值的反应速度)。有关命令追随的一些判据包括有上升时间及整定时间。有些应用可能因为安全考量,不允许输出超过设定值,也有些应用要求在到达设定值过程中的能量可以最小化。

3.各调试方法对比
在这里插入图片描述
4.调整PID参数对系统的影响
在这里插入图片描述
给大家看一个从YouTube上搬过来的视频:

【油管搬运】FPV穿越机 直观感受PID各项调整带来的反应

四、PID算法代码 【待编辑】
PID 控制算法可以分为位置式 PID 和增量式 PID 控制算法。

位置式PID:由于计算机的输出u(k)直接控制执行机构(如阀门),u(k)的值与执行机构的位置(如阀门开度)一一对应,所以通常称式(1-1)为位置式PID控制算法。

两者的区别:
(1)位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大;

(2)增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。

(3)由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,如果计算机出现故障,u(k)的大幅度变化会引起执行机构位置的大幅度变化,因此对系统影响较大。

下面给出公式直接体现的C语言源代码(请结合项目修改源代码,更多详细公式推导参考以下链接:https://blog.csdn.net/Uncle_GUO/article/details/51367764):
1.位置式PID
在这里插入图片描述

typedef struct
{float Kp;                       //比例系数Proportionalfloat Ki;                       //积分系数Integralfloat Kd;                       //微分系数Derivativefloat Ek;                       //当前误差float Ek1;                      //前一次误差 e(k-1)float Ek2;                      //再前一次误差 e(k-2)float LocSum;                   //累计积分位置
}PID_LocTypeDef;/************************************************
函数名称 : PID_Loc
功    能 : PID位置(Location)计算
参    数 : SetValue ------ 设置值(期望值)ActualValue --- 实际值(反馈值)PID ----------- PID数据结构
返 回 值 : PIDLoc -------- PID位置
作    者 : strongerHuang
*************************************************/
float PID_Loc(float SetValue, float ActualValue, PID_LocTypeDef *PID)
{float PIDLoc;                                  //位置PID->Ek = SetValue - ActualValue;PID->LocSum += PID->Ek;                         //累计误差PIDLoc = PID->Kp * PID->Ek + (PID->Ki * PID->LocSum) + PID->Kd * (PID->Ek1 - PID->Ek);PID->Ek1 = PID->Ek;  return PIDLoc;
}

2.增量式PID
在这里插入图片描述

typedef struct
{float Kp;                       //比例系数Proportionalfloat Ki;                       //积分系数Integralfloat Kd;                       //微分系数Derivativefloat Ek;                       //当前误差float Ek1;                      //前一次误差 e(k-1)float Ek2;                      //再前一次误差 e(k-2)
}PID_IncTypeDef;/************************************************
函数名称 : PID_Inc
功    能 : PID增量(Increment)计算
参    数 : SetValue ------ 设置值(期望值)ActualValue --- 实际值(反馈值)PID ----------- PID数据结构
返 回 值 : PIDInc -------- 本次PID增量(+/-)
作    者 : strongerHuang
*************************************************/
float PID_Inc(float SetValue, float ActualValue, PID_IncTypeDef *PID)
{float PIDInc;                                  //增量PID->Ek = SetValue - ActualValue;PIDInc = (PID->Kp * PID->Ek) - (PID->Ki * PID->Ek1) + (PID->Kd * PID->Ek2);PID->Ek2 = PID->Ek1;PID->Ek1 = PID->Ek;  return PIDInc;
}

五、参数的自整定
在某些应用场合,比如通用仪表行业,系统的工作对象是不确定的,不同的对象就得采用不同的参数值,没法为用户设定参数,就引入参数自整定的概念。实质就是在首次使用时,通过N次测量为新的工作对象寻找一套参数,并记忆下来作为以后工作的依据。具体的整定方法有三种:临界比例度法、衰减曲线法、经验法。

1、临界比例度法(Ziegler-Nichols)
1.1 在纯比例作用下,逐渐增加增益至产生等副震荡,根据临界增益和临界周期参数得出PID控制器参数,步骤如下:

(1)将纯比例控制器接入到闭环控制系统中(设置控制器参数积分时间常数Ti =∞,实际微分时间常数Td =0)。
(2)控制器比例增益K设置为最小,加入阶跃扰动(一般是改变控制器的给定值),观察被调量的阶跃响应曲线。
(3)由小到大改变比例增益K,直到闭环系统出现振荡。
(4)系统出现持续等幅振荡时,此时的增益为临界增益(Ku),振荡周期(波峰间的时间)为临界周期(Tu)。
(5) 由表1得出PID控制器参数。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/4tDaU0BJ.shtml

相关文章

PID控制原理

PID控制原理 在模拟控制系统中,控制器最常用的控制规律是PID控制。 PID控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。 PID控制规律为 数学表达形式为: 进行拉普拉斯变换,写出传递函数的形式: kp为比例系数,T1为积分时间常数,Td为微分时间常数。…

SMART PLC PID算法基本解析(附公式)

在稳态运行中,控制器调节输出值,使偏差 (e) 为零。偏差是设定值(目标值)与过程变量(实际值、反馈值)之差。输出 = 比例项 + 积分项 + 微分项 离散化的PID公式基本框架几乎一样,不同的厂家描述符号,变量名称定义可能不太一样, 从公式中可以看出,积分项是从第一次采样到…

PID算法-理论分析

连续PID算法 典型PID算法框图 r(t):设定状态量y(t):实际状态量e(t):当前误差u(t):控制 器输出 P-比例环节 u p ( t ) K p ∗ e ( t ) K p [ r ( t ) − y ( t ) ] u_{p}(t)Kp*e(t)Kp[r(t)-y(t)] up​(t)Kp∗e(t)Kp[r(t)−y(t)…

PID详解

PID在控制领域应该是应用最为广泛的算法了,在工业控制,汽车电子等诸多领域中运用 下面我用一个例子和算法过程来讲解PID的概念 PID: P比例控制:基本作用就是控制对象以线性的方式增加,在一个常量比例下,动态…

模糊PID算法

在讲解模糊PID前,我们先要了解PID控制器的原理(本文主要介绍模糊PID的运用,对PID控制器的原理不做详细介绍)。PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元P、积分…

PID控制器整理分享

概述 日常开发中,常常需要对速度、温度等物理量进行稳态控制,而在目前的自动化控制原理中,使用最为广泛的方法就是PID控制算法。本文简要整理分享PID控制器的使用。 正文 PID控制器,即比例-积分-微分控制器。它是一个不依赖系统…

PID算法详解

文章目录 什么是pid比例(p)控制积分(I)控制微分(D)控制PID使用增量式PIDC语言实现pid算法 什么是pid PID算法是一种具有预见性的控制算法,其核心思想是: 1>. PID算法不但考虑控制…

《PID》一篇文章带你搞懂使用PID

节选自本人博客:https://www.blog.zeeland.cn/archives/pid-learning 本文为笔者参考了网上众多大神的解析之后加上自己的理解整合起来的,因此在内容上部分参考了其他作者,目的仅用作参考以便更好地学习,如有侵犯,可联…

PID几种公式总结

模拟式PID 其中,t为采样时间 位置式PID 其中,为采样间隔 增量式PID 增量式PID和位置式PID都是数字式PID(模拟式PID的离散化)的不同表达形式,因为计算机只能处理离散数据,将连续信号变为离散信号&#xff…

PID控制及公式讲解

1、PID引入 2、PID代码 /*******************************************************************位置式pid********************************************************************/ double PID(double Actual,double SET){ static double E_sum,Error_last; //上一…

一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)

一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制) PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原理上来理解PI…

PID公式的推导过程及实现代码

一、PID框图: n0(t)是要稳定的值 n(t)是当前输出值 e(t) n0(t) - n(t) 一、模拟PID控制原理 这个公式网络上很好找: 二、数字PID控制 由于模拟的微积分运算对应计算机来说是不太好写代码的,所以要利用采样将数据离散化 于是公式就可以转换…

经典的pid公式,好脑子不如烂笔头。

这个算法涉及昨天,今天,明天。 思路就是以史为鉴,预测明天,改革当前。

PID公式通俗理解

PID调节是有方法、有规律可循的,不过在此之前先深入理解其公式。 别怕,先看认真看PID本体: 其中: u(t) -------------输出曲线,pid输出值随时间的变化曲线 Kp --------------比例系数 e(t)------------- 偏差曲线&…

PID公式

位置型PID: 增量式PID: 增量式PID和位置式PID的优缺点: 位置式PID: u(k)的值和执行机构的位置(如阀门开度)是一一对应的,因此通常称该公式为位置式PID控制算法 缺点&…

PID控制算法01

PID控制算法 PID控制算法公式原理参数作用 PID算法及改进两个基本类型位置型PID控制增量型PID控制 积分环节改进的PID控制积分分离的PID控制变速积分的PID控制抗积分饱和的PID控制 微分环节改进的PID控制不完全微分PID控制微分先行PID控制 PID控制算法公式 原理 PID控制是一种…

PID控制(个人学习)

title:控制策略 date:2020-3-22 author:Page categories: -控制策略 tages: -控制 比例积分微分控制,简称PID控制 因为以下优点被人们广泛使用于各个领域 a. 技术成熟 b. 易被人们熟悉和掌握 c. 不需要建立数学模型 d. 控制效果好 e. 鲁棒性 通常依据控…

PID控制

一、PID: 1.基本公式 P:Proportion(比例):就是输入偏差乘以一个常数。 I:Integral(积分),就是对输入偏差进行积分运算。 D:Derivative(微分),对输入偏差进行微分运算。 注:输入偏差读出的被…

控制算法学习 二、PID控制算法

控制算法学习 二、PID控制 前言PID算法比例环节P积分环节I微分环节D 离散PID位置式PID增量式PID 前言 PID应该是应用最广泛的控制算法(没有之一)。无人机中的飞控就是基于PID的。 PID算法 PID——Proportional, Integral, Derivate,就是比…