最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

PID算法的通俗讲解及调节口诀

IT圈 admin 53浏览 0评论

2024年3月9日发(作者:错元)

PID调节口诀

1. PID常用口诀: 参数整定找最佳,从小到大顺序查,先是比例后积分,最后再把微分加,曲线振荡很频繁,比例度盘要放大,曲线漂浮绕大湾,比例度盘往小扳,曲线偏离回复慢,积分时间往下降,曲线波动周期长,积分时间再加长,曲线振荡频率快,先把微分降下来,动差大来波动慢,微分时间应加长,理想曲线两个波,前高后低4比1, 一看二调多分析,调节质量不会低

控制器参数的工程整定,各种调节系统中参数经验数据以下可参照: 温度T: P=20~60%,T=180~600s,D=3-180s压力P: P=30~70%,T=24~180s, 液位L:

P=20~80%,T=60~300s, 流量L: P=40~100%,T=6~60s。 控制的原理和特点

在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称 PID调节。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象﹐或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。 比例(P)控制 比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。 积分(I)控制 在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入"积分项"。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。 微分(D)控制 在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。 自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性

组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化"超前",即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入"比例"项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是"微分项",它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。

什么是PID—一种通俗易懂的讲解

首先帮大家解决一下什么是PID调节,为什么就要这样的疑惑。

PID是比例,积分,微分的英文单词的首字母的简称。

下面举个例子说明一下PID,让大家有个感官的认识,

控制模型:你控制一个人让他以PID控制的方式走110步后停下。

(1)P比例控制,就是让他走110步,他按照一定的步伐走到一百零几步(如108步)或100多步(如112步)就停了。

说明:

P比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。

(2)PI积分控制,就是他按照一定的步伐走到112步然后回头接着走,走到108步位置时,然后又回头向110步位置走。在110步位置处来回晃几次,最后停在110步的位置。

说明:

在积分I控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with

Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。

(3)PD微分控制,就是他按照一定的步伐走到一百零几步后,再慢慢地向110步的位置靠近,如果最后能精确停在110步的位置,就是无静差控制;如果停在110步附近(如109步或111步位置),就是有静差控制。

说明:

在微分控制D中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。

自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳,其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例P”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势。这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例P+微分D(PD)控制器能改善系统在调节过程中的动态特性。

小云接到这样一个任务:一个水缸有点漏水(而且漏水的速度还不是固定不变的),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

小云接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,开始每30分钟来检查一次水面高度。结果水漏得太快,每次小云来检查时,水都快漏完了,离要求的高度相差很远,后来小云改为每3分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做的是无用功。几次试验后,他确定每10分钟来检查一次。这个检查时间就称为采样周期。

开始小云用勺子加水,水龙头离水缸有十几米远的距离,经常要跑好几趟才加够水,于是小云又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,但好几次将缸给加溢出了,小云又动脑筋,我不用瓢也不用桶,最后选择可用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。

小云又发现水虽然不会加过量溢出了,有时会高过要求位置比较多,还是有溢出的可能。于是他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变换不同大小口径的漏斗来控制加水的速度,最终找到了满意的漏斗。漏斗的时间就称为积分时间。

小云终于喘了一口气,但任务的要求突然严格了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小云又为难了!于是他又开动脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过

漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高很多。他又在要求水面位置上面一点将水缸凿一孔,再接一根管子到下面的备用桶里,这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。

好了,故事讲完了,下面是关于应用

增量式PID算法。其实PID的算法可以做很深,但没必要,一般入门级的算法已经在很多场合够用了,这里之所以选用增量式PID算法(另外还有位置式PID等等),因为增量式PID算法运算量少,非常适合单片机的应用。

显然要想给单片机运算,就必须是数字量,而上述的PID是模拟PID,我们要将他数字化,离散化。

其中积分在上面说到的,他的几何意义就是求e(t)与时间轴t围成的图形的面积,将这个面积分成T等分 ,T=0到T=1跟e(t)围成的面积加上T=1到T=2跟e(t)围成的面积一直累加。。。。。直到T-1到T跟e(t)围成的面积刚好就是整个e(t)与t时间轴围成的面积,刚刚好是e(t)对t的积分,如果T无限大,那么就可以分割成无限个小图形那么这个图形的面积就可以用T[e(1)+e(2)+………+e(T-1)+e(T)]来代替积分效果,而这个T等分就是AD在整个时间轴t中采样的点,显然越快的AD在相同的时间t里面采样的点越多,换句话说就是T更接近无限大。因此积分可以用累和代替。

下面为积分的专业的解释

定义

设函数f(x)在[a,b]上有界,在[a,b]中任意插入若干个分点

a=x0

把区间[a,b]分成n个小区间

[x0,x1],...[xn-1,xn]。

在每个小区间[xi-1,xi]上任取一点ξi(xi-1≤ξi≤xi),作函数值f(ξi)与小区间长度的乘积f(ξi)△xi,并作出和

如果不论对[a,b]怎样分法,也不论在小区间上的点ξi怎样取法,只要当区间的长度趋于零时,和S总趋于确定的极限I,

这时我们称这个极限I为函数f(x)在区间[a,b]上的定积分,

记作

微分用差分代替,先说明一下微分的几何意义

我们可以想象把上图中的f(x)换成e(t),x轴换成t轴,把△x换成△t,当△t非常小的时候曲线MN等价于直线MN,△y就等于dy,所以

可以用Td*[e(t)-e(t-1)]/ △t,同样△t就是采样时间~越小越好。

因此模拟PID离散化得到在k-1时刻的输出

]

因此得到一个增量

其中的T为采样时间

,如果计算机控制系统采用恒定的采样周期T,一旦确定A、B、C(系数的选取是PID的关键这里不做讨论)

增量式PID控制算法与位置式PID算法相比,计算量小得多,因此在实际中得到广泛的应用。

位置式PID控制算法也可以通过增量式控制算法推出递推计算公式:

就是目前在计算机控制中广泛应用的数字递推PID控制算法。

下面是程序

typedef struct PID

{

int SetPoint; //设定目标 Desired Value

long SumError; //误差累计

double Proportion; //比例常数 Proportional Const

double Integral; //积分常数 Integral Const

double Derivative; //微分常数 Derivative Const

int LastError; //Error[-1]

int PrevError; //Error[-2]

} PID;

static PID sPID;

static PID *sptr = &sPID;

/*====================================================================================================

Initialize PID Structure PID参数初始化

=====================================================================================================*/

void IncPIDInit(void)

{

sptr->SumError = 0;

sptr->LastError = 0; //Error[-1]

sptr->PrevError = 0; //Error[-2]

sptr->Proportion = 0; //比例常数 Proportional Const

sptr->Integral = 0; //积分常数Integral Const

sptr->Derivative = 0; //微分常数 Derivative Const

sptr->SetPoint = 0;

}

/*====================================================================================================

增量式PID计算部分

=====================================================================================================*/

int IncPIDCalc(int NextPoint)

{

register int iError, iIncpid; //当前误差

iError = sptr->SetPoint - NextPoint; //增量计算

iIncpid = sptr->Proportion * iError //E[k]项

- sptr->Integral * sptr->LastError //E[k-1]项

+ sptr->Derivative * sptr->PrevError; //E[k-2]项

//存储误差,用于下次计算

sptr->PrevError = sptr->LastError;

sptr->LastError = iError;

//返回增量值

return(iIncpid);

}

2024年3月9日发(作者:错元)

PID调节口诀

1. PID常用口诀: 参数整定找最佳,从小到大顺序查,先是比例后积分,最后再把微分加,曲线振荡很频繁,比例度盘要放大,曲线漂浮绕大湾,比例度盘往小扳,曲线偏离回复慢,积分时间往下降,曲线波动周期长,积分时间再加长,曲线振荡频率快,先把微分降下来,动差大来波动慢,微分时间应加长,理想曲线两个波,前高后低4比1, 一看二调多分析,调节质量不会低

控制器参数的工程整定,各种调节系统中参数经验数据以下可参照: 温度T: P=20~60%,T=180~600s,D=3-180s压力P: P=30~70%,T=24~180s, 液位L:

P=20~80%,T=60~300s, 流量L: P=40~100%,T=6~60s。 控制的原理和特点

在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称 PID调节。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象﹐或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。 比例(P)控制 比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。 积分(I)控制 在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入"积分项"。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。 微分(D)控制 在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。 自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性

组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化"超前",即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入"比例"项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是"微分项",它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。

什么是PID—一种通俗易懂的讲解

首先帮大家解决一下什么是PID调节,为什么就要这样的疑惑。

PID是比例,积分,微分的英文单词的首字母的简称。

下面举个例子说明一下PID,让大家有个感官的认识,

控制模型:你控制一个人让他以PID控制的方式走110步后停下。

(1)P比例控制,就是让他走110步,他按照一定的步伐走到一百零几步(如108步)或100多步(如112步)就停了。

说明:

P比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。

(2)PI积分控制,就是他按照一定的步伐走到112步然后回头接着走,走到108步位置时,然后又回头向110步位置走。在110步位置处来回晃几次,最后停在110步的位置。

说明:

在积分I控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with

Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。

(3)PD微分控制,就是他按照一定的步伐走到一百零几步后,再慢慢地向110步的位置靠近,如果最后能精确停在110步的位置,就是无静差控制;如果停在110步附近(如109步或111步位置),就是有静差控制。

说明:

在微分控制D中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。

自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳,其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例P”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势。这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例P+微分D(PD)控制器能改善系统在调节过程中的动态特性。

小云接到这样一个任务:一个水缸有点漏水(而且漏水的速度还不是固定不变的),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

小云接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,开始每30分钟来检查一次水面高度。结果水漏得太快,每次小云来检查时,水都快漏完了,离要求的高度相差很远,后来小云改为每3分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做的是无用功。几次试验后,他确定每10分钟来检查一次。这个检查时间就称为采样周期。

开始小云用勺子加水,水龙头离水缸有十几米远的距离,经常要跑好几趟才加够水,于是小云又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,但好几次将缸给加溢出了,小云又动脑筋,我不用瓢也不用桶,最后选择可用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。

小云又发现水虽然不会加过量溢出了,有时会高过要求位置比较多,还是有溢出的可能。于是他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变换不同大小口径的漏斗来控制加水的速度,最终找到了满意的漏斗。漏斗的时间就称为积分时间。

小云终于喘了一口气,但任务的要求突然严格了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小云又为难了!于是他又开动脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过

漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高很多。他又在要求水面位置上面一点将水缸凿一孔,再接一根管子到下面的备用桶里,这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。

好了,故事讲完了,下面是关于应用

增量式PID算法。其实PID的算法可以做很深,但没必要,一般入门级的算法已经在很多场合够用了,这里之所以选用增量式PID算法(另外还有位置式PID等等),因为增量式PID算法运算量少,非常适合单片机的应用。

显然要想给单片机运算,就必须是数字量,而上述的PID是模拟PID,我们要将他数字化,离散化。

其中积分在上面说到的,他的几何意义就是求e(t)与时间轴t围成的图形的面积,将这个面积分成T等分 ,T=0到T=1跟e(t)围成的面积加上T=1到T=2跟e(t)围成的面积一直累加。。。。。直到T-1到T跟e(t)围成的面积刚好就是整个e(t)与t时间轴围成的面积,刚刚好是e(t)对t的积分,如果T无限大,那么就可以分割成无限个小图形那么这个图形的面积就可以用T[e(1)+e(2)+………+e(T-1)+e(T)]来代替积分效果,而这个T等分就是AD在整个时间轴t中采样的点,显然越快的AD在相同的时间t里面采样的点越多,换句话说就是T更接近无限大。因此积分可以用累和代替。

下面为积分的专业的解释

定义

设函数f(x)在[a,b]上有界,在[a,b]中任意插入若干个分点

a=x0

把区间[a,b]分成n个小区间

[x0,x1],...[xn-1,xn]。

在每个小区间[xi-1,xi]上任取一点ξi(xi-1≤ξi≤xi),作函数值f(ξi)与小区间长度的乘积f(ξi)△xi,并作出和

如果不论对[a,b]怎样分法,也不论在小区间上的点ξi怎样取法,只要当区间的长度趋于零时,和S总趋于确定的极限I,

这时我们称这个极限I为函数f(x)在区间[a,b]上的定积分,

记作

微分用差分代替,先说明一下微分的几何意义

我们可以想象把上图中的f(x)换成e(t),x轴换成t轴,把△x换成△t,当△t非常小的时候曲线MN等价于直线MN,△y就等于dy,所以

可以用Td*[e(t)-e(t-1)]/ △t,同样△t就是采样时间~越小越好。

因此模拟PID离散化得到在k-1时刻的输出

]

因此得到一个增量

其中的T为采样时间

,如果计算机控制系统采用恒定的采样周期T,一旦确定A、B、C(系数的选取是PID的关键这里不做讨论)

增量式PID控制算法与位置式PID算法相比,计算量小得多,因此在实际中得到广泛的应用。

位置式PID控制算法也可以通过增量式控制算法推出递推计算公式:

就是目前在计算机控制中广泛应用的数字递推PID控制算法。

下面是程序

typedef struct PID

{

int SetPoint; //设定目标 Desired Value

long SumError; //误差累计

double Proportion; //比例常数 Proportional Const

double Integral; //积分常数 Integral Const

double Derivative; //微分常数 Derivative Const

int LastError; //Error[-1]

int PrevError; //Error[-2]

} PID;

static PID sPID;

static PID *sptr = &sPID;

/*====================================================================================================

Initialize PID Structure PID参数初始化

=====================================================================================================*/

void IncPIDInit(void)

{

sptr->SumError = 0;

sptr->LastError = 0; //Error[-1]

sptr->PrevError = 0; //Error[-2]

sptr->Proportion = 0; //比例常数 Proportional Const

sptr->Integral = 0; //积分常数Integral Const

sptr->Derivative = 0; //微分常数 Derivative Const

sptr->SetPoint = 0;

}

/*====================================================================================================

增量式PID计算部分

=====================================================================================================*/

int IncPIDCalc(int NextPoint)

{

register int iError, iIncpid; //当前误差

iError = sptr->SetPoint - NextPoint; //增量计算

iIncpid = sptr->Proportion * iError //E[k]项

- sptr->Integral * sptr->LastError //E[k-1]项

+ sptr->Derivative * sptr->PrevError; //E[k-2]项

//存储误差,用于下次计算

sptr->PrevError = sptr->LastError;

sptr->LastError = iError;

//返回增量值

return(iIncpid);

}

发布评论

评论列表 (0)

  1. 暂无评论