控制算法学习笔记——PID参数整定日记

序言

本文仅是笔者对于PID算法的个人理解,读者看到文章有误请指正。

一、PID简介

PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很 常见的控制算法。
常见的PID算法有:位置式PID,增量式PID,串级PID等。
我们的目的是让输出快速稳定的达到目标植,可以允许有一点小过冲,但是整体一定要保持稳定可控

二、由连续到离散

连续
在这里插入图片描述
但是在实际控制中,无法获取到连续的传感器数值,只能尽可能的获取到较小 △t 内的数值,因此要转
换为离散型的方程
离散
在这里插入图片描述
当然这是最简单的位置式PID。

  • 先看比例系数后的error就是每次目标植error=reference-current_value
  • 再看Ki后的式子,连续积分时是从0->terror对时间的积分,到了离散积分就是每一段周期T内的error*T的黎曼和,此时的周期T已经融进系数Ki中。
  • 最后的是Kd后的式子,连续积分时是对error进行微分,到了离散积分时是当前的error减去前一次的error再除以周期T,此时分母的T也是融进系数Kd中。

三、PID参数意义

1.Kp

这里我想用经典的水箱尝试复现比例控制的过程
假设想要然水缸里的水箱保持在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米的水位就不再变化了,且系统已经达到稳定,由此产生的误差就是稳态误差了这个时候就要引入积分控制。

2.Ki

假设error的误差为5且保持不变,积分的几何意义就是所为面积
在这里插入图片描述
在这里插入图片描述
当参数不变时,随着时间累积,积分值会越来越大(小)
假设想要漏水的水箱保持在1.0m的高度,初始高度是0.2m,每次加水的时候会漏水0.1m。此时的Kp为1.0
如果没有加上Ki的话,每次加水漏水就永远没办法达到1m的事实
在这里插入图片描述
在这里插入图片描述
如果加上合适的Ki会怎么样呢?
在这里插入图片描述

在这里插入图片描述
此时输出就能把静态误差平掉,在1附近震荡
分析可以发现,P对应的差值在初始的时候非常的大,因此K对应的积分增长得也特别的快,又由于计算公式是做加法,这就导致了在刚开始的时候控制值较大,且很容易过冲
由此可见,其实Kp在稳态附近已经没有什么作用了,积分值会让他维持在目标植附近震荡,但是过高的Ki会使系统不稳定,所以我们需要在系统稳定达到目标值的情况下,尽量减小Ki

3.Kd

Kd 过大会导致接近过程中产生不必要的抖动
Kd 主要用于防止过冲和降低稳态时的震动幅度,但过大反而会加剧抖动

四、Matlab仿真

打开matlab,运行simulink,照着下面的图进行连接。图中的系统为一个PID控制一阶系统。
在这里插入图片描述
位置式PID调参的过程是:P->I->D

1.先调Kp

如果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就会崩坏,在一个值之间很夸张的震荡

在这里插入图片描述

2.再调Ki

对比一下加了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

一个合适的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:
比例项只考虑现在有没有偏差,现在有偏差就开始控制,现在偏差越大,控制效果越明显。
积分项根据历史数据输出控制信号,如果历史总体超标就要减小输出信号,如果历史不达标那要大量输出控制信号
微分项只关注偏差有没有变化趋势,偏差有了变化趋势才开始控制(而不是偏差存不存在),即偏差的变化率。
增量式PID:
Kp项是误差变化率
Ki项是误差
Kd项是变化率的变化率
私以为增量式PID只有Ki一项也能消除静态误差,如果我Matlab的图没有画错的话
在这里插入图片描述
感觉真的很像是位置式PID的Ki,本质上也是把误差累加。
在这里插入图片描述
但是我感觉加了Kp感觉i变化不大

尾声

  • Kp能让输出达到响应的数量级,恰到好处的会在前期起到追速度的作用(过小的Kp会使系统响应慢,过大的Kp会使系统震荡)
  • Ki能在前期与Kd一起作用加快输出,在后期扛起大旗维持位置,起到追位置的作用(过小的Ki会使系统反应慢,过大的Ki会让系统震荡)
  • Kd起到未雨绸缪的作用,能抵消一部分过冲
    首先调节P的数量级达到一个只有2个左右明显峰值的波形,使Ki保持在不会波形振荡也不会没有超调的的区间,于是在一个在系统输出稳定的情况下要尽量加大Kd,尽可能抵消过冲。
    参考自:
    PID控制参数整定(调节方法)原理+图示+MATLAB调试
    快速入门Simulink的PID仿真
    PID控制中P、I、D参数的作用究竟是什么?
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我知道了,下面是我的回答: 聚类算法是一种无监督学习算法,它可以将数据集中的数据按照某种规则进行分组,使得同一组内的数据相似度较高,不同组之间的数据相似度较低。聚类算法可以帮助我们对数据进行分类、分析和理解,同时也可以为其他机器学习任务提供数据预处理和特征提取的支持。 聚类算法的基本流程包括:确定聚类算法的目标函数、选择相似度度量方法、选择聚类算法、确定聚类的数量、进行聚类操作以及评估聚类效果。常见的聚类算法包括K-Means算法、层次聚类算法、密度聚类算法等。 K-Means算法是一种基于距离的聚类算法,它的基本思想是将数据集中的数据划分为K个簇,使得同一簇内的数据相似度较高,不同簇之间的数据相似度较低。K-Means算法的优点是计算复杂度较低,容易实现,但是需要预先指定簇的数量和初始聚类中心。 层次聚类算法是一种基于相似度的聚类算法,它的基本思想是不断合并数据集中相似度最高的数据,直到所有数据都被合并为一个簇或达到预先设定的簇的数量。层次聚类算法的优点是不需要预先指定簇的数量和初始聚类中心,但是计算复杂度较高。 密度聚类算法是一种基于密度的聚类算法,它的基本思想是将数据集中的数据划分为若干个密度相连的簇,不同簇之间的密度差距较大。密度聚类算法的优点是可以发现任意形状的簇,但是对于不同密度的簇分割效果不佳。 以上是聚类算法的基础知识,希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值