貼個原文鏈接:
https://blog.csdn.net/D_SEngineer?spm=1011.2124.3001.5113
不定時發送福利,歡迎小伙伴們交流學習。
PID實戰也已經結束了,基本上也算上是一個小項目了完成了,既然完成了,這篇就來做個總結一下吧。
網上很多關于PID調參的文檔,基本都是理論,也沒有圖片說明,這對于小白入門來說很是頭疼。別人的理論咱都看的懂,一到自己就懵逼。為了解決這一問題,我把程序源碼放到公眾號了,你可下載下來,在結合我這片文檔說明,自己動手實踐一下。自己不實踐,心里總是沒底,只有自己體會一下,才能真正弄明白。
PID調參
首先說說調參吧,關于PID調參,我用一句話總結一下:跟著感覺走。
為啥要這樣說呢,因為對于初學者來說,只是寫個程序,然后用試湊法進行匹配PID三個系數,以此來達到較好的控制效果。試湊法是什么,不就是跟著感覺走嘛,這種感覺就跟寫英語試卷一樣。
不過話又說過來,這個感覺可不是隨心所欲,為所欲為的,這也是有一定理論基礎支撐的。一般調節方法我做個總結,如下:
1.先調節P項,其他項系數都設為0
這個P項怎么調呢?再調之前我們先回憶一下【連載6】講的內容,P到底有什么用。首先看下單獨P項的公式:
OUTp= K*EkOUTp= 系數*(設定值 - 當前采樣值)
Ek為當前誤差。
以我們實戰的例子來講,假設我們設定的目標值為100,我們此刻采樣的編碼器的值為50,此時PID中I和D的系數都為0,也就說后面兩項不用管,只關心P項就行了。而P項公式是當前誤差乘上一個系數,這個系數就是我們要設定的P項系數,那么我們是不是應該將P盡可能的大,因為我們需要系統盡快的達到設定值,根據這個思路我們先將P設定為0.5,先試試效果。
當P = 0.5時,實際效果如下圖:
圖片上的點點是實際采樣的編碼器脈沖數,橫線是我們設定的目標值。
看看點點形成的拋物線,雖然能達到目標值,但是時間有點長,這個效果不是最好的,當然這個也不是絕對的,有些系統是需要慢慢接近目標值的,要看系統要求。這里我們控制轉速,目的是讓轉速盡可能快的接近目標值,因此我們在加大P項試試。
當P = 1時,實際效果如下圖:
相比上面那張圖片是不是明顯更快的接近目標值了,拋物線更陡了,說明速度更快了。一般情況下,我們單獨調節P時要將實際采樣值超過目標值的百分之30-50左右,那么我們試試將P設為5
當P = 5時,感覺還不錯,抖個兩三下就可以達到很好地效果了,實際效果如下圖:
2.在P = 5的基礎上,調節I
你會發現,只有一個P就能達到幾乎無靜態誤差的效果,原因是程序中采集完編碼器值代入pid計算,計算完會得出一個增量值,之后用之前的pwm加上計算之后的增量值,如果這次剛好沒誤差,pwm會保持上一次的值。不過加上I你會發現,不僅速度變快了,而且過沖變小。
當I = 1時,實際效果如下圖:效果是不是特別好,迅速達到目標值穩定下來。相比剛才沒有I的時候,過沖是不是變小了。這種效果基本上已經算的上是完美了、
當I = 2時,實際效果如下圖:I的抑制太大當I = 0.05時,實際效果如下圖:I的抑制太小
其實就本系統而言,已經不需要D了,目前P=5,I=1時效果就已經很不錯了。不過既然是學習,就把每一個參數都演示一下,看看到底都是起到什么作用,和我們前面說的理論是否一致。
3.在P = 5,I = 0.05的基礎上,調節D選擇I=0.05是為了讓系統繼續有個過沖,因為D是起到預判作用的,會削弱增長的速度,如果I=1,在加上D,系統的增長速度就慢了。
當D = -0.05時,實際效果如下圖:
當D=-1時,效果如下圖:你會發現D越大,回彈的力度就越大,系統震蕩時間變長。這是積分作用時間長造成的。微分過大,造成阻尼過大,積分面積就過大,造成超調。 在沒達到目標值前,積分都是正的,越接近目標值,pd作用越小,而積分卻累積了很大。第一次超調之后積分才慢慢可以和負的抵消。最后慢慢接近目標值。
最終確定P=5,I=0.05,D=-0.05。
這就是整個PID調參過程。
總結
P的作用是將系統盡可能快的接近目標值,在調參的時候,先將ID設為0,之后將系統調節至超調量為目標值的50%左右,通俗的講就是將系統超過目標值一些。
I的作用是消除靜態誤差
D的作用也是阻尼,當Kd越大,你會發現震蕩越嚴重,就像一個彈簧,你往外拉的力越大,彈簧反彈的力越大
其實光看是不行的,只有自己親自調試一遍,心里才有譜。
|