位置式PID和增量式PID的介紹


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

兩者的區別:

(1)位置式PID控制的輸出與整個過去的狀態有關,用到了誤差的累加值;而增量式PID的輸出只與當前拍和前兩拍的誤差有關,因此位置式PID控制的累積誤差相對更大;

 

(2)增量式PID控制輸出的是控制量增量,並無積分作用,因此該方法適用於執行機構帶積分部件的對象,如步進電機等,而位置式PID適用於執行機構不帶積分部件的對象,如電液伺服閥。

 

(3)由於增量式PID輸出的是控制量增量,如果計算機出現故障,誤動作影響較小,而執行機構本身有記憶功能,可仍保持原位,不會嚴重影響系統的工作,而位置式的輸出直接對應對象的輸出,因此對系統影響較大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM