標(biāo)題: 零基礎(chǔ)制作平衡小車(chē)【連載】10---PID調(diào)參 [打印本頁(yè)]

作者: 自動(dòng)化工程師    時(shí)間: 2020-12-17 22:03
標(biāo)題: 零基礎(chǔ)制作平衡小車(chē)【連載】10---PID調(diào)參
貼個(gè)原文鏈接:

https://blog.csdn.net/D_SEngineer?spm=1011.2124.3001.5113

不定時(shí)發(fā)送福利,歡迎小伙伴們交流學(xué)習(xí)。

PID實(shí)戰(zhàn)也已經(jīng)結(jié)束了,基本上也算上是一個(gè)小項(xiàng)目了完成了,既然完成了,這篇就來(lái)做個(gè)總結(jié)一下吧。

網(wǎng)上很多關(guān)于PID調(diào)參的文檔,基本都是理論,也沒(méi)有圖片說(shuō)明,這對(duì)于小白入門(mén)來(lái)說(shuō)很是頭疼。別人的理論咱都看的懂,一到自己就懵逼。為了解決這一問(wèn)題,我把程序源碼放到公眾號(hào)了,你可下載下來(lái),在結(jié)合我這片文檔說(shuō)明,自己動(dòng)手實(shí)踐一下。自己不實(shí)踐,心里總是沒(méi)底,只有自己體會(huì)一下,才能真正弄明白。

PID調(diào)參

首先說(shuō)說(shuō)調(diào)參吧,關(guān)于PID調(diào)參,我用一句話總結(jié)一下:跟著感覺(jué)走。

為啥要這樣說(shuō)呢,因?yàn)閷?duì)于初學(xué)者來(lái)說(shuō),只是寫(xiě)個(gè)程序,然后用試湊法進(jìn)行匹配PID三個(gè)系數(shù),以此來(lái)達(dá)到較好的控制效果。試湊法是什么,不就是跟著感覺(jué)走嘛,這種感覺(jué)就跟寫(xiě)英語(yǔ)試卷一樣。

不過(guò)話又說(shuō)過(guò)來(lái),這個(gè)感覺(jué)可不是隨心所欲,為所欲為的,這也是有一定理論基礎(chǔ)支撐的。一般調(diào)節(jié)方法我做個(gè)總結(jié),如下:

1.先調(diào)節(jié)P項(xiàng),其他項(xiàng)系數(shù)都設(shè)為0

這個(gè)P項(xiàng)怎么調(diào)呢?再調(diào)之前我們先回憶一下【連載6】講的內(nèi)容,P到底有什么用。首先看下單獨(dú)P項(xiàng)的公式:

OUTp= K*EkOUTp= 系數(shù)*(設(shè)定值 - 當(dāng)前采樣值)

Ek為當(dāng)前誤差。

以我們實(shí)戰(zhàn)的例子來(lái)講,假設(shè)我們?cè)O(shè)定的目標(biāo)值為100,我們此刻采樣的編碼器的值為50,此時(shí)PID中I和D的系數(shù)都為0,也就說(shuō)后面兩項(xiàng)不用管,只關(guān)心P項(xiàng)就行了。而P項(xiàng)公式是當(dāng)前誤差乘上一個(gè)系數(shù),這個(gè)系數(shù)就是我們要設(shè)定的P項(xiàng)系數(shù),那么我們是不是應(yīng)該將P盡可能的大,因?yàn)槲覀冃枰到y(tǒng)盡快的達(dá)到設(shè)定值,根據(jù)這個(gè)思路我們先將P設(shè)定為0.5,先試試效果。

當(dāng)P = 0.5時(shí),實(shí)際效果如下圖:

圖片上的點(diǎn)點(diǎn)是實(shí)際采樣的編碼器脈沖數(shù),橫線是我們?cè)O(shè)定的目標(biāo)值。

看看點(diǎn)點(diǎn)形成的拋物線,雖然能達(dá)到目標(biāo)值,但是時(shí)間有點(diǎn)長(zhǎng),這個(gè)效果不是最好的,當(dāng)然這個(gè)也不是絕對(duì)的,有些系統(tǒng)是需要慢慢接近目標(biāo)值的,要看系統(tǒng)要求。這里我們控制轉(zhuǎn)速,目的是讓轉(zhuǎn)速盡可能快的接近目標(biāo)值,因此我們?cè)诩哟驪項(xiàng)試試。

當(dāng)P = 1時(shí),實(shí)際效果如下圖:


相比上面那張圖片是不是明顯更快的接近目標(biāo)值了,拋物線更陡了,說(shuō)明速度更快了。一般情況下,我們單獨(dú)調(diào)節(jié)P時(shí)要將實(shí)際采樣值超過(guò)目標(biāo)值的百分之30-50左右,那么我們?cè)囋噷設(shè)為5

當(dāng)P = 5時(shí),感覺(jué)還不錯(cuò),抖個(gè)兩三下就可以達(dá)到很好地效果了,實(shí)際效果如下圖:


2.在P = 5的基礎(chǔ)上,調(diào)節(jié)I

你會(huì)發(fā)現(xiàn),只有一個(gè)P就能達(dá)到幾乎無(wú)靜態(tài)誤差的效果,原因是程序中采集完編碼器值代入pid計(jì)算,計(jì)算完會(huì)得出一個(gè)增量值,之后用之前的pwm加上計(jì)算之后的增量值,如果這次剛好沒(méi)誤差,pwm會(huì)保持上一次的值。不過(guò)加上I你會(huì)發(fā)現(xiàn),不僅速度變快了,而且過(guò)沖變小。

當(dāng)I = 1時(shí),實(shí)際效果如下圖:效果是不是特別好,迅速達(dá)到目標(biāo)值穩(wěn)定下來(lái)。相比剛才沒(méi)有I的時(shí)候,過(guò)沖是不是變小了。這種效果基本上已經(jīng)算的上是完美了、

當(dāng)I = 2時(shí),實(shí)際效果如下圖:I的抑制太大當(dāng)I = 0.05時(shí),實(shí)際效果如下圖:I的抑制太小


其實(shí)就本系統(tǒng)而言,已經(jīng)不需要D了,目前P=5,I=1時(shí)效果就已經(jīng)很不錯(cuò)了。不過(guò)既然是學(xué)習(xí),就把每一個(gè)參數(shù)都演示一下,看看到底都是起到什么作用,和我們前面說(shuō)的理論是否一致。

3.在P = 5,I = 0.05的基礎(chǔ)上,調(diào)節(jié)D選擇I=0.05是為了讓系統(tǒng)繼續(xù)有個(gè)過(guò)沖,因?yàn)镈是起到預(yù)判作用的,會(huì)削弱增長(zhǎng)的速度,如果I=1,在加上D,系統(tǒng)的增長(zhǎng)速度就慢了。

當(dāng)D = -0.05時(shí),實(shí)際效果如下圖:

當(dāng)D=-1時(shí),效果如下圖:你會(huì)發(fā)現(xiàn)D越大,回彈的力度就越大,系統(tǒng)震蕩時(shí)間變長(zhǎng)。這是積分作用時(shí)間長(zhǎng)造成的。微分過(guò)大,造成阻尼過(guò)大,積分面積就過(guò)大,造成超調(diào)。 在沒(méi)達(dá)到目標(biāo)值前,積分都是正的,越接近目標(biāo)值,pd作用越小,而積分卻累積了很大。第一次超調(diào)之后積分才慢慢可以和負(fù)的抵消。最后慢慢接近目標(biāo)值。


最終確定P=5,I=0.05,D=-0.05。

這就是整個(gè)PID調(diào)參過(guò)程。

總結(jié)

    P的作用是將系統(tǒng)盡可能快的接近目標(biāo)值,在調(diào)參的時(shí)候,先將ID設(shè)為0,之后將系統(tǒng)調(diào)節(jié)至超調(diào)量為目標(biāo)值的50%左右,通俗的講就是將系統(tǒng)超過(guò)目標(biāo)值一些。
    I的作用是消除靜態(tài)誤差
    D的作用也是阻尼,當(dāng)Kd越大,你會(huì)發(fā)現(xiàn)震蕩越嚴(yán)重,就像一個(gè)彈簧,你往外拉的力越大,彈簧反彈的力越大


其實(shí)光看是不行的,只有自己親自調(diào)試一遍,心里才有譜。




作者: Highnose    時(shí)間: 2020-12-18 21:30
這么好的事例貼,必須得頂哇




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1