位置式PID和增量式PID简述

在这里插入图片描述

  • 缺点每次输出均与过去的状态有关,计算时要对e(k)进行累加,计算机运算工作量大
  • 代码实现:
typedef struct PID
{
	float Kp,Ki,Kd,Limit;
}PID_t;
typedef struct Error
{
	float Current_Error;	//当前误差 	e(k)
	float Last_Error;   	//上一次误差	e(k-1)
}Error_t;

//===================位置式PID控制
//返回的是实际值
float PID_Positon_control(Error_t* sptr, PID_t* pid, float NowPlace, float Point)
{
	float iError;     //当前误差
	float Real_Output;//实际输出
	
	iError = Point - NowPlace;//计算当前误差
	sptr->Current_Error += pid->Ki * 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;//积分限幅
	
	Real_Output = pid->Kp * iError      //比例P
				  + sptr->Current_Error //积分I,为了安全需要做一下限幅
				  + pid->Kd * (iError - spt->Last_Error);//微分
	sptr->Last_Error = iError;//更新一下上次误差
	
	return Real_Output;// 返回实际值
}

在这里插入图片描述

  • 增量型误动作小,易于实现手动/自动的无扰动切换,不产生积分失控。
  • 但是缺点在于积分截断效应大,溢出影响大。
  • 代码实现:
typedef struct PID
{
	float Kp,Ki,Kd,limit;
}PID_t;
typedef struct Error
{
	float Current_Error;	//当前误差 	e(k)
	float Last_Error;   	//上一次误差	e(k-1)
	float Previous_Error;	//上上次误差 e(k-2)
}Error_t;

//===================增量式PID控制
//返回的是增量
float PID_Positon_control(Error_t* sptr, PID_t* pid, float NowPlace, float Point)
{
	float iError;     //当前误差
	float Real_Output_Increase;//实际输出
	
	iError = Point - NowPlace;//计算当前误差

	Real_Output_Increase = pid->Kp * (iError - sptr->Last_Error)//比例P
				  		   + pid->Ki * iError//积分I,为了安全需要做一下限幅
				 		   + pid->Kd * (iError - 2 * sptr->Last_Error + sptr->Previous_Error);//微分D
	
	//更新误差,顺序不能反。。。。
	sptr->Previous_Error = sptr->Last_Error ;
	sptr->Last_Error = iError;

	return Real_Output_Increase ;// 返回增量值
}

区别

  • 增量式算法不需要做累加,控制量增量的确定仅与最近几次偏差采样值有关,计算误差对控制 量计算的影响较小。而位置式算法要用到过去偏差的累加值,容易产生较大的累加误差
  • 增量式算法得出的是控制量的增量,例如在阀门控制中,只输出阀门开度的变化部分,误动作 影响小,必要时还可通过逻辑判断限制或禁止本次输出,不会严重影响系统的工作。而位置式的输出直接对应对象的输出,因此对系统影响较大
  • 增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。
  • 在进行PID控制时,位置式PID需要有积分限幅和输出限幅,而增量式PID只需输出限幅

原文链接:
https://mp.weixin.qq.com/s?__biz=MzU1NjEwMTY0Mw==&mid=2247557426&idx=1&sn=53bc279d0fea3a7560a3106bcb8efbc3&chksm=fbc99856ccbe11409d0f6ab00a3f98cdcda63eb2a453edf0547b250fb7b871cb4e1f911d1e4b&scene=27

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栋哥爱做饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值