2008年11月23日 星期日

充電一下 -- PID控制原理

在機器人的控制方法中

PID理論是被廣泛應用的

然而什麼叫PID?



可以參考一下這篇文章

PID控制的原理



文章中所提到的內容比較偏理論

讓我用實際動作的概念再解說一次



就拿最近在進行的SERVO測試當範例好了

SERVO的動作就直覺來看

就是我送給它PWM的寬度多少

它就停在對應的角度上

對吧?!



假設SERVO現在的位置在90度

而我送了一個1.5mS的信號要他回到0度

以PID的概念來解說

它會怎麼動作呢?



1. 比例控制(P)

如果用比例控制(P)

意思就是當誤差值有多大

我的驅動信號就送多大

現在是角度相差90度

所以我驅動信號就全開

(以PWM來說就是duty 100%)



過一小段時間後

我們會持續檢查SERVO現在的角度

如果第二次檢查發現它已經停在45度的位置了

所以驅動信號就變成原來的一半

(duty 50%)



等到SERVO停到定位了

因為沒有誤差了

所以驅動信號就關掉了....



2.比例控制(P) + 積分控制 (I)

不管是I或是D的控制

都必須搭配P的控制來進行

單純的I與D控制是沒有意義的

因為沒辦法將誤差值縮小

所以談到I控制

也就是談PI控制的意思



在SERVO中

PI控制很少用

因為當誤差進入0 之後

很少有機會自己把誤差值變大!!

也因此很多控制器並沒有加上這樣的控制方法

然而

當SERVO因為負載變動的關係

讓定位進入一種來回振盪的情況時

加入PI控制才能抑制這樣的現象



I的控制就是不斷地將振盪時產生的誤差累積

乘上一個積分常數後

產生一個驅動信號來逼近0誤差的位置



3.比例控制(P) + 微分控制(D)

文章中有提到

在慣性力遲滯現象較明顯的系統

一定要用PD的方式進行控制

原因在於驅動信號的增減效果並不會立即反應在動作上

如果按照比例的概念控制

會導致SERVO進入誤差0的位置時

系統還持續原來的慣性力

讓誤差加大

因為先前的驅動信號能量來得比較晚



拿原來P控制的例子

開始是90度

目標是0度

一開始全開duty 100%

第二次再檢查誤差的時候

發現是60度

然而依比例的概念

此時應該已經到達45度的位置

這就是系統的能量遲滯的效果

如果您根據原來P的概念

繼續送給它duty 67% (2/3) 的能量

那麼它就會多出 17%的能量

在越靠近誤差0的時候釋放出來!!



所以此時可以觀察誤差變化量

乘上一個微分常數

將多出來17%的能量拿掉

如此一來

SERVO就可以順利進入誤差0的位置

而不會衝過頭了!!!



4.比例控制(P) + 積分控制(I) +微分控制(D)

前面已經介紹過P, I, D 控制的方法

在什麼情況下會將這三種控制同時用在一個系統上呢?

就是系統具有慣性遲滯現象

同時負載又隨時在變動的系統!!!



一般來說

只是控制單一個SERVO

負載往往是固定的

可是機器人身上的SERVO一掛就是好幾個

當某幾個SERVO同時運作的時候

會產生機器人本身的動量負載改變

此時就不能再用固定負載的觀念來控制SERVO

不然機器人動起來就會卡卡不順



這時候

高階一點的SERVO或許一樣不會加入PID的控制

它還是原有的PD控制系統

管好自己的慣性力就好

但它會設法將位置回授給您的主控制系統

讓您的系統來計算這個動量的改變

進而把I的控制也加到系統中



這也就是KONDO SERVO與Hitec SERVO之所以會這麼貴的原因了!!!





以上

雖然還是純理論的敘述

但是我用比較實用一點的應用來說明

希望大家有聽懂....

如果我有說錯的地方

也請不吝批評指教



套句柯南常說的名言

真相永遠只有一個!!!

10 則留言:

  1. 看到回授兩字



    好像自動控制喔XD



    可是我們才教一點點 噗



    還是感謝你講的那麼仔細 呵

    回覆刪除
    回覆
    1. 是自動控制沒錯呀!!
      ^^

      希望對您有幫助唷~~

      刪除
  2. 看來我的書裡頭要把PID這章加入這個網址了嗎?

    真詳細,哈哈



    不過寫的真好,對一些新進的新手和生手,應該很有幫助!

    回覆刪除
    回覆
    1. 絕大多數的理論
      都是由現象歸納得到的
      可是
      教科書只會講歸納的結果
      卻忘了把原來如何觀察到這個現象的緣由說明清楚
      導致我們這些學理論的人都霧煞煞學不好....
      實作
      才幫我們理解這些理論的根本
      所以就把一些經驗分享出來囉!!

      謝謝您的誇獎
      有寫錯的話記得提醒我唷~~~

      刪除
  3. 感謝doubletime大大在機器人論壇的回應

    小弟將其截取過來

    原文引用於此

    http://www.robofun.net/forum/viewthread.php?tid=2237

    **********************************************************************************



    大大您好

    小弟以為是在指P GAIN太大,一直過阻尼產生的振盪,所以才會說會選擇使用PD CONTROL。

    不過要簡單的說明I GAIN的話,可以用速度控制來表達。



    p控制

    +--------------------------------------------------- ←速度命令

    | /----------------------------------------------- ←實際控制,因為只有P 控制,和命令

    會有誤差。

    | /

    | /

    ____| /





    +--------------------------------------------------- ←實際馬達速度可以跟上速度命令,且沒

    有穩態誤差

    | /

    | /

    | /

    ____| /





    可以用速度控制來表達i gain。因為速度控制只有p控制比較容易產生穩態誤差。

    其實PID這東西真的很抽象,沒有實際摸過真的很沒有感覺。

    不過也期待大大可以用更簡單的言語帶領大家學習PID CONTROL。

    謝謝

    回覆刪除
    回覆
    1. 感謝大大的指點
      受教了
      m(_._)m

      小弟盡力再找看看有沒有更容易理解的範例來說明
      謝謝大大的支持唷~~~

      刪除
  4. 感謝stanley21大大在機器人論壇的回應

    小弟將其截取過來

    原文引用於此

    http://www.robofun.net/forum/viewthread.php?tid=2237

    **********************************************************************************



    補充一下, 有關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)解決,



    顧名思義,積分控制會時時將誤差積分加起來,

    當仍有誤差時他就會一直告訴控制器調整油門,

    直到機車速度不再有誤差時才停止...



    以上只是很初淺說明,如果大家有興趣的話可以去書店翻一下自動控制的書,

    裡頭學問不小啊~~不過千萬別被嚇到了,因為自動控制是很生活化的,

    我們每天在騎機車,開車,轉方向盤的時候就會用到了喔~~

    回覆刪除
    回覆
    1. 看來小弟的文章有拋磚引玉的效果
      引起這樣的迴響真叫人開心

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

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

      刪除
  5. 覺得你講解的很詳細明瞭吶!!~~ 原本對PID控制還霧煞煞ㄉ(沒錯~~學校

    老師只會講書本上理論而已 = ="...)

    沒有舉實例證明來驗證理論,根本無法讓學生了解理論的實際應用,也無

    法勾起學生學習的興趣(因為只會講數學模型,好像都是空想

    就算多會解拉式轉換,微分方程..又如何,真正要去設計測試一套控制系

    統,真的就知道怎麼搞ㄇ???)

    看了你這篇文章著實讓我對PID控制又重新認識了一番~~ ^0^ 感謝喔~~

    回覆刪除