Arduino PID自整定库
最近看到了Brett Beauregard發(fā)表的有關(guān)PID的系列文章,感覺對于理解PID算法很有幫助,于是將系列文章翻譯過來!在自我提高的過程中,也希望對同道中人有所幫助。作者Brett Beauregard的原文網(wǎng)址:http://brettbeauregard.com/blog/2012/01/arduino-pid-autotune-library/
?
最后,我發(fā)布了一個(gè)Autotune庫來補(bǔ)充Arduino PID庫。當(dāng)我發(fā)布當(dāng)前版本的PID庫時(shí),我發(fā)布了一系列異常廣泛的帖子,讓人們對里面發(fā)生的事情更易理解。
雖然沒有那么深入,但這是這個(gè)帖子的目標(biāo)。我將解釋 Autotune 庫想要完成的任務(wù),以及它是如何處理其業(yè)務(wù)的。
1、原由
幾年來,我一直想擁有一個(gè)自動(dòng)整定庫,但由于我與雇主的協(xié)議,我無法寫一個(gè)。但是!當(dāng)我找到由William Spinelli編寫的AutotunerPID工具箱時(shí),我已經(jīng)準(zhǔn)備好了;我的公司對我移植和擴(kuò)展現(xiàn)有的開源項(xiàng)目沒有任何問題。
我將代碼從 matlab 轉(zhuǎn)換過來,對峰值識別代碼進(jìn)行了一些調(diào)整,并將其從標(biāo)準(zhǔn)形式 (Kc、Ti、Td) 切換到理想形式 (Kp、Ki、Kd)。除此之外,所有的功勞都?xì)w斯皮內(nèi)利先生所有。
2、理論
PID 控制器的最佳整定參數(shù) (Kp、Ki、Kd) 將取決于該控制器的驅(qū)動(dòng)的是什么??鞠渥詈玫恼▍?shù)與低溫烹飪器具最好的整定參數(shù)是不同的。
自整定器試圖找出控制器驅(qū)動(dòng)的內(nèi)容的性質(zhì),然后從中進(jìn)行調(diào)整參數(shù)。有多種方法可以做到這一點(diǎn),但大多數(shù)方法都涉及到以某種方式更改 PID 輸出,然后觀察輸入的響應(yīng)方式。
庫中使用的方法稱為中繼方法。下面是它的工作原理:
從穩(wěn)態(tài)開始(輸入和輸出都是穩(wěn)態(tài)),輸出沿一個(gè)方向跨一定距離D階躍,當(dāng)輸入越過觸發(fā)線時(shí),輸出沿另一個(gè)方向跨距離D階躍。
通過分析峰值的距離以及峰值相對于輸出變化的大小,Autotuner 可以分辨出一種類型的過程和另一種類型的過程之間的區(qū)別。因此,不同的系統(tǒng)將獲得自定義調(diào)優(yōu)參數(shù):
3、實(shí)施情況
這在理論上效果很好,但現(xiàn)實(shí)世界的數(shù)據(jù)并不是很合作。輸入信號通常是嘈雜的,這會導(dǎo)致兩個(gè)主要問題。
3.1、問題 #1: 何時(shí)步進(jìn)?
由于噪聲信號是起伏的,當(dāng)輸入信號經(jīng)過觸發(fā)線時(shí),觸發(fā)線很可能會被交叉幾次。這可能會導(dǎo)致輸出中輕微的顫振,如果嚴(yán)重的話,可能會完全破壞:
我選擇回避此問題的方式是讓用戶指定噪聲帶。實(shí)際上,這將創(chuàng)建兩條觸發(fā)線。由于它們之間的距離等于噪音 (如果設(shè)置得當(dāng)),由于信號抖動(dòng)而發(fā)生多次交叉的可能性較小。
3.2、問題 #2:峰值識別
在模擬世界中,識別峰值很容易: 當(dāng)輸入信號改變方向時(shí),這是最小值或最大值 (取決于發(fā)生的更改)。但是,在嘈雜的世界中,此方法失敗:
每一個(gè)噪聲信號都是一個(gè)方向的改變。為了處理這個(gè)問題,我添加了一個(gè)“回溯時(shí)間”參數(shù)。這是一個(gè)糟糕的名字。如果你能想出更好的辦法,請告訴我。
無論如何,用戶定義了某個(gè)窗口,比如10秒。然后,庫將當(dāng)前點(diǎn)與最后十秒的數(shù)據(jù)進(jìn)行比較。如果它是最小值或最大值,則會將其標(biāo)記為可能的峰值。
當(dāng)標(biāo)記的點(diǎn)從最大值切換到最小值時(shí),反之亦然,以前標(biāo)記的點(diǎn)被確認(rèn)為峰值。
另一種解釋回溯時(shí)間的方法是,如果一個(gè)點(diǎn)是一個(gè)回溯未來或過去中最大 (或最小) 的值,則該點(diǎn)將被標(biāo)識為峰值。就像我說的:可怕的名字。
4、你也應(yīng)該知道..。
執(zhí)行的循環(huán)數(shù)將在3到10之間變化。該算法一直等到最后3個(gè)最大值彼此都在5%以內(nèi)。這是為了確保我們已經(jīng)達(dá)到了穩(wěn)定的振蕩并且沒有外部奇異現(xiàn)象發(fā)生。這讓我想到……
我不是Autotune的超級粉絲。我經(jīng)常說,而且仍然相信,一個(gè)受過中等訓(xùn)練的人會很容易戰(zhàn)勝自動(dòng)整定器。如果不清楚算法的話,很多地方會很容易出錯(cuò)。話雖如此,但 Autotune 是幫助新手進(jìn)入競技場的寶貴工具。
歡迎關(guān)注:
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Arduino PID自整定库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git commit 常用表情快速查询
- 下一篇: 格子里输出 java_蓝桥杯-格子中输出