2012-11-24 33 views
11

我不理解PID控制器的組成部分。讓我們假設來自Wikipedia的這個僞代碼:我不明白PID控制器的積分部分

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 

Integral在開始時設置爲零。然後在循環中整合錯誤。當我對測量值或設定值進行(正向)改變時,誤差將變爲正值,並且積分將在時間上(從開始)「吃」這些值。但我不明白的是,當誤差穩定回零時,積分部分仍然有一定的價值(隨着時間的推移積分誤差),並且仍然有助於控制器的輸出值,但它不應該。

有人可以解釋我嗎?

+0

對於任何感興趣的人,我實現了這個確切的算法來控制循環速度。 http://stackoverflow.com/questions/38377820/throttling-await-for-inbound-messages – Jim

回答

1

讓我們看看這樣:錯誤本身穩定到零是不夠的。要求整數變爲零,這意味着隨時間的測量值的平均值與設定值相匹配。

一個不好的例子就是嘗試從零開始,以一定的Ki,Kp,Kd達到100%的值。

x = 0,60,80,90,98,99,100,100,100。

x的值是多少?平均值是80.777。甚至不接近100.

+1

我還是不明白。你能解釋一下嗎? – user561838

+0

但積分只有在測量值超過設定值時纔會歸零(因爲我們需要負值誤差)。在你的例子中,如果(Ki爲1,dt也爲1),當測量值爲100(=設定點)時,控制器的輸出仍然不爲零(我認爲它會振盪)。 但是,如果PI(D)控制器調整良好,則不會出現超調。我仍然不明白:( – user561838

+2

我不同意。過沖是I的財產。另一方面,P/D具有不到達目的地的屬性。整合通常是寬容的:I(n + 1 )= I(n)* alpha +(1-alpha)*錯誤緩慢地忘記了早先的錯誤,給予當前更多的重視。 –

1

根據您想要控制的系統和傳感器的質量,控制器與系統/設備之間總會有某種干擾。當出現這樣的干擾時,控制器的積分部分不會變爲零,而是反作用它!這是由於積分將保持變化,直到系統的輸出等於參考值(即積分值與干擾相反)。

例如參見this page描述控制參數:當系統和輸入具有特定字符時,steady state error是可能的,積分將嘗試反對此,這導致最終誤差更低,但在某些情況下更多超調。

此外,傳感器的精度/噪聲可能會對積分值的準確性施加限制,可能會在零附近振盪。

1

穩態誤差需要I項。看看維基百科上的示例圖。

http://en.wikipedia.org/wiki/File:Change_with_Ki.png

您可以從改變我長期的收益看在圖形的變化。很明顯,由於積分飽和,Ki = 2是高的,這是導致急劇超調的原因。 Ki = .5看起來不錯,但是如果你想盡快達到一個穩定值,那麼你需要再增加一點Ki。看看Ki = 1,它有點超調,但仍然比Ki = .5快得多。所以你必須決定這種折衷是否值得。

9

想想穩定狀態下的輸出......您希望measured_value爲設定值,誤差爲零,輸出爲將過程保持在測量值所需的任何值。 (在某些情況下可能爲零,但輸出可能不總是需要爲零 - 例如:您需要將加熱器設置爲6.5以將房間保持在72F。)

如果錯誤爲零,則比例誤差項對輸出沒有貢獻。

如果進程處於穩定狀態,那麼error-previous_error爲零,並且微分項不起任何作用。

如果輸出是將過程保持在穩定狀態的適當設置,則積分項必須是提供輸出值的唯一項。它以測量單位乘以觀察時間測得的誤差累積了適當的記憶,可以通過以單位outputUnits /(error * measurementTime)爲單位的Ki項轉換爲輸出單位。

作爲恆溫器的一個例子,如果房間內電加熱器的旋鈕上的輸出爲0-11個單位,並且您每隔1分鐘測量房間中的F度與72F的設定值,則積分總和記錄的degreesFtooCold *分鐘數,而Ki項將把觀察到的誤差總和轉換爲錶盤上的單位。

這是完美的,並期望積分在穩定狀態下爲非零。

1

我認爲這裏的一部分解釋是,作爲積分部分超調,比例部分將開始反對它。因此第二次過沖將更小,第三次更小,等等。但是如上所述,通常會有一些過程噪聲導致誤差不爲零,並且控制器可能永遠不會達到恆定輸出,但輸出的變化應該非常小。

0

在所有適當的情況下,您都有理由質疑PID定義,因爲它在整個PID控制中存在一個錯誤,就整數項而言。 錯誤可以如下圖解說明: 1)即使存在零錯誤,整數術語也會導致輸出操作。 2)整體是基於以前的錯誤,不再相關。 如果控制器將輸入與輸出進行比較並通過負反饋並將誤差驅動爲零,則比例控制可能會產生0錯誤。

正確的PID項: D項:添加更改(微分)到穩態輸入以在求和結中組合。

I術語:在求和結點中添加對穩態OUTPUT的負(負反饋)進行組合的改變(微分)。

集成是分化跨越(周圍)負反饋

的輸出連接到求和點具有非常高的遊戲和負極性(反相)組合時。 P期:是期望的OUTPUT除以所需的INPUT或由OUTPUT輸出的求和結點的信號除以由INPUT饋送到求和結點的信號的比值。

D term,Differentiation加速對輸入的輸出響應,使輸出更快地接近正確的值。

積分在接近正確/期望值時減緩輸出響應。