Robofun 機器人論壇

標題: PID控制說明 [打印本頁]

作者: nichal    時間: 2008-11-28 14:46
標題: PID控制說明
http://www.wretch.cc/blog/chipware/17867649

用實例解說
比較容易理解
提供大家參考看看

有錯誤的地方也請不吝指正唷~~~

[ 本帖最後由 nichal 於 2008-11-28 14:47 編輯 ]
作者: doubletime    時間: 2008-11-28 15:14
當servo因為負載變動的關係
讓定位進入一種來回振盪的現象

其實這時後我會選擇pd 而非pi。

我覺得i控制用在穩態誤差時比較明顯
作者: nichal    時間: 2008-11-28 16:47
大大您好唷~~
請教一下所謂的穩態誤差
是指因為負載持續加載而使誤差本身一直沒辦法縮小
呈現undershooting的現象嗎?

感謝大大的指教
我文中原本所要表達的負載變動
是指負載本來很重
忽然變輕了之後又慢慢加重回來的情況
而不是驅動過程一直overdamping的現象
所以才使用PI控制
(這種情況會發生在拿起重物後, 忽然放下再重新拿起的時候)

不曉得這樣的說法是否正確?
還是大大您有比較好的解說方式
提供給小弟做參考
感恩呀~~~~


[ 本帖最後由 nichal 於 2008-11-28 16:52 編輯 ]
作者: doubletime    時間: 2008-11-28 19:40
大大您好
小弟以為是在指P GAIN太大,一直過阻尼產生的振盪,所以才會說會選擇使用PD CONTROL。
不過要簡單的說明I GAIN的話,可以用速度控制來表達。

p控制
        +---------------------------------------------------         ←速度命令
         |     /-----------------------------------------------        ←實際控制,因為只有P 控制,和命令會有誤差。
         |    /
         |   /
____| /

                  
        +---------------------------------------------------         ←實際馬達速度可以跟上速度命令,且沒有穩態誤差
         |     /
         |    /
         |   /
____| /


可以用速度控制來表達i gain。因為速度控制只有p控制比較容易產生穩態誤差。
其實PID這東西真的很抽像,沒有實際摸過真的很沒有感覺。
不過也期待大大可以用更簡單的言語帶領大家學習PID CONTROL。
謝謝
作者: nichal    時間: 2008-11-29 07:20
感謝大大的指點
受教了
m(_._)m

小弟盡力再找看看有沒有更容易理解的範例來說明
謝謝大大的支持唷~~~
作者: doubletime    時間: 2008-11-30 15:20
大大您太謙虛了,小弟從您的文章也受教了。
作者: stanley21    時間: 2008-11-30 16:55
其實PID控制不難理解喔,  例如P是英文proportional的縮寫,是"比例"的意思, 例如如果要利用油門控制機車的速度, 當你看到速度離目標還差太多時, 你會加比較多的油門,  當速度離目標只差一點時, 就只要加一點油門就可以了,  這就是"比例"的概念,就是控制的值與誤差值呈正比的意思...  當然光靠P控制常常無法快速精準且穩定的控制目標達到設定值,因此還會加上I(積分),D(微分)控制...或者是其他更複雜的控制喔...

[ 本帖最後由 stanley21 於 2008-11-30 17:04 編輯 ]
作者: nichal    時間: 2008-11-30 19:12
史丹利大大的說明範例也很讚唷~~~
有沒有微分與積分相關的看法呢?
也提供給大家參考看看~~~


doubletime大大
多多交流吧~~~

作者: doubletime    時間: 2008-12-1 18:56
I 控制的話,可以說開車的時後,假設想讓車子開在80KM/HR,車子已經跑到80KM/HR了,但車還是需要踩著油門,如果只有P控制的話,腳會放開,踩著,持續這樣的動作,加入I控制就可以固定的量踩著油門讓車子保持在80KM/HR。
D控制可以說,當遇到紅燈時,需要減速,但會考慮現在的車速,而決定是否要踩煞車或是只要放掉油門就好了。
作者: nichal    時間: 2008-12-1 23:55
這個讚!
有講到竅門~~~
不過要讓腳踩著"變動量"的油門可不簡單
也就是說I控制並不好搞.....

作者: stanley21    時間: 2008-12-2 21:43
補充一下, 有關P控制的部份,接著上面用油門控制機車速度的例子,
如果設定目標為70公里/hr,目前速度若只有30公里/hr,
就還有40公里/hr的差距,如果加油門的幅度比較大
(也就是比例係數Kp比較大),當然速度達到設定目標的時間會比較快,
相反如果加油門的幅度比較小,達到目標的時間會比較慢,
但是調整的幅度一下子太大,也會造成速度的不正常震盪,
甚至有失控的危險..

這個時候可以加上微分控制(D),它能時時計算誤差的變化量,
並且利用此訊息來進行調整,例如當速度超過目標時(參考表1),
速度誤差+7和+10時,速度誤差變化量為+7和+3,
這時P控制會減油門,同時D控制也會減油門,
這樣一來D控制會幫助降低速度超過目標太多(也就是Overshoot),
而速度誤差+5和+0時,速度誤差變化量為-5和-5,
這時P控制會減油門,同時D控制卻會加油門,
這樣可以讓速度從超過目標回到目標時不要一下子衝太快,
所以D控制的作用就可以讓速度震盪減少了.

表1.
速度誤差(公里/hr): -40 -30  -20  -10    0   +7  +10  +5  0
速度誤差變化量:      +10  +10  +10  +10   +7  +3   -5  -5


另外單憑P控制有時候會讓速度仍然無法精準的達到設定值,
仍然會有一定的偏差,當這個狀況發生時,就可以加上積分控制(I)解決,

顧名思義,積分控制會時時將誤差積分加起來,
當仍有誤差時他就會一直告訴控制器調整油門,
直到機車速度不再有誤差時才停止...

以上只是很初淺說明,如果大家有興趣的話可以去書店翻一下自動控制的書,
裡頭學問不小啊~~不過千萬別被嚇到了,因為自動控制是很生活化的,
我們每天在騎機車,開車,轉方向盤的時候就會用到了喔~~
   
作者: nichal    時間: 2008-12-3 06:52
看來小弟的文章有拋磚引玉的效果
引起這樣的迴響真叫人開心

科技是很令人著迷的
只是有時我們不得其門而入
希望藉由這樣的方式
讓大家更喜歡也更瞭解
謝謝上面幾位大大的回覆呀!!

如果有興趣加入討論的大大們
也請繼續指教唷!!
真理是越講越明滴~~~


[ 本帖最後由 nichal 於 2008-12-3 06:57 編輯 ]
作者: marbol    時間: 2008-12-5 07:44
各位大大~~~有圖有真相,來看圖吧!!
控制常用到的步階響應如下圖,
在歸向的過程,看起來像波浪的圖,簡單可以分為四個區塊
         
其中  e=目標值-回授值=誤差
     △e=目前e-前次e=誤差變化率
     (目標就是整條延伸的藍色線條)
    其中
    目標值_0-回授值_0=e_0 ---(1)前次e
    目標值-回授值=e ------(2)目前e

    而目標值基本上不變動,故 目標值_0=目標值
    所以(2)-(1)得
誤差變化率△e為"回授值_0-回授值",△e正負關係由此對照圖片便可明瞭


在第II區塊及第IV區塊,因為e跟△e正負號相同,所以都是全力往目標值歸向,
                                     物理意義上就是軌跡離開交會點時會做最大的歸向修正動作
在第I區塊及第III區塊,因為e跟△e正負號不相同,所以都是帶有煞車往目標值歸向,
                                    物理意義上就是軌跡衝向交會點帶減速才能及時在交會點停住,
                                    一般控制系統都帶有負載的慣性作用,所以會在交會點(目標)
                                     來回擺盪修正~~直到進入致動器(馬達)進入死區(不敏感帶),
                                     才會停止擺盪修正~~~~~

其它就如同各位大大說的,
步階響應的開始用PD的修正效果強
步階響應的結束用PI的修正效果強
以上~~~~








[ 本帖最後由 marbol 於 2008-12-5 22:50 編輯 ]

步階響應與控制物理意義.GIF (3.41 KB, 下載次數: 609)

步階響應與控制物理意義.GIF

作者: nichal    時間: 2008-12-5 08:49
真的是有圖有真相
讚啦~~~

這樣就一目瞭然囉!!!


感謝marbol大大寶貴的資料呀~~~

不過
可以請大大再補一條速度線嗎?
這樣比較容易理解誤差變化△e的部分唷~~~
感恩啦~~~

ps.
小弟本來想用小畫家要補
可是一直補不好
所以只好請大大用原圖再補一下囉~~~
藍色線一樣是參考線
加一條紅色的誤差變化線
所以誤差變化線應該會差個90度相位吧?!
(好像不能這樣說.....但是又不曉得該怎麼比喻較好.....)


[ 本帖最後由 nichal 於 2008-12-5 09:37 編輯 ]
作者: marbol    時間: 2008-12-5 21:20
小畫家真的是大家的好朋友~~~
只是誤差變化線應該補在哪??

小弟是想把I跟II的斜率作切線,斜率是負的,
                III跟IV的斜率作切線,斜率是正的,
斜率應該可以比擬作誤差變化率吧~~~
作者: nichal    時間: 2008-12-5 21:55
如果大家不嫌醜的話
我畫的這一張就參考看看囉~~~

紅色線是速度線
也就是誤差變化線
剛開始位置在0沒有動作
所以速度0(藍色線就是速度0)
開始驅動後是正速度
一直到經過位置0的時候是速度最快的時候

過了位置0速度就變慢了
所以看到速度線往下掉
一直衝到速度0的時候剛好離期望位置最遠

不過
微分控制的概念
看的是加速度的效果
就像比例控制一樣
看的是速度效果
而期望位置與實際位置的相對關係
是我們用來分析控制結果的參考圖

最好的控制
是第二張圖
沒有四個步階
就是直接到位
不過應該很難

pid.JPG (8.13 KB, 下載次數: 544)

pid.JPG

pid2.JPG (4.12 KB, 下載次數: 555)

pid2.JPG

作者: marbol    時間: 2008-12-5 22:36
nichal大大~~~~
畫的不錯啊~~~簡單明瞭   不用改了~~~ 原來誤差變化線是這個樣子~~~ 是有領先90度的相位的樣子~~~ 話說微分器的效果是讓電流領先電壓90度的相位, 而微分器就是作用在步階響應的初始階段,有領先的電流出現,才會有快速的馬達扭力隨之而來!!提前反應修正行為,不曉得這樣兜不兜的起來??

[ 本帖最後由 marbol 於 2008-12-5 22:38 編輯 ]
作者: nichal    時間: 2008-12-6 00:01
提前反應修正行為
就靠Kp與Kd常數的設定經驗了
真要用公式推導
應該會先暈倒.....

作者: stanley21    時間: 2008-12-6 08:48
有圖真的比較好懂! 

我比較直觀的想因為微分得到的誤差變化量代表的是一種趨勢,
因此可以藉此預測未來,也就是說D控制可以更早一步動作,不知道是不是這樣呢??

而相反的,積分(I)控制會慢一步才動作...
作者: nichal    時間: 2008-12-6 16:40
史丹利大大說得沒錯
微分可以預測反應
而積分是屬於事後補救
簡單說就是這樣囉~~~

作者: doubletime    時間: 2008-12-6 17:48
怎麼覺得那裡怪怪的。
微分會早一步知道嗎?
積分會慢一步知道嗎?

照公式來講好了,微分是(現在-過去)。照理來說是不會有未來的。
而積分則是累積誤差。

微分的目的壓抑p控制,而積分的目的是為了減少穩態誤差。好像都和預知沒有關係。
作者: nichal    時間: 2008-12-6 20:30
doubletime大大
或許您誤解史丹利大大所要表達的意思
史丹利大大的原意是說
微分項可以看出比例變化的趨勢
提早預防比例控制失控的情況
跟大大您所說的壓抑P控制意思是一樣的

而積分控制在進入穩態前
因為誤差一直呈現大幅度的增減情況
所以反倒沒辦法有效壓抑誤差的縮小
反倒是進入穩態範圍了
才開始發生作用
史丹利大大才說積分項是後知後覺

然而就公式來看
就像大大您所說的一樣
公式都是針對過去發生的值進行處理跟運算
跟是不是預知無關
然而對現象的修正來說
卻會讓人有這樣的感覺


打個比方好了
股票分析師都會在開市前
建議買家如何選購
這就是一種預測
然而預測的根據
是過去股價漲跌的曲線與大環境現象分析運算後的結果
這種舉動
就像微分控制一樣

而當日股票開市後
分析師會再告知今日預測是否吻合
並對股價的漲跌做出立即的回應與分析
調整接下來要進行的買賣
這樣的動作
就像積分控制一樣

大致上是這樣囉~~~~
有說錯請不吝指教~~~~


[ 本帖最後由 nichal 於 2008-12-6 20:32 編輯 ]
作者: doubletime    時間: 2008-12-7 12:25
這個比方好像不太對- -
這樣說好了,假設我是投資者,投顧老師說明年可以到200元/股
那我也買了股票了。
但下個月因為大環境不好,投顧老師卻和我說,只能到100元/股
好像和投資者的我當初的原意不屬。投顧老師應該是不管怎樣一直要大家買,且會告知未來會達到200元才對。

所以拿股票來說明似乎不對,因為命令假設是步階的話,是不會因為大環境改變而改變。
呵呵,會不會被新聞局盯上?

因為在位置控制上好像是這樣,但在速度控制上PD 和PI 似乎又不太一樣。所以對這未來估測有很大的疑惑。
作者: nichal    時間: 2008-12-7 20:31
感謝大大提出修正~~~
再一次感受到大大精湛的分析能力

確實
含有"人性參數"的比喻
多半是不太恰當的~~~

作者: doubletime    時間: 2008-12-7 21:39
小弟也還在學習,因為PID真的很抽像
我也還在學習如何可以用最簡單的文來表達這抽像的理論。
作者: stanley21    時間: 2008-12-7 22:40
一切都是誤會啊~~ 

各位大大想的可能太複雜了,我理解的對象也並不是像股市那樣複雜的系統啦!!doubletime可能有點誤解我的意思了,應該都是我沒說清楚的關係,實在很抱歉!!

微分控制本質上是預測控制,這個是沒什麼爭議的,
de(t)/dt是e(t)的斜率,
利用誤差的斜率,可以預測誤差的方向
在線性系統步階輸入下,誤差斜率越大,
就會有較大的超越量
微分控制就是利用瞬間的誤差斜率,
事先就預測出會有較高的超越量,
並且在過大的超越量實際發生前就加以控制矯正~~

而積分控制主要是對穩態誤差加以矯正,
感覺就像過了暫態響應,到穩態時才去動作去控制,
這就是我說"慢一步"的意思...

如果要講更深的控制我就不會了吧,
學校念的自動控制大概都還回去了~~
要再去翻書才行啊!!

作者: nichal    時間: 2008-12-8 16:02
別放在心上
大家都是在討論而已啦~~~
因為這裡叫"討論區"呀!!!

作者: x860992    時間: 2012-5-30 19:26
error = setpoint - actual_position;

if(error > 0.01 || error < -0.01)
        {
                integral = integral + error*dt;
        }

derivative = (error - pre_error)/dt;

output = (Kp*error) + (Ki*integral) + (Kd*derivative);

if(output > 30000)
        {
                output = 30000;
        }
        else if(output < -30000)
        {
                output = -30000;
        }

return output;

請問公式是這樣嗎
我想要把它轉成c檔
我已經把輸出+給pwm了
可是誤差還是有10啪ㄟ怎麼回事= =
條kp kd ki 直看不太出來= =




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2