零基础制作平衡小车【连载】10---PID调参

PID实战也已经结束了,基本上也算上是一个小项目了完成了,既然完成了,这篇就来做个总结一下吧。

网上很多关于PID调参的文档,基本都是理论,也没有图片说明,这对于小白入门来说很是头疼。别人的理论咱都看的懂,一到自己就懵逼。为了解决这一问题,我把程序源码放到公众号了,你可下载下来,在结合我这片文档说明,自己动手实践一下。自己不实践,心里总是没底,只有自己体会一下,才能真正弄明白。

PID调参

首先说说调参吧,关于PID调参,我用一句话总结一下:跟着感觉走。

为啥要这样说呢,因为对于初学者来说,只是写个程序,然后用试凑法进行匹配PID三个系数,以此来达到较好的控制效果。试凑法是什么,不就是跟着感觉走嘛,这种感觉就跟写英语试卷一样。

不过话又说过来,这个感觉可不是随心所欲,为所欲为的,这也是有一定理论基础支撑的。一般调节方法我做个总结,如下:

1.先调节P项,其他项系数都设为0

这个P项怎么调呢?再调之前我们先回忆一下【连载6】讲的内容,P到底有什么用。首先看下单独P项的公式:

OUTp= K*Ek
OUTp= 系数*(设定值 - 当前采样值)

Ek为当前误差。

以我们实战的例子来讲,假设我们设定的目标值为100,我们此刻采样的编码器的值为50,此时PID中I和D的系数都为0,也就说后面两项不用管,只关心P项就行了。而P项公式是当前误差乘上一个系数,这个系数就是我们要设定的P项系数,那么我们是不是应该将P尽可能的大,因为我们需要系统尽快的达到设定值,根据这个思路我们先将P设定为0.5,先试试效果。

当P = 0.5时,实际效果如下图:
零基础制作平衡小车【连载】10---PID调参_第1张图片

图片上的点点是实际采样的编码器脉冲数,横线是我们设定的目标值。

看看点点形成的抛物线,虽然能达到目标值,但是时间有点长,这个效果不是最好的,当然这个也不是绝对的,有些系统是需要慢慢接近目标值的,要看系统要求。这里我们控制转速,目的是让转速尽可能快的接近目标值,因此我们在加大P项试试。

当P = 1时,实际效果如下图:

零基础制作平衡小车【连载】10---PID调参_第2张图片

相比上面那张图片是不是明显更快的接近目标值了,抛物线更陡了,说明速度更快了。一般情况下,我们单独调节P时要将实际采样值超过目标值的百分之30-50左右,那么我们试试将P设为5

当P = 5时,感觉还不错,抖个两三下就可以达到很好地效果了,实际效果如下图:

2.在P = 5的基础上,调节I

你会发现,只有一个P就能达到几乎无静态误差的效果,原因是程序中采集完编码器值代入pid计算,计算完会得出一个增量值,之后用之前的pwm加上计算之后的增量值,如果这次刚好没误差,pwm会保持上一次的值。不过加上I你会发现,不仅速度变快了,而且过冲变小。

当I = 1时,实际效果如下图:效果是不是特别好,迅速达到目标值稳定下来。
相比刚才没有I的时候,过冲是不是变小了。这种效果基本上已经算的上是完美了、

当I = 2时,实际效果如下图:I的抑制太大
零基础制作平衡小车【连载】10---PID调参_第3张图片
当I = 0.05时,实际效果如下图:I的抑制太小

零基础制作平衡小车【连载】10---PID调参_第4张图片

其实就本系统而言,已经不需要D了,目前P=5,I=1时效果就已经很不错了。不过既然是学习,就把每一个参数都演示一下,看看到底都是起到什么作用,和我们前面说的理论是否一致。

3.在P = 5,I = 0.05的基础上,调节D
选择I=0.05是为了让系统继续有个过冲,因为D是起到预判作用的,会削弱增长的速度,如果I=1,在加上D,系统的增长速度就慢了。

当D = -0.05时,实际效果如下图:

零基础制作平衡小车【连载】10---PID调参_第5张图片
当D=-1时,效果如下图:你会发现D越大,回弹的力度就越大,系统震荡时间变长。这是积分作用时间长造成的。微分过大,造成阻尼过大,积分面积就过大,造成超调。 在没达到目标值前,积分都是正的,越接近目标值,pd作用越小,而积分却累积了很大。第一次超调之后积分才慢慢可以和负的抵消。最后慢慢接近目标值。

最终确定P=5,I=0.05,D=-0.05。

这就是整个PID调参过程。

总结

  1. P的作用是将系统尽可能快的接近目标值,在调参的时候,先将ID设为0,之后将系统调节至超调量为目标值的50%左右,通俗的讲就是将系统超过目标值一些。
  2. I的作用是消除静态误差
  3. D的作用也是阻尼,当Kd越大,你会发现震荡越严重,就像一个弹簧,你往外拉的力越大,弹簧反弹的力越大

其实光看是不行的,只有自己亲自调试一遍,心里才有谱。

你可能感兴趣的:(平衡小车,人工智能,编程语言,stm32,pid)