pid好文轉載

好文轉載

http://www.blog.vookre.com/pid%E6%8E%A7%E5%88%B6%E5%99%A8%EF%BC%88%E5%9B%9B%E8%BD%B4%E5%AD%A6%E4%B9%A0%E8%A6%81%E7%94%A8%EF%BC%81%E6%89%80%E4%BB%A5-%EF%BC%89/


PID控制器(四軸學習要用!所以……)

先引一下維基百科!

PID控制器(比例-積分-微分控制器),由比例單元(P)、積分單元(I)和微分單元(D)組成[1]。透過Kp,Ki和Kd三個參數的設定。PID控制器主要適用於基本上線性,且動態特性不隨時間變化的系統。

PID控制器的方塊圖

PID控制器是一個在工業控制應用中常見的反饋迴路部件。這個控制器把收集到的數據和一個參考值進行比較,然後把這個差別用於計算新的輸入值,這個新的輸入值的目的是可以讓系統的數據達到或者保持在參考值。PID控制器可以根據歷史數據和差別的出現率來調整輸入值,使系統更加準確而穩定。

PID控制器的比例單元(P)、積分單元(I)和微分單元(D)分別對應目前誤差、過去累計誤差及未來誤差。若是不知道受控系統的特性,一般認爲PID控制器是最適用的控制器[2]。藉由調整PID控制器的三個參數,可以調整控制系統,設法滿足設計需求。控制器的響應可以用控制器對誤差的反應快慢、控制器過沖的程度及系統震盪的程度來表示。不過使用PID控制器不一定保證可達到系統的最佳控制,也不保證系統穩定性。

有些應用只需要PID控制器的部分單元,可以將不需要單元的參數設爲零即可。因此PID控制器可以變成PI控制器、PD控制器、P控制器或I控制器。其中又以PI控制器比較常用,因爲D控制器對回授噪聲十分敏感,而若沒有I控制器的話,系統不會回到參考值,會存在一個誤差量。

反饋迴路基礎[編輯]

PID迴路是要自動實現一個操作人員用量具和控制旋鈕進行的工作,這個操作人員會用量具測系統輸出的結果,然後用控制旋鈕來調整這個系統的輸入,直到系統的輸出在量具上顯示穩定的需求的結果,在舊的控制文檔裏,這個過程叫做“復位”行爲,量具被稱爲“測量”,需要的結果被稱爲“設定值”而設定值和測量之間的差別被稱爲“誤差”。

一個控制迴路包括三個部分:

  1. 系統的傳感器得到的測量結果
  2. 控制器作出決定
  3. 通過一個輸出設備來作出反應

控制器從傳感器得到測量結果,然後用需求結果減去測量結果來得到誤差。然後用誤差來計算出一個對系統的糾正值來作爲輸入結果,這樣系統就可以從它的輸出結果中消除誤差。

在一個PID迴路中,這個糾正值有三種算法,消除目前的誤差,平均過去的誤差,和透過誤差的改變來預測將來的誤差。

比如說,假如利用水箱在爲植物提供水,水箱的水需要保持在一定的高度。可以用傳感器來檢查水箱裏水的高度,這樣就得到了測量結果。控制器會有一個固定的用戶輸入值來表示水箱需要的水面高度,假設這個值是保持65%的水量。控制器的輸出設備會連在由馬達控制的水閥門上。打開閥門就會給水箱注水,關上閥門就會讓水箱裏的水量下降。這個閥門的控制信號就是控制變量。

PID控制器可以用來控制任何可被測量及可被控制變量。比如,它可以用來控制溫度、壓強、流量、化學成分、速度等等。汽車上的巡航定速功能就是一個例子。

一些控制系統把數個PID控制器串聯起來,或是連成網絡。這樣的話,一個主控制器可能會爲其他控制輸出結果。一個常見的例子是馬達的控制。控制系統會需要馬達有一個受控的速度,最後停在一個確定的位置。可由一個子控制器用來管理速度,但是這個子控制器的速度是由控制馬達位置的主控制器來管理的。

連合和串聯控制在化學過程控制系統中相當常見。

歷史及應用[編輯]

PID控制理論是由觀察舵手的動作而來

PID控制器可以追溯到1890年代的調速器設計[2][3]。PID控制器是在船舶自動操作系統中漸漸發展。1911年Elmer Sperry開發的控制器是最早期PID型控制器的其中之一[4],而第一個發表PID控制器理論分析論文的是俄裔美國工程師尼古拉斯·米諾爾斯基Minorsky 1922)。米諾爾斯基當時在設計美國海軍的自動操作系統,他的設計是基於對舵手的觀察,控制船舶不只是依目前的誤差,也考慮過去的誤差以及誤差的變化趨勢[5],後來米諾爾斯基也用數學的方式加以推導[6]。他的目的是在於穩定性,而不是泛用的控制,因此大幅的簡化了問題。比例控制可以在小的擾動下有穩定性,但無法消除穩態誤差,因此加入了積分項,後來也加入了微分項。

當時在新墨西哥號戰艦上進行測試,利用控制器控制角速度,利用PI控制器可以角度誤差維持在±2°以內,若加上D控制,角度誤差維持在±1/6°,比最好的舵手還要好[7]

不過因爲海軍人員的抗拒,海軍那時候未使用這套系統,在1930年代也有其他人作出類似的研究。

在自動控制發展的早期,用機械設備來實現PID控制,是由槓桿彈簧阻尼及質量組成,多半會用壓縮氣體驅動。氣動控制器還一度是工業上的標準。

電子的類比控制器可以用晶體管真空管電容器電阻器組成。許多複雜的電子系統中常會包括PID控制,例如磁盤的讀寫頭定位、電源供應器的電源條件、甚至是現代地震儀的運動偵測線路。現代電子控制器已大幅的被這些利用單芯片FPGA來實現的數位控制器所取代。

現代工業使用的PID控制器多半會用PLC或有安裝面板的數位控制器來實現。軟件實現的好處是相對低廉,配合PID實現方式調整的靈敏度很大。在工業鍋爐、塑膠射出機械、燙金機及包裝行業中都會用到PID控制。

變化的電壓輸出可以用PWM來實現,也就是固定週期,依要輸出的量去調整週期中輸出高電勢的時間。對於數位系統,其時間比例有可能是離散的,例如週期是二秒,高電勢時間設定單位爲0.1秒,表示可以分爲20格,精度5%,因此存在一量化誤差,但只要時間分辨率夠高,就會有不錯的效果。

理論[編輯]

PID是以它的三種糾正算法而命名。受控變數是三種算法(比例、積分、微分)相加後的結果,即爲其輸出,其輸入爲誤差值(設定值減去測量值後的結果)或是由誤差值衍生的信號。若定義{\displaystyle u(t)}u(t)爲控制輸出,PID算法可以用下式表示:

{\displaystyle \mathrm {u} (t)=\mathrm {MV} (t)=K_{p}{e(t)}+K_{i}\int _{0}^{t}{e(\tau )}\,{d\tau }+K_{d}{\frac {d}{dt}}e(t)}{\mathrm {u}}(t)={\mathrm {MV}}(t)=K_{p}{e(t)}+K_{{i}}\int _{{0}}^{{t}}{e(\tau )}\,{d\tau }+K_{{d}}{\frac {d}{dt}}e(t)

其中

{\displaystyle K_{p}}K_{p}:比例增益,是調適參數
{\displaystyle K_{i}}K_{i}:積分增益,也是調適參數
{\displaystyle K_{d}}K_{d}:微分增益,也是調適參數
{\displaystyle e}e:誤差=設定值(SP)- 回授值(PV)
{\displaystyle t}t:目前時間
{\displaystyle \tau }\tau :積分變數,數值從0到目前時間{\displaystyle t}t

用更專業的話來講,PID控制器可以視爲是頻域系統的濾波器。在計算控制器最終是否會達到穩定結果時,此性質很有用。如果數值挑選不當,控制系統的輸入值會反覆振盪,這導致系統可能永遠無法達到預設值。

PID控制器的一般轉移函數是:

{\displaystyle H(s)={\frac {K_{d}s^{2}+K_{p}s+K_{i}}{s+C}}}H(s)={\frac {K_{d}s^{2}+K_{p}s+K_{i}}{s+C}},

其中C是一個取決於系統帶寬的常數。

比例控件[編輯]

不同比例增益Kp下,受控變數對時間的變化(Ki和Kd維持定值)

比例控制考慮當前誤差,誤差值和一個正值的常數Kp(表示比例)相乘。Kp只是在控制器的輸出和系統的誤差成比例的時候成立。比如說,一個電熱器的控制器的比例尺範圍是10°C,它的預定值是20°C。那麼它在10°C的時候會輸出100%,在15°C的時候會輸出50%,在19°C的時候輸出10%,注意在誤差是0的時候,控制器的輸出也是0。

比例控制的輸出如下:

{\displaystyle P_{\mathrm {out} }=K_{p}\,{e(t)}}P_{{{\mathrm {out}}}}=K_{p}\,{e(t)}

若比例增益大,在相同誤差量下,會有較大的輸出,但若比例增益太大,會使系統不穩定。相反的,若比例增益小,若在相同誤差量下,其輸出較小,因此控制器會較不敏感的。若比例增益太小,當有干擾出現時,其控制信號可能不夠大,無法修正干擾的影響。

穩態誤差[編輯]

比例控制在誤差爲0時,其輸出也會爲0。若要讓受控輸出爲非零的數值,就需要有一個穩態誤差或偏移量[a]。穩態誤差和比例增益的成反比。若加入一偏置,或是加入積分控制,可以消除穩態誤差。

積分控件[編輯]

不同積分增益Ki下,受控變數對時間的變化(Kp和Kd維持定值)

積分控制考慮過去誤差,將誤差值過去一段時間和(誤差和)乘以一個正值的常數Ki。Ki從過去的平均誤差值來找到系統的輸出結果和預定值的平均誤差。一個簡單的比例系統會震盪,會在預定值的附近來回變化,因爲系統無法消除多餘的糾正。通過加上負的平均誤差值,平均系統誤差值就會漸漸減少。所以,最終這個PID迴路系統會在設定值穩定下來。

積分控制〔的輸出如下:

{\displaystyle I_{\mathrm {out} }=K_{i}\int _{0}^{t}{e(\tau )}\,{d\tau }}I_{{{\mathrm {out}}}}=K_{{i}}\int _{{0}}^{{t}}{e(\tau )}\,{d\tau }

積分控制會加速系統趨近設定值的過程,並且消除純比例控制器會出現的穩態誤差。積分增益越大,趨近設定值的速度越快,不過因爲積分控制會累計過去所有的誤差,可能會使回授值出現過沖的情形。

微分控件[編輯]

不同微分增益Kd下,受控變數對時間的變化(Kp和Ki維持定值)

微分控制考慮將來誤差,計算誤差的一階導,並和一個正值的常數Kd相乘。這個導數的控制會對系統的改變作出反應。導數的結果越大,那麼控制系統就對輸出結果作出更快速的反應。這個Kd參數也是PID被稱爲可預測的控制器的原因。Kd參數對減少控制器短期的改變很有幫助。一些實際中的速度緩慢的系統可以不需要Kd參數。

微分控制的輸出如下:

{\displaystyle D_{\mathrm {out} }=K_{d}{\frac {d}{dt}}e(t)}D_{{{\mathrm {out}}}}=K_{d}{\frac {d}{dt}}e(t)

微分控制可以提升整定時間及系統穩定性[8][9]。不過因爲純微分器不是因果系統,因此在PID系統實現時,一般會爲微分控制加上一個低通濾波器以限制高頻增益及噪聲[10]。實務上較少用到微分控制,估計PID控制器中只有約20%有用到微分控制[10]

參數調試[編輯]

PID的參數調試是指透過調整控制參數(比例增益、積分增益/時間、微分增益/時間)讓系統達到最佳的控制效果。穩定性(不會有發散性的震盪)是首要條件,此外,不同系統有不同的行爲,不同的應用其需求也不同,而且這些需求還可能會互相沖突。

PID只有三個參數,在原理上容易說明,但PID參數調試是一個困難的工作,因爲要符合一些特別的判據,而且PID控制有其限制存在。歷史上有許多不同的PID參數調試方式,包括齊格勒-尼科爾斯方法等,其中也有一些已申請專利

PID控制器的設計及調試在概念上很直覺,但若有多個(且互相沖突)的目標(例如高穩定性及快速的暫態時間)都要達到的話,在實際上很難完成。PID控制器的參數若仔細的調試,會有很好的效果,相反的,若調適不當,效果會很差。一般初始設計常需要不斷的電腦模擬,並且修改參數,一直達到理想的性能或是可接受的妥協爲止。

有些系統有非線性的特性,若在無載下調試的參數可能無法在滿載下動作,可以利用增益規劃的方式進行修正(在不同的條件下選用不同的數值)。

穩定性[編輯]

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

一般而言,PID控制器會要求響應的穩定,不論程序條件及設定值如何組合,都不能出現大幅振盪的情形,不過有時可以接受臨界穩定的情形[來源請求]

最佳性能[編輯]

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

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

各方法的簡介[編輯]

有許多種調試PID控制器參數的方法,最有效的方式多半是建立某種程序,再依不同參數下的動態特性來調試參數。相對而言人工調試其效率較差,若是系統的響應時間到數分鐘以上,更可以看出人工調試效率的不佳[來源請求]

調試方法的選擇和是否可以暫時將控制迴路“離線”有關,也和系統的響應時間有關。離線是指一個和實際使用有些不同的條件(例如不加負載),而且控制器的輸出只需考慮適適,不需考慮實際應用。在線調試是在實際應用的條件,控制器的輸出需考慮實際的系統 。若控制迴路可以離線,最好的調試方法是對系統給一個步階輸入,量測其輸出對時間的關係,再用其響應來決定參數[來源請求]

選擇調試方式
方法 優點 缺點
人工調試 不需要數學,可以在線調試 需要有經驗的工程師[來源請求]
齊格勒-尼科爾斯方法 被證實有效的方法,可以在線調試 會影響製程,需要試誤,得到的參數可能使響應太快[來源請求]
軟件工具 調適的一致性,可以在線調試或離線調試,可以配合計算機自動設計,包括閥及感測器的分析,可以在下載前進行模擬,可以支援非穩態(NSS)的調試 需要成本或是訓練[11]
COHEN–COON 好的程序模型 需要一些數學,需離線調試,只對一階系統有良好效果[來源請求]

人工調整[編輯]

若需在系統仍有負載的情形進行調試(線上調試),有一種作法是先將{\displaystyle K_{i}}K_{i}{\displaystyle K_{d}}K_{d}設爲零,增加{\displaystyle K_{p}}K_{p}一直到迴路輸出震盪爲止,之後再將{\displaystyle K_{p}}K_{p}設定爲“1/4振幅衰減”(使系統第二次過沖量是第一次的1/4)增益的一半,然後增加{\displaystyle K_{i}}K_{i}直到一定時間後的穩態誤差可被修正爲止。不過若{\displaystyle K_{i}}K_{i}可能會造成不穩定,最後若有需要,可以增加{\displaystyle K_{d}}K_{d},並確認在負載變動後迴路可以夠快的回到其設定值,不過若{\displaystyle K_{d}}K_{d}太大會造成響應太快及過沖。一般而言快速反應的PID應該會有輕微的過沖,只是有些系統不允許過沖。因此需要將回授系統調整爲過阻尼系統,而{\displaystyle K_{p}}K_{p}比造成震盪{\displaystyle K_{p}}K_{p}的一半還要小很多。

調整PID參數對其步階響應的影響

調整PID參數對系統的影響如下

調整方式 (ON) 上升時間 超調量 安定時間 穩態誤差 穩定性[10]
↑ Kp 減少 ↓ 增加 ↑ 小幅增加 ↗ 減少 ↓ 變差 ↓
↑ Ki 小幅減少 ↘ 增加↑ 增加 ↑ 大幅減少↓↓ 變差↓
↑ Kd 小幅減少 ↘ 減少↓ 減少↓ 變動不大→ 變好 ↑

齊格勒-尼科爾斯方法[編輯]

齊格勒-尼科爾斯方法是另一種啓發式的調試方式,由John G. Ziegler和Nathaniel B. Nichols在1940年代導入,一開始也是將{\displaystyle K_{i}}K_{i}{\displaystyle K_{d}}K_{d}設定爲零,增加比例增益直到系統開始振盪爲止,當時的增益稱爲{\displaystyle K_{u}}K_{u},而振盪週期爲{\displaystyle P_{u}}P_{u},即可用以下的方式計算增益:

齊格勒-尼科爾斯方法
控制器種類 {\DISPLAYSTYLE K_{P}}K_{p} {\DISPLAYSTYLE K_{I}}K_{i} {\DISPLAYSTYLE K_{D}}K_{d}
P {\displaystyle 0.50{K_{u}}}0.50{K_{u}}
PI {\displaystyle 0.45{K_{u}}}0.45{K_{u}} {\displaystyle 1.2{K_{p}}/P_{u}}1.2{K_{p}}/P_{u}
PID {\displaystyle 0.60{K_{u}}}0.60{K_{u}} {\displaystyle 2{K_{p}}/P_{u}}2{K_{p}}/P_{u} {\displaystyle {K_{p}}{P_{u}}/8}{K_{p}}{P_{u}}/8

PID調試軟件[編輯]

大部分現代的工業設備不再用上述人工計算的方式調試,而是用PID調試及最佳化軟件來達到一致的效果。軟件會收集資料,建立模型,並提供最佳的調試結果,有些軟件甚至可以用參考命令的變化來進行調試。

數學的PID調試會將脈衝加入系統,再用受控系統的頻率響應來設計PID的參數。若是響應時間要數分鐘的系統,建議用數學PID調試,因爲用試誤法可能要花上幾天才能找到可讓系統穩定的參數。最佳解不太容易找到,有些數位的迴路控制器有自我調試的程序,利用微小的參考命令來計算最佳的調試值。

也有其他調試的公式,是依不同的性能判據所產生。許多有專利的公式已嵌入在PID調試軟件及硬件模組中[12]

一些先進的PID調試軟件也可以有算法可以在動態的情形下調整PID迴路,這類軟件會先將程序建模,給攝動量,再根據響應計算參數。

PID控制的限制[編輯]

PID控制可以應用在許多控制問題,多半在大略調整參數後就有不錯的效果,不過有些應用下可能反而會有差的效果,而且一般無法提供最佳控制。PID控制的主要問題是在於其爲回授控制,係數爲定值,不知道受控系統的信息,因此其整理性能常常是妥協下的結果。在沒有受控系統模型的條件下,PID控制最佳的控制器[2],但若配合系統模型,可以有進一步的提升。

當PID控制器單獨使用時,若因應用需求,需調整PID迴路增益使控制系統不會過沖,其效果有可能很差。PID控制器的缺點還包括無法處理受控系統的非線性、需在反應時間及調整率之間妥協、無法針對參數的變動而反應(例如系統在暖機後特性會改變)、以及大擾動下的波形落後。

PID控制器最顯著的提升是配合前饋控制,加入有關係統的信息,只用PID控制器來控制誤差。另外,PID控制器也有一些小幅的改善方式,例如調整參數(增益規劃或是依性能進行適應性的調整)、提升性能(提高取樣率、精度及準度,若有需要加入低波濾波器),或是用多個串接的PID控制器。

線性[編輯]

PID控制器常見的問題是在於其線性且對稱的特性,若應用在一些非線性的系統,其效果可能會有變化。以暖通空調中常見的溫度控制,可能是採用主動加熱(用加熱器加熱),但冷卻是使用被動冷卻(不加熱,自然冷卻),其冷卻速度比加熱速度慢很多,輸出若有過沖,下降速度很慢,因此PID控制需調整爲不會過沖的過阻尼,以減少或避免過沖,但這也延長了整定時間,使性能變差。

噪聲對微分器的影響[編輯]

微分器的問題在於對量測或程序產生的高頻噪聲會有放大效果,因此會對輸出造成大幅的變動。因此真實的控制器不會有理想的微分器,只有一個有限帶寬的微分器或高通濾波器。一般爲了移除高頻的噪聲,會在量測時加入低通濾波器,若低通濾波器和微分器對消,濾波效果也就受限了,因此低噪聲的量測設備相當重要。實務上可以使用中值濾波器,調昇濾波效率及實際上的性能[13]。有時可以將微分器關閉,對控制性能的影響不大,此時稱爲PI控制器。

PID算法的修改[編輯]

基本的PID算法在一些控制應用的條件下有些不足,需進行小幅的修改。

積分飽和[編輯]

積分飽和是理想PID算法實現時常見的問題。若設定值有大的變動,其積分量會有大幅的變化,大到輸出值被上下限限制而飽和,因此係統會有過沖,而且即使誤差量符號改變,積分量變小,但輸出值仍被上下限限制,維持在上限(或下限),因此輸出看似沒有變化,系統仍會持續的過沖,一直要到輸出值落在上下限的範圍內,系統的回授量纔會開始下降。此問題可以用以下方式處理:

  • 程序變數離開可控制範圍時,暫停積分。
  • 讓積分值限制在一個較小的上下範圍內。
  • 重新計算積分項,使控制器輸出維持上下限之間的範圍內[14]

PI控制器[編輯]

PI控制器的方塊圖

PI控制器(比例-積分控制器)是不用微分單元的PID控制器。

控制器的輸出爲

{\displaystyle K_{P}\Delta +K_{I}\int \Delta \,dt}K_{P}\Delta +K_{I}\int \Delta \,dt

其中{\displaystyle \Delta }\Delta 爲設定值SP和量測值PV的誤差:

{\displaystyle \Delta =SP-PV}\Delta =SP-PV.

PI控制器可以用SimulinkXcos之類的軟件進行建模,方式是使用“flow chart”圖框,其中用以下的拉氏運算子:

{\displaystyle C={\frac {G(1+\tau s)}{\tau s}}}C={\frac {G(1+\tau s)}{\tau s}}

其中

{\displaystyle G=K_{P}}G=K_{P} = 比例增益
{\displaystyle G/\tau =K_{I}}G/\tau =K_{I} = 積分增益

{\displaystyle G}G值的選擇需在減少過沖以及增加安定時間之間取捨。

微分單元對輸入中的高頻信號格外敏感,PI控制器因爲沒有微分單元,在訊號噪聲大時,在穩態時會更加穩定。但對狀態快速變化的反應較慢,因此相較於調適到最佳值的PID控制器,PI控制器會較慢到達設定值,受干擾後也比較慢恢復到正常值。

PDF控制(pseudo-derivative feedback control)可以視爲是PI控制器的變體,比例控制器的輸入由誤差值改爲回授值[15]

不動作區[編輯]

許多PID迴路是控制機械元件(例如閥)。機械保養是一筆可觀的費用,磨損會使得機械在有輸入信號時出現靜摩擦或是不動作區,都會導致控制性能的下降。機械損耗的速度主要和設備多常改變其狀態有關。若磨損是主要考量的話,PID迴路可以有輸出的不動作區以減少輸出狀態的改變。若變化小,仍在不動作區內,讓控制器的輸出維持上一次的值。變化要大到超過不動作區,實際的狀態纔會隨之變化。

設定值的步階變化[編輯]

若系統的設定值有步階變化,比例單元和微分單元也會有對應的變化,特別是微分單元對於步階變化的輸出特別的大,因此有些PID算法會配合以下的修改來處理設定值的變化。

設定值斜坡變化
此修改方式下,設定值會用線性或是一階濾波的方式,由原始值變到新的值,避免因爲步階變化產生的不連續
只對程序變數(回授量)微分
此修改下,PID控制器只針對量測的程序變數(PV)微分,不對誤差微分。程序變數是實際的物理量,較不易有瞬間的變化,而誤差可能因爲設定值的步階變化而有瞬間變化。這也是一種簡單的設定值加權法。
設定值加權
設定值加權分別調整在比例單元及微分單元中的誤差量,誤差量的設定值乘以一個0到1之間的加權,積分單元的誤差量需使用真實的設定值,以避免穩態誤差。這兩個參數不影響對負載變化及量測噪聲的響應,可以提升對設定點變化的響應。

前饋控制[編輯]

PID控制器若再配合前饋控制(開回路控制),可以再提升其控制性能。在前饋控制中考慮系統的已知信息(例如理想加速度或是慣量),再將輸出加到PID控制器的控制輸出,以提升整體的系統性能。前饋量可能是控制輸出主要的部分,而PID控制器只用來補償目標值和開回路控制器輸出之間的誤差。因爲前饋輸出不會受到回授的影響,因此也不會造成系統的振盪,可以在不影響穩定性的條件下提升系統的響應。前饋可以依目標值及其他量測到的干擾量來產生,目標值加權是一種簡單的前饋控制方式。

例如,在大部分的運動控制系統中,爲了要使機械負載加速,致動器要產生更大的力。若用速度環的PID控制器來控制負載速度,比較理想的方式是先得到理想的瞬間加速度值,適量調整加權後再加到PID的輸出中。因此控制器輸出中有一部分是不隨機械速度而改變的輸出,再用PID根據實際輸出和目標的差異去增加或是減少輸出。這類有前饋控制的PID控制器可以加快控制系統的反應速度。

無衝擊運轉[編輯]

有時PID控制器會規劃爲無衝擊(bumpless)的特性,在參數變化時重新計算適當的積分累計值,使輸出不會因參數變化有不連續的改變[16]

串級PID控制器[編輯]

二個PID控制器可以組合在一起,得到較佳的效果,這稱爲串級PID控制。以兩個PID控制器組成的串級PID控制爲例,其中一個PID控制器在外迴路,控制像液麪高度或是速度等主要的物理量,另一個PID控制器是內迴路,以外迴路PID控制器的輸出做爲其目標值,一般是控制較快速變化的參數,例如流量或加速度等。若利用串級PID控制,可以增加控制器的工作頻率,並降低其時間常數。

例如一個溫控的循環水浴設備有二個串級的PID控制器,分別有各自的熱電偶溫度感測器。外迴路的控制器控制水溫,其感測器距加熱器很遠,直接量測整體水溫,其誤差量是理想水溫及整體水溫的差值。外迴路PID控制器的輸出即爲內迴路控制器的目標值,內迴路控制器控制加熱器,其感測器是在加熱器上,其誤差量是加熱器的理想溫度及量測到溫度的差值,其輸出會使加熱器維持在設定值附近。

內外迴路控制器的參數可能會差很多,外迴路的PID控制器有較長的時間常數,對應所有的水加熱或是冷卻需要的時間。內迴路的PID控制器反應會比較快。每個控制器可以調整到符合其真正控制的系統,例如水槽中所有的水,或是加熱器本身。

其他PID的形式及其表示法[編輯]

理想的PID及標準形PID[編輯]

工業上常看到PID控制器,而許多工業相關資料中看到的都是“標準形”的PID,其中比例增益{\displaystyle K_{p}}K_{p}也作用在{\displaystyle I_{\mathrm {out} }}I_{{{\mathrm {out}}}}{\displaystyle D_{\mathrm {out} }}D_{{{\mathrm {out}}}}兩項,和上述“理論”段落看到的形式不同。“標準形”的PID爲:

{\displaystyle \mathrm {MV(t)} =K_{p}\left(\,{e(t)}+{\frac {1}{T_{i}}}\int _{0}^{t}{e(\tau )}\,{d\tau }+T_{d}{\frac {d}{dt}}e(t)\right)}{\mathrm {MV(t)}}=K_{p}\left(\,{e(t)}+{\frac {1}{T_{i}}}\int _{{0}}^{{t}}{e(\tau )}\,{d\tau }+T_{d}{\frac {d}{dt}}e(t)\right)

其中

{\displaystyle T_{i}}T_i爲積分時間
{\displaystyle T_{d}}T_{d}爲微分時間

在標準形中,每一個參數有其明確的物理意義,輸出是根據現在誤差、過去誤差及未來誤差而決定,加上微分項可以預測若控制系統不改變的話,{\displaystyle T_{d}}T_{d}時間後的誤差,而積分項是用過去所有誤差的和來調整輸出,希望在{\displaystyle T_{i}}T_i時間後可以完全消除誤差,而輸出的值會再乘以單一的增益{\displaystyle K_{p}}K_{p}

在理想的平行式PID中,其方程如下:

{\displaystyle \mathrm {MV(t)} =K_{p}{e(t)}+K_{i}\int _{0}^{t}{e(\tau )}\,{d\tau }+K_{d}{\frac {d}{dt}}e(t)}{\mathrm {MV(t)}}=K_{p}{e(t)}+K_{i}\int _{{0}}^{{t}}{e(\tau )}\,{d\tau }+K_{d}{\frac {d}{dt}}e(t)

其中的增益和標準形PID係數的關係是:{\displaystyle K_{i}={\frac {K_{p}}{T_{i}}}}K_{i}={\frac {K_{p}}{T_{i}}}{\displaystyle K_{d}=K_{p}T_{d}\,}K_{d}=K_{p}T_{d}\,。平行式PID中的參數都視爲單純的增益,最泛用,靈活性也最高,但較沒有物理意義,因此只用在PID的理論處理中,標準形PID雖在數學上比較複雜,在工業中較常使用。

倒數增益[編輯]

許多情形下,PID控制器處理的變數是無量綱的量,是某個最大值的比例,介於0到100%之間,而轉換爲實際物理量(如泵浦速率或是水加熱的功率)是在PID控制器外,而這些控制變數是有量綱的物理量(例如溫度)。此時{\displaystyle K_{p}}K_{p}增益多半不會表示爲“每變化一度的輸出”,而會以溫度的形式{\displaystyle 1/K_{p}}1/K_{p}表示,代表“100%輸出下的溫度(變化)”,代表輸出由0變到1(0%變爲100%)下的溫度變化。

只針對過程變數進行微分控制[編輯]

在大部分的商業控制系統中,是用過程變數取代誤差作爲微分項的輸入,其原因是當目標值有不連續變化時,微分控制會產生很大的突波,若目標值不變,改變過程變數的效果和改變誤差相同,因此有些PID控制器會用過程變數作爲微分項的輸入,不會影響控制器控制過程變數,抗噪聲的能力。

{\displaystyle \mathrm {MV(t)} =K_{p}\left(\,{e(t)}+{\frac {1}{T_{i}}}\int _{0}^{t}{e(\tau )}\,{d\tau }-T_{d}{\frac {d}{dt}}PV(t)\right)}{\mathrm {MV(t)}}=K_{p}\left(\,{e(t)}+{\frac {1}{T_{i}}}\int _{{0}}^{{t}}{e(\tau )}\,{d\tau }-T_{d}{\frac {d}{dt}}PV(t)\right)

只針對過程變數進行微分及比例控制[編輯]

大部分的商業控制系統也提供選擇,讓過程變數作爲微分控制及比例控制的輸入,因此誤差只作爲積分控制的輸入,這也不會影響控制器控制過程變數,抗噪聲的能力。

上述的修改可以避免目標值有不連續變化時,輸出值有對應不連續的變化,若目標值有步階變化,這項調整就相當重要。

{\displaystyle \mathrm {MV(t)} =K_{p}\left(\,{-PV(t)}+{\frac {1}{T_{i}}}\int _{0}^{t}{e(\tau )}\,{d\tau }-T_{d}{\frac {d}{dt}}PV(t)\right)}{\mathrm {MV(t)}}=K_{p}\left(\,{-PV(t)}+{\frac {1}{T_{i}}}\int _{{0}}^{{t}}{e(\tau )}\,{d\tau }-T_{d}{\frac {d}{dt}}PV(t)\right)

也有些雙自由度(2-DoF)PID控制架構除了一般的PID控制外,再加上只針對過程變數進行的微分及比例控制,再分別用增益進行調整,目標是同時對目標步階響應以及噪聲抑制都有良好的性能[17]

PID控制器的拉氏轉換[編輯]

有關會將PID控制器進行拉氏轉換

{\displaystyle G(s)=K_{p}+{\frac {K_{i}}{s}}+K_{d}{s}={\frac {K_{d}{s^{2}}+K_{p}{s}+K_{i}}{s}}}G(s)=K_{p}+{\frac {K_{i}}{s}}+K_{d}{s}={\frac {K_{d}{s^{2}}+K_{p}{s}+K_{i}}{s}}

PID控制器的拉氏轉換也代表着控制器的傳遞函數,因此可以確認整體系統的傳遞函數。

PID的極零點對消[編輯]

PID控制器可以寫成以下的形式

{\displaystyle G(s)=K_{d}{\frac {s^{2}+{\frac {K_{p}}{K_{d}}}s+{\frac {K_{i}}{K_{d}}}}{s}}}G(s)=K_{d}{\frac {s^{2}+{\frac {K_{p}}{K_{d}}}s+{\frac {K_{i}}{K_{d}}}}{s}}

若受控設備的傳遞函數如下:

{\displaystyle H(s)={\frac {1}{s^{2}+2\zeta \omega _{0}s+\omega _{0}^{2}}}}H(s)={\frac {1}{s^{2}+2\zeta \omega _{0}s+\omega _{0}^{2}}}

又令

{\displaystyle {\frac {K_{i}}{K_{d}}}=\omega _{0}^{2}}{\frac {K_{i}}{K_{d}}}=\omega _{0}^{2}
{\displaystyle {\frac {K_{p}}{K_{d}}}=2\zeta \omega _{0}}{\frac {K_{p}}{K_{d}}}=2\zeta \omega _{0}

{\displaystyle G(s)H(s)={\frac {K_{d}}{s}}}G(s)H(s)={\frac {K_{d}}{s}}

因此若受控設備有不穩定的極點,看似可以用此方式消除,不過實際上有些差異,由干擾到輸出的閉迴路傳遞函數中仍有不穩定的極點,因此仍可能會發散。

串級型或交互型[編輯]

另一種PID控制器的表示法爲串級型(series)或稱爲交互型(interacting)

{\displaystyle G(s)=K_{c}{\frac {(\tau _{i}{s}+1)}{\tau _{i}{s}}}(\tau _{d}{s}+1)}G(s)=K_{c}{\frac {(\tau _{i}{s}+1)}{\tau _{i}{s}}}(\tau _{d}{s}+1)

其中參數和標準型的參數有以下的關係

{\displaystyle K_{p}=K_{c}\cdot \alpha }K_{p}=K_{c}\cdot \alpha {\displaystyle T_{i}=\tau _{i}\cdot \alpha }T_{i}=\tau _{i}\cdot \alpha
{\displaystyle T_{d}={\frac {\tau _{d}}{\alpha }}}T_{d}={\frac {\tau _{d}}{\alpha }}

{\displaystyle \alpha =1+{\frac {\tau _{d}}{\tau _{i}}}}\alpha =1+{\frac {\tau _{d}}{\tau _{i}}}.

上述作法可表示爲二個串級的PD控制器及PI控制器,在早期類比電路的時代較容易實現,雖然控制器已經數字化,不過仍有些維持此形式。

離散化的控制器[編輯]

若要在微處理機(MCU)或是FPGA中實現PID控制或是分析其性能,就需要將控制器離散化[18]。一階微分可以用後向有限差分表示,積分項也離散化,若取樣時間爲{\displaystyle \Delta t}\Delta t,積分項可以用下式近似

{\displaystyle \int _{0}^{t_{k}}{e(\tau )}\,{d\tau }=\sum _{i=1}^{k}e(t_{i})\Delta t}\int _{{0}}^{{t_{k}}}{e(\tau )}\,{d\tau }=\sum _{{i=1}}^{k}e(t_{i})\Delta t

微分項可近似爲

{\displaystyle {\dfrac {de(t_{k})}{dt}}={\dfrac {e(t_{k})-e(t_{k-1})}{\Delta t}}}{\dfrac {de(t_{k})}{dt}}={\dfrac {e(t_{k})-e(t_{{k-1}})}{\Delta t}}

因此PID控制器的離散化可以將{\displaystyle u(t)}u(t)微分,再用一階導數及二階導數的定義求得{\displaystyle u(t_{k})}u(t_{k}),可以徥到

{\displaystyle u(t_{k})=u(t_{k-1})+K_{p}\left[\left(1+{\dfrac {\Delta t}{T_{i}}}+{\dfrac {T_{d}}{\Delta t}}\right)e(t_{k})+\left(-1-{\dfrac {2T_{d}}{\Delta t}}\right)e(t_{k-1})+{\dfrac {T_{d}}{\Delta t}}e(t_{k-2})\right]}u(t_{k})=u(t_{{k-1}})+K_{p}\left[\left(1+{\dfrac {\Delta t}{T_{i}}}+{\dfrac {T_{d}}{\Delta t}}\right)e(t_{k})+\left(-1-{\dfrac {2T_{d}}{\Delta t}}\right)e(t_{{k-1}})+{\dfrac {T_{d}}{\Delta t}}e(t_{{k-2}})\right]

其中{\displaystyle T_{i}=K_{p}/K_{i},T_{d}=K_{d}/K_{p}}T_{i}=K_{p}/K_{i},T_{d}=K_{d}/K_{p}

僞代碼[編輯]

以下是一段實現PID算法的僞代碼:[19]

previous_error = 0
integral = 0 
start:
  error = setpoint - measured_value
  integral = integral + error*dt
  derivative = (error - previous_error)/dt
  output = Kp*error + Ki*integral + Kd*derivative
  previous_error = error
  wait(dt)
  goto start

此例中有兩個變數在循環前需初始化爲0,然後開始循環。目前的誤差(error)是用目前目標值(setpoint)減去系統反饋值(measured_value)而得,然後再進行積分微分運算,比例項、積分項及微分項乘以各自參數後得到輸出(output)。在實際系統中,這會透過數位類比轉換器轉換爲類比訊號,作爲受控系統的控制量。目前的誤差量及積分會儲存,以便下次計算微分及積分時使用,程式會等待dt秒後開始,循環繼續進行,透過類比數位轉換器讀取新的系統反饋值及目標值,再計算誤差量及輸出[19]

    (來點簡單易懂的!)
啥是PID?   PID可以吃嗎?
PID,就是“比例(proportional)、積分(integral)、微分(derivative)”,是一種很常見的控制算法。算法是不可以吃的。
到LZ發帖的這一天,PID已經有105年的歷史了

它並不是什麼很神聖的東西,大家一定都見過PID的實際應用

——比如四軸飛行器,再比如平衡小車……還有汽車的定速巡航、3D打印機上的溫度控制器….
再比如動物園裏的海獅,將一根杆子直立着頂在頭上(OOPS,這個也算..)

就是類似於這種:需要將某一個物理量“保持穩定”的場合(比如維持平衡,穩定溫度、轉速等),PID都會派上大用場。

那麼問題來了:
  比如,我想控制一個“熱得快”,讓一鍋水的溫度保持在50℃
這麼簡單的任務,爲啥要用到微積分的理論呢你一定在想:
這不是so easy嘛~  小於50度就讓它加熱,大於50度就斷電,不就行了?幾行代碼用Arduino分分鐘寫出來

沒錯~在要求不高的情況下,確實可以這麼幹~  But!  如果LZ換一種說法,你就知道問題出在哪裏了:

如果我的控制對象是一輛汽車呢?
要是希望汽車的車速保持在50km/h不動,你還敢這樣幹麼

設想一下,假如汽車的定速巡航電腦在某一時間測到車速是45km/h。它立刻命令發動機:加速!
結果,發動機那邊突然來了個100%全油門,嗡的一下,汽車急加速到了60km/h。這時電腦又發出命令:剎車!
結果,吱……………哇…………(乘客吐)

所以,在大多數場合中,用“開關量”來控制一個物理量,就顯得比較簡單粗暴了。有時候,是無法保持穩定的。因爲單片機、傳感器不是無限快的,採集、控制需要時間。
而且,控制對象具有慣性。比如你將一個加熱器拔掉,它的“餘熱”(即熱慣性)可能還會使水溫繼續升高一小會。

這時,就需要一種『算法』:

  • 它可以將需要控制的物理量帶到目標附近
  • 它可以“預見”這個量的變化趨勢
  • 它也可以消除因爲散熱、阻力等因素造成的靜態誤差
  • ….

於是,當時的數學家們發明了這一歷久不衰的算法——這就是PID。

你應該已經知道了,P,I,D是三種不同的調節作用,既可以單獨使用(P,I,D),也可以兩個兩個用(PI,PD),也可以三個一起用(PID)。
這三種作用有什麼區別呢?客官別急,聽我慢慢道來



我們先只說PID控制器的三個最基本的參數:kP,kI,kD。

kP
P就是比例的意思。它的作用最明顯,原理也最簡單。我們先說這個:

需要控制的量,比如水溫,有它現在的『當前值』,也有我們期望的『目標值』。

  • 當兩者差距不大時,就讓加熱器“輕輕地”加熱一下。
  • 要是因爲某些原因,溫度降低了很多,就讓加熱器“稍稍用力”加熱一下。
  • 要是當前溫度比目標溫度低得多,就讓加熱器“開足馬力”加熱,儘快讓水溫到達目標附近。

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

實際寫程序時,就讓偏差(目標減去當前)與調節裝置的“調節力度”,建立一個一次函數的關係,就可以實現最基本的“比例”控制了~
kP越大,調節作用越激進,kP調小會讓調節作用更保守。

要是你正在製作一個平衡車,有了P的作用,你會發現,平衡車在平衡角度附近來回“狂抖”,比較難穩住。
如果已經到了這一步——恭喜你!離成功只差一小步了~

kD
D的作用更好理解一些,所以先說說D,最後說I。

剛纔我們有了P的作用。你不難發現,只有P好像不能讓平衡車站起來,水溫也控制得晃晃悠悠,好像整個系統不是特別穩定,總是在“抖動”。

你心裏設想一個彈簧:現在在平衡位置上。拉它一下,然後鬆手。這時它會震盪起來。因爲阻力很小,它可能會震盪很長時間,纔會重新停在平衡位置。
請想象一下:要是把上圖所示的系統浸沒在水裏,同樣拉它一下 :這種情況下,重新停在平衡位置的時間就短得多。

我們需要一個控制作用,讓被控制的物理量的“變化速度”趨於0,即類似於“阻尼”的作用。

因爲當比較接近目標時,P的控制作用就比較小了。越接近目標,P的作用越溫柔。有很多內在的或者外部的因素,使控制量發生小範圍的擺動。D的作用就是讓物理量的速度趨於0,
只要什麼時候,這個量具有了速度,D就向相反的方向用力,盡力剎住這個變化。

kD參數越大,向速度相反方向剎車的力道就越強。

如果是平衡小車,加上P和D兩種控制作用,如果參數調節合適,它應該可以站起來了~歡呼吧

等等,PID三兄弟好想還有一位。看起來PD就可以讓物理量保持穩定,那還要I幹嘛?
因爲我們忽視了一種重要的情況:

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

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

  • P兄這樣想:我和目標已經很近了,只需要輕輕加熱就可以了。
  • D兄這樣想:加熱和散熱相等,溫度沒有波動,我好像不用調整什麼。

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

作爲一個人,根據常識,我們知道,應該進一步增加加熱的功率。可是增加多少該如何計算呢?
前輩科學家們想到的方法是真的巧妙。

設置一個積分量。只要偏差存在,就不斷地對偏差進行積分(累加),並反應在調節力度上。

這樣一來,即使45℃和50℃相差不太大,但是隨着時間的推移,只要沒達到目標溫度,這個積分量就不斷增加。系統就會慢慢意識到:還沒有到達目標溫度,該增加功率啦!
到了目標溫度後,假設溫度沒有波動,積分值就不會再變動。這時,加熱功率仍然等於散熱功率。但是,溫度是穩穩的50℃。
kI的值越大,積分時乘的係數就越大,積分效果越明顯。

所以,I的作用就是,減小靜態情況下的誤差,讓受控物理量儘可能接近目標值。

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

這篇就寫到這裏。要想直觀地體驗PID的控制作用,需要一個具體的東西來調試。
LZ以後完成倒立擺項目後,會用一些視頻來演示PID參數的整定方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章