首页 > 其他分享 >位置式PID和增量式PID

位置式PID和增量式PID

时间:2022-10-24 10:45:54浏览次数:30  
标签:偏差 val err 积分 位置 pid 增量 PID

PID介绍

PID 是 Proportional(比例)、Integral(积分)、Differential(微分)的首字母缩写;是一种结合比例、积分和微分三种环节于一体的闭环控制算法。PID 控制的实质是对目标值和实际值误差进行比例、积分、微分运算后的结果用来作用在输出上。

比例 (P)

比例控制是最简单的一种控制方式,成比例的反应控制系统中输入与输出的偏差信号,只要偏差一旦产生,就立即产生控制的作用来减小产生的误差。比例控制器的输出与输入成正比关系,能够迅速的反应偏差,偏差减小的速度取决于比例系数 Kp,Kp 越大偏差减小的就越快,但是极易引起震荡;Kp 减小发生震荡的可能性减小,但是调节的速度变慢,单纯的比例控制存在不能消除的静态误差,这里就需要积分来控制。

积分(I)

在比例控制环节产生了静态误差,在积分环节中,主要用于就是消除静态误差提高系统的无差度。积分作用的强弱,取决于积分时间常数 Ti,Ti 越大积分作用越弱,反之则越强。积分控制作用的存在与偏差 e(t) 的存在时间有关,只要系统存在着偏差,积分环节就会不断起作用,对输入偏差进行积分,使控制器的输出及执行器的开度不断变化,产生控制作用以减小偏差。在积分时间足够的情况下,可以完全消除静差,这时积分控制作用将维持不变。Ti 越小,积分速度越快,积分作用越强。积分作用太强会使系统超调加大,甚至使系统出现振荡。

微分(D)

微分环节的作用是反应系统偏差的一个变化趋势,也可以说是变化率,可以在误差来临之前提前引入一个有效的修正信号,有利于提高输出响应的快速性, 减小被控量的超调和增加系统的稳定性,虽然积分环节可以消除静态误差但是降低了系统的响应速度,所以引入微分控制器就显得很有必要,尤其是具有较大惯性的被控对象使用 PI 控制器很难得到很好的动态调节品质,系统会产生较大的超调和振荡,这时可以引入微分作用。在偏差刚出现或变化的瞬间,不仅根据偏差量作出及时反应(即比例控制作用),还可以根据偏差量的变化趋势(速度)提前给出较大的控制作用(即微分控制作用),将偏差消灭在萌芽状态,这样可以大大减小系统的动态偏差和调节时问,使系统的动态调节品质得以改善。微分环节有助于系统减小超调,克服振荡,加快系统的响应速度,减小调节时间,从而改善了系统的动态性能,但微分时间常数过大,会使系统出现不稳定。微分控制作用一个很大的缺陷是容易引入高频噪声,所有在干扰信号比较严重的流量控制系统中不宜引入微分控制作用。

PID框图

PID控制其实就是对偏差的控制过程;如果偏差为 0, 则比例环节不起作用,只有存在偏差时,比例环节才起作用;积分环节主要是用来消除静差,所谓静差,就是系统稳定后输出值和设定值之间的差值,积分环节实际上就是偏差累计的过程,把累计的误差加到原有系统上以抵消系统造成的静差;而微分信号则反应了偏差信号的变化规律,也可以说是变化趋势,根据偏差信号的变化趋势来进行超前调节,从而增加了系统的预知性。

 

PID结构体初始化
typedef struct
{
    float target_val;    //目标值
    float actual_val;    //实际值
    float err;            //定义偏差值
    float err_last;        //定义上一偏差值
    float err_next;        //定义下一偏差值
    float Kp,Ki,Kd;        //定义比例、积分、微分系数
    float integral;        //定义积分值
}pid;

/*位置式PID*/
float PID_realize(float temp_val)
{
    /*计算目标值与实际值的误差*/
    pid.err=pid.target_val-temp_val;
    /*误差累积*/
    pid.integral+=pid.err;
    /*PID算法实现*/
    pid.actual_val=pid.Kd*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);
    /*误差传递*/
    pid.err_last=pid.err;
    /*返回当前实际值*/
    return pid.actual_val;
}

/*增量式PID*/
float PID_realize(float temp_val)
{
    /*传入目标值*/
    pid.target_val=temp_val;
    /*计算目标值与实际值的误差*/
    pid.err=pid.target_val-pid.actual_val;
    /*PID算法实现*/
    float increment_val=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);
    /*累加*/
    pid.actual_val+=increment_val;
    /*误差传递*/
    pid.err_last=pid.err_next;
    pid.err_next=pid.err;
    /*返回当前实际值*/
    return pid.actual_val;
}

对比区别
• 增量式算法不需要对积分项累加,控制量增量只与近几次的误差有关,计算误差对控制量计算的影响较小。而位置式算法要对近几次的偏差的进行积分累加,容易产生较大的累加误差;

• 增量式算法得出的是控制量的增量,例如在阀门控制中,只输出阀门开度的变化部分,误动作影响小,必要时还可通过逻辑判断限制或禁止本次输出,不会严重影响系统的工作;而位置式的输出直接对应对象的输出,因此对系统影响较大;

• 增量式算法控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式算法适用于执行机构不带积分部件的对象,如电液伺服阀;

• 在进行 PID 控制时,位置式 PID 需要有积分限幅和输出限幅,而增量式 PID 只需输出限幅。

位置式 PID 优缺点:

优点:位置式 PID 是一种非递推式算法,可直接控制执行机构(如平衡小车),u(k) 的值和执行机构的实际位置(如小车当前角度)是一一对应的,因此在执行机构不带积分部件的对象中可以很好应用;

缺点:每次输出均与过去的状态有关,计算时要对 e(k) 进行累加,运算工作量大。

增量式 PID 优缺点:

优点1. 误动作时影响小,必要时可用逻辑判断的方法去掉出错数据。

2. 手动/自动切换时冲击小,便于实现无扰动切换。

3. 算式中不需要累加。控制增量 Δu(k) 的确定仅与最近 3 次的采样值有关。在速度闭环控制中有很好的实时性。

缺点:1. 积分截断效应大,有稳态误差;

2. 溢出的影响大。有的被控对象用增量式则不太好;

总结
比例:某时刻误差值
积分:所有时刻误差和
微分:某时刻误差变化率

标签:偏差,val,err,积分,位置,pid,增量,PID
From: https://www.cnblogs.com/qianyehuanying/p/16820719.html

相关文章

  • SpringBoot项目整合Mybatis时Mapper.xml文件的存放位置
    SpringBoot项目整合Mybatis时Mapper.xml文件的存放位置目录:方式一:放在与Mapper接口同级目录方式二:在resources创建Mapper接口同名文件夹用来存放Mapper.xml文件方式三:......
  • matlab simulink实现分数阶pid加模糊pid控制的汽车六轮转向
    1、内容简介略可以交流、咨询、答疑2、内容说明基于分数阶微积分理论,采用Oustafod滤波器对分数阶微积分算子进行逼近,得出传递函数,再采用Simu—link的子系统封装功能,设计......
  • Pygame实战(一):随机抽位置
    目录Pygame实战(一):随机抽位置一、概述1、简介2、设计思路3、成果展示二、开始编程1、配置文件2、程序界面2.1读取配置2.2工具类2.3显示区2.4操作区2.5随机矩形3......
  • solr - 环境变量 SOLR_HOME 的真正根目录位置
    echo"exportSOLR_HOME="${setup}${plugNme}/server/solr>>/etc/profile给环境变量配置的solr根目录位置应该是solr安装根目录里的  /server/solr  千万不要设......
  • 解密地理位置模拟攻防之道
    有钱赚的地方就有黑灰产。近几年,随着互联网技术的发展,黑灰产的规模也日渐庞大。据统计,国内黑灰产从业者规模超过百万;2021年,黑灰产造成的损失已高达千亿级,可预见的是,凡有利......
  • .NET Core 使用 DotnetSpider 抓取页面教程
    本文主要介绍通过DotnetSpider写少量代码快速的实现网页的抓取。1、通过Nuget安装引用DotnetSpider项目上右键-》选择"管理Nuget程序包" -》搜索"DotnetsSpider" ......
  • 14 scrapy的crawlspider爬虫
    scrapy的crawlspider爬虫学习目标:了解crawlspider的作用应用crawlspider爬虫创建的方法应用crawlspider中rules的使用1crawlspider是什么回顾之前的代码中,我......
  • XX学Python·pandas dataframe读取csv、tsv,使用行列标签和位置读取
    1.DataFrame和Series简介pandas是用于数据分析的开源Python库,可以实现数据加载,清洗,转换,统计处理,可视化等功能。pandas最基本的两种数据结构:1)DataFrame用来处理结......
  • torch:针对mask掉的位置不进行softmax
    错误方式希望在进行softmax之前,如果对被mask掉的位置加上一个特别小的数字,那么softmax之后就会变成0。pad_mask=(1-doc_token_mask)*(-1999999)#把原本0的位置......
  • 增量表与全量表
    目录如何判断一张表是增量表还是全量表如何判断一张表是增量表还是全量表1.看每天的数据量变化,如果每天都差不多,是全量,如果变化很大,是增量。验证语句:selectdt,count(1)......