OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 22195|回复: 15

PID算法讲解

[复制链接]

37

主题

88

帖子

0

精华

高级会员

Rank: 4

积分
868
金钱
868
注册时间
2016-2-17
在线时间
118 小时
发表于 2018-6-15 15:49:36 | 显示全部楼层 |阅读模式

一、PID的故事

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

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

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

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

小明终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小明又为难了!于是他又开努脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。他又在要求水面位置上面一点将水凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间

看到几个问采样周期的帖子,临时想了这么个故事。微分的比喻一点牵强,不过能帮助理解就行了,呵呵,入门级的,如能帮助新手理解下PID,于愿足矣。故事中小明的试验是一步步独立做,但实际加水工具、漏斗口径、溢水孔的大小同时都会影响加水的速度,水位超调量的大小,做了后面的实验后,往往还要修改改前面实验的结果。

二、控制模型:

人以PID控制的方式用水壶往水杯里倒印有刻度的半杯水后停下;

设定值:水杯的半杯刻度;

实际值:水杯的实际水量;

输出值:水壶的倒处数量和水杯舀出水量;

测量传感器:人的眼睛

执行对象:人

正执行:倒水

反执行:舀水

1、P 比例控制,就是人看到水杯里水量没有达到水杯的半杯刻度,就按照一定水量从水壶里王水杯里倒水或者水杯的水量多过刻度,就以一定水量从水杯里舀水出来,这个一个动作可能会造成不到半杯或者多了半杯就停下来。

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

2、PI 积分控制,就是按照一定水量往水杯里倒,如果发现杯里的水量没有刻度就一直倒,后来发现水量超过了半杯,就从杯里往外面舀水,然后反复不够就倒水,多了就舀水,直到水量达到刻度。

说明:在积分I控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。

3、PID 微分控制,就是人的眼睛看着杯里水量和刻度的距离,当差距很大的时候,就用水壶大水量得倒水,当人看到水量快要接近刻度的时候,就减少水壶的得出水量,慢慢的逼近刻度,直到停留在杯中的刻度。如果最后能精确停在刻度的位置,就是无静差控制;如果停在刻度附近,就是有静差控制。

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

在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称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的参数。

增大比例系数P一般将加快系统的响应,在有静差的情况下有利于减小静差,但是过大的比例系数会使系统有比较大的超调,并产生振荡,使稳定性变坏。

增大积分时间I有利于减小超调,减小振荡,使系统的稳定性增加,但是系统静差消除时间变长。

增大微分时间D有利于加快系统的响应速度,使系统超调量减小,稳定性增加,但系统对扰动的抑制能力减弱。

在凑试时,可参考以上参数对系统控制过程的影响趋势,对参数调整实行先比例、后积分,再微分的整定步骤。

PID控制器参数整定的一般方法:

PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:

一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改;

二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。

现在一般采用的是临界比例法。利用该方法进行 PID控制器参数的整定步骤如下:(1)首先预选择一个足够短的采样周期让系统工作;(2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡周期;(3)在一定的控制度下通过公式计算得到PID控制器的参数。

PID参数的设定:是靠经验及工艺的熟悉,参考测量值跟踪与设定值曲线,从而调整P、I、D的大小。

书上的常用口诀:

参数整定找最佳,从小到大顺序查;

先是比例后积分,最后再把微分加;

曲线振荡很频繁,比例度盘要放大;

曲线漂浮绕大湾,比例度盘往小扳;

曲线偏离回复慢,积分时间往下降;

曲线波动周期长,积分时间再加长;

曲线振荡频率快,先把微分降下来;

动差大来波动慢。微分时间应加长;

理想曲线两个波,前高后低4比1;

一看二调多分析,调节质量不会低。

个人认为PID参数的设置的大小,一方面是要根据控制对象的具体情况而定;另一方面是经验。P是解决幅值震荡,P大了会出现幅值震荡的幅度大,但震荡频率小,系统达到稳定时间长;I是解决动作响应的速度快慢的,I大了响应速度慢,反之则快;D是消除静态误差的,一般D设置都比较小,而且对系统影响比较小。

PID参数怎样调整最佳

(1)整定比例控制
将比例控制作用由小变到大,观察各次响应,直至得到反应快、超调小的响应曲线。

(2)整定积分环节
若在比例控制下稳态误差不能满足要求,需加入积分控制。

先将步骤(1)中选择的比例系数减小为原来的50~80%,再将积分时间置一个较大值,观测响应曲线。然后减小积分时间,加大积分作用,并相应调整比例系数,反复试凑至得到较满意的响应,确定比例和积分的参数。

(3)整定微分环节
若经过步骤(2),PI控制只能消除稳态误差,而动态过程不能令人满意,则应加入微分控制,构成PID控制。先置微分时间TD=0,逐渐加大TD,同时相应地改变比例系数和积分时间,反复试凑至获得满意的控制效果和PID控制参数。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2018-11-15
在线时间
40 小时
发表于 2018-11-15 16:44:26 | 显示全部楼层
说得好啊,瞬间明白了很多
回复 支持 反对

使用道具 举报

6

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2018-10-30
在线时间
32 小时
发表于 2018-11-27 16:37:48 | 显示全部楼层
谢谢楼主,好帖子腚
发怒是用别人的错误来惩罚自己
烦恼是用自己的过失折磨自己
后悔是用无奈的往事来摧残自己
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-27 17:51:58 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-10-17
在线时间
4 小时
发表于 2018-12-23 08:03:05 | 显示全部楼层
学完自控,,过来感悟一下
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2018-6-9
在线时间
31 小时
发表于 2018-12-27 13:22:10 | 显示全部楼层
有代码没能给我发一份吗谢谢大佬
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-2-3
在线时间
4 小时
发表于 2019-2-3 19:29:48 | 显示全部楼层
QHZ5201314 发表于 2018-12-27 13:22
有代码没能给我发一份吗谢谢大佬

PID算法最好是结合实际情况来写会比较清楚,单纯的说代码的话不太好理解。再一个,经典PID模型的时间轴是连续的,而计算机里的数据是不连续的,因此需要进行离散化处理
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-7-9
在线时间
3 小时
发表于 2019-7-9 09:09:04 | 显示全部楼层
完全看了一遍感觉对PID 的调节清晰了好多,请问楼主能不能帮我解决一下
如果一个智能小车靠左右两个超声波传感器检测的距离作为反馈值来调节左右两个电机的PWM波,看了您的文章,我想了一下,假如小车往右偏,左侧传感器的实际值大于设定值那么我们设|实际值-设定值|比例系数=右电机PWM波,左电机的PWM波不变,我说的对不对呀,那么如何用微分和积分呢?应用到程序的编写该如何编写呢?我用的是STM32F1系列的单片机,希望楼主能够帮下我这个新人。谢谢啦
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-7-19
在线时间
2 小时
发表于 2019-8-5 10:38:45 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2019-5-17
在线时间
2 小时
发表于 2019-8-5 10:46:31 | 显示全部楼层
还是比较简单,想知道PI\PD\PID的不同图像
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2016-7-24
在线时间
14 小时
发表于 2020-7-11 11:52:19 | 显示全部楼层
谢谢大佬~挺清楚的
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2020-2-23
在线时间
5 小时
发表于 2020-7-17 15:43:23 | 显示全部楼层
讲的太清晰了
回复 支持 反对

使用道具 举报

12

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2019-8-12
在线时间
50 小时
发表于 2020-8-24 16:47:29 | 显示全部楼层
感谢分享,祝楼主升职加薪,多多分享。
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2018-8-5
在线时间
15 小时
发表于 2020-9-28 14:34:42 | 显示全部楼层
虽然看不懂,还要认真看
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2020-10-15
在线时间
3 小时
发表于 2020-10-15 21:11:52 | 显示全部楼层
平衡车用到的PID还算简单的,人骑行的平衡车其实就用到了PI并没有用到D,人骑行的平衡车没这么复杂,电机转速直接跟随角度变化就可以了。
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2019-8-31
在线时间
25 小时
发表于 2020-11-7 11:42:20 | 显示全部楼层
谢谢楼主,学到了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表