增量式PID的P和I怎么理解(二)

黑马奇迹篇之发力

增量式PID的P、I理解之论证篇(上)

先做实验,最后总结增量式PID的P、I的作用。

背景知识:上篇博客说的两个前提:1、启动电机的第一个瞬间,当前控制器内输出值(PWM)的高低2、增域。

“启动电机的第一个瞬间,当前控制器内输出值(PWM)的高低”的意思是:给K66单片机所在的主板上电后,只是关掉驱动开关使电机不转,而不停止对单片机(PID控制器)的掉电。随便提一嘴我们小车的硬件是由主板和驱动板组成的,考虑到搭车的美观性,并非主驱一体。此时虽然电机不转,但是单片机可没有关掉,这是的单片机里可是在进行着每2ms一次的PI的运算公式的,所以输出值PWM会一直有,而伴随着积分作用,单片机上电后PWM会一直增大,直至我们的限幅最大值999。

你问我,为什么是2ms?因为我把电机的增量式PI控制算法放在了PIT周期定时器里,每2ms就周期性的执行一次我的速度控制算法。你也可以把PI算法放在你的主函数的while(1)里面循环执行,都无所谓。

举个图说明:
下图是P为0.1,I为0.01,设定值200,电机不转时,变量motor.speed_duty_output_R 的曲线图,就是输出PWM的图,不过我此时没有启动电机,只是启动了K66单片机。图片没截好,最前面垂直与x轴的粉线是不需要看的。曲线是从0直接突增到20(0.1*200=20比例作用),再慢慢增到(增是因为积分的作用)我的限幅值999

在这里插入图片描述

“增域”的意思是:
如果设定值是200的速度,电机从0开始启动,那么增域就是200.如果设定值是300的速度,电机从250要变到300,那么增域就是50.即就是想要控制速度变化的增量,但这决不是当前偏差,因为当前偏差是动值,时时刻刻是真实值与设定值之差,是会随时间变的,增域是每次电机趋于稳定时第一次出现的偏差值(电机从0速度开始转,设定值是100,增域就是100;现在电机稳定在100的速度,我又把设定值改为300,增域就是200;现在电机稳定在300,我又把设定值定在200,增域就是-100)。

不多bb上图————论证:————初始PWM高低——对增量式PID的影响:
绿线是设定值200,从0变化,就是说增域是200.红线是PWM的初始值,粉线是轮子的实际转速。

PIPWM初始值低PWM初始最大999描述
0.10.01在这里插入图片描述在这里插入图片描述初始值999的超调量很大,值很高 。
0.10.02在这里插入图片描述在这里插入图片描述这里和后面的图,把红线都取消显示了。但右部分的图都是PWM初始999的,左部分是PWM低的,值详细是多少不用管,反正它<500
0.10.05在这里插入图片描述在这里插入图片描述很明显,轮子的实际转速完全受初始PWM是高是低的影响
0.10.1在这里插入图片描述在这里插入图片描述初始PWM大能增大超调量,能提高响应性
0.10.5在这里插入图片描述在这里插入图片描述
20.01在这里插入图片描述在这里插入图片描述P的增大,使得调节时间变长,超调量减小
50.01当P>=5时,无法做出PWM低的图像,因为设定值是200,5*200=1000,它>999,所以一旦控制器上电,会瞬间达到1000,不会是P为0.1那样能看到PWM在积分作用下慢慢达到999在这里插入图片描述欧吼~超调量没有了。同样是初始PWM999,P越大超调越小
50.03在这里插入图片描述
50.05在这里插入图片描述
50.1在这里插入图片描述
50.3在这里插入图片描述
50.5在这里插入图片描述
51在这里插入图片描述
53在这里插入图片描述
100.01在这里插入图片描述第一次的峰值比P为5时更低了,但是最后靠积分作用它达到了200,图没截到而已。

可以看到,随着P的不断增大,从0.1~10,轮子的实际速度一直在下降,当P=5时,是效果最好的,既没有超调量,响应性又够。P=0.1和P=10的系统响应性都不如P=5的,响应特性竟然存在一个峰值(即P取5时,性能取到最大值),这妥妥的二次型函数的样子。对比
P=0.1,I=0.01;
P=2,I=0.01;
P=5,I=0.01;
P=10,I=0.01;
在相同的积分作用下,P的增大,会使超调量减小,调节时间增长。那么问题来了,《自动控制原理》书上告诉我的:P增大可以加快系统调节速度是说错了吗?是不是这句话它仅针对的是位置式PID,而不是增量式PID?这一切的一切究竟是怎么回事?

欧吼!这现实的实验数据直接让我多年来的PID世界观崩溃。至此,我也不会了!一切看起来都是那么没有规律,是否存在一个统一的理论来解释着一切的情况呢?。。。。。。。嗯。。。。。。好难啊!我太难了。放弃, 至此——寻找增量式PID的真正意义结束
全篇终。
















































呵呵~没点实力我能开这个坑?埋汰谁呢?别TM逗我笑了。各位,接下来就是揭开这一切谜题的终极答案!统一的理论!——我——找到了!

增量式PID的P、I理解之论证篇(下)

不多bb上图————论证:————增域大小————对增量式PID的影响:
上面是增域200的图,现在是100的,即设定值为100,车轮要从0速度变化到100。 做完这个实验就能得到答案

PI初始PWM999初始PWM为0描述
50.01在这里插入图片描述在这里插入图片描述增域变小初始PWM999的就出现了超调量,初始PWM为0的第一次出现的峰值比前面增域200同样参数的低,但最后都趋于稳定
50.03在这里插入图片描述在这里插入图片描述
50.05在这里插入图片描述在这里插入图片描述
50.1在这里插入图片描述在这里插入图片描述
50.3在这里插入图片描述在这里插入图片描述I增大调节时间变短
50.5在这里插入图片描述在这里插入图片描述
51在这里插入图片描述在这里插入图片描述
100.01在这里插入图片描述在这里插入图片描述两幅图几乎一样
120.01在这里插入图片描述在这里插入图片描述
150.01在这里插入图片描述在这里插入图片描述P从10以后,曲线响应性降低,第一次达到的峰值随着P增大而减小

疑窦冰释,我终于明白了一切。











增量式PID的P、I理解之被遗失的真理篇

增域200时P为5曲线响应性取到峰值,增域100时P为10曲线响应性取到峰值。为什么?这只是因为5×200=999,10×100=999。没错,我写的是999,不是1000,而999就是我们的PWM的限幅值!我们的PWM被限制在-999到999,而999和1000几乎一样大。你以为这种情况是巧合吗?不,它不是巧合,而是必然。

P越大是否响应性越大?

尤其是当我们看到增域200、P=5、I=0.01的曲线响应性明显小于增域200、P=10、I=0.01时,这句话就不对了。其实,P的确是越大响应性越大,如果我们不限制PWM的最大和最小值,那么就是这种情况:10*200=2000。如果我们限制PWM最大是999,就是这种情况:10×200=999,你是否奇怪10×200不是=2000吗?为什么我要写999?原因是你限幅了,当大于999时,就取到999。而正是因为本来的2000被我们折到了999,这种操作引发的状况就是我们看到轮子在增域200、P=10、I=0.01时响应性变低了。如果我们能不限PWM的最大最小值,那么增域200、P=10、I=0.01时曲线的响应性一定会比增域200、P=5、I=0.01的高,并且P的响应特性将会是单调的一次型函数,不会是二次型函数。P的确是越大响应性越大,所以,这句话最正确的说法应该这么说:

那从未被人提起过的、被封印的真正意义

1.在初始PWM值==轮子的当前速度的情况下,如果条件:“PWM的限幅值>=增域×P系数+初始PWM值”成立,那么P越大响应性越大。I增大也能提高响应性,使调节时间变短,超调量不仅能减小,还能在没有超调量的时候补偿超调量。
2.在初始PWM值≠轮子的当前速度的情况,下小P(如0.1这么大)具有高响应性的潜力,P越小能超调的潜力和量就越高。I作用相同,I增大能提高响应性,使调节时间变短,超调量不仅能减小,还能在没有超调量的时候补偿超调量。

那么什么可以激活小P的响应性潜力呢?首先,初始PWM的值是能激活的,初始PWM最大和初始PWM非最大完全就是两个东西。虽然真实的物理世界里,你就是在调一个东西(电机),但初始PWM最大和初始PWM非最大这两种情况对应的参数完全不同,就是说一个东西有两套参数,而且这两套参数还差别大得离谱儿。初始PWM越大,小P(如P为0.1)的潜力会被越大的释放,超调量就越大,如下图。电机同样是从0转到200,但左图是主板和驱动板一起开,PWM初始为0的轮子响应情况,右图是先只开主板让单片机一直执行PID的代码,使得PWM被运算到999,再开驱动板时轮子的响应情况。

PI初始PWM为0初始PWM为999描述
0.10.01在这里插入图片描述在这里插入图片描述左边是P没被激活的曲线特性,没有超调。右边有很大超调,峰值有800多,而设定值都是200

小的P(如0.1)潜力大(它的潜力有多大?是9990),被激活后超调量可以看到猛增,远大于没激活状态的。P越小潜力越大,大的P(如10)潜力小(它的潜力有多小?是99.9),当增域大的时候,被激活后没有超调,因为大P的潜力已经被激活就是达不到增域的值,大的P本应该是2000(因为10×200=2000,用P系数×增域),但是限幅的原因使得电机的PWM取不到2000,只能取到999,所以现在大的P的实际情况是10×200=999,被强制折中到了999,限幅的原因使得其潜力小于P=0.1的情况,0.1×200=20,而20<999,它没有被折中。

只有初始PWM能激活P的响应性潜力,积分作用的确能提高响应性,但是不能激活P的响应性潜力,如下图:

PI初始PWM为0描述
0.10.01在这里插入图片描述
0.10.1在这里插入图片描述I参数增大可以增加响应性
100.01在这里插入图片描述P为10可以看到在I小时,响应性很差
100.1在这里插入图片描述I增大能加快响应性,但是曲线第一下突增的峰值不能提高,两次都是100,最后靠积分作用,达到200.

积分不能激活P的潜力,像增域为200的情况,需要选择小P去提高第一下的突增峰值,可以这么说,P为10它的潜力已经被激活完了,就是100多这么大。我为什么说是P=10的潜力是100左右?P系数所对应的潜力值怎么算?请根据我给的不等式(PWM的限幅值>=增域×P系数+初始PWM值,我这里暂且将这个不等式命名为Bright不等式)去算,计算方法:把初始PWM值默认为0,用PWM的限幅值除以P系数即可得到P的潜力(此时P潜力的值=增域,但是P潜力不是增域,因为增域是给的,P潜力是算出来的),999/10=99.9。想要曲线更完美跟上设定值200,P要改小。那么P给多少是最合适的?也请根据Bright不等式计算:现在的情况是初始PWM值等于轮子的当前速度等于0,于是999/200=4.995≈5,所以P给到5。I参数的给定没有公式,自己慢慢调,靠实际效果给。

请看,P为5,I为0.3时,增域200所适合的完美参数:
在这里插入图片描述

…To Be Continued…

位置式PID控制器和增量式PID控制器是种常见的PID控制算法。 位置PID控制器是一种基于目标值与反馈之间的误差来算控制量的方法。它通过比目标值与反馈值的异,计算出一个误差号,然后使用比例(P)、积分(I)和微分(D)三个参数对误差信号进行处理,以得到最终的控制量。位置式PID控制器的计算公式如下: \[Output = K_p \cdot error + K_i \cdot \int error \,dt + K_d \cdot \frac{{d(error)}}{{dt}}\] 其中,\(K_p\)、\(K_i\)和\(K_d\)分别是比例、积分和微分参数。 增量式PID控制器是一种基于每次采样时误差的变化量来计算控制量的方法。它通过比较当前采样时刻的误差与上一采样时刻的误差之差,计算出一个增量信号,然后使用比例(P)、积分(I)和微分(D)三个参数对增量信号进行处理,以得到最终的控制量。增量式PID控制器的计算公式如下: \[Output = Output_{last} + K_p \cdot (error - error_{last}) + K_i \cdot error + K_d \cdot (error - 2 \cdot error_{last} + error_{last2})\] 其中,\(Output_{last}\)是上一采样时刻的控制量,\(error_{last}\)和\(error_{last2}\)分别是上一采样时刻和上上一采样时刻的误差。 总的来说,位置式PID控制器适用于对系统的稳态误差进行补偿,而增量式PID控制器适用于对系统的动态响应进行调节。选择哪种控制算法取决于具体的应用场景和系统特性。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值