Re: [學術] 問題 PID 各各參數代表什麼意思
我把你的變數帶入下圖,並假設這個系統是要做速度控制。
http://sofun.tw-dvd.us/jpg/PID_PPT.jpg
所以你的系統,UpdatedPeriod不是大於MAXPERIOD,不然就是小於MINPERIOD,所以才會
有900或100的狀態出現。
這個原因很多,常見的情況,有以下兩種:
1.你的PID參數設定不合理,導致計算出來的UpdatedPeriod過大,
超過上下限制(MAXPERIOD,MINPERIOD)。可以試著重新調整PID參數,或是將積
分器在某個穩態時停止,以防止過積分的情況。
2.程式的MAXPERIOD及MINPERIOD限制的範圍太小,控制器的UpdatedPeriod被其限制住,
這個時候,可以先使用開迴路來測定系統Plant的極限狀態。
舉例來說,您開迴路丟測試訊號,PEPER最大到多少時,Plant的輸出Speed可以
到多少,此時可以決定您的MAXPERIOD~
反之,PEPER最小多少時,Plant的輸出Speed可以到多少,再決定您的MINPERIOD~
如果以上兩個方法都測試過,計算出來的UpdatedPeriod還是非常大,那麼有可能
是該系統的Actual_Value 與 Set_Value的誤差一直很大,系統無法追上,那麼
就要重新設計系統,或是檢查一下Actual_Value和Set_Value的物理量轉換是否有問題
最後,UpdatedPeriod超過後是否會重0開始,一般Overflow就會掛掉,不會從0開始。
你也可以寫個測試程式,如果UpdatedPeriod為0時,寫回一個BOOL就可以知道了.
以上淺見,希望對你有幫助。
※ 引述《kingzero (一起迷路)》之銘言:
: 謝謝你的資訊,用處很大.
: 我的問題剛剛解掉了!!
: 我補充一下實際上面可能會遇到的問題.
: PID的控制會設定控制變數的上下限
: 例如:
: if(UpdatedPeriod >= MAXPERIOD)
: {
: PTPER = MAXPERIOD;
: }
: else if(UpdatedPeriod <= MINPERIOD)
: {
: PTPER = MINPERIOD;
: }
: 但是下次取入的控制項目 UpdatedPeriod不是最後的
: 舉例來說 MAXPERIOD 是900 , MINPERIOD是 100
: UpdatedPeriod 這次是1000
: PTPER是900
: 但是下次PID的計算值 UpdatedPeriod 是1099
: PTPER還是900
: 這樣子看起來沒有問題.
: 但是有沒有可能 UpdatedPeriod會超過可以使用用的範圍
: UpdatedPeriod 超過之後 UpdatedPeriod會變成從0開始計算
: 所以雖然實際的情況是 你應該把PTPER控制在 900
: 會後確會在某一個周期之後PTPER變成100
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.18.144
※ 文章網址: https://www.ptt.cc/bbs/Mechanical/M.1425139585.A.2B3.html
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):