導航:首頁 > 源碼編譯 > 常規pid控制演算法

常規pid控制演算法

發布時間:2023-05-10 03:59:18

① 一文搞懂PID控制演算法

PID演算法是工業應用中最廣泛演算法之一,在閉環系統的控制中,可自動對控制系統進行准確且迅速的校正。PID演算法已經有100多年歷史,在四軸飛行器,平衡小車、汽車定速巡航、溫度控制器等場景均有應用。

之前做過循跡車項目,簡單循跡搖擺幅度較大,效果如下所示:

PID演算法優化後,循跡穩定性能較大提升,效果如下所示:

PID演算法:就是「比例(proportional)、積分(integral)、微分(derivative)」,是一種常見的「保持穩定」控制演算法。

常規的模擬PID控制系統原理框圖如下所示:

因此可以得出e(t)和u(t)的關系:

其中:

Kp:比例增益,是調適參數;

Ki:積分增益,也是調適參數;

Kd:微分增益,也是調適參數;

e:誤差=設定值(SP)- 回授值(PV);

t:目前時間。

數學公式可能比較枯燥,通過以下例子,了解PID演算法的應用。

例如,使用控制器使一鍋水的溫度保持在50℃,小於50℃就讓它加熱,大於50度就斷電不就行了?

沒錯,在要求不高的情況下,確實可以這么干,如果換一種說法,你就知道問題出在哪裡了。

如果控制對象是一輛汽車呢?要是希望汽車的車速保持在50km/h不動,這種方法就存在問題了。

設想一下,假如汽車的定速巡航電腦在某一時間測到車速是45km/h,它立刻命令發動機:加速!

結果,發動機那邊突然來了個100%全油門,嗡的一下汽車急加速到了60km/h,這時電腦又發出命令:剎車!結果乘客吐......

所以,在大多數場合中,用「開關量」來控制一個物理量就顯得比較簡單粗暴了,有時候是無法保持穩定的,因為單片機、感測器不是無限快的,採集、控制需要時間。

而且,控制對象具有慣性,比如將熱水控制器拔掉,它的「余熱」即熱慣性可能還會使水溫繼續升高一小會。

此時就需要使用PID控制演算法了。

接著咱再來詳細了解PID控制演算法的三個最基本的參數:Kp比例增益、Ki積分增益、Kd微分增益。

1、Kp比例增益

Kp比例控制考慮當前誤差,誤差值和一個正值的常數Kp(表示比例)相乘。需要控制的量,比如水溫,有它現在的 當前值 ,也有我們期望的 目標值 。

當兩者差距不大時,就讓加熱器「輕輕地」加熱一下。

要是因為某些原因,溫度降低了很多,就讓加熱器「稍稍用力」加熱一下。

要是當前溫度比目標溫度低得多,就讓加熱器「開足馬力」加熱,盡快讓水溫到達目標附近。

這就是P的作用,跟開關控制方法相比,是不是「溫文爾雅」了很多。

實際寫程序時,就讓偏差(目標減去當前)與調節裝置的「調節力度」,建立一個一次函數的關系,就可以實現最基本的「比例」控制了~

Kp越大,調節作用越激進,Kp調小會讓調節作用更保守。

若你正在製作一個平衡車,有了P的作用,你會發現,平衡車在平衡角度附近來回「狂抖」,比較難穩住。

2、Kd微分增益

Kd微分控制考慮將來誤差,計算誤差的一階導,並和一個正值的常數Kd相乘。

有了P的作用,不難發現,只有P好像不能讓平衡車站起來,水溫也控製得晃晃悠悠,好像整個系統不是特別穩定,總是在「抖動」。

設想有一個彈簧:現在在平衡位置上,拉它一下,然後鬆手,這時它會震盪起來,因為阻力很小,它可能會震盪很長時間,才會重新停在平衡位置。

請想像一下:要是把上圖所示的系統浸沒在水裡,同樣拉它一下 :這種情況下,重新停在平衡位置的時間就短得多。

此時需要一個控製作用,讓被控制的物理量的「變化速度」趨於0,即類似於「阻尼」的作用。

因為,當比較接近目標時,P的控製作用就比較小了,越接近目標,P的作用越溫柔,有很多內在的或者外部的因素,使控制量發生小范圍的擺動。

D的作用就是讓物理量的速度趨於0,只要什麼時候,這個量具有了速度,D就向相反的方向用力,盡力剎住這個變化。

Kd參數越大,向速度相反方向剎車的力道就越強,如果是平衡小車,加上P和D兩種控製作用,如果參數調節合適,它應該可以站起來了。

3、Ki積分增益

Ki積分控制考慮過去誤差,將誤差值過去一段時間和(誤差和)乘以一個正值的常數Ki。

還是以熱水為例,假如有個人把加熱裝置帶到了非常冷的地方,開始燒水了,需要燒到50℃。

在P的作用下,水溫慢慢升高,直到升高到45℃時,他發現了一個不好的事情:天氣太冷,水散熱的速度,和P控制的加熱的速度相等了。

這可怎麼辦?

P兄這樣想:我和目標已經很近了,只需要輕輕加熱就可以了。

D兄這樣想:加熱和散熱相等,溫度沒有波動,我好像不用調整什麼。

於是,水溫永遠地停留在45℃,永遠到不了50℃。

根據常識,我們知道,應該進一步增加加熱的功率,可是增加多少該如何計算呢?

前輩科學家們想到的方法是真的巧妙,設置一個積分量,只要偏差存在,就不斷地對偏差進行積分(累加),並反應在調節力度上。

這樣一來,即使45℃和50℃相差不是太大,但是隨著時間的推移,只要沒達到目標溫度,這個積分量就不斷增加,系統就會慢慢意識到:還沒有到達目標溫度,該增加功率啦!

到了目標溫度後,假設溫度沒有波動,積分值就不會再變動,這時,加熱功率仍然等於散熱功率,但是,溫度是穩穩的50℃。

Ki的值越大,積分時乘的系數就越大,積分效果越明顯,所以,I的作用就是,減小靜態情況下的誤差,讓受控物理量盡可能接近目標值。

I在使用時還有個問題:需要設定積分限制,防止在剛開始加熱時,就把積分量積得太大,難以控制。

PID演算法的參數調試是指通過調整控制參數(比例增益、積分增益/時間、微分增益/時間) 讓系統達到最佳的控制效果 。

調試中穩定性(不會有發散性的震盪)是首要條件,此外,不同系統有不同的行為,不同的應用其需求也不同,而且這些需求還可能會互相沖突。

PID演算法只有三個參數,在原理上容易說明,但PID演算法參數調試是一個困難的工作,因為要符合一些特別的判據,而且PID控制有其限制存在。

1、穩定性

若PID演算法控制器的參數未挑選妥當,其控制器輸出可能是不穩定的,也就是其輸出發散,過程中可能有震盪,也可能沒有震盪,且其輸出只受飽和或是機械損壞等原因所限制。不穩定一般是因為過大增益造成,特別是針對延遲時間很長的系統。

2、最佳性能

PID控制器的最佳性能可能和針對過程變化或是設定值變化有關,也會隨應用而不同。

兩個基本的需求是調整能力(regulation,干擾拒絕,使系統維持在設定值)及命令追隨 (設定值變化下,控制器輸出追隨設定值的反應速度)。有關命令追隨的一些判據包括有上升時間及整定時間。有些應用可能因為安全考量,不允許輸出超過設定值,也有些應用要求在到達設定值過程中的能量可以最小化。

3、各調試方法對比

4、調整PID參數對系統的影響

② PID控制演算法

PID控制是將偏差的比例(p)、積分(I)和微分(D)通過線性組合構成控制量,對被控對象進行控制。說到PID控制演算法有很多種,好比位置式PID控制演算法、增量式PID控制演算法、積分分離PID控制演算法......根據系統的連續性和離散性,PID控制演算法也不同,所以不知LZ是在問什麼

③ 什麼是pid演算法,難學嗎,用C語言,plc怎麼實現

一、什麼是PID:

PID即:Proportional(比例)、Integral(積分)、Differential(微分)的縮寫。顧名思義,PID控制演算法是結合比例、積分和微分三種環節於一體的控制演算法,它是連續系統中技術最為成熟、應用最為廣泛的一種控制演算法,該控制演算法出現於20世紀30至40年代,適用於對被控對象模型了解不清楚的場合。 ---網路

二、PID是否難學:

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

三、PID演算法的C語言源碼

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

詳細見參考【1】【2】


參考:

【1】PID演算法

【2】簡易PID演算法的快速掃盲(超詳細+過程推導+C語言程序)

④ 什麼是「PID演算法」

「PID演算法」在過程式控制制中,按偏差的比例(P)、積分(I)和微分(D)進行控制的PID控制器(亦稱PID調節器)是應用最為廣泛的一種自動控制器。

它具有原理簡單,易於實現,適用面廣,控制參數相互獨立,參數的選定比較簡單等優點;而且在理論上可以證明,對於過程式控制制的典型對象──「一階滯後+純滯後」與「二階滯後+純滯後」的控制對象,PID控制器是一種最優控制。

PID調節規律是連續系統動態品質校正的一種有效方法,它的參數整定方式簡便,結構改變靈活(PI、PD、?)。

控制點包含三種比較簡單的PID控制演算法,分別是:增量式演算法,位置式演算法,微分先行。 這三種PID演算法雖然簡單,但各有特點,基本上能滿足一般控制的大多數要求。

PID增量式演算法

離散化公式:

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

△u(k)=Kp[e(k)-e(k-1)]+Kie(k)+Kd[e(k)-2e(k-1)+e(k-2)]

進一步可以改寫成

△u(k)=Ae(k)-Be(k-1)+Ce(k-2)。

⑤ pid控制的演算法

給你個PID控制演算法的程序段,該程序是西門子PLC的SCL程序。帶"_IN"與帶"_OUT"的變數,如果前綴是一樣的,要求連接同一個變數。這段程序已經在溫度控制上運行通過了。

FUNCTION FC1 : VOID

VAR_INPUT
Run:BOOL; //True-運行,False-停止
Auto:BOOL; //True-自動,False-手動
ISW:BOOL; //True-積分有效,False-積分無效
DSW:BOOL; //True-微分有效,False-微分無效
SetMV:REAL; //手動時的開度設定值
SVSW:REAL; //當設定值低於SVSW時,開度為零
PV:REAL; //測量值
SV:REAL; //設定值
DeadBand:REAL; //死區大小
PBW:REAL; //比例帶大小
IW:REAL; //積分帶大小
DW:REAL; //微分帶大小
dErr_IN:REAL; //誤差累積
LastPV_IN:REAL; //上一控制周期的測量值
END_VAR

VAR_OUTPUT
MV:REAL; //輸出開度
dErr_OUT:REAL; //誤差累積
LastPV_OUT:REAL;//上一控制周期的測量值
END_VAR

VAR
Err:REAL; //誤差
dErr:REAL; //誤差累積
PBH:REAL; //比例帶上限
PBL:REAL; //比例帶下限
PVC:REAL; //測量值在一個控制周期內的變化率,即測量值變化速率
P:REAL; //比例項
I:REAL; //積分項
D:REAL; //微分項
END_VAR

IF Run=1 THEN
IF Auto=1 THEN
IF SV>=SVSW THEN
Err:=SV-PV;
PBH:=SV+PBW;
PBL:=SV-PW;
IF PV<PBL THEN
MV:=1;
ELSIF PV>PBH THEN
MV:=0;
ELSE
P=(PBH-PV)/(PBH-PBL); //計算比例項
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////以下為積分項的計算//////////////////////////////////////////////////////////////
IF ISW=1 THEN
dErr:=dErr_IN;
IF (PV<(SV-DeadBand)) OR (PV>(SV+DeadBand)) THEN
IF (dErr+Err)<(0-IW) THEN
dErr:=0-IW;
ELSIF (dErr+Err)>IW THEN
dErr:=IW;
ELSE
dErr:=dErr+Err;
END_IF;
END_IF;
I:=dErr/IW;
dErr_OUT:=dErr;
ELSE
I:=0;
END_IF;
/////////////////////////////////////////////以上為積分項的計算//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////以下為微分項的計算//////////////////////////////////////////////////////////////
IF DSW=1 THEN
PVC:=LastPV_IN-PV;
D:=PVC/DW;
LastPV_OUT:=PV;
ELSE
D:=0;
END_IF;
/////////////////////////////////////////////以上為微分項的計算//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IF (P+I+D)>1 THEN
MV:=1;
ELSIF (P+I+D)<0 THEN
MV:=0;
ELSE
MV:=P+I+D;
END_IF;
END_IF;
ELSE
MV:=0;
END_IF;
ELSE
MV:=SetMV;
END_IF;
ELSE
MV:=0;
END_IF;

END_FUNCTION

⑥ PID的演算法技術有哪些

按控制系統分有連續PID、數字PID。
按輸出量調整方式分有位置式PID、增量式PID。
按做積分的有效范圍分有普通PID、積分分離法。
按P、I、D參數的動態設置分有模糊PID、神經網路PID和其它的只能演算法調整出來的PID。

⑦ pid數字控制器有哪幾種控制演算法

(1)積分差慎鄭分離PID控制算虛頌法;
(2)不完全微分PID控制演算法;
(孝腔3)帶死區的PID控制演算法;
(4)消除積分不靈敏區的PID控制演算法。

⑧ PID 控制演算法

首先看自動控制原理的PID表達式,然後看懂離散表達式,不要看網上的PID程序,然後根據離散表達式自己就可以寫出程序。網上的PID控制大部分都是用結構函數寫的,看不太懂。

閱讀全文

與常規pid控制演算法相關的資料

熱點內容
我的世界國際服為什麼登不進伺服器 瀏覽:994
微盟程序員老婆 瀏覽:928
intellij創建java 瀏覽:110
java連接odbc 瀏覽:38
啟動修復無法修復電腦命令提示符 瀏覽:359
手機編程是什麼 瀏覽:97
山東移動程序員 瀏覽:163
蘇州java程序員培訓學校 瀏覽:476
單片機液晶驅動 瀏覽:854
魔拆app里能拆到什麼 瀏覽:130
新預演算法的立法理念 瀏覽:144
wdcpphp的路徑 瀏覽:134
單片機p0口電阻 瀏覽:926
瀏覽器中調簡訊文件夾 瀏覽:594
五菱宏光空調壓縮機 瀏覽:68
為什麼app佔用幾百兆 瀏覽:680
自動解壓失敗叫我聯系客服 瀏覽:485
易語言新手源碼 瀏覽:458
oa伺服器必須有固定ip地址 瀏覽:45
傳奇源碼分析是什麼 瀏覽:270