A. 什麼是PID 演算法
PID是工業控制上的一種控制演算法,其中P表示比例,I表示積分,D表示微分。以溫度控制的PID程序為例:
P(比例)表示在溫度設定值上下多少度的范圍內做比例動作,當溫度越高,功率越小,溫度越低,功率就越大,功率到底為多大,就看溫度偏差值和比例區間的大小按反比關系計算。
I(積分)也是一種比例,是溫度偏差值的累積值與設定的一個值之間的反比關系,但要注意何時將溫度偏差值的累積值清零。積分就好像當溫度比設定值低很多而你有覺得溫度升的慢的時候就使勁的加大功率一樣。
D(微分)是溫度變化快慢跟功率的比值,即當你覺得溫度上升的太快時,就降低功率,一阻止溫度上升過快,反之當溫度下降太快時,就加大功率以阻止溫度下降太快一樣。
給我郵箱我可以給你發一份PID溫度控製程序。
B. 一文搞懂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參數對系統的影響
C. PID演算法的簡介
控制點包含三種比較簡單的PID控制演算法,分別是:增量式演算法,位置式演算法,微分先行。 這三種PID演算法雖然簡單,但各有特點,基本上能滿足一般控制的大多數要求。
D. 如何成為一個飛控演算法工程師
職業肯定是一個非常好的職業,特別是對於喜歡數學和計算機的人,當然,如果你對這個不感興趣,可能也會覺得非常枯燥.工程師的前途主要看個人,比一般的計算機應用方面的人要求更高,就是說,你如果這個幹得不是非常好,那麼就根本找不到工作,如果幹好了,可以找到非常好的工作~而不像別的計算機應用方面的人員,即使幹得不是頂尖也能找到一個基本過的去的活干。混合控制。意識到當飛機傾斜轉彎的時候,由傾斜角帶來了兩個問題。由於傾斜,飛機轉彎時的偏航旋轉對陀螺儀的偏航產生了一個干擾信號。為了完成一個水平的轉動,升降舵需要需要一些向上的偏量。這個偏量的大小取決於傾角的大小,而且這個傾角不能直接測量得到。這兩個問題好比一個硬幣的兩面。加速度計測量的是重力加速度與實際加速度相減所得到的差值。加速度的值等於作用在飛機上總的氣動力(升力,推力,阻力等)加上重力 的和再除以飛機的質量最後計算所得到的結果。因此,加速度測量的是作用在飛機上的總的空氣動力的負值。重力的測量是在使飛機水平的過程中所需要的,但這不是在飛機加速運動中從從加速度計中獲取的值。
E. 什麼是「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)。
F. 什麼是pid演算法,難學嗎,用C語言,plc怎麼實現
PID即:Proportional(比例)、Integral(積分)、Differential(微分)的縮寫。顧名思義,PID控制演算法是結合比例、積分和微分三種環節於一體的控制演算法,它是連續系統中技術最為成熟、應用最為廣泛的一種控制演算法,該控制演算法出現於20世紀30至40年代,適用於對被控對象模型了解不清楚的場合。 ---網路
在工業應用中PID及其衍生演算法是應用最廣泛的演算法之一,是當之無愧的萬能演算法,如果能夠熟練掌握PID演算法的設計與實現過程,對於一般的研發人員來講,應該是足夠應對一般研發問題了,而難能可貴的是,在我所接觸的控制演算法當中,PID控制演算法又是最簡單,最能體現反饋思想的控制演算法,可謂經典中的經典。經典的未必是復雜的,經典的東西常常是簡單的,而且是最簡單的,想想牛頓的力學三大定律吧,想想愛因斯坦的質能方程吧,何等的簡單!簡單的不是原始的,簡單的也不是落後的,簡單到了美的程度。 ---【1】
PID 控制演算法可以分為位置式 PID和增量式 PID控制演算法
詳細見參考【1】【2】
參考:
【1】PID演算法
【2】簡易PID演算法的快速掃盲(超詳細+過程推導+C語言程序)
G. PID演算法的參數怎麼確定
PID是自動控制理論里的一種控制方法,PID的意思分別代表了比例、積分和微分。具體是什麼意思呢?解釋如下:
首先,我們有一個狀態量,這個狀態量在整個過程中,我們希望通過輸入一個控制量,使這個狀態量發生變化,並盡量的接近目標量。比如,在航線控制中,狀態量是飛機當前的飛行航向,目標量是飛機為到達目標點而應該飛行的目標航向,控制量則是我們對其進行控制的方向舵面,或橫滾角度。我們通過調整方向舵面、橫滾角度來控制飛機的當前飛行航向,使之盡量接近為壓航線而應該飛行的目標航向。
那麼我們如何給出這個控制量,比如給哪個方向的、多大的方向舵量呢?最簡單的考慮,是按照當前航向與目標航向的偏差大小來決定給多大的方向舵量:方向舵量p = P * (目標航向 – 當前航向)。這個方向舵量p,就是PID控制里的P部分,即比例部分。
那麼,是不是只要有了P,我們的控制就完成了呢?實際上有了P,在大多數情況下,我們可以控制飛機朝目標量去接近,但可能會出現一些情況,比如,當飛機的安裝有偏差(我們稱之為系統誤差),導致我們輸出一個左5方向舵給舵機的時候,飛機才能直飛;當不給方向舵,即方向舵放在中位時,飛機會右偏。我們想像一下這個時候如果只有P項控制會有什麼後果:假設初始狀態是飛機飛行航向和目標航向一致,按P輸出飛機方向舵應該在中位。而這時候,由於系統安裝誤差的存在,會導致飛機偏右,於是偏離了目標航向,然後P項控制會輸出一個左舵,來修正航向偏差,剛開始的時候由於偏差量很小,輸出的這個左舵也很小,於是飛機繼續右偏,然後導致這個左舵加大,最終到達5,使飛機直飛,但這時候的飛行航向與目標航向始終存在一個偏差,這就是P的局限,無法修正系統誤差。於是I項積分控制就出場了。
I項的輸出這樣定義:方向舵量i = I * (偏差和)。偏差和是當前航向和目標航向的偏差,每計算一次累加一次,一直累加到上次的值,再加上這次計算時當前航向和目標航向的偏差。即這個偏差和是跟以前的累積誤差有關的。同樣是上面的例子,I項的效果就這樣體現:當飛機飛行航向與目標航向始終存在偏差時,I項將這個值累加上,比如說是5度吧,於是在P項之上,再疊加一個I*5的修正量,增加了一個左舵,比如說是2,然後導致飛機的飛行航向與目標航向的偏差會小一些。也許這一次計算輸出的控制量並沒有完全消除誤差,但下一次再計算時,如果還有誤差,於是會繼續再增加輸出控制量,使誤差再小,於是經過多次計算後,使I項始終輸出一個左5的舵量,使誤差歸零。這就是I項的作用,消除系統誤差。
D項的意思是微分。為了便於解釋,我們假設不存在系統誤差,I項為0。比如當目標航向為0度,當前航向為30度時,根據P項作用,會輸出一個左舵,假設為左15吧,使飛機向左轉向,於是當前航向逐漸減小,比如減小到20度的時候,P項輸出的左舵也會減小到左10。那麼,當飛機轉到0度時,跟目標航向一致時,P項輸出方向舵回到中立位,飛機是否就保持0度直飛了呢?XX是否定的。由於飛機的慣性,飛機在左轉彎時產生了一個左轉彎的速率,導致飛機航向回到目標航向無偏差且方向舵回中後,仍然還會繼續左轉,然後產生負的偏差,P項再輸出右方向舵,然後再回中。如果P項合適,我們看到的就是一個逐漸收斂於目標航向的飛行航向,即先左過頭,然後右過頭,再左過頭,再右過頭……最後過頭量越來越小,最終到達目標航向。而D項的作用,就是盡量消除這個過頭量,使之盡快貼近目標航向。
D項的定義是:方向舵d = D * (當前狀態量 – 上一次的狀態量)。在這個例子中,當飛機在從30度的航向,左轉彎到0度目標航向的過程中,D項的輸出實際上是轉彎角速率的比例值,並且方向與P項相反,這樣當飛機比較接近0度目標航向時,由於P值已經很小了,而這時候如果轉彎速率不小,D項就輸出一個右方向舵,抵消過快的轉彎速率,阻止飛機航向到達目標航向後繼續沖過頭。
最後,方向舵量 = 方向舵量p + 方向舵量i + 方向舵量d,為完整的輸出。根據飛行的表現,通過對P、I、D系數的調整,最終使輸出的控制量能夠盡快的控制狀態量貼近目標量,並消除系統誤差,避免過度震盪。
在完整的固定翼飛控系統中,除了航向通道需要PID控制外,其餘需要控制的通道還有:副翼舵->目標橫滾角、升降舵->目標俯仰角、目標俯仰角->高度差、油門舵->空速、目標航向->偏航距。