位置式PID与增量式PID区别浅析(百度百科增量式PID讲解思路概念更明确清晰)_增量式pid和位置式pid的区别-程序员宅基地

技术标签: 硬件  

位置式PID与增量式PID区别浅析

Z小旋 2019-04-26 08:55:12  59882  收藏 713
分类专栏: NXP智能车学习 文章标签: 位置式PID PID 增量式PID
版权
1PID控制算法
什么是PID
PID 控制器以各种形式使用超过了 1 世纪,广泛应用在机械设备、气动设备 和电子设备.在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法

PID 实指“比例 proportional”、“积分 integral”、“微分 derivative”,这三项构 成 PID 基本要素。每一项完成不同任务,对系统功能产生不同的影响。它的结构简单,参数易 于调整,是控制系统中经常采用的控制算法。

PID:比例单元(P)、积分单元(I)和微分单元(D)组成

PID控制公式

其中:u(t)为控制器输出的控制量;(输出)

e(t)为偏差信号,它等于给定量与输出量之差;(输入)

KP 为比例系数;(对应参数 P)

TI 为积分时间常数;(对应参数I)

TD 为微分时间常数。(对应参数 D) 

 

数字 PID 控制算法通常分为位置式 PID 控制算法和增量式 PID 控制算法。  

位置式 PID 算法 :


 e(k): 用户设定的值(目标值) -  控制对象的当前的状态值 

比例P :    e(k)

积分I :   ∑e(i)     误差的累加

微分D :  e(k) - e(k-1)  这次误差-上次误差

也就是位置式PID是当前系统的实际位置,与你想要达到的预期位置的偏差,进行PID控制

因为有误差积分 ∑e(i),一直累加,也就是当前的输出u(k)与过去的所有状态都有关系,用到了误差的累加值;(误差e会有误差累加),输出的u(k)对应的是执行机构的实际位置,,一旦控制输出出错(控制对象的当前的状态值出现问题 ),u(k)的大幅变化会引起系统的大幅变化

并且位置式PID在积分项达到饱和时,误差仍然会在积分作用下继续累积,一旦误差开始反向变化,系统需要一定时间从饱和区退出,所以在u(k)达到最大和最小时,要停止积分作用,并且要有积分限幅和输出限幅

所以在使用位置式PID时,一般我们直接使用PD控制

而位置式 PID 适用于执行机构不带积分部件的对象,如舵机和平衡小车的直立和温控系统的控制

 

结合代码可以很好理解

typedef struct PID

  float P,I,D,limit;
}PID;
 
typedef struct Error
{
  float Current_Error;//当前误差
  float Last_Error;//上一次误差
  float Previous_Error;//上上次误差
}Error;
 
/*! 
 *  @brief      位置式PID
 *  @since      v1.0
 *  *sptr :误差参数
 *  *pid:  PID参数
 *  NowPlace:当前位置
 *  Point:   预期位置  
 */
 
// 位置式PID控制
float PID_Realize(Error *sptr,PID *pid, int32 NowPlace, float Point)
{
 
    int32 iError,    // 当前误差
         Realize;   //实际输出    
 
    iError = Point - NowPlace;    // 计算当前误差
    sptr->Current_Error += pid->I * iError;    // 误差积分
      sptr->Current_Error = sptr->Current_Error > pid->limit?pid->limit:sptr->Current_Error;//积分限幅
      sptr->Current_Error = sptr->Current_Error <-pid->limit?-pid->limit:sptr->Current_Error;
    Realize = pid->P * iError       //比例P
            + sptr->Current_Error   //积分I
            + pid->D * (iError - sptr->Last_Error);  //微分D
    sptr->Last_Error = iError;              // 更新上次误差
    return Realize;    // 返回实际值
}
增量式PID
 

比例P :    e(k)-e(k-1)   这次误差-上次误差

积分I :   e(i)     误差   

微分D :  e(k) - 2e(k-1)+e(k-2)   这次误差-2*上次误差+上上次误差

 增量式PID根据公式可以很好地看出,一旦确定了 KP、TI  、TD,只要使用前后三次测量值的偏差, 即可由公式求出控制增量

而得出的控制量▲u(k)对应的是近几次位置误差的增量,而不是对应与实际位置的偏差     没有误差累加

也就是说,增量式PID中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果,并且在系统发生问题时,增量式不会严重影响系统的工作

总结:增量型 PID,是对位置型 PID 取增量,这时控制器输出的是相邻两次采样时刻所计算的位置值
之差,得到的结果是增量,即在上一次的控制量的基础上需要增加(负值意味减少)控制量。

 

typedef struct PID

  float P,I,D,limit;
}PID;
typedef struct Error
{
  float Current_Error;//当前误差
  float Last_Error;//上一次误差
  float Previous_Error;//上上次误差
}Error;
 
/*! 
 *  @brief      增量式PID
 *  @since      v1.0
 *  *sptr :误差参数
 *  *pid:  PID参数
 *  NowPlace:实际值
 *  Point:   期望值
 */
// 增量式PID电机控制
int32 PID_Increase(Error *sptr, PID *pid, int32 NowPlace, int32 Point)
{
 
    int32 iError,    //当前误差
        Increase;    //最后得出的实际增量
 
    iError = Point - NowPlace;    // 计算当前误差
 
    Increase =  pid->P * (iError - sptr->Last_Error)   //比例P
              + pid->I * iError      //积分I
              + pid->D * (iError - 2 * sptr->Last_Error + sptr->Previous_Error);  //微分D
    
    sptr->Previous_Error = sptr->Last_Error;    // 更新前次误差
    sptr->Last_Error = iError;              // 更新上次误差
    
    return Increase;    // 返回增量
}
增量式与位置式区别:
1增量式算法不需要做累加,控制量增量的确定仅与最近几次偏差采样值有关,计算误差对控制 量计算的影响较小。而位置式算法要用到过去偏差的累加值,容易产生较大的累加误差。 

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

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

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

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

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

增量式PID优缺点:
优点:
①误动作时影响小,必要时可用逻辑判断的方法去掉出错数据。
②手动/自动切换时冲击小,便于实现无扰动切换。当计算机故障时,仍能保持原值。
③算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关。


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

②溢出的影响大。有的被控对象用增量式则不太好;
————————————————
版权声明:本文为CSDN博主「Z小旋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/as480133937/article/details/89508034

增量式PID控制(百度百科)

 编辑 讨论 上传视频

本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。

增量式PID控制,数字PID控制算法的一种基本形式,是通过对控制量的增量(本次控制量和上次控制量的差值)进行PID控制的一种控制算法

中文名

增量式PID控制

外文名

Increment PID Control

基本概念

对控制量的增量进行PID控制

相关概念

位置式PID控制

相关领域

控制理论、自动化、计算机控制

主要优点

占用内存少、容错能力高

目录

  1. 基本概念
  2.  PID控制
  3.  模拟PID控制
  4.  数字PID控制
  5.  位置式PID控制
  6.  增量式PID控制
  1. 公式表示
  2.  连续PID控制
  3.  离散PID控制
  4.  增量式PID控制
  5. PID控制的特点
  1.  P控制
  2.  I控制
  3.  D控制
  4. 增量式PID控制

基本概念

编辑

PID控制

PID控制,即比例-积分-微分控制,是自动控制原理中定义的一种控制方法,也可以称为是校正方法 [1]  

PID控制主要是对系统偏差进行比例、积分、微分三种操作并线性组合成控制量,以减小系统误差,提高系统响应速度和响应效果。

模拟PID控制

传统的PID控制是模拟PID控制,即通过现场检测仪表、控制仪表、执行器等直接对模拟信号如液位、流速、温度、位置等物理量进行PID控制 [2]  

数字PID控制

数字PID控制是把现场的控制变量的模拟信号和对现场受控变量的输出信号均转换成了数字信号,PID的实现也是通过数字信号的设定来完成的。数字PID控制大多在DCSPLC等计算机系统内完成的 [3]  。

数字PID控制的两种基本形式是位置式PID控制和增量式PID控制。

位置式PID控制

位置式PID控制是指在积分环节,对从0时刻到当前时刻的所有偏差进行积分,是非递推式的全局积分。

增量式PID控制

和位置式PID控制不同,增量式PID控制将当前时刻的控制量和上一时刻的控制量做差,以差值为新的控制量,是一种递推式的算法。

公式表示

编辑

连续PID控制

对模拟信号进行的模拟PID控制,也可以称作连续PID控制,微分表示为:

 

式中,Kp为比例系数,Ti为积分时间常数,Td为微分时间常数。对上式进行拉氏变换:

 

PID控制器的传递函数为:

 

离散PID控制

对连续PID控制以一定离散化方法离散后就可以得到数字PID控制,离散的本质是采样,假设采样为周期采样,采样周期为T,离散自变量为n,则离散PID控制可以表示为:

 

上式也表示出了位置式PID控制算法。

增量式PID控制

根据位置式PID控制公式,写出n-1时刻的控制量:

 

 

得到

 

 

为积分系数;

为微分系数,可以将上式简化为

 

PID控制的特点

编辑

比例、积分、微分控制各有所长,根据实际需求对几种控制律加以结合,一般采用PI、PD或者PID控制 [1]  。

P控制

P(比例)控制实质上是一个可调增益放大器,只改变被调信号的幅值而不改变相位。加大增益可以提高系统开环增益,减小系统稳态误差,提高控制精度,但P控制不能消除稳态误差,且大增益会降低系统相对稳定性,甚至造成系统不稳定。

I控制

I(积分)控制可以消除稳态误差,但控制作用慢,有可能降低系统稳定性。

D控制

D(微分)控制可以超前控制,动作十分迅速,可以改善滞后的情况,但不能消除稳态误差,且当出现脉冲时容易有过激动作,而在恒差时不动作。

增量式PID控制

编辑

增量式PID控制主要是通过求出增量,将原先的积分环节的累积作用进行了替换,避免积分环节占用大量计算性能和存储空间。

增量式PID控制的主要优点为:

①算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果;

②计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影响生产过程;

③手动—自动切换时冲击小。当控制从手动向自动切换时,可以作到无扰动切换 [2]  。

由于增量式需要对控制量进行记忆,所以对于不带记忆装置的系统,只能使用位置式PID控制方式进行控制。

https://baike.baidu.com/item/%E5%A2%9E%E9%87%8F%E5%BC%8FPID%E6%8E%A7%E5%88%B6/20861314?fr=aladdin

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_25814297/article/details/117021244

智能推荐

从网络获取图片实现无限轮播-程序员宅基地

文章浏览阅读673次。//网络请求数据工具类import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;public clas...

使用Python对Access读写操作_python 读写access-程序员宅基地

文章浏览阅读9.1k次,点赞12次,收藏96次。学习Python的过程中,我们会遇到Access的读写问题一、可以利用win32.client模块的COM组件访问功能,通过ADODB操作Access的文件。1、导入模块import win32com.client2、建立数据库连接conn = win32com.client.Dispatch(r"ADODB.Connection")DSN = 'PROVIDER = Microso..._python 读写access

Epic安装不成功/启动失败“必要的先决条件安装失败“_安装epic提示无法安装-程序员宅基地

文章浏览阅读2.6w次,点赞9次,收藏4次。1.防火墙问题,关闭防火墙(Win 10 设置里面搜“防火墙”,就有相关选项)2.用管理员权限试试看3.用安装包自带的修复功能,选中安装包,右键点击修复(其实就是重装)4.有可能是相应的编码组件没有或版本不对,可以去官方下载,这里附上此错误的相应链接当我收到错误"必要的先决条件安装失败"时,如何修复Epic游戏启动器?5.桌面图标右键属性 快捷方式的目标 那串文字最后引号后面加空格加-SkipBuildPatchPrereq 然后确定就可以了一个epic下载搞了快2个小时,恼人..._安装epic提示无法安装

计算机组成原理--主存储器_什么是地址字,计算机组成原理-程序员宅基地

文章浏览阅读1.1w次,点赞4次,收藏24次。主存的基本组成存储体由若跟个存储单元组成,存储单元由多个存储元件组成存储体----存储单元(存储一串二进制串)----存储元件(存储一个0/1)存储单元:存放一串二进制代码。存储字:存储单元中的二进制代码存储字长:存储单元中二进制代码位数。存储单元按照地址进行寻址MAR:存储器地址寄存器,反应存储单元个数。保存了存储体的地址(存储单元的编号),反应了存储单元的个数。所以MAR的位数..._什么是地址字,计算机组成原理

Unity 3D循环滚动效果_unity 给多个物体增加滚动-程序员宅基地

文章浏览阅读6.5k次,点赞5次,收藏15次。然后通过SetDepthAndPosition这个方法,实现图片的空间空间展开Z轴和Y轴,系数是一样的经过上面设置,空间就摆开了using UnityEngine;using System.Collections;using System.Collections.Generic;public class SelectRole : MonoBehaviour { public GameOb_unity 给多个物体增加滚动

tableau仪表盘统一的联动筛选器_tableau筛选器联动-程序员宅基地

文章浏览阅读1.8w次,点赞5次,收藏9次。选中筛选器的下三角图标-&gt;应用于工作表-&gt;使用此数据源的所有项如上图所示。 如果还想关联其他工作簿_tableau筛选器联动

随便推点

xml字符串取相同元素 dom4j的jar,xml转list_xml字符串有个list键 怎么取出来-程序员宅基地

文章浏览阅读197次。String outStr = "<Record index=\"1\">\n" + " <AAA027>004</AAA027>\n" + " <AAC003>王凤</AAC003>\n" + " <AAC147>51012&l..._xml字符串有个list键 怎么取出来

了解ACL---通配符掩码_通配符0.0.0.0和0.0.0.255的区别-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏4次。学习ACL,搞懂ACL就不能不搞定wildcard mask,通配符掩码。说简单点,通配符掩码就是0为绝对匹配,必须严格匹配才行,而1为任意,从某种意义上讲,如果一个8位上有一个1字符,那也只有两种方式,0或者1,但是如果进行组合,那么方式就多了。举例说明吧。一般我们在应用上都是进行地址块的匹配,怎么讲呢?就是说:1)对某个A B C类网进行匹配或者教通配符屏蔽2)对某个子网应用ACL。..._通配符0.0.0.0和0.0.0.255的区别

普罗米修斯监控_普罗米修斯 能监控到登录网页的内容吗?-程序员宅基地

文章浏览阅读4.2k次。普罗米修斯是什么Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合.由SoundCloud公司开发。Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。输出被监控组件信息的HTTP接_普罗米修斯 能监控到登录网页的内容吗?

关于M0内核MCU的Bootloader编写_m0内核的bootloader-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏32次。在使用MCU的时候如果要使用程序下载、程序升级或程序备份,那么都需要自己编写Bootloader。那么编写Bootloader使首先应该完成的是什么呢?没错,就是中断向量表。那如果操作中断向量表呢?这里就详细说一下: 要操作中断向量表,首先要知道中断向量表是什么,它的作用是什么?在编写MCU程序的时候都会用到中断,然后会有中断回调函数。MCU是如何通过中断而转到中断回调函..._m0内核的bootloader

Lua与C语言的互相调用_c调用lua-程序员宅基地

文章浏览阅读5.3k次,点赞14次,收藏74次。Lua底层是C语言开发的,在设计时就考虑到了与C语言的互操作性。可以把Lua作为一种独立的语言或者作为一种嵌入式的脚本语言。有许多游戏和其他应用程序利用Lua作为脚本语言。在本文中,我们将重点探讨如何将Lua嵌入到C或C++应用程序中,作为胶水脚本存在。虽然此文只关注C语言的API,但在LuaDardo项目中,这些C API并没有做根本改变,只是在命名规范上做了适应Dart语言的变化(驼峰命名法)。简单说,LuaDardo基本是兼容这些API的。使用 C APILua的C语言API是高效和轻量级的。在_c调用lua

Intel Media SDK ---摘自ww506772362的专栏_mfxextav1tileparam-程序员宅基地

文章浏览阅读2.6k次。/* IOPattern */该结构体枚举逐项内存访问模式enum { MFX_IOPATTERN_IN_VIDEO_MEMORY = 0x01, MFX_IOPATTERN_IN_SYSTEM_MEMORY = 0x02, MFX_IOPATTERN_IN_OPAQUE_MEMORY = 0x04, MFX_IOPATTERN_OUT__mfxextav1tileparam

推荐文章

热门文章

相关标签