赞
踩
本文仅是笔者对于PID算法的个人理解,读者看到文章有误请指正。
PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很 常见的控制算法。
常见的PID算法有:位置式PID,增量式PID,串级PID等。
我们的目的是让输出快速稳定的达到目标植,可以允许有一点小过冲,但是整体一定要保持稳定可控
连续
但是在实际控制中,无法获取到连续的传感器数值,只能尽可能的获取到较小 △t 内的数值,因此要转
换为离散型的方程
离散
当然这是最简单的位置式PID。
这里我想用经典的水箱尝试复现比例控制的过程
假设想要然水缸里的水箱保持在1.0m的高度,初始高度是0.2m,而且这个水箱不会漏水
这个时候要是Kp再打就会引起系统崩坏
Kp的增大可以让系统反应更加迅速,但是会导致系统产生抖动
反制系统的反应会减慢,抖动会减小
所以要在系统的输出不震荡的时候尽可能的增大Kp,提高系统反应速度。
但是还记得我说的水箱是不会漏水的水箱吗?这种系统在实际应用中是不存在的。可能不会漏水的水箱在现实生活中会存在,但实际运用的速度环,角度环,温度环都会受到环境的影响(可以是摩擦力,外界温度等等)。如果不漏水的水箱在电机速度环中存在的话就是,电机一旦加速到目标速度之后,再不用给输出它都能保持当前速度。这是不合理的。
所以现在水箱是一个漏水的水箱,假设想要然水缸里的水箱保持在1.0m的高度,初始高度是0.2m,Kp=0.5,每次加水的时候会漏水0.1m。假设经过几次加水,水缸中的水位到0.8时,水位将不会再变换!!!因为水位为0.8,则误差error=0.2,所以每次往水缸中加水的量为u=0.5∗0.2=0.1,同时,每次加水,缸里又会流出去0.1米的水!加入的水和流出的水相抵消,水位将不再变化!!
也就是说,目标是1米,但是最后系统达到0.8米的水位就不再变化了,且系统已经达到稳定,由此产生的误差就是稳态误差了这个时候就要引入积分控制。
假设error的误差为5且保持不变,积分的几何意义就是所为面积
当参数不变时,随着时间累积,积分值会越来越大(小)
假设想要漏水的水箱保持在1.0m的高度,初始高度是0.2m,每次加水的时候会漏水0.1m。此时的Kp为1.0
如果没有加上Ki的话,每次加水漏水就永远没办法达到1m的事实
如果加上合适的Ki会怎么样呢?
此时输出就能把静态误差平掉,在1附近震荡
分析可以发现,P对应的差值在初始的时候非常的大,因此K对应的积分增长得也特别的快,又由于计算公式是做加法,这就导致了在刚开始的时候控制值较大,且很容易过冲
由此可见,其实Kp在稳态附近已经没有什么作用了,积分值会让他维持在目标植附近震荡,但是过高的Ki会使系统不稳定,所以我们需要在系统稳定达到目标值的情况下,尽量减小Ki
Kd 过大会导致接近过程中产生不必要的抖动
Kd 主要用于防止过冲和降低稳态时的震动幅度,但过大反而会加剧抖动
打开matlab,运行simulink,照着下面的图进行连接。图中的系统为一个PID控制一阶系统。
位置式PID调参的过程是:P->I->D
如果P太小,响应速度就会比较慢
Kp=0.1,Ki=0,Kd=0
Kp=0.4,Ki=0,Kd=0
可以看到系统响应加快,但是超调量只产生了一个波峰,所以还需要继续增大P使输出产生两个左右明显的波峰
Kp=1.0,Ki=0,Kd=0
如果继续增大Kp输出就会开始震荡
Kp=1.5,Ki=0,Kd=0
继续增大Kp就会崩坏,在一个值之间很夸张的震荡
对比一下加了Ki和没有加上合适Ki的图,可以发现静态误差确实平掉了
注意看输出稳定值
Kp=1.0,Ki=0,Kd=0
Kp=1.0,Ki=1/150,Kd=0
如果Ki过小,实际上慢慢跑也是能到目标值的,但是就失去了开始时与Kp叠加加速到达目标值的作用
Kp=1.0,Ki=1/500,Kd=0
但是要是Ki过大就是引起很多震荡
Kp=1.0,Ki=1/50,Kd=0
一个合适的Kd能缓冲Ki和Kp的过冲
Kp=1.0,Ki=1/150,Kd=0
但是我差不多只能调成这样了
如果Kd的值太小Kd对输出的作用就很小了。但是过大的Kd会让系统产生很多没必要的震荡,所以要在系统输出较为稳定的情况下尽可能提高Kd。
Kp=1.0,Ki=1/150,Kd=50
上述调参数的过程均为位置式PID的过程,但是增量式PID的调参顺序与位置式有所不同。
位置式PID:
增量式PID:
位置式PID:
比例项只考虑现在有没有偏差,现在有偏差就开始控制,现在偏差越大,控制效果越明显。
积分项根据历史数据输出控制信号,如果历史总体超标就要减小输出信号,如果历史不达标那要大量输出控制信号
微分项只关注偏差有没有变化趋势,偏差有了变化趋势才开始控制(而不是偏差存不存在),即偏差的变化率。
增量式PID:
Kp项是误差变化率
Ki项是误差
Kd项是变化率的变化率
私以为增量式PID只有Ki一项也能消除静态误差,如果我Matlab的图没有画错的话
感觉真的很像是位置式PID的Ki,本质上也是把误差累加。
但是我感觉加了Kp感觉i变化不大
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。