Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
12
返回列表 發新帖
樓主: nichal

PID控制說明

[複製鏈接]
發表於 2008-12-6 17:48:54 | 顯示全部樓層
怎麼覺得那裡怪怪的。
微分會早一步知道嗎?
積分會慢一步知道嗎?

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

微分的目的壓抑p控制,而積分的目的是為了減少穩態誤差。好像都和預知沒有關係。
nichal 該用戶已被刪除
 樓主| 發表於 2008-12-6 20:30:58 | 顯示全部樓層
doubletime大大
或許您誤解史丹利大大所要表達的意思
史丹利大大的原意是說
微分項可以看出比例變化的趨勢
提早預防比例控制失控的情況
跟大大您所說的壓抑P控制意思是一樣的

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

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


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

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

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


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

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

因為在位置控制上好像是這樣,但在速度控制上PD 和PI 似乎又不太一樣。所以對這未來估測有很大的疑惑。
nichal 該用戶已被刪除
 樓主| 發表於 2008-12-7 20:31:47 | 顯示全部樓層
感謝大大提出修正~~~
再一次感受到大大精湛的分析能力

確實
含有"人性參數"的比喻
多半是不太恰當的~~~
發表於 2008-12-7 21:39:18 | 顯示全部樓層
小弟也還在學習,因為PID真的很抽像
我也還在學習如何可以用最簡單的文來表達這抽像的理論。
發表於 2008-12-7 22:40:50 | 顯示全部樓層
一切都是誤會啊~~ 

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

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

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

如果要講更深的控制我就不會了吧,
學校念的自動控制大概都還回去了~~
要再去翻書才行啊!!
nichal 該用戶已被刪除
 樓主| 發表於 2008-12-8 16:02:18 | 顯示全部樓層
別放在心上
大家都是在討論而已啦~~~
因為這裡叫"討論區"呀!!!
發表於 2012-5-30 19:26:19 | 顯示全部樓層
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 直看不太出來= =
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-3-29 00:34 , Processed in 0.184417 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表