pid程序演算法
① PID演算法的C語言實現
基本流程
積分環節:主要是用來消除 靜差 (系統穩定後輸出值和設定值之間的差值,積分環節實際上就是偏差累積的過程,把累積的誤差加到原來系統上以抵消系統造成的靜差)
微分環節:反映了偏差信號的變化規律,根據偏差信號的變化規律來進行超前調節,從而增加系統的快速性
對上述公式進行離散化(采樣):兩個公式
增量型PID:
通過增量型PID公式可以看出,最終表達結果和最近三次的偏差有關,最終輸出結果應該為:
首先定義結構變數體:
然後初始化變數
最後編寫控制演算法
基本演算法,沒有考慮死區問題,沒有設定上下限
在啟動、結束或大幅度增減設定時,短時間內系統輸出有很大的偏差,會造成PID運算的積分積累,導致控制量超過執行機構可能允許的最大動作范圍對應的極限控制量,從而引起較大的超調,甚至是振盪。
為了克服這個問題,引入積分分離的概念,即當被控量和設定值偏差較大時,取消積分作用;當被控量接近設定值時,引入積分控制,以消除靜差,提高精度。
abs :絕對值
令index=0使積分環節失效
積分飽和現象:如果系統存在一個方向的偏差,PID控制器的輸出由於積分作用的不斷累加而加大,從而導致執行機構達到極限位置。此時計算器輸出量超出正常運行范圍而進入飽和區,一旦系統出現反向偏差,輸出量將逐漸從飽和區退出,進入飽和區越深則退出飽和區時間越長,在這段時間里,執行機構仍然停留在極限位置而不隨偏差反向而立即做出相應改變,造成性能惡化。
採用梯形積分能夠減小余差,提高精度
改變積分系數,若偏差大,積分作用減弱,系數減小;若偏差小,積分作用增強,系數增大。
變積分PID的基本思想是設法改變積分項的累加速度,使其與偏差大小對應。
使整個系統的穩定速度非常快
比例系數Kp的作用是加快系統的響應速度提高系統的調節精度
積分系數Ki的作用是消除系統的穩態誤差
微分系數Kd的作用是改善系統的動態特性
反應系統性能的兩個參數是系統誤差和誤差變化律
② 一文搞懂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演算法的演算法種類
離散化公式:
△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)
對於增量式演算法,可以選擇的功能有:
(1) 濾波的選擇
可以對輸入加一個前置濾波器,使得進入控制演算法的給定值不突變,而是有一定慣性延遲的緩變數。
(2) 系統的動態過程加速
在增量式演算法中,比例項與積分項的符號有以下關系:如果被控量繼續偏離給定值,則這兩項符號相同,而當被控量向給定值方向變化時,則這兩項的符號相反。
由於這一性質,當被控量接近給定值的時候,反號的比例作用阻礙了積分作用,因而避免了積分超調以及隨之帶來的振盪,這顯然是有利於控制的。但如果被控量遠未接近給定值,僅剛開始向給定值變化時,由於比例和積分反向,將會減慢控制過程。
為了加快開始的動態過程,我們可以設定一個偏差范圍v,當偏差|e(t)|< β時,即被控量接近給定值時,就按正常規律調節,而當|e(t)|>= β時,則不管比例作用為正或為負,都使它向有利於接近給定值的方向調整,即取其值為|e(t)-e(t-1)|,其符號與積分項一致。利用這樣的演算法,可以加快控制的動態過程。
(3) PID增量演算法的飽和作用及其抑制
在PID增量演算法中,由於執行元件本身是機械或物理的積分儲存單元,如果給定值發生突變時,由演算法的比例部分和微分部分計算出的控制增量可能比較大,如果該值超過了執行元件所允許的最大限度,那麼實際上執行的控制增量將時受到限制時的值,多餘的部分將丟失,將使系統的動態過程變長,因此,需要採取一定的措施改善這種情況。
糾正這種缺陷的方法是採用積累補償法,當超出執行機構的執行能力時,將其多餘部分積累起來,而一旦可能時,再補充執行。 離散公式:
u(k)=Kp*e(k) +Ki*+Kd*[e(k)-e(k-1)]
對於位置式演算法,可以選擇的功能有:
a、濾波:同上為一階慣性濾波
b、飽和作用抑制: 在基本PID控制中,當有較大幅度的擾動或大幅度改變給定值時, 由於此時有較大的偏差,以及系統有慣性和滯後,故在積分項的作用下,往往會產生較大的超調量和長時間的波動。特別是對於溫度、成份等變化緩慢的過程,這一現象將更嚴重。為此可以採用積分分離措施,即偏差較大時,取消積分作用;當偏差較小時才將積分作用投入。
另外積分分離的閾值應視具體對象和要求而定。若閾值太大,達不到積分分離的目的,若太小又有可能因被控量無法跳出積分分離區,只進行PD控制,將會出現殘差。
離散化公式:
當時當|e(t)|>β時
q0 = Kp(1+Td/T)
q1 = -Kp(1+2Td/T)
q2 = Kp Td /T
u(t) = u(t-1) + Δu(t)
註:各符號含義如下
u(t);;;;; 控制器的輸出值。
e(t);;;;; 控制器輸入與設定值之間的誤差。
Kp;;;;;;; 比例系數。
Ti;;;;;;; 積分時間常數。
Td;;;;;;; 微分時間常數。(有的地方用Kd表示)
T;;;;;;;; 調節周期。
β;;;;;;; 積分分離閾值 當根據PID位置演算法算出的控制量超出限制范圍時,控制量實際上只能取邊際值U=Umax,或U=Umin,有效偏差法是將相應的這一控制量的偏差值作為有效偏差值計入積分累計而不是將實際的偏差計入積分累計。因為按實際偏差計算出的控制量並沒有執行。
如果實際實現的控制量為U=U(上限值或下限值),則有效偏差可以逆推出,即:
=
然後,由該值計算積分項
微分先行PID演算法
當控制系統的給定值發生階躍時,微分作用將導致輸出值大幅度變化,這樣不利於生產的穩定操作。因此在微分項中不考慮給定值,只對被控量(控制器輸入值)進行微分。微分先行PID演算法又叫測量值微分PID演算法。公式如下:
離散化公式:
參數說明同上
對於純滯後對象的補償
控制點採用了Smith預測器,使控制對象與補償環節一起構成一個簡單的慣性環節。
PID參數整定
(1) 比例系數Kp對系統性能的影響
:
比例系數加大,使系統的動作靈敏,速度加快,穩態誤差減小。Kp偏大,振盪次數加多,調節時間加長。Kp太大時,系統會趨於不穩定。Kp太小,又會使系統的動作緩慢。Kp可以選負數,這主要是由執行機構、感測器以控制對象的特性決定的。如果Kc的符號選擇不當對象狀態(pv值)就會離控制目標的狀態(sv值)越來越遠,如果出現這樣的情況Kp的符號就一定要取反。
(2) 積分控制Ti對系統性能的影響
:
積分作用使系統的穩定性下降,Ti小(積分作用強)會使系統不穩定,但能消除穩態誤差,提高系統的控制精度。
(3) 微分控制Td對系統性能的影響
:
微分作用可以改善動態特性,Td偏大時,超調量較大,調節時間較短。Td偏小時,超調量也較大,調節時間也較長。只有Td合適,才能使超調量較小,減短調節時間。
④ 什麼是數字pid位置控制演算法和增量型控制演算法試比較它們的優缺點
(1)數字PID位置型控制演算法:
執行機構需要的是控制量的增量(例如驅動步進電機)時,數字控制器的輸出只是控制量的增量,該公式稱為增量式PID控制演算法。
優點:①誤動作時影響小,必要時可用邏輯判斷的方法去掉出錯數據。
②手動/自動切換時沖擊小,便於實現無擾動切換。當計算機故障時,仍能保持原值。
③算式中不需要累加。
缺點:積分截斷效應大,有穩態誤差;溢出的影響大。
⑤ 什麼是「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演算法具體分兩種:一種是位置式的 ,一種是增量式的。
位置式PID的輸出與過去的所有狀態有關,計算時要對e(每一次的控制誤差)進行累加,這個計算量非常大,而明顯沒有必要。而且小車的PID控制器的輸出並不是絕對數值,而是一個△,代表增多少,帶激減多少。換句話說,通過增量PID演算法祥亂,每次輸出是PWM要增加多少或者減小多少,而不是PWM的實際值。所以明白增量式PID就行了。
PID的增量型公式:
PID=Uk+KP*【E(k)-E(k-1)】+KI*E(k)+KD*【E(k)-2E(k-1)+E(k-2)】
拓展資料:
PID=port ID,在STP(生成樹協議)中,若在埠收到的BPDU中BID和path cost相同時,則比較PID來選擇阻塞埠。數字電視復用系統名詞 PID(Packet Identifier) 在數蠢宴襪字電視復用系統中它的作用好比一份文件的文件名,我們可以稱它為「標志碼傳輸包」 。工程式控制制和數學物理方面 PID(比例積分微分)英文全稱為Proportion Integration Differentiation,它是一個數學物理術語。PID由8位埠優先順序加埠號組成,埠號占低位,默認埠號優先順序128。