日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

改进初学者的PID-介绍

發(fā)布時間:2024/7/23 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 改进初学者的PID-介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近看到了Brett Beauregard發(fā)表的有關(guān)PID的系列文章,感覺對于理解PID算法很有幫助,于是將系列文章翻譯過來!在自我提高的過程中,也希望對同道中人有所幫助。作者Brett Beauregard的原文網(wǎng)址:http//brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/

?

結(jié)合新的Arduino PID庫的發(fā)布,我決定發(fā)布這一系列帖子。最后一個庫雖然穩(wěn)定,但并沒有真正提供任何代碼解釋。這次計劃的目的是詳細(xì)解釋為什么代碼是這樣的。我希望這對兩類人有用:

  • 直接對Arduino PID庫中發(fā)生的事情感興趣的人將得到詳細(xì)的解釋。
  • 任何編寫自己的PID算法的人都可以看看我是如何做的,并借鑒他們喜歡的東西。

這將是一個艱難的過程,但我認(rèn)為我找到了解釋我的代碼的一個不太痛苦的方法。我將從我稱之為“初學(xué)者的PID”開始。然后我將逐步改進(jìn)它,直到我們留下一個高效,強(qiáng)大的pid算法。

初學(xué)者的PID

這是每個人第一次學(xué)習(xí)它時接觸的PID方程式:

這導(dǎo)致幾乎每個人都編寫以下PID控制器:

/*working variables*/ unsigned long lastTime; double Input,Output,Setpoint; double errSum,lastErr; double kp,ki,kd; void Compute() {/*How long since we last calculated*/unsigned long now = millis();double timeChange = (double)(now - lastTime);/*Compute all the working error variables*/double error = Setpoint - Input;errSum += (error * timeChange);double dErr = (error - lastErr) / timeChange;/*Compute PID Output*/Output = kp * error + ki * errSum + kd * dErr;/*Remember some variables for next time*/lastErr = error; lastTime = now; }void SetTunings(double Kp,double Ki,double Kd) {kp = Kp;ki = Ki;kd = Kd; }

Compute()被定期或不定期地調(diào)用,并且它運行良好。不過,這樣的PID并不是“非常好用”。如果我們要將此代碼轉(zhuǎn)換為與工業(yè)PID控制器相同的代碼,我們將不得不解決以下問題:

?

1、采樣時間—如果以固定間隔評估PID算法,則該算法的運行效果最佳。如果算法知道這個間隔,我們也可以簡化一些內(nèi)部的數(shù)學(xué)計算。

2、微分沖擊—這雖然不是最重要的,但很容易處理,所以我們就先處理它。

3、改變整定參數(shù)—一個好的PID算法是可以在不影響內(nèi)部工作的情況下改變整定參數(shù)的算法。

4、積分飽和—我們將討論積分飽和,并實現(xiàn)一個很好的解決方案。

5、開/關(guān)(自動/手動)—在大多數(shù)應(yīng)用中,有時需要關(guān)閉PID控制器并手動調(diào)節(jié)輸出,而不會影響控制器。

6、初始化—當(dāng)控制器第一次打開時,我們想要一個“無擾動切換”。也就是說,我們不希望輸出突然變成一些新值。

7、正反作用—最后一種方法,并且不改變系統(tǒng)的魯棒性和名稱。它旨在確保用戶使用正確的符號輸入調(diào)整參數(shù)。

8、新:測量的比例—添加此功能可以更輕松地控制某些類型的過程。

一旦我們解決了所有這些問題,我們就會擁有一個可靠的PID算法。我們還將獲得Arduino PID庫最新版本中使用的代碼,這并非巧合。因此,無論您是嘗試編寫自己的算法,還是試圖了解PID庫中的內(nèi)容,我希望這可以幫助您解決問題。讓我們開始吧。

更新:在所有代碼示例中,我使用的是雙精度。在Arduino上,double與float相同(單精度。)真雙精度對于PID來說可能會成為累贅。如果您使用的語言確實是雙精度,我建議將所有雙精度更改為浮點數(shù)。

歡迎關(guān)注:

總結(jié)

以上是生活随笔為你收集整理的改进初学者的PID-介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。