(轉(zhuǎn)載)PID算法簡(jiǎn)單實(shí)現(xiàn)

原文出處

PID算法

image
1 什么是PID
  • PID,即比例Proportion、積分Integral微分Derivative三個(gè)單詞的縮寫(xiě)。
  • 閉環(huán)自動(dòng)控制技術(shù)是基于反饋的概念以減少不確定性,在閉環(huán)自動(dòng)控制原理中,我們把它叫做“PID控制器”,拿控制電機(jī)來(lái)說(shuō),參考下面模型:

[圖片上傳中...(image-725457-1563416196973-3)]

  • 下面引用一段網(wǎng)上經(jīng)典的話(huà):

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

2 PID原理
  • 常規(guī)的模擬PID控制系統(tǒng)原理框圖如下:
image
  • 該系統(tǒng)由模擬 PID 控制器和被控對(duì)象組成。
  • 上面框圖中, r(t) 是給定值, y(t) 是系統(tǒng)的實(shí)際輸出值,給定值與實(shí)際輸出值構(gòu)成控制偏差e(t) = r(t) ? y(t).
  • e(t) 作為 PID 控制的輸入, u(t)作為 PID 控制器的輸出和被控對(duì)象的輸入。 所以模擬 PID 控制器的控制規(guī)律為:
image
三個(gè)重要的參數(shù):

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

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

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

  • P – 比例部分

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

  • I – 積分部分

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

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

  • D – 微分部分

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

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

3 PID算法代碼

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

兩者的區(qū)別

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

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

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

  • 下面給出公式直接體現(xiàn)的C語(yǔ)言源代碼(請(qǐng)結(jié)合項(xiàng)目修改源代碼):

位置式PID

image
typedef struct
{
  float Kp;                       //比例系數(shù)Proportional
  float Ki;                       //積分系數(shù)Integral
  float Kd;                       //微分系數(shù)Derivative

  float Ek;                       //當(dāng)前誤差
  float Ek1;                      //前一次誤差 e(k-1)
  float Ek2;                      //再前一次誤差 e(k-2)
  float LocSum;                   //累計(jì)積分位置
}PID_LocTypeDef;

/************************************************
函數(shù)名稱(chēng) : PID_Loc
功    能 : PID位置(Location)計(jì)算
參    數(shù) : SetValue ------ 設(shè)置值(期望值)
            ActualValue --- 實(shí)際值(反饋值)
            PID ----------- PID數(shù)據(jù)結(jié)構(gòu)
返 回 值 : PIDLoc -------- PID位置
作    者 : strongerHuang
*************************************************/
float PID_Loc(float SetValue, float ActualValue, PID_LocTypeDef *PID)
{
  float PIDLoc;                                  //位置

  PID->Ek = SetValue - ActualValue;
  PID->LocSum += PID->Ek;                         //累計(jì)誤差

  PIDLoc = PID->Kp * PID->Ek + (PID->Ki * PID->LocSum) + PID->Kd * (PID->Ek1 - PID->Ek);

  PID->Ek1 = PID->Ek;  return PIDLoc;
}

增量式PID

? △u(k) = u(k) – u(k-1)

? = Kp[ e(k) – e(k-1)] + Ki*e(k) + Kd[e(k) – 2e(k-1) + e(k-2)]

typedef struct
{
  float Kp;                       //比例系數(shù)Proportional
  float Ki;                       //積分系數(shù)Integral
  float Kd;                       //微分系數(shù)Derivative

  float Ek;                       //當(dāng)前誤差
  float Ek1;                      //前一次誤差 e(k-1)
  float Ek2;                      //再前一次誤差 e(k-2)
}PID_IncTypeDef;

/************************************************
函數(shù)名稱(chēng) : PID_Inc
功    能 : PID增量(Increment)計(jì)算
參    數(shù) : SetValue ------ 設(shè)置值(期望值)
            ActualValue --- 實(shí)際值(反饋值)
            PID ----------- PID數(shù)據(jù)結(jié)構(gòu)
返 回 值 : 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;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • PID控制器是一種常用的控制技術(shù),常用于多種機(jī)械裝置(如車(chē)輛、機(jī)器人、火箭)中。用數(shù)學(xué)方式來(lái)描述PID控制器是非常...
    云淡天空閱讀 6,694評(píng)論 0 11
  • 這次萌生出寫(xiě)一篇Arduino和PID算法結(jié)合的文章,其實(shí)是因?yàn)閯偯ν陮?shí)驗(yàn)的事情,而實(shí)驗(yàn)進(jìn)行過(guò)程中曾嘗試著應(yīng)用PI...
    之玖閱讀 8,752評(píng)論 1 3
  • 基礎(chǔ) 基本流程 積分環(huán)節(jié):主要是用來(lái)消除靜差(系統(tǒng)穩(wěn)定后輸出值和設(shè)定值之間的差值,積分環(huán)節(jié)實(shí)際上就是偏差累積的過(guò)程...
    哪怕隔著山水閱讀 5,365評(píng)論 0 0
  • 本文轉(zhuǎn)載自微信公眾號(hào)“電子搬磚師”,原文鏈接 這篇文章會(huì)以特別形象通俗的方式講講什么是PID。 很多人看到網(wǎng)上寫(xiě)的...
    這個(gè)飛宏不太冷閱讀 7,189評(píng)論 2 15
  • 發(fā)展 中國(guó)古今傳統(tǒng)兵械,是中華民族文化瑰寶,具有源遠(yuǎn)流長(zhǎng)的歷史。古今兵械源于古代勞動(dòng)人民的打獵和捕魚(yú)等所用的工具、...
    我是霸王s閱讀 1,367評(píng)論 0 0

友情鏈接更多精彩內(nèi)容