PID算法之增量式控制溫度




本篇博文最後修改時間:2017年08月20日 23:00。


一、簡介

本文介紹PID增量式算法。



二、實驗平臺

電腦平臺:無

編譯軟件:

硬件平臺:


三、版權聲明

博主:_懵懂

聲明:此博客僅供參考不做任何商業用途,最終解釋權歸原博主所有。

原文地址:http://blog.csdn.NET/qq_18842031

QQ:951795235

E-mail [email protected]

懵懂之MCU交流羣:136384801




四、實驗前提

暫無。



五、基礎知識

暫無


六、源碼地址

暫無


七、關聯文章

暫無


八、講述內容

1、PID算法之增量式控制溫度

本次增量式:

△OUT= OUTK- OUTk-1=kp(EK-EK-1)+((Kp*T)/Ti)Ek+(((Kp*TD)/T)*(Ek-2Ek-1+Ek-2)

C代碼:

unsigned int pidtimer;      //定時器計時
void PIDCalc(int Sv,int Pv)  // Sv設定溫度值  Pv當前溫度值
{
  int DERR1 = 0;       //
  int DERR2 = 0;       //
  
  float Pout = 0;       //比例結果
  float Iout = 0;       //積分結果
  float Dout = 0;       //微分結果
  unsigned int Out = 0; //總輸出
  static unsigned int Out1;  //記錄上次輸出
  
  static int ERR;       //當前誤差
  static int ERR1;      //上次誤差
  static int ERR2;      //上上次誤差
  
  /******************
  *以下四項是需要根據實際情況調試的
  ******************/
  static int pidt = 300;     //300MS計算一次 計算週期
  static char Kp = 30;       //比例係數
  static unsigned int Ti= 5000; //積分時間
  static unsigned int Td= 600; //微分時間
  
  static unsigned char Upper_Limit= 100; //PID輸出上限
  static unsigned char Lower_Limit= 0; //PID輸出下限
  
  
  if(pidtimer < pidt)     //計算週期   pidtimer可以用定時器計時
    return ;  //
  
  ERR = Sv - Pv;   //算出當前誤差
  DERR1 = ERR - ERR1;   //上次
  DERR2 = ERR - 2 * ERR1 + EER2; //上上次
  
  Pout = Kp * DERR1;    //輸出P
  Iout = (float)(ERR * ((Kp * pidt) / Ti));  //輸出I
  Dout = (float)(DERR2 * ((Kp * Td) / pidt));   //輸出D
  Out = (unsigned int)(Out1 + Pout + Iout + Dout);
  
  if(Out >= Upper_Limit)   //如果輸出大於等於上限
  {
    Out = Upper_Limit;
  }
  else if(Out <= Lower_Limit)  //如果輸出小於等於下線
  {
    Out = Lower_Limit
  }
  Out1 = Out;      //記錄這次輸出的值
  
  ERR2 = ERR1;    //記錄誤差
  ERR1 = ERR;     //記錄誤差
  pidtimer = 0;   //定時器清零重新計數
}


PID參數調節口訣

參數整定找最佳,從小到大順序查
  先是比例後積分,最後再把微分加
  曲線振盪很頻繁,比例度盤要放大
  曲線漂浮繞大灣,比例度盤往小扳
  曲線偏離回覆慢,積分時間往下降
  曲線波動週期長,積分時間再加長
  曲線振盪頻率快,先把微分降下來
  動差大來波動慢。微分時間應加長
  理想曲線兩個波,前高後低4比1
  一看二調多分析,調節質量不會低

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章