close
PID Control(Proportional Integrative Derivative),屬於系統控制的領域,這方法可消弭一些外界變異或干擾影響,讓系統控制可預測,參數設定得好,就可以又快又穩又準。(引自:http://4rdp.blogspot.com/2008/05/pid-speed-control.html)
PID是以它的三種糾正演算法而命名的。這三種演算法都是用加法調整被控制的數值。而實際上這些加法運算大部分變成了減法運算因為被加數總是負值。這三種演算法是:
1. 比例- 來控制當前,誤差值和一個負常數P(表示比例)相乘,然後和預定的值相加。P只是在控制器的輸出和系統的誤差成比例的時候成立。比如說,一個電熱器的控制器的比例尺範圍是10°C,它的預定值是20°C。那麼它在10°C的時候會輸出100%,在15°C的時候會輸出50%,在19°C的時候輸出10%,注意在誤差是0的時候,控制器的輸出也是0。
2. 積分 - 來控制過去,誤差值是過去一段時間的誤差和,然後乘以一個負常數I,然後和預定值相加。I從過去的平均誤差值來找到系統的輸出結果和預定值的平均誤差。一個簡單的比例系統會振蕩,會在預定值的附近來回變化,因為系統無法消除多餘的糾正。通過加上一個負的平均誤差比例值,平均的系統誤差值就會總是減少。所以,最終這個PID迴路系統會在預定值定下來。
3. 導數 - 來控制將來,計算誤差的一階導,並和一個負常數D相乘,最後和預定值相加。這個導數的控制會對系統的改變作出反應。導數的結果越大,那麼控制系統就對輸出結果作出更快速的反應。這個D參數也是PID被稱為可預測的控制器的原因。D參數對減少控制器短期的改變很有幫助。一些實際中的速度緩慢的系統可以不需要D參數。
(引自:維基百科)
以下為PID一般方程式,適用於任何可控制回授系統,
E(t) = R(t) – Y(t)
// R(t) is a set point to reach
// Y(t) is a measuring value
// E(t) is error
P(t) = E(t) // P(t) is Proportional function
I(t) = I(t-1) + E(t) // I(t) is Integrative function
D(t) = E(t) – E(t-1) // D(t) is Derivative function
U(t) = Kp*P(t) + Ki*I(t) + Kd*D(t)
// U(t) is control vaule
// Kp,Ki,Kd are the Proportional Integrative Derivative gains
以下以樂高NXT 馬達為控制範例(引自:http://4rdp.blogspot.com/2008/05/pid-speed-control.html),下列兩式為 NXT 馬達特有方程式。
Power = U(t) / 8 => Power為真實輸出的命令
Y(t) = U(t-2)
U(t) 為系統估算出的轉速,依據實驗數據所知,Power = 100 時,全速轉速約為 800° / second,因此 Power = U(t) / 8。
而 Y(t) = U(t-2),是因為 NXT馬達轉速回應有一秒延遲的現象 (1 second deadtime)。
系統需求為:目標速度R(t) = 500
在此設定Kp = 0.4, Ki = 0.4, Kd = 0
由上例可知馬達約在Step 50時進入轉速穩定。
通常使用 0 <= K <= 2。 由於NXT 馬達反應速度並不快,因此 Kd = 0 就可以了。本例的 K值很大,是因為 NXC 無法使用小數,所以 K = 40,代表 K = 40 / 100 = 0.4。
PID是以它的三種糾正演算法而命名的。這三種演算法都是用加法調整被控制的數值。而實際上這些加法運算大部分變成了減法運算因為被加數總是負值。這三種演算法是:
1. 比例- 來控制當前,誤差值和一個負常數P(表示比例)相乘,然後和預定的值相加。P只是在控制器的輸出和系統的誤差成比例的時候成立。比如說,一個電熱器的控制器的比例尺範圍是10°C,它的預定值是20°C。那麼它在10°C的時候會輸出100%,在15°C的時候會輸出50%,在19°C的時候輸出10%,注意在誤差是0的時候,控制器的輸出也是0。
2. 積分 - 來控制過去,誤差值是過去一段時間的誤差和,然後乘以一個負常數I,然後和預定值相加。I從過去的平均誤差值來找到系統的輸出結果和預定值的平均誤差。一個簡單的比例系統會振蕩,會在預定值的附近來回變化,因為系統無法消除多餘的糾正。通過加上一個負的平均誤差比例值,平均的系統誤差值就會總是減少。所以,最終這個PID迴路系統會在預定值定下來。
3. 導數 - 來控制將來,計算誤差的一階導,並和一個負常數D相乘,最後和預定值相加。這個導數的控制會對系統的改變作出反應。導數的結果越大,那麼控制系統就對輸出結果作出更快速的反應。這個D參數也是PID被稱為可預測的控制器的原因。D參數對減少控制器短期的改變很有幫助。一些實際中的速度緩慢的系統可以不需要D參數。
(引自:維基百科)
以下為PID一般方程式,適用於任何可控制回授系統,
E(t) = R(t) – Y(t)
// R(t) is a set point to reach
// Y(t) is a measuring value
// E(t) is error
P(t) = E(t) // P(t) is Proportional function
I(t) = I(t-1) + E(t) // I(t) is Integrative function
D(t) = E(t) – E(t-1) // D(t) is Derivative function
U(t) = Kp*P(t) + Ki*I(t) + Kd*D(t)
// U(t) is control vaule
// Kp,Ki,Kd are the Proportional Integrative Derivative gains
以下以樂高NXT 馬達為控制範例(引自:http://4rdp.blogspot.com/2008/05/pid-speed-control.html),下列兩式為 NXT 馬達特有方程式。
Power = U(t) / 8 => Power為真實輸出的命令
Y(t) = U(t-2)
U(t) 為系統估算出的轉速,依據實驗數據所知,Power = 100 時,全速轉速約為 800° / second,因此 Power = U(t) / 8。
而 Y(t) = U(t-2),是因為 NXT馬達轉速回應有一秒延遲的現象 (1 second deadtime)。
系統需求為:目標速度R(t) = 500
在此設定Kp = 0.4, Ki = 0.4, Kd = 0
目前速度 | 速度誤差 | P 係數 | I 係數 | D 係數 | |||
Y(t) = | E(t) = Error | P(t) = | I(t) = | D(t) = | U(t) = | Power = | |
U(t-2) | R(t) - Y(t) | E(t) | I(t-1) + E(t) | E(t) - E(t-1) | Kp*P(t) + Ki*I(t) + Kd*D(t) | U(t) / 8 | |
Step | Measuring Speed | ||||||
0 | 0 | 500 | 500 | 500 | 500 | 400 | 50 |
1 | 0 | 500 | 500 | 1000 | 0 | 600 | 75 |
2 | 400 | 100 | 100 | 1100 | -400 | 480 | 60 |
3 | 600 | -100 | -100 | 1000 | -200 | 360 | 45 |
4 | 480 | 20 | 20 | 1020 | 120 | 416 | 52 |
5 | 360 | 140 | 140 | 1160 | 120 | 520 | 65 |
6 | 416 | 84 | 84 | 1244 | -56 | 531.2 | 66 |
7 | 520 | -20 | -20 | 1224 | -104 | 481.6 | 60 |
8 | 531.2 | -31.2 | -31.2 | 1192.8 | -11.2 | 464.64 | 58 |
9 | 481.6 | 18.4 | 18.4 | 1211.2 | 49.6 | 491.84 | 61 |
10 | 464.64 | 35.36 | 35.36 | 1246.56 | 16.96 | 512.77 | 64 |
11 | 491.84 | 8.16 | 8.16 | 1254.72 | -27.2 | 505.15 | 63 |
12 | 512.77 | -12.77 | -12.77 | 1241.95 | -20.93 | 491.67 | 61 |
13 | 505.15 | -5.15 | -5.15 | 1236.8 | 7.62 | 492.66 | 62 |
14 | 491.67 | 8.33 | 8.33 | 1245.13 | 13.48 | 501.38 | 63 |
15 | 492.66 | 7.34 | 7.34 | 1252.47 | -0.99 | 503.92 | 63 |
16 | 501.38 | -1.38 | -1.38 | 1251.09 | -8.72 | 499.88 | 62 |
17 | 503.92 | -3.92 | -3.92 | 1247.16 | -2.54 | 497.3 | 62 |
18 | 499.88 | 0.12 | 0.12 | 1247.28 | 4.04 | 498.96 | 62 |
19 | 497.3 | 2.7 | 2.7 | 1249.99 | 2.59 | 501.08 | 63 |
20 | 498.96 | 1.04 | 1.04 | 1251.03 | -1.66 | 500.83 | 63 |
21 | 501.08 | -1.08 | -1.08 | 1249.95 | -2.12 | 499.55 | 62 |
22 | 500.83 | -0.83 | -0.83 | 1249.12 | 0.25 | 499.32 | 62 |
23 | 499.55 | 0.45 | 0.45 | 1249.57 | 1.28 | 500.01 | 63 |
24 | 499.32 | 0.68 | 0.68 | 1250.25 | 0.23 | 500.37 | 63 |
25 | 500.01 | -0.01 | -0.01 | 1250.25 | -0.69 | 500.09 | 63 |
26 | 500.37 | -0.37 | -0.37 | 1249.87 | -0.36 | 499.8 | 62 |
27 | 500.09 | -0.09 | -0.09 | 1249.78 | 0.28 | 499.87 | 62 |
28 | 499.8 | 0.2 | 0.2 | 1249.98 | 0.3 | 500.07 | 63 |
29 | 499.87 | 0.13 | 0.13 | 1250.11 | -0.07 | 500.09 | 63 |
30 | 500.07 | -0.07 | -0.07 | 1250.03 | -0.2 | 499.98 | 62 |
31 | 500.09 | -0.09 | -0.09 | 1249.94 | -0.02 | 499.94 | 62 |
32 | 499.98 | 0.02 | 0.02 | 1249.96 | 0.11 | 499.99 | 62 |
33 | 499.94 | 0.06 | 0.06 | 1250.02 | 0.05 | 500.03 | 63 |
34 | 499.99 | 0.01 | 0.01 | 1250.03 | -0.05 | 500.02 | 63 |
35 | 500.03 | -0.03 | -0.03 | 1250 | -0.04 | 499.99 | 62 |
36 | 500.02 | -0.02 | -0.02 | 1249.98 | 0.02 | 499.99 | 62 |
37 | 499.99 | 0.01 | 0.01 | 1249.99 | 0.03 | 500 | 63 |
38 | 499.99 | 0.01 | 0.01 | 1250.01 | 0 | 500.01 | 63 |
39 | 500 | 0 | 0 | 1250.01 | -0.02 | 500 | 63 |
40 | 500.01 | -0.01 | -0.01 | 1250 | -0.01 | 499.99 | 62 |
41 | 500 | 0 | 0 | 1250 | 0.01 | 500 | 62 |
42 | 499.99 | 0.01 | 0.01 | 1250 | 0.01 | 500 | 63 |
43 | 500 | 0 | 0 | 1250 | 0 | 500 | 63 |
44 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
45 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
46 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
47 | 500 | 0 | 0 | 1250 | 0 | 500 | 63 |
48 | 500 | 0 | 0 | 1250 | 0 | 500 | 63 |
49 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
50 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
51 | 500 | 0 | 0 | 1250 | 0 | 500 | 63 |
52 | 500 | 0 | 0 | 1250 | 0 | 500 | 63 |
53 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
54 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
55 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
56 | 500 | 0 | 0 | 1250 | 0 | 500 | 63 |
57 | 500 | 0 | 0 | 1250 | 0 | 500 | 63 |
58 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
59 | 500 | 0 | 0 | 1250 | 0 | 500 | 62 |
由上例可知馬達約在Step 50時進入轉速穩定。
通常使用 0 <= K <= 2。 由於NXT 馬達反應速度並不快,因此 Kd = 0 就可以了。本例的 K值很大,是因為 NXC 無法使用小數,所以 K = 40,代表 K = 40 / 100 = 0.4。
全站熱搜
留言列表