加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线18475208684
公司新闻
PID位置式与增量式的原理
发布时间: 2024-08-20 20:55 更新时间: 2024-11-22 08:00
观看PID位置式与增量式的原理视频
PID算法可以说是在自动控制原理中比较经典的一套算法,在现实生活中应用的比较广泛。

大学参加过电子竞赛的朋友都应该玩过电机(或者说循迹小车),我们要控制电机按照设定的速度运转,PID控制在其中起到了关键的作用。

什么是PID


PID原理

PID算法简单代码

PID 控制算法可以分为位置式 PID 和增量式 PID 控制算法。两者的区别:(1)位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大;(2)增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。(3)由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大。下面给出公式直接体现的C语言源代码(请结合项目修改源代码):1.位置式PID

































typedef struct{  float Kp;                       //比例系数Proportional  float Ki;                       //积分系数Integral  float Kd;                       //微分系数Derivative
 float Ek;                       //当前误差  float Ek1;                      //前一次误差 e(k-1)  float Ek2;                      //再前一次误差 e(k-2)  float LocSum;                   //累计积分位置}PID_LocTypeDef;
/************************************************函数名称 :PID_Loc功    能 :PID位置(Location)计算参    数 :SetValue ------ 设置值(期望值)            ActualValue --- 实际值(反馈值)            PID ----------- PID数据结构返 回 值 :PIDLoc -------- PID位置作    者 :strongerHuang*************************************************/float PID_Loc(float SetValue, float ActualValue, PID_LocTypeDef *PID){  float PIDLoc;                                  //位置
 PID->Ek = SetValue - ActualValue;  PID->LocSum += PID->Ek;                         //累计误差
 PIDLoc = PID->Kp * PID->Ek + (PID->Ki * PID->LocSum) + PID->Kd * (PID->Ek1 - PID->Ek);
 PID->Ek1 = PID->Ek;  return PIDLoc;}
2.增量式PID































typedef struct{  float Kp;                       //比例系数Proportional  float Ki;                       //积分系数Integral  float Kd;                       //微分系数Derivative
 float Ek;                       //当前误差  float Ek1;                      //前一次误差 e(k-1)  float Ek2;                      //再前一次误差 e(k-2)}PID_IncTypeDef;
/************************************************函数名称 :PID_Inc功    能 :PID增量(Increment)计算参    数 :SetValue ------ 设置值(期望值)            ActualValue --- 实际值(反馈值)            PID ----------- PID数据结构返 回 值 :PIDInc -------- 本次PID增量(+/-)作    者 :strongerHuang*************************************************/float PID_Inc(float SetValue, float ActualValue, PID_IncTypeDef *PID){  float PIDInc;                                  //增量
 PID->Ek = SetValue - ActualValue;  PIDInc = (PID->Kp * PID->Ek) - (PID->Ki * PID->Ek1) + (PID->Kd * PID->Ek2);
 PID->Ek2 = PID->Ek1;  PID->Ek1 = PID->Ek;  return PIDInc;}


联系方式

  • 电  话:13922889745
  • 经理:向小姐
  • 手  机:18475208684
  • 微  信:18475208684