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

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

3天內不再提示

重溫經典 PID 算法

黃工的嵌入式技術圈 ? 來源:網站整理 ? 2020-03-12 11:09 ? 次閱讀

PID算法可以說是在自動控制原理中比較經典的一套算法,在現(xiàn)實生活中應用的比較廣泛。

大學參加過電子競賽的朋友都應該玩過電機(或者說循跡小車),我們要控制電機按照設定的速度運轉,PID控制在其中起到了關鍵的作用。

說來慚愧,大學這門課程學的不咋滴,老師講的課基本沒聽進去過。直到后面接觸競賽,算是對PID有了很基礎的一點點認識,直到現(xiàn)在工作實際應用的比較廣泛才知道它的重要性。所以,這里特地回顧一下。

Ⅰ什么是PID

PID,即比例Proportion、積分Integral和微分Derivative三個單詞的縮寫。

閉環(huán)自動控制技術是基于反饋的概念以減少不確定性,在閉環(huán)自動控制原理中,我們把它叫做“PID控制器”,拿控制電機來說,參考下面模型:

下面引用一段網上經典的話:

工業(yè)應用中PID及其衍生算法是應用最廣泛的算法之一,是當之無愧的萬能算法,如果能夠熟練掌握PID算法的設計與實現(xiàn)過程,對于一般的研發(fā)人員來講,應該是足夠應對一般研發(fā)問題了,而難能可貴的是,在我所接觸的控制算法當中,PID控制算法又是最簡單,最能體現(xiàn)反饋思想的控制算法,可謂經典中的經典。經典的未必是復雜的,經典的東西常常是簡單的,而且是最簡單的,想想牛頓的力學三大定律吧,想想愛因斯坦的質能方程吧,何等的簡單!簡單的不是原始的,簡單的也不是落后的,簡單到了美的程度。

ⅡPID原理

常規(guī)的模擬 PID 控制系統(tǒng)原理框圖如下:

該系統(tǒng)由模擬 PID 控制器和被控對象組成。

上面框圖中, r(t) 是給定值, y(t) 是系統(tǒng)的實際輸出值,給定值與實際輸出值構成控制偏差e(t) = r(t) ? y(t).

e(t)作為 PID 控制的輸入,u(t)作為 PID 控制器的輸出和被控對象的輸入。 所以模擬 PID 控制器的控制規(guī)律為:

三個重要的參數(shù)

Kp:控制器的比例系數(shù).

Ti:控制器的積分時間,也稱積分系數(shù).

Td:控制器的微分時間,也稱微分系數(shù).

1、P - 比例部分

比例環(huán)節(jié)的作用是對偏差瞬間作出反應。偏差一旦產生控制器立即產生控制作用, 使控制量向減少偏差的方向變化。 控制作用的強弱取決于比例系數(shù)Kp, 比例系數(shù)Kp越大,控制作用越強, 則過渡過程越快, 控制過程的靜態(tài)偏差也就越??; 但是Kp越大,也越容易產生振蕩, 破壞系統(tǒng)的穩(wěn)定性。 故而, 比例系數(shù)Kp選擇必須恰當, 才能過渡時間少, 靜差小而又穩(wěn)定的效果。

2、I - 積分部分

從積分部分的數(shù)學表達式可以知道, 只要存在偏差, 則它的控制作用就不斷的增加; 只有在偏差e(t)=0時, 它的積分才能是一個常數(shù),控制作用才是一個不會增加的常數(shù)。 可見,積分部分可以消除系統(tǒng)的偏差。

積分環(huán)節(jié)的調節(jié)作用雖然會消除靜態(tài)誤差,但也會降低系統(tǒng)的響應速度,增加系統(tǒng)的超調量。積分常數(shù)Ti越大,積分的積累作用越弱,這時系統(tǒng)在過渡時不會產生振蕩; 但是增大積分常數(shù)Ti會減慢靜態(tài)誤差的消除過程,消除偏差所需的時間也較長, 但可以減少超調量,提高系統(tǒng)的穩(wěn)定性。

當 Ti 較小時, 則積分的作用較強,這時系統(tǒng)過渡時間中有可能產生振蕩,不過消除偏差所需的時間較短。所以必須根據(jù)實際控制的具體要求來確定Ti 。

3、D - 微分部分

實際的控制系統(tǒng)除了希望消除靜態(tài)誤差外,還要求加快調節(jié)過程。在偏差出現(xiàn)的瞬間,或在偏差變化的瞬間, 不但要對偏差量做出立即響應(比例環(huán)節(jié)的作用), 而且要根據(jù)偏差的變化趨勢預先給出適當?shù)募m正。為了實現(xiàn)這一作用,可在 PI 控制器的基礎上加入微分環(huán)節(jié),形成 PID 控制器。

微分環(huán)節(jié)的作用使阻止偏差的變化。它是根據(jù)偏差的變化趨勢(變化速度)進行控制。偏差變化的越快,微分控制器的輸出就越大,并能在偏差值變大之前進行修正。微分作用的引入, 將有助于減小超調量, 克服振蕩, 使系統(tǒng)趨于穩(wěn)定, 特別對髙階系統(tǒng)非常有利, 它加快了系統(tǒng)的跟蹤速度。但微分的作用對輸入信號的噪聲很敏感,對那些噪聲較大的系統(tǒng)一般不用微分, 或在微分起作用之前先對輸入信號進行濾波。

ⅢPID算法代碼

PID 控制算法可以分為位置式 PID和增量式 PID控制算法。

兩者的區(qū)別:

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

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

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

下面給出公式直接體現(xiàn)的C語言源代碼(請結合項目修改源代碼):

1.位置式PID

typedef struct { float Kp; //比例系數(shù)Proportional float Ki; //積分系數(shù)Integral float Kd; //微分系數(shù)Derivative float Ek; //當前誤差 float Ek1; //前一次誤差 e(k-1) float Ek2; //再前一次誤差 e(k-2) float LocSum; //累計積分位置 }PID_LocTypeDef; /************************************************函數(shù)名稱 : PID_Loc功 能 : PID位置(Location)計算參 數(shù) : SetValue ------ 設置值(期望值) ActualValue --- 實際值(反饋值) PID ----------- PID數(shù)據(jù)結構返 回 值 : 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; //比例系數(shù)Proportional float Ki; //積分系數(shù)Integral float Kd; //微分系數(shù)Derivative float Ek; //當前誤差 float Ek1; //前一次誤差 e(k-1) float Ek2; //再前一次誤差 e(k-2) }PID_IncTypeDef; /************************************************函數(shù)名稱 : PID_Inc功 能 : PID增量(Increment)計算參 數(shù) : SetValue ------ 設置值(期望值) ActualValue --- 實際值(反饋值) PID ----------- PID數(shù)據(jù)結構返 回 值 : 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;}

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

    關注

    141

    文章

    8835

    瀏覽量

    144608
  • PID算法
    +關注

    關注

    2

    文章

    169

    瀏覽量

    24250
  • Integrate
    +關注

    關注

    0

    文章

    8

    瀏覽量

    8984
收藏 人收藏

    評論

    相關推薦

    第13章-循跡功能 STM32智能小車循跡教程 PID循跡算法分析

    第13章-循跡功能 循跡小車講解 原理分析 STM32智能小車循跡教程 紅外對管使用 PID循跡算法分析V3:HAL庫開發(fā)、功能:PID速度控制、PID循跡、
    的頭像 發(fā)表于 08-21 16:27 ?785次閱讀
    第13章-循跡功能 STM32智能小車循跡教程 <b class='flag-5'>PID</b>循跡<b class='flag-5'>算法</b>分析

    機器學習的經典算法與應用

    關于數(shù)據(jù)機器學習就是喂入算法和數(shù)據(jù),讓算法從數(shù)據(jù)中尋找一種相應的關系。Iris鳶尾花數(shù)據(jù)集是一個經典數(shù)據(jù)集,在統(tǒng)計學習和機器學習領域都經常被用作示例。數(shù)據(jù)集內包含3類共150條記錄,每類各50個數(shù)
    的頭像 發(fā)表于 06-27 08:27 ?1496次閱讀
    機器學習的<b class='flag-5'>經典</b><b class='flag-5'>算法</b>與應用

    位置式PID與增量式PID的區(qū)別

    PID(比例-積分-微分)控制器作為工業(yè)自動化領域中的核心控制算法,廣泛應用于各種需要精確控制的系統(tǒng)中。在PID控制器的實現(xiàn)中,有兩種主要的控制模式:位置式PID和增量式
    的頭像 發(fā)表于 06-05 16:23 ?5024次閱讀

    什么是PID?PID各個參數(shù)有什么作用?

    PID,就是“比例(proportional)、積分(integral)、微分(derivative)”,是一種很常見的控制算法。 PID已經有107年的歷史了,它并不是什么很神圣的東西,大家一定都見過
    發(fā)表于 03-18 11:24 ?9660次閱讀
    什么是<b class='flag-5'>PID</b>?<b class='flag-5'>PID</b>各個參數(shù)有什么作用?

    STM32控制中常見的PID算法總結

    在很多控制算法當中,PID控制算法又是最簡單,最能體現(xiàn)反饋思想的控制算法,可謂經典中的經典。
    發(fā)表于 12-27 14:07 ?1417次閱讀
    STM32控制中常見的<b class='flag-5'>PID</b><b class='flag-5'>算法</b>總結

    【技術干貨】PID算法原理分析及優(yōu)化

    本期為大家分享經典控制算法之一的 PID控制方法。 PID控制方法從提出至今已有百余年歷史,其由于結構簡單、易于實現(xiàn)、魯棒性好、可靠性高等特點,在機電、冶金、機械、化工等行業(yè)中應用廣泛
    發(fā)表于 12-22 15:38

    四軸PID算法:單環(huán)和串級,你搞懂了嗎?

    上述角度單環(huán)PID控制算法僅僅考慮了飛行器的角度信息,如果想增加飛行器的穩(wěn)定性(增加阻尼)并提高它的控制品質,我們可以進一步的控制它的角速度,于是角度/角速度-串級PID控制算法應運而
    的頭像 發(fā)表于 12-11 17:35 ?1107次閱讀
    四軸<b class='flag-5'>PID</b><b class='flag-5'>算法</b>:單環(huán)和串級,你搞懂了嗎?

    PID算法的代碼實現(xiàn)

    PID算法的代碼實現(xiàn) 舵機控制 在對舵機的控制中,我采用的是位置式PD算法。 將左右電感的偏差值賦給error,再代入公式進行解算,最后傳給舵機輸出子函數(shù),控制舵機正確打角。 void
    的頭像 發(fā)表于 11-28 15:57 ?590次閱讀

    飛行控制PID算法的作用解析

    PID控制器是一種線性控制器,它主要根據(jù)給定值和實際輸出值構成控制偏差,然后利用偏差給出合理的控制量,目前,人們通過科學研究獲得了諸多具有優(yōu)異控制效果的算法和理論,但在工程應用領域,基于經典P
    的頭像 發(fā)表于 11-27 10:57 ?1524次閱讀
    飛行控制<b class='flag-5'>PID</b><b class='flag-5'>算法</b>的作用解析

    178個經典c語言源代碼+算法大全

    電子發(fā)燒友網站提供《178個經典c語言源代碼+算法大全.rar》資料免費下載
    發(fā)表于 11-21 10:19 ?6次下載
    178個<b class='flag-5'>經典</b>c語言源代碼+<b class='flag-5'>算法</b>大全

    單片機如何實現(xiàn)pid控制 基于pid控制的STM32代碼實現(xiàn)

    PID控制算法是目前應用較為廣泛的一種控制算法,PID控制具有參數(shù)可調、應用范圍廣、控制精度高等優(yōu)點。在實際工程中,PID
    的頭像 發(fā)表于 11-10 16:56 ?4449次閱讀

    PID算法詳解及實例分析

    PID算法詳解及實例分析#include using namespace std;struct _pid{? ?float SetSpeed; //定義設定值? ?float ActualSpeed
    發(fā)表于 11-09 16:33 ?1次下載

    PID算法原理分析及優(yōu)化

    歡迎來到森木磊石「技術微課堂」,本期為大家分享經典控制算法之一的PID控制方法。PID控制方法從提出至今已有百余年歷史,其由于結構簡單、易于實現(xiàn)、魯棒性好、可靠性高等特點,在機電、冶金
    的頭像 發(fā)表于 11-08 08:23 ?1425次閱讀
    <b class='flag-5'>PID</b><b class='flag-5'>算法</b>原理分析及優(yōu)化

    控制算法PID之比例控制(P)的原理和示例代碼

    PID是“比例-積分-微分”的縮寫,是一種廣泛用于控制系統(tǒng)的反饋控制算法。PID控制器根據(jù)測量值與期望值之間的誤差來調整控制器的輸出,以使系統(tǒng)穩(wěn)定并盡可能接近期望值。下面是PID中P(
    的頭像 發(fā)表于 11-01 08:00 ?2251次閱讀
    控制<b class='flag-5'>算法</b><b class='flag-5'>PID</b>之比例控制(P)的原理和示例代碼

    什么算法能夠代替PID控制?

    什么算法能夠代替PID控制
    發(fā)表于 11-01 06:44