PID详解_pid

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    PID在控制领域应该是应用最为广泛的算法了在工业控制汽车电子等诸多领域中运用
    下面我用一个例子和算法过程来讲解PID的概念
    PID
    P比例控制基本作用就是控制对象以线性的方式增加在一个常量比例下动态输出
    缺点会产生稳态误差
    I积分控制基本作用就是用来消除稳态误差
    缺点会增加超调
    D微分控制基本作用就是减弱超调加大惯性响应速度
    1、什么是PID及其作用
    在这里插入图片描述

    上图描述: 设定一个输出目标,反馈系统传回输出值,如与目标不一致,则存在一个误差,PID 根据此误差调整输入值,直至输出达到设定值.
    为什么需要PID呢比如控制温度我们需要设置一个要达到的目标温度值当将温度稳定在目标温度值
    例如我们希望水的目标温度值为70°其希望无非就是可以快速而且无抖动的达到70°并稳定在70°
    如果我们使用普通的方式加热当温度到达70°后就以及停止加热岂不是简单快速当然用在要求不高的场合也可以但是如果要求更高的场合呢会出现温度到达70°后由于加热器的余温会使温度继续上升并且再加上环境的温度会散热所以我们无法将水温很平稳的稳定在70°
    在这里插入图片描述

    总结一下我们需要PID的作用无非就是无法通过普通控制手段快速稳定的输出到目前设定值
    2、公式
    PID算法公式
    经过化解后的公式

    Kp-------比例常数

    Ki= (Kp*T)/Ti------积分常数

    Kd=(Kp*Td)/T------微分常数

    3、实战例子
    小明接到一个任务: 有个水桶,需要时刻保持1m 的高度,目前水桶里有0.2m 的水

    那么小明采用P(比例) 的方法加水:即每次测量与1m 的误差,并加入与误差成比例的水量

    设Kp=0.4
    第一次,误差是 e(1)=1-0.2=0.8m,那么加入水量是 Kp0.8= 0.40.8 = 0.32m.当前水桶水位0.2+0.32=0.52

    第二次, 误差是e(2) = 1-(0.2+0.32) =0.48m 那么加入水量是 Kp*0.48=0.192m当前水桶水位0.52+0.192=0.712

    在这里插入图片描述
    在这里插入图片描述
    通过P比例控制完美解决了快速稳定在目前值但是在实际环境中得考虑各种影响问题所以
    小明的新任务: 有个水桶,但桶底漏了个洞,仍需保持1m 的高度,目前水桶里有0.2m 的水,但每次加水都会流出0.1m. 这个例子就接近我们实际工程的例子了,比如电机摩擦的阻力,损耗.
    P (比例控制) u= Kp e (e为与上次差值)*
    当前水量0.2m目前值水量1m
    设Kp=0.4. 则u= 0.4*e ,e=上次水量 - 当前水量

    第一次,误差是 e(1)=1-0.2=0.8m,那么加入水量是 Kp0.8= 0.40.8 = 0.32m.当前水桶水位0.2+0.32 -0.1=0.42

    第二次, 误差是e(2) = 1-0.42 =0.58m 那么加入水量是 Kp*0.58=0.232m当前水桶水位0.42+0.232 - 0.1=0.552
    在这里插入图片描述
    在这里插入图片描述
    问题来了,水位最终在0.75m 处稳定了,但是,当误差是0.25m 时,加水量时0.1,每次加入的刚好等于漏掉的0.1.

    这里就引入了稳态误差的概念:即当系统到达稳态时与目标的误差.
    当我们加大KP时增加值1
    在这里插入图片描述
    已经更接近目前值了当我们继续增加呢
    在这里插入图片描述
    当增加值1.8时已经非常接近1m的水量了但是也出现了非常大的抖动
    结论: 比例控制引入了稳态误差,且无法消除.比例常数增大可以减小稳态误差,但如果太大则引起系统震荡,不稳定.
    为了消除稳态误差,第二次加入积分,使用PI(比例积分控制)在这里插入图片描述
    积分控制就是将历史误差全部加起来乘以积分常数.
    一样的情况现在设Kp=0.4,Ki= 0.3
    第一次,误差是 e(1)=1-0.2=0.8m,那么加入水量是 Kp0.8 = 0.40.8 = 0.32m , KI * e(1) = 0.3 * 0.8 = 0.24 加入水量 = 0.32 + 0. 24= 0.56 当前水桶水位0.2+ 0.56 - 0.1=0.66
    第二次,误差是 e(2)=1-0.66=0.34m,那么加入水量是 Kp0.34 = 0.40.34 = 0.136m , KI * (e(2)+e(1)) = 0.3 * 1.14 = 0.342 加入水量 = 0.136m + 0.342 = 0.478 当前水桶水位0.66+ 0.478 - 0.1=1.038
    在这里插入图片描述
    我们发现加入KI后有效的消除了稳态误差但是发现了超调现象
    在这里插入图片描述
    如果我们增加KI呢
    在这里插入图片描述
    超调也会增加同样减小KI值超调也会变小
    在这里插入图片描述
    结论:

    只要存在偏差,积分就不停的累计,直到误差为0, 积分项不再累加,变成一个常数,可以抵消稳态误差.
    在表中最后几项的输出已经非常接近0.1说明消除了稳态无处但是却出现的超调的部分
    所以为了消弱超调KD出现了
    所以公式是
    在这里插入图片描述
    设Kp=0.4,Ki= 0.3,Kd=0.3水位0.2目标水位1
    第一次,误差是 e(1)=1-0.2=0.8m,那么加入水量是 Kp0.8 = 0.40.8 = 0.32m , KI * e(1) = 0.3 * 0.8 = 0.24 KD = 0 因为当前水位差就是0.8 加入水量 = 0.32m + 0.24 = 0.56 当前水桶水位0.2+ 0.56 - 0.1=0.66
    第二次,误差是 e(2)=1-0.66=0.34m,那么加入水量是 Kp0.34 = 0.40.34 = 0.136m , KI * (e(2)+e(1)) = 0.3 * 1.46 = 0.342 KD e(2) - (e1)= 0.3(0.342 - 0.8) = -0.138 加入水量 = 0.136m + 0.342 -0.138 = 0.34 当前水桶水位0.66+ 0.34 - 0.1=0.9
    在这里插入图片描述
    有明显的削弱超调

    结论: 微分能够减弱超调趋势.

    为了更明显对比三个系数的关系我们进行计算对比看下图
    设初始水位0.2目前水位1流出水位0.1KP=0.4,KI=0.3,KD=0.3
    首先是数据对比
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    仔细查看三个图的最终水量的变化
    只有KP情况下第一张图水位无法达到目标水位
    有KP和KI情况下第二张图水位达到目标水位但是出现超调
    有PID的情况下第三张图在出现超调后KD马上进行的减小有效抑制了超调
    说明PID三个参数是随意设定所以在调整时需要不断测试及根据经验调试
    下面用曲线图对比
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    此参数只是参考具体PID参数的设置需要不断尝试直到达到标准
    如果运用在电机控制领域同样在控制输出给电机的电流大小一般通过PWM去控制输出的电流量通过反馈的采样电阻得知当前的电机转速也就是说我们设定目前转速采样当前电机转速去调整PID三个参数经过不断尝试达到预定状态但是在控制电机时会涉及到电机的开环和闭环开环简单来说就是电机加速的过程相当于电机从0到预定转速并平稳后的过程而闭环就是后续稳定的运行过程如果图中所示
    在这里插入图片描述
    所以对于电机的调试一般开环转闭环的过程会比较麻烦一些当在调试过程中你会发现你设定转速达不到预定转速这时你就要想到出现了稳态误差需要KI的帮助当你加入了KI后可能转速达到了预定转速但是可能出现启动抖动的想象或者出现启动电流很大这样的想象所以可以加入KD去削弱超调减小抖动或启动电流只有三个参数配合得当时才会启动稳定运行正常当然要考虑电机的属性以及电路的设计开关管的参数等等。
    谢谢
    excel计算链接PID算法
    https://kdocs.cn/l/chUfS9QXdozS

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6