<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PID控制器開發筆記之八:帶死區的PID控制器的實現

bojie1024 ? 來源:bojie1024 ? 作者:bojie1024 ? 2022-12-06 10:39 ? 次閱讀

在計算機控制系統中,由于系統特性和計算精度等問題,致使系統偏差總是存在,系統總是頻繁動作不能穩定。為了解決這種情況,我們可以引入帶死區的PID算法。

1、帶死區PID的基本思想

帶死區的PID控制算法就是檢測偏差值,若是偏差值達到一定程度,就進行調節。若是偏差值較小,就認為沒有偏差。用公式表示如下:

pYYBAGOOq3mAJIWWAAAYKl8zInE772.png

其中的死區值得選擇需要根據具體對象認真考慮,因為該值太小就起不到作用,該值選取過大則可能造成大滯后。

帶死區的PID算法,對無論位置型還是增量型的表達式沒有影響,不過它是一個非線性系統。

除以上描述之外還有一個問題,在零點附近時,若偏差很小,進入死去后,偏差置0會造成積分消失,如是系統存在靜差將不能消除,所以需要人為處理這一點。

2、算法實現

前面我們描述了帶死區的PID控制的基本思想。在接下來我們來實現這一思想,同樣是按位置型和增量型來分別實現。

(1)位置型PID算法實現

前面我們對微分項、積分項采用的不同的優化算法,他們都可以與死區一起作用于PID控制。這一節我們就來實現一個采用抗積分飽和、梯形積分、變積分算法以及不完全微分算法和死區控制的PID算法。首先依然是定義一個PID結構體

接下來我們實現帶死區、抗積分飽和、梯形積分、變積分算法以及不完全微分算法的增量型PID控制器。/*定義結構體和公用體*/

typedef struct
{
  float setpoint;               /*設定值*/
  float kp;                     /*比例系數*/
  float ki;                     /*積分系數*/
  float kd;                     /*微分系數*/
  float lasterror;              /*前一拍偏差*/
  float preerror;               /*前兩拍偏差*/
  float deadband;               /*死區*/
  float result;                 /*PID控制器計算結果*/
  float output;                 /*輸出值0-100%*/
  float maximum;                /*輸出值上限*/
  float minimum;                /*輸出值下限*/
  float errorabsmax;            /*偏差絕對值最大值*/
  float errorabsmin;            /*偏差絕對值最小值*/
  float alpha;                  /*不完全微分系數*/
  float derivative;              /*微分項*/
  float integralValue;          /*積分累計量*/
}CLASSICPID;
接下來我們實現帶死區、抗積分飽和、梯形積分、變積分算法以及不完全微分算法的增量型PID控制器。
void PIDRegulator(CLASSICPID vPID,float pv)
{
  float thisError;
  float result;
  float factor;

  thisError=vPID->setpoint-pv; //得到偏差值
  result=vPID->result;

  if (fabs(thisError)>vPID->deadband)
  {
    vPID-> integralValue= vPID-> integralValue+ thisError;

    //變積分系數獲取
    factor=VariableIntegralCoefficient(thisError,vPID->errorabsmax,vPID->errorabsmin);

    //計算微分項增量帶不完全微分
    vPID-> derivative =kd*(1-vPID->alpha)* (thisError-vPID->lasterror +vPID->alpha*vPID-> derivative;

result=vPID->kp*thisError+vPID->ki*vPID-> integralValue +vPID-> derivative;
  }
  else
  {
    if((abs(vPID->setpoint-vPID->minimum)deadband)&&(abs(pv-vPID->minimum)deadband))
    {
      result=vPID->minimum;
    }
  }

  /*對輸出限值,避免超調和積分飽和問題*/
  if(result>=vPID->maximum)
  {
    result=vPID->maximum;
  }

  if(result<=vPID->minimum)
  {
    result=vPID->minimum;
  }

  vPID->preerror=vPID->lasterror;  //存放偏差用于下次運算
  vPID->lasterror=thisError;
  vPID->result=result;

  vPID->output=((result-vPID->minimum)/(vPID->maximum-vPID->minimum))*100.0;
}

3、總結

引入死區的主要目的是消除穩定點附近的波動,由于測量值的測量精度和干擾的影響,實際系統中測量值不會真正穩定在某一個具體的值,而與設定值之間總會存在偏差,而這一偏差并不是系統真實控制過程的反應,所以引入死區就能較好的消除這一點。

當然,死區的大小對系統的影響是不同的。太小可能達不到預期的效果,而太大則可能對系統的正常變化造成嚴重滯后,需要根據具體的系統對象來設定。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    15392

    瀏覽量

    172711
  • PID
    PID
    +關注

    關注

    35

    文章

    1448

    瀏覽量

    84167
  • 計算機控制
    +關注

    關注

    0

    文章

    35

    瀏覽量

    10706
  • PID控制器
    +關注

    關注

    2

    文章

    165

    瀏覽量

    18389
收藏 人收藏

    評論

    相關推薦

    PID控制器開發筆記之一:PID算法原理及基本實現

    ; //微分系數floatlasterror;//前一拍偏差floatpreerror;//前兩拍偏差floatdeadband;//死區floatresult; //輸出值}PID;接下來實現
    發表于 04-21 16:58

    PID控制器開發筆記之二:積分分離PID控制器實現

    `前面的文章中,我們已經講述了PID控制器實現,包括位置型PID控制器和增量型PID
    發表于 04-28 23:33

    PID控制器開發筆記之三:抗積分飽和PID控制器實現

    飽和的思想很簡單,解釋在控制器輸出的最大最小值附近限制積分的累積情況,以防止在恢復時沒有響應。根據前面得分系我們可以得到如下的流程圖:(1)位置型PID算法實現對于位置型PID的抗積分
    發表于 05-05 17:24

    PID控制器開發筆記四:梯形積分PID控制器實現

    ; //微分系數floatlasterror;//前一拍偏差floatresult; //輸出值floatintegral;//積分值}PID;接下來實現PID控制器:void
    發表于 05-13 11:37

    采用Labview實現PID控制器設計

    利用LabVIEW虛擬儀器開發平臺,設計一個程序,可以對3階以內的線性被控對象快速的確定PID控制器的各個參數,完成PID控制器的設計并給出
    發表于 04-23 09:40

    PID-PID控制器參數整定與實現

    PID-PID控制器參數整定與實現
    發表于 05-12 11:30

    一種簡單的PID控制器調整方法

      在進行PID控制器工作之前,必須對其進行調整以適應要控制的過程的動態。設計者給出P,I和D項的默認值,這些值不能給出期望的性能,有時會導致不穩定性和緩慢的控制性能。
    發表于 09-01 17:58

    PID控制器是什么?PID控制器各校正環節的作用有哪些?

    PID控制器是什么?PID控制規律是什么?PID控制器各校正環節的作用有哪些?增量式
    發表于 07-13 07:16

    PID控制器控制規律

    工業生產過程中,對于生產裝置的溫度、壓力、流量、液位等工藝變量常常要求維持在一定的數值上,或按一定的規律變化,以滿足生產工藝的要求。PID控制器是根據PID控制原理對整個
    發表于 09-07 08:11

    PID控制器簡介

    PID控制器簡介在過程控制中,按偏差的比例(P)、積分(I)和微分(D)進行控制PID控制器
    發表于 09-07 08:06

    PID控制器原理

    PID控制器原理PID控制器實際上是對偏差的控制,其原理圖如下:其數學的表達如下: u(x)=Kp(err(t)+1T.∫err(t)dt+
    發表于 09-07 09:01

    PID控制器的設計

    目 錄一、序言二、PID控制器的設計1.PID控制原理圖2.PID控制器傳遞函數的一般表達式三、
    發表于 02-23 07:14

    什么是pid控制,什么是pid控制器

    什么是pid控制器 所謂PID控制,就是在一個閉環控制系統中,使被控物理量能夠迅速而準確地無限接近于
    發表于 09-10 12:39 ?1.7w次閱讀
    什么是<b class='flag-5'>pid</b><b class='flag-5'>控制</b>,什么是<b class='flag-5'>pid</b><b class='flag-5'>控制器</b>

    pid控制器原理

    pid控制器原理       在工程實際中,應用最為廣泛的調節器控制規律為比例積分微分控制,簡稱
    發表于 09-10 12:44 ?1.3w次閱讀
    <b class='flag-5'>pid</b><b class='flag-5'>控制器</b>原理

    pid控制器的輸入輸出_PID控制器控制實現

    本文首先介紹的是PID控制器的工作原理,其次介紹的是pid控制器的輸入輸出,最后介紹了PID控制器
    的頭像 發表于 06-01 09:09 ?2.7w次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>