【2021电设经验总结】在血与泪中总结出的PID工程调试经验

PID工程调试经验

【写在前面】

2021年全国大学生电子设计竞赛又因为疫情推迟了,让人欲哭无泪。暑假集训期间做了三个控制类的模拟题,其中平衡小车和球形小车都用到了PID控制算法,调试过程中遇到了很多奇奇怪怪的问题。不得不说,PID对于不了解它的人就是这样残酷,而对熟练掌握的人则是一把利器,对于我来说,也不能说已经能够熟练运用,只是略窥其中奥妙,现在把血与泪过程中得出的经验总结如下。

接触PID的第一个项目是国赛题目风力摆,那时候对PID算法的含义理解还停留在表面,我印象中到最后调的也不是很好,能在一定时间内等幅,很快就产生振荡。第二个PID项目做的是平衡小车,角度环和速度环分别用了PD和PI,角度环调的效果很不错,但是加上速度环之后整个人都懵了,小车开始大幅度低频振荡,立不起来,那个时候很害怕,因为担心小车机械结构散架,所以速度环一直不敢调大,现在想来还是很蠢的(相当于阻尼效果不够)。

【调试经验】

一般来说参数整定按照以下顺序:

1.KP的整定

  1. 一般来说先调P,把其他参数都置零的方法,确定P的极性,然后从小到大增大P,直到系统出现等幅振荡。

  2. 增加P会增加系统响应速度,但是过大的P会使系统稳定性不佳,且存在较大误差

2.KI的整定

  1. 积分环节的调节作用是消除静态误差。积分常数Ti越大,积分的积累作用越弱(一开始十分不理解,其实可以解释为

    积分常数越大累计次数越少,累加几次就达到上限了)。

  2. 增大I可以使系统在过渡时不会产生振荡,减少超调量,提高系统的稳定性; 但是会减慢静态误差的消除过程。

3.KD的整定

  1. 微分的作用就是使系统能够**根据偏差的变化趋势预先给出适当的纠正** ,将有助于减小超调量, 克服振荡, 使系统趋

    于稳定, 特别对髙阶系统非常有利, 它加快了系统的跟踪速度。

  2. 微分的作用对输入信号的噪声很敏感,对那些噪声较大的系统一般不用微分, 或在微分起作用之前先对输入信号进行滤波。

小总结

用一张表格来总结:

调整方式 上升时间 超调量 安定时间 稳态误差 稳定性
KP增大 减少 增加 小幅增加 减少 变差
KI增大 小幅减少 增加 增加 大幅减少 变差
KD增大 小幅减少 减少 减少 基本不变 变好

另外还需要注意以下几点:

  1. 单独整定参数得时候,必须注意每个参数得极性必须正确,判断标准就是以上表格。
  2. 根据工程经验,KP和KI的关系是KP=KI * 200,当然公式是死的,要根据实际调。

【位置式PID】

1.公式

【2021电设经验总结】在血与泪中总结出的PID工程调试经验
位置式PID是当前系统的实际位置,与你想要达到的预期位置的偏差,进行PID控制,当前的输出u(k)与过去的所有状态都有关系,输出的

u(k)对应的是执行机构的实际位置。

2.注意事项

1.需要加上积分限幅和输出限幅

2.适用于执行机构不带积分部件的对象,如舵机、平衡小车的直立、温控系统的控制、自动巡线等等

3.典型代码

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;

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;
}

【增量式PID】

1.公式

【2021电设经验总结】在血与泪中总结出的PID工程调试经验
控制增量Δu(k)的确定仅与最近3次的采样值有关,是对位置型 PID 取增量,这时控制器输出的是相邻两次采样时刻所计算的位置值之

差,得到的结果是增量,即在上一次的控制量的基础上需要增加(负值意味减少)控制量。 容易通过加权处理获得比较好的控制效果,并且

在系统发生问题时,增量式不会严重影响系统的工作。

2.注意事项

1.适用于 适用于执行机构带积分部件的对象,如步进电机等

2.增量式PID只需输出限幅

3.典型代码

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;


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;
}
上一篇:EK最小费用最大流


下一篇:模板【强连通分量缩点】