✅ 操作成功!

pid公式

发布时间:2023-06-07 作者:admin 来源:文学

pid公式

pid公式

双液注浆-个人申请书模板

2023年2月21日发(作者:社保证明模板)

PID算法原理及基本实现

PID算法原理及基本实现

在⾃动控制中,PID及其衍⽣出来的算法是应⽤最⼴的算法之⼀。各个做⾃动控制的⼚家基本都有会实现这⼀经典算法。我们在做项⽬的过

程中,也时常会遇到类似的需求,所以就想实现这⼀算法以适⽤于更多的应⽤场景。

1、PID算法基本原理

PID算法是控制⾏业最经典、最简单、⽽⼜最能体现反馈控制思想的算法。对于⼀般的研发⼈员来说,设计和实现PID算法是完成⾃动控制

系统的基本要求。这⼀算法虽然简单,但真正要实现好,却也需要下⼀定功夫。⾸先我们从PID算法最基本的原理开始分析和设计这⼀经典

命题。

PID算法的执⾏流程是⾮常简单的,即利⽤反馈来检测偏差信号,并通过偏差信号来控制被控量。⽽控制器本⾝就是⽐例、积分、微分三个

环节的加和。其功能框图如下:

根据上图我们考虑在某个特定的时刻t,此时输⼊量为rin(t),输出量为rout(t),于是偏差就可计算为err(t)=rin(t)-rout(t)。于是PID的基本

控制规律就可以表⽰为如下公式:

其中Kp为⽐例带,T为积分时间,T为微分时间。PID控制的基本原理就是如此。

2、PID算法的离散化

上⼀节简单介绍了PID算法的基本原理,但要在计算机上实现就必须将其离散化,接下来我们就说⼀说PID算法的离散化问题。在实现离散

化之前,我们需要对⽐例、积分、微分的特性做⼀个简单的说明。

⽐例就是⽤来对系统的偏差进⾏反应,所以只要存在偏差,⽐例就会起作⽤。积分主要是⽤来消除静差,所谓静差就是指系统稳定后输⼊输

出之间依然存在的差值,⽽积分就是通过偏差的累计来抵消系统的静差。⽽微分则是对偏差的变化趋势做出反应,根据偏差的变化趋势实现

超前调节,提⾼反应速度。

在实现离散前,我们假设系统采样周期为T。假设我们检查第K个采样周期,很显然系统进⾏第K次采样。此时的偏差可以表⽰为

err(K)=rin(K)-rout(K),那么积分就可以表⽰为:err(K)+err(K+1)+┈┈,⽽微分就可以表⽰为:(err(K)-err(K-1))/T。于是我们可以

将第K次采样时,PID算法的离线形式表⽰为:

也可以记为:

ID

这就是所谓的位置型PID算法的离散描述公式。我们知道还有⼀个增量型PID算法,那么接下来我们推到⼀下增量型PID算法的公式。上⾯的

公式描述了第k个采样周期的结果,那么前⼀时刻也就是k-1个采样周期就不难表⽰为:

那么我们再来说第K个采样周期的增量,很显然就是U(k)-U(k-1)。于是我们⽤第k个采样周期公式减去第k-1个采样周期的公式,就得到了

增量型PID算法的表⽰公式:

当然,增量型PID必须记得⼀点,就是在记住U(k)=U(k-1)+∆U(k)。

3、PID控制器的基本实现

完成了离散化后,我们就可以来实现它了。已经⽤离散化的数据公式表⽰出来后,再进型计算机编程已经不是问题了。接下来我们就使⽤C

语⾔分别针对位置型公式和增量型公式来具体实现。

(1)位置型PID的简单实现

位置型PID的实现就是以前⾯的位置型公式为基础。这⼀节我们只是完成最简单的实现,也就是将前⾯的离散位置型PID公式的计算机语⾔

化。

⾸先定义PID对象的结构体:

1/*定义结构体和公⽤体*/

2

3typedefstruct

4

5{

6

7floatsetpoint;//设定值

8

9floatproportiongain;//⽐例系数

10

11floatintegralgain;//积分系数

12

13floatderivativegain;//微分系数

14

15floatlasterror;//前⼀拍偏差

16

17floatresult;//输出值

18

19floatintegral;//积分值

20

21}PID;

接下来实现PID控制器:

1voidPIDRegulation(PID*vPID,floatprocessValue)

2

3{

4

5floatthisError;

6

7thisError=vPID->setpoint-processValue;

8

9vPID->integral+=thisError;

10

11vPID->result=vPID->proportiongain*thisError+vPID->integralgain*vPID->integral+vPID->derivativegain*(thisError-vPID->lasterror);

12

13vPID->lasterror=thisError;

14

15}

这就实现了⼀个最简单的位置型PID控制器,当然没有考虑任何⼲扰条件,仅仅只是对数学公式的计算机语⾔化。

(2)增量型PID的简单实现

增量型PID的实现就是以前⾯的增量型公式为基础。这⼀节我们只是完成最简单的实现,也就是将前⾯的离散增量型PID公式的计算机语⾔

化。

⾸先定义PID对象的结构体:

1/*定义结构体和公⽤体*/

2

3typedefstruct

4

5{

6

7floatsetpoint;//设定值

8

9floatproportiongain;//⽐例系数

10

11floatintegralgain;//积分系数

12

13floatderivativegain;//微分系数

14

15floatlasterror;//前⼀拍偏差

16

17floatpreerror;//前两拍偏差

18

19floatdeadband;//死区

20

21floatresult;//输出值

22

23}PID;

接下来实现PID控制器:

voidPIDRegulation(PID*vPID,floatprocessValue)

{

floatthisError;

floatincrement;

floatpError,dError,iError;

thisError=vPID->setpoint-processValue;//得到偏差值

pError=thisError-vPID->lasterror;

iError=thisError;

dError=thisError-2*(vPID->lasterror)+vPID->preerror;

increment=vPID->proportiongainpError+vPID->integralgainiError+vPID->derivativegain*dError;//增量计算

vPID->preerror=vPID->lasterror;//存放偏差⽤于下次运算

vPID->lasterror=thisError;

vPID->result+=increment;

}

这就实现了⼀个最简单的增量型PID控制器,也没有考虑任何的⼲扰条件,仅仅只是对数学公式的计算机语⾔化。

4、基本特点

前⾯讲述并且实现了PID控制器,包括位置型PID控制器和增量型PID控制器。界限来我们对这两种类型的控制器的特点作⼀个简单的描述。

位置型PID控制器的基本特点:

位置型PID控制的输出与整个过去的状态有关,⽤到了偏差的累加值,容易产⽣累积偏差。

位置型PID适⽤于执⾏机构不带积分部件的对象。

位置型的输出直接对应对象的输出,对系统的影响⽐较⼤。

增量型PID控制器的基本特点:

增量型PID算法不需要做累加,控制量增量的确定仅与最近⼏次偏差值有关,计算偏差的影响较⼩。

增量型PID算法得出的是控制量的增量,对系统的影响相对较⼩。

采⽤增量型PID算法易于实现⼿动到⾃动的⽆扰动切换。

👁️ 阅读量:0