精华内容
下载资源
问答
  • 位置式 PID

    千次阅读 2019-04-10 09:28:44
    位置式PID对于输出限幅和积分累加限幅具体该如何实现?

    位置式PID对于输出限幅和积分累加限幅具体该如何实现?

    展开全文
  • 位置式PID与增量式PID区别浅析

    万次阅读 多人点赞 2019-04-26 08:55:12
    1PID控制算法 什么是PID PID 控制器以各种形式使用超过了 1 世纪,广泛应用在机械设备、气动设备 和电子设备.在工业应用中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 算法 :

    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

     

    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次的采样值有关。


    缺点:

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

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

     

    展开全文
  • 位置式PID与增量式PID

    千次阅读 2018-10-17 11:00:26
    写到简介明了,不错 原文地址 ...   //位置式PID float Kp; float Ki; float Kd; float eSum,e0,e1; float pid_control(float now,float target) { float pe,ie,de; flo...

    写到简介明了,不错

    原文地址 https://www.cnblogs.com/guanglun/p/7809761.html

     

    //位置式PID
    
    float Kp;
    float Ki;
    float Kd;
    
    float eSum,e0,e1;
    
    float pid_control(float now,float target)
    {
        float pe,ie,de;
        float out;
        
        e0 = target - now;
        eSum += e0;
        
        pe = e0;
        ie = eSum;
        de = e0 - e1;
            
        out = pe*Kp + ie*Ki + de*Kd;
        
        out = limit(out,-LIMIT,LIMIT);
    
        e1 = e0;
        
        return out;
    }
    
    //增量式PID
    
    float Kp;
    float Ki;
    float Kd;
    
    float eSum,e0,e1,e2;
    
    float pid_control(float now,float target)
    {
        float pe,ie,de;
        float out;
    
        e0 = target - now;
        
        pe = e0 - e1;
        ie = e0;
        de = e0 - 2*e1 + e2;
        
        out = pe*Kp + ie*Ki + de*Kd;
        out = limit(out,-LIMIT,LIMIT);
        
        e2 = e1;
        e1 = e0;
        
        return out;
        
    }
    展开全文
  • 位置式PID和增量式PID的区分

    千次阅读 2018-01-26 11:36:42
    位置式PID和增量式PID的区分 位置式PID: 增量式PID: 附上本人参考别人写的代码 位置式PID和增量式PID的区分 仅是个人理解,如有错误请指出。 位置式PID: 当前的输出与过去的所有状态都有关系(积分累加也...

    目录

    位置式PID和增量式PID的区分

    位置式PID:

    增量式PID:

    附上本人参考别人写的代码————链接:

    附上本人收集的资料————链接:


    位置式PID和增量式PID的区分

    仅是个人理解,如有错误请指出。

    位置式PID:

    当前的输出与过去的所有状态都有关系(积分累加也就是误差累加),并且控制器的输出就是实际的输出结果,一旦控制输出出错,那么整个系统都可能奔溃,并且在整定参数时,要防止过冲现象,需对积分处理部分进行特别处理。可以考虑

                             积分分离PID控制

                             抗积分饱和PID控制

    增量式PID:

    增量式的PID输出只是控制量的增量,计算输出的结果是实际输出的增量。而实际的计算结果  +  当前的位置值   才是最终的输出,当控制输出出错时,对系统影响会小很多。

    附上本人参考别人写的代码————链接:

    https://download.csdn.net/download/qq_28837389/10667719

    附上本人收集的资料————链接:

    https://download.csdn.net/download/qq_28837389/10672249

    展开全文
  • C语言实现PID算法:位置式PID和增量式PID

    万次阅读 多人点赞 2018-06-26 11:00:30
    大学参加过电子竞赛的朋友都应该玩过电机(或者说循迹小车),我们要控制电机按照设定的速度运转,PID控制在其中起到了关键的作用。 说来惭愧,大学这门课程学的不咋滴,老师讲的课基本没听进去过。直到后面接触...
  • 位置式PID与增量式PID的介绍和代码实现

    千次阅读 多人点赞 2019-12-22 11:26:30
    PID分为位置式PID与增量式PID。 一、位置式PID 1、表达式为: 2、缺点: 1)、由于全量输出,所以每次输出均与过去状态有关,计算时要对ek进行累加,工作量大; 2)、因为计算机输出的uk对应的是执行机构的...
  • 位置式PID控制算法

    千次阅读 2019-04-23 09:54:57
    位置式PID控制算法
  • 浅谈位置式PID

    万次阅读 多人点赞 2018-09-03 10:36:29
    浅谈位置式PID 之前用pid控制小车,避免忘记 ,在这里整理一下资料(若有哪里不对,还请指教) 在说pid之前,先来说一下开环控制和闭环控制 开环控制   当操作者启动系统,使之进入运行状态后,系统将操作者的...
  • 【算法】舵机位置式pid

    千次阅读 2019-12-02 16:31:18
    s3010舵机基础上的舵机位置式pid算法实现 k60 DN 144 平台 给与舵机50hz的工作频率为获取较大的工作频率! 在智能车竞赛上测试通过。 const uint16 steering_mid=715; int16 steer=715; const uint16 steering...
  • 上一节说的PID公式属于位置式PID位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值,而增量式PID的输出只与当前拍和前两拍的误差有关。就温控系统来说,位置式PID输出的结果就是PWM占空比最终值,如果...
  • 位置式pid分析 及 参数整定

    万次阅读 多人点赞 2017-01-16 14:15:04
    平衡小车和倒立摆都是用的位置式PID控制器 /************************************************************************** 函数功能:位置式PID控制器 1.入口参数:编码器测量位置信息,目标位置 2.入口参数:...
  • 前文对PID算法离散化和增量式PID算法原理进行来探索,之后又使用Matlab进行了仿真实验,对PID三个参数又有了更深入的认识,接下来我们来使用C语言进行PID算法实现,并且结合控制电机的项目来深入学习。 1、PID ...
  • 位置式PID 增量式PID

    千次阅读 2017-12-05 22:52:16
    在电子数字计算机直接数字控制系统中,PID控制器是通过计算机PID控制算法程序实现的。计算机直接数字控制系统大多数是采样-数据控制系统。进入计算机的连续-时间信号,必须经过采样和整量化后,变成数字量,方能进入...
  • /************************************************************************** 函数功能:增量PI控制器 ...根据增量离散PID公式 pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)] e(k)代表本次偏差 e(...
  • PID算法:位置式PID和增量式PID

    千次阅读 2020-06-27 23:32:15
    口诀 参数整定找最佳, 从小到大顺序查。 先是比例后积分, 最后再把微分加。 曲线振荡很频繁, 比例度盘要放大。 曲线漂浮绕大弯, 比例度盘往小扳。... 曲线波动周期长, ... C语言实现PID算法:位置式PID和增量式PID
  • 本文分为几个部分: 1.编码器 2.定时器输入捕获(把定时器初始化为编码器模式) 3.pid闭环控速度 编码器 1.概述 2.原理 四倍频技术
  • 位置式pid和增量式pid对比

    千次阅读 2020-04-02 14:43:12
    4在进行PID控制时,位置式PID需要有积分限幅和输出限幅,而增量式PID只需输出限幅 位置式PID优缺点: 优点: ①位置式PID是一种非递推式算法,可直接控制执行机构(如平衡小车),u(k)的值和执行机构的实际位置(如...
  • 【PID】位置式PID控制原理

    万次阅读 多人点赞 2018-07-12 20:14:27
    PID控制流程图:
  • 1.增量式PID Error=Set_Value - Current_Value; result= p * (Error- LastError) + i * Error + d * (Error- 2*LastError+ PrevError); PrevError= LastError; La...
  • 增量式和位置式PID

    千次阅读 2015-04-13 12:42:07
    若使用PI控制,位置式的缺点就是积分饱和,也就是当控制量已经达到最大时,误差仍然在积分作用下继续累积,一旦误差开始反向变化,则系统需要较长时间从饱和区退出。 当 u ( k )达到最大和最小时,需要停止积分...
  • 增量式PID和位置式PID

    千次阅读 2014-02-19 18:22:39
    若使用PI控制,位置式的缺点就是积分饱和,也就是当控制量已经达到最大时,误差仍然在积分作用下继续累积,一旦误差开始反向变化,则系统需要较长时间从饱和区退出。当u(k)达到最大和最小时,需要停止积分作用,...
  • 本篇文章我将针对位置式PID算法、直立环、速度环等概念进行详细的讲解,让每位小伙伴能够对这三个概念有更加清晰的理解。 一、PID控制算法   PID控制,即为对偏差进行比例、积分和微分控制。由三个元素构成,分别...
  • 声明:本文非原创,文末声明出处,侵权必删!!!参考来源:北京交通大学 硕士学位论文 基于脉冲串控制的含位置反馈和前馈补偿的位置控制算法的研究 赵旺升...
  • ********其实增量式pid就是位置式这次的输出减去上次的输出得到的 解释如下: 位置式(k):pwm =Kp*e(k) + Ki*∑e(k) + Kd[e(k)-e(k-1)] 位置式(k-1):pwm =Kp*e(k-1) + Ki*∑e(k-1) + Kd[e(k-1)-e(k...
  • 控制类必不可少的PID算法: 我也是从网上整理而来的: #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; typedef ...
  • 位置式PID算法C语言的实现:从数学公式到代码实现-规范的C语言代码 位置PID算法的数学描述 连续位置PID算式 u(x)=Kp(e(t)+1Ti∫0te(t)dt+Tdde(t)dt)u(x) = K_p(e(t) + \frac{1}{T_i}\int_{0}^{t}{e(t)}{\rm d}t+T_d ...
  • //增量式PID float IncPIDCalc(PID_Typedef* PIDx,float SetValue,float MeaValue,float err)//err»ý·Ö·ÖÀë³£Êý { float index; PIDx-&gt;Error = SetValue - MeaValue; if(fabs(PIDx-&gt;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,505
精华内容 16,202
关键字:

位置式pid