PID算法的学习笔记及理解

PID算法类型

PID控制算法原理
工程上PID算法有两种形式

首先定义一个结构体

typedef struct PID 
{
    float  Proportion;//P
	float  Integral;  //I
	float  Derivative;//D
    
	float  PrevError;//上上一次误差
	float  LastError;//上一次误差
	float  Error;	 //当前误差
    float  DError;
	float  SumError; //历史误差累积和
    
	float  Integralmax;
	float  output;	   //输出
	float  outputmax;
	float  errormax;
	u8 first_flag;
	float  deadzone;   //死区
}PID;
  • 位置式

img

void PID_position_PID_calculation(PID *pp, float CurrentPoint, float NextPoint)  
{   
	if(pp->first_flag == 1)
	{
		pp->LastError = NextPoint - CurrentPoint;
		pp->PrevError = NextPoint - CurrentPoint;
		pp->first_flag = 0;
	}
	pp->Error =  NextPoint -  CurrentPoint;          
	pp->SumError += pp->Error;                      
	pp->DError = pp->Error - pp->LastError;
	
	pp->output =  pp->Proportion * pp->Error + PID_abs_limit(pp->Integral * pp->SumError, pp->Integralmax ) + pp->Derivative * pp->DError ;  

    //输出限幅
	if(pp->output > pp->outputmax )  pp->output = pp->outputmax;
	if(pp->output < - pp->outputmax )  pp->output = -pp->outputmax; 
	pp->LastError = pp->Error;
	
	if(float_abs(pp->Error) < pp->deadzone)
	{
		pp->output = 0;
	}
}
  • 增量式

pid算法中位置型和增量型有什么区别,分析两者优缺点

void PID_incremental_PID_calculation(PID *pp, float CurrentPoint, float NextPoint)  
{  
    //误差计算
	pp->Error =  NextPoint - CurrentPoint;                               
	pp->DError = pp->Error - pp->LastError;
	
    //PID算法
	pp->output +=  pp->Proportion * (pp->DError)+ PID_abs_limit(pp->Integral * pp->Error, pp->Integralmax ) + pp->Derivative * ( pp->Error +  pp->PrevError - 2*pp->LastError);  

    //输出限幅
	if(pp->output > pp->outputmax )  pp->output = pp->outputmax;
	if(pp->output < - pp->outputmax )  pp->output = -pp->outputmax;
	pp->PrevError = pp->LastError;  
	pp->LastError = pp->Error;
	
    //死区
	if(float_abs(pp->Error) < pp->deadzone)
	{
		pp->output = 0;
	}
}

增量式和位置式的区别

  • 增量式算法不需要做累加,控制量增量的确定仅与最近几次偏差采样值有关,计算误差对控制 量计算的影响较小;

    而位置式算法要用到过去偏差的累加值,容易产生较大的累加误差。

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

    而位置式的输出直接对应对象的输出,因此对系统影响较大。

  • 增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等;

    而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。

  • 在进行PID控制时,位置式PID需要有积分限幅和输出限幅;

    而增量式PID只需输出限幅。

位置式PID优缺点

  • 优点:位置式PID是一种非递推式算法,可直接控制执行机构(如平衡小车),u(k)的值和执行机构的实际位置(如小车当前角度)是一一对应的,因此在执行机构不带积分部件的对象中可以很好应用。
  • 缺点:每次输出均与过去的状态有关,计算时要对e(k)进行累加,运算工作量大。

增量式PID优缺点

  • 优点
    • 误动作时影响小,必要时可用逻辑判断的方法去掉出错数据
    • 手动/自动切换时冲击小,便于实现无扰动切换。当计算机故障时,仍能保持原值。
    • 算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关。
  • 缺点
    • 积分截断效应大,有稳态误差;
    • 溢出的影响大,有的被控对象用增量式则不太好。

简述

PID算法的目的是尽量缩小误差,使实际值尽可能的达到期望值。
然而系统内总是存在误差,因此在没有PID调控时实际值会低于或高于期望值。此时如果加入P环调控即输出值与误差与Kp乘积有关,且与误差大小有直接关系,故系统刚启动时输出极大,接近期望时输出逐渐减小,但仍然有输出,造成超调。因此Kp的选择很有讲究,太大则震荡幅度过大,太小则震荡时间较长。
若加入I环调控,I即积分乃误差的累计,在系统过冲之后误差符号改变使积分减小甚至为负值,此时抑制系统的输出,使输出减小,从而使系统快速稳定。
而D环调控,D为微分乃误差变化的斜率,即变化的快慢。其作用为提高响应速度。对误差无变化的系统不起作用,对误差变化剧烈的系统容易超调。
总结就是P让误差可以为0,I让误差更快更平缓的为0,D让系统反应更快。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值