衡阳派盒市场营销有限公司

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

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

3天內不再提示

經典PID控制器的積分分離優化算法

454398 ? 來源:博客園 ? 作者:木南創智 ? 2020-11-04 14:24 ? 次閱讀

我們已經講述了PID控制器的實現,包括位置型PID控制器和增量型PID控制器。但這個實現只是最基本的實現,并沒有考慮任何的干擾情況。在本節及后續的一些章節,我們就來討論一下經典PID控制器的優化與改進。這一節我們首先來討論針對積分項的積分分離優化算法

1、基本思想

我們已經講述了PID控制引入積分主要是為了消除靜差,提高控制精度。但在過程的啟動、結束或大幅度增減設定值時,短時間內系統輸出有很大偏差,會造成PID運算的積分累積,引起超調或者振蕩。為了解決這一干擾,人們引入了積分分離的思想。其思路是偏差值較大時,取消積分作用,以免于超調量增大;而偏差值較小時,引入積分作用,以便消除靜差,提高控制精度。

具體的實現步驟是:根據實際情況,設定一個閾值;當偏差大于閾值時,消除積分僅用PD控制;當偏差小于等于閾值時,引入積分采用PID控制。則控制算法可表示為:

其中β稱為積分開關系數,其取值范圍為:

由上述表述及公式我們可以知道,積分分離算法的效果其實與ε值的選取有莫大關系,所以ε值的選取實際上是實現的難點,ε值過大則達不到積分分離的效果,而ε值過小則難以進入積分區,ε值的選取存在很大的主觀因素。

對于經典的增量式PID算法,似乎沒有辦法由以上的公式推導而來,因為β隨著err(k)的變化在不是修改著控制器的表達式。其實我們可以換一種角度考慮,每次系統調節未定后,偏差應該為零,然后只有當設定值改變時,系統才會響應而開始調節。設定值的改變實際上是一個階躍變化,此時的控制輸出記為U0,開始調節時,其調節增量其實與之前的一切沒有關系。所以我們就可以以變化時刻開始為起點,而得到帶積分分離的增量算法,以保證在啟動、停止和快速變化時防止超調。公式如下:

其中β的取值與位置型PID算法一致。可能有人會擔心偏差來回變化,造成積分作用的頻繁分離和引入,進而使上述的增量表達式無法實現。其實我們分析一下就能發現,在開始時,由于設定值變化引起的偏差大而分離了積分作用,在接近設定值時,偏差變小就引入了積分,一邊消除靜差,而后處于穩態,直到下一次變化。

2、算法實現

這一部分,我們根據前面對其基本思想的描述,來實現基于積分分離的PID算法實現,同樣是包括位置型和增量型兩種實現方式。首先我們來看一下算法的實現過程,具體的流程圖如下:

有上圖我們知道,與普通的PID算法的區別,只是判斷偏差的大小,偏差大時,為PD算法,偏差小時為PID算法。于是我們需要一個偏差檢測與積分項分離系數β的函數。

 1 static uint16_t BetaGeneration(float error,float epsilon)
 2 
 3 {
 4 
 5   uint16_t beta=0;
 6 
 7   if(abs(error)<= epsilon)
 8 
 9 {
10 
11   beta=1;
12 
13 }
14 
15 return beta;
16 
17 }

1)位置型PID算法實現

根據前面的分析我們可以很輕松的編寫程序,只需要在編寫程序時判斷偏差以確定是否引入積分項就可以了。同樣先定義PID對象的結構體:

 1 /*定義結構體和公用體*/
 2 
 3 typedef struct
 4 
 5 {
 6 
 7   float setpoint;       //設定值
 8 
 9   float proportiongain;     //比例系數
10 
11   float integralgain;      //積分系數
12 
13   float derivativegain;    //微分系數
14 
15   float lasterror;     //前一拍偏差
16 
17   float result; //輸出值
18 
19   float integral;//積分值
20 
21   float epsilon; //偏差檢測閾值
22 
23 }PID;

接下來實現PID控制器:

 1 void PIDRegulation(PID *vPID, float processValue)
 2 
 3 {
 4 
 5   float thisError;
 6 
 7   thisError=vPID->setpoint-processValue;
 8 
 9   vPID->integral+=thisError;
10 
11   uint16_t beta= BetaGeneration(error, vPID->epsilon);
12 
13   if(beta>0)
14 
15 {
16 
17   vPID->result=vPID->proportiongain*thisError+vPID->derivativegain*(thisError-vPID->lasterror);
18 
19 }
20 
21 else
22 
23 {
24 
25 vPID->result=vPID->proportiongain*thisError+vPID->integralgain*vPID->integral+vPID->derivativegain*(thisError-vPID->lasterror);
26 
27 }
28 
29  
30 
31   vPID->lasterror=thisError;
32 
33 }

與普通的PID算法的區別就是上述代碼中增加了偏差判斷,來決定積分項的分離與否。

2)增量型PID算法實現

對于增量型PID控制,我們也可以采取相同的處理。首先定義PID對象的結構體:

 1 /*定義結構體和公用體*/
 2 
 3 typedef struct
 4 
 5 {
 6 
 7   float setpoint;       //設定值
 8 
 9   float proportiongain;     //比例系數
10 
11   float integralgain;      //積分系數
12 
13   float derivativegain;    //微分系數
14 
15   float lasterror;     //前一拍偏差
16 
17   float preerror;     //前兩拍偏差
18 
19   float deadband;     //死區
20 
21   float result; //輸出值
22 
23   float epsilon; //偏差檢測閾值
24 
25 }PID;

接下來實現PID控制器:

 1 void PIDRegulation(PID *vPID, float processValue)
 2 
 3 {
 4 
 5   float thisError;
 6 
 7   float increment;
 8 
 9   float pError,dError,iError;
10 
11  
12 
13   thisError=vPID->setpoint-processValue; //得到偏差值
14 
15   pError=thisError-vPID->lasterror;
16 
17   iError=thisError;
18 
19   dError=thisError-2*(vPID->lasterror)+vPID->preerror;
20 
21   uint16_t beta= BetaGeneration(error, vPID->epsilon);
22 
23   if(beta>0)
24 
25 {
26 
27 increment=vPID->proportiongain*pError+vPID->derivativegain*dError;   //增量計算
28 
29 }
30 
31 else
32 
33 {
34 
35 increment=vPID->proportiongain*pError+vPID->integralgain*iError+vPID->derivativegain*dError;   //增量計算
36 
37 }
38 
39   vPID->preerror=vPID->lasterror;  //存放偏差用于下次運算
40 
41   vPID->lasterror=thisError;
42 
43   vPID->result+=increment;
44 
45 }

這就實現了增量型PID控制器積分分離算法,也沒有考慮任何的干擾條件,僅僅只是對數學公式的計算機語言化。

3、總結

積分分離算法的思想非常簡單。當然,對于β的取值,很多人提出了改進措施,例如分多段取值,設定多個閾值ε1、ε2、ε3、ε4等,不過這些閾值也需要根據實際的系統來設定。除了分段取值外,甚至也有采用函數關系來獲取β值。當然,這樣處理后就不再是簡單的積分分離了,特別是在增量型算法中,實際上已經演變為一種變積分算法了。已經偏離了積分分離算法的設計思想,在后面我們會進一步說明。
編輯:hfy

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

    關注

    23

    文章

    4630

    瀏覽量

    93351
  • PID控制器
    +關注

    關注

    2

    文章

    173

    瀏覽量

    18671
  • PD控制器
    +關注

    關注

    0

    文章

    26

    瀏覽量

    16469
收藏 人收藏

    評論

    相關推薦

    西門子增量式PID算法積分分離

    西門子增量式帶積分分離PID控制器是一種改進的PID控制算法,它結合了增量式
    的頭像 發表于 12-07 09:34 ?368次閱讀
    西門子增量式<b class='flag-5'>PID</b><b class='flag-5'>算法</b>帶<b class='flag-5'>積分分離</b>

    如何使用Python實現PID控制

    PID控制(比例-積分-微分控制)是一種常見的反饋控制算法,廣泛應用于工業
    的頭像 發表于 11-14 09:09 ?685次閱讀

    如何選擇合適的PID控制器

    在工業自動化領域,PID控制器因其簡單、高效和廣泛應用而備受青睞。PID代表比例(Proportional)、積分(Integral)和微分(Derivative)三個
    的頭像 發表于 11-13 14:34 ?648次閱讀

    如何調節PID參數 PID控制器的調試方法

    在現代工業自動化控制系統中,PID控制器因其簡單、高效而被廣泛使用。PID控制器的三個參數——比例(P)、
    的頭像 發表于 11-13 14:31 ?4446次閱讀

    什么是PID控制器的原理 PID算法在自動化中的應用

    PID控制器是一種廣泛應用于工業控制系統中的控制器,它根據系統的偏差來計算控制量,以實現對被控對象的精確
    的頭像 發表于 11-13 14:27 ?1225次閱讀

    PID控制器的類型和選擇指南

    PID控制器是一種廣泛應用于工業控制系統中的控制器,它根據系統的偏差來計算控制量,以實現對系統的精確控制
    的頭像 發表于 11-06 10:37 ?805次閱讀

    什么是PID控制與傳統控制的區別

    現代復雜系統的控制需求。 PID控制簡介 PID控制是一種反饋控制
    的頭像 發表于 11-06 10:34 ?686次閱讀

    PID控制的優缺點分析 PID參數調節的常見方法

    控制算法結構簡單,易于理解和實現,不需要復雜的數學模型。 適應性強 :PID控制器能夠適應多種類型的系統,具有較好的魯棒性。 調節方便 :通過調整比例、
    的頭像 發表于 11-06 10:33 ?2682次閱讀

    PID算法的基本原理介紹

    在現代工業自動化和控制系統中,PID控制器因其簡單、魯棒和高效而成為最廣泛使用的控制算法之一。PID
    的頭像 發表于 11-06 10:28 ?628次閱讀

    什么是PID控制器及其應用

    PID控制器,全稱比例-積分-微分控制器(Proportional-Integral-Derivative Controller),是工業控制
    的頭像 發表于 11-06 10:27 ?1854次閱讀

    工業控制中常用的pid控制器是什么

    PID控制器是一種廣泛應用于工業控制領域的控制器,其全稱為比例-積分-微分控制器(Proport
    的頭像 發表于 06-30 10:41 ?1122次閱讀

    PID控制器與PWM控制器的區別

    在工業自動化和控制系統設計中,PID控制器(比例-積分-微分控制器)和PWM控制器(脈沖寬度調制
    的頭像 發表于 06-05 18:25 ?3481次閱讀

    PID控制器和PLC的區別

    在工業自動化和過程控制領域,PID控制器(比例-積分-微分控制器)和PLC(可編程邏輯控制器)是
    的頭像 發表于 06-05 15:32 ?3954次閱讀

    PID控制器中P、I、D的含義

    PID(Proportional-Integral-Derivative)控制器,作為工業自動化領域中最常用的控制算法之一,其廣泛應用于各種控制
    的頭像 發表于 06-05 15:30 ?5560次閱讀

    什么是PID控制器?有哪些作用?

    在現代工業自動化控制系統中,PID(比例-積分-微分)控制器無疑是最常見且重要的控制算法之一。
    的頭像 發表于 06-05 15:30 ?3601次閱讀
    TT百家乐官网现金网| 百家乐澳门百家乐澳门赌场| 百家乐官网官网站| 百家乐官网佛牌| 云鼎百家乐官网程序开发有限公司| 百家乐官网优博u2bet| 百家乐官网注册开户送现金| 大发百家乐官网游戏| CEO百家乐官网现金网| 百家乐官网书包| 百家乐官网西园二手房| 电投百家乐官网网站| 百家乐官网五湖四海娱乐网| 澳门百家乐官网娱乐网| 百家乐下注的规律| 百家乐马渚| 泰山百家乐的玩法技巧和规则| 永利高现金网| 娱乐城官网| 海门市| 百家乐官网开户送彩网址| 二手房| 都兰县| 赌博百家乐官网玩法| 在线百家乐官网作弊| 澳门百家乐现场视频| 百家乐什么方法容易赢| bet365娱乐在线| 宣武区| 职业百家乐官网的玩法技巧和规则| 博狗百家乐现场| 试玩百家乐的玩法技巧和规则 | 蓝盾百家乐官网代理| 网络百家乐赌博视频| 威尼斯人娱乐代理| 巴塘县| 狮威百家乐官网娱乐| 温州市百家乐ktv招聘| 大发888怎么代充| 百家乐官网玩法秘诀| 博九百家乐官网的玩法技巧和规则|