目錄
一:前言
二:調(diào)參過程
三:總結(jié)
一:前言
發(fā)現(xiàn)少了一節(jié)調(diào)參,今天補上,關(guān)于這個項目先說兩句吧。
參數(shù)調(diào)節(jié)最好自己做個實物出來,慢慢調(diào)節(jié)。根據(jù)前面的PID理論部分的知識,慢慢體會一下各個參數(shù)在實際項目中的作用,這樣才能真正學(xué)會PID。
關(guān)于平衡小車這個項目到這應(yīng)該是最后一節(jié)教程了,后面會更新加入藍牙的代碼,有時間會畫一版PCB,直接引出引腳,模塊即插即用,比較方便。關(guān)于PCB教程就不出了,網(wǎng)上很多軟件學(xué)習(xí)的視頻,跟著畫個板子就行了。這也不涉及到高頻信號,所以比較簡單。
另外下一個項目準備繼續(xù)圍繞平衡小車,做一個遙控手柄。遙控手柄也是為了下下個項目做準備。
其他不多說,開始調(diào)參。
二:調(diào)參過程
首先單獨調(diào)節(jié)直立環(huán),直立環(huán)調(diào)完之后調(diào)節(jié)速度環(huán),最后轉(zhuǎn)向環(huán)。每一環(huán)調(diào)節(jié)都是先調(diào)P,把其他項系數(shù)設(shè)置為0,找到P參數(shù)的合適值之后再調(diào)節(jié)其他參數(shù)。
1.先確定機械中值,上節(jié)已說過:
測量機械中值的方法(手動):
關(guān)閉輸出,不讓電機旋轉(zhuǎn),只采集角度值,并顯示在屏幕上,觀察其值的變化
將oled和mpu6050都連接好并調(diào)試通過之后,將采樣的Pitch值顯示在oled上。之后讓小車輪子固定不動,用手沿電機旋轉(zhuǎn)方向先逆時針(順時針)慢慢推動小車上方,讓小車直立,當小車從直立狀態(tài)向逆時針方向傾斜時,看看屏幕上顯示的角度是多少,之后同樣的方法測順時針,看看角度是多少,之后兩值相加/2,得出的值就是機械中值。
2.直立環(huán)Kp:
作用:Kp增加回復(fù)力的響應(yīng)速度,Kp過小,響應(yīng)太慢,不能達到直立。Kp過大,會出現(xiàn)大幅度低頻振蕩。
只打開直立環(huán)輸出(調(diào)節(jié)直立環(huán)需要將其他環(huán)都屏蔽掉,單獨調(diào)節(jié)直立環(huán))如果用的我的程序,你可以這樣:
Balance_Pwm =balance(Pitch,gyroy); //===角度環(huán)//Velocity_Pwm=velocity(Encoder_Left,Encoder_Right); //===速度環(huán)PID控制 記住,速度反饋是正反饋,就是小車快的時候要慢下來就需要再跑快一點//Turn_Pwm =turn(Encoder_Left,Encoder_Right,gyroz); //===轉(zhuǎn)向環(huán)PID控制 PWM_out=Balance_Pwm - Balance_Kp*Velocity_Pwm;//最終輸出
1.先確定極性直立環(huán)極性很好確認,你只需要拿起小車觀察兩個輪子轉(zhuǎn)向,沿電機軸傾斜小車,如果輪子也往那個方向轉(zhuǎn),不讓小車倒下,說明極性是正確的,反之錯誤。
2.再確認大小Kp的值慢慢增大,直到小車左右擺動來回擺動,出現(xiàn)低頻震蕩(只有P參與作用時,擺動的頻率不大)。
注意:在調(diào)節(jié)直立環(huán)的時候如果你的編碼器反向或者是電機轉(zhuǎn)向和程序不匹配的話,可能會和上面說的情況不一致,比如一個電機正轉(zhuǎn)一個電機反轉(zhuǎn),這種情況一看就是電機方向和程序不一致,可以試試將控制正反轉(zhuǎn)的兩個引腳IN1和IN2調(diào)換下方向;蛘呤歉某绦蛑械腎N1和IN2的高低電平也行。如下圖:
/**************************************************************************函數(shù)功能:賦值給PWM寄存器入口參數(shù):左輪PWM、右輪PWM返回 值:無**************************************************************************/void Set_Pwm(int moto1,int moto2){ if(moto1>0) AIN2=0, AIN1=1; else AIN2=1, AIN1=0; PWMA=myabs(moto1); if(moto2>0) BIN1=1, BIN2=0; else BIN1=0, BIN2=1; PWMB=myabs(moto2); }
3.直立環(huán)Kd:
作用:Kd消除Kp過大帶來的低頻振蕩。Kd過大,會出現(xiàn)高頻抖動。
1.先確定極性將Kp = 0,調(diào)節(jié)Kd極性,提起小車觀察兩個輪子轉(zhuǎn)向,沿電機軸傾斜小車,輪子也往那個方向轉(zhuǎn),不讓小車倒下,說明極性是正確的,反之錯誤。
2.再確認大小調(diào)解大小時,需要加入剛才調(diào)好的Kp值,之后將Kd的值慢慢增大,直到小車左右擺動來回擺動,出現(xiàn)高頻震蕩(擺動的頻率相比Kp有所增加)。
為什么加了Kd之后震蕩頻率變高?
可以參考第10小節(jié)加入和未加入kd調(diào)參的現(xiàn)象,加入Kd后,明顯過沖變小。因為Kd有抑制作用,會抑制占空比的增長,使得曲線在目標值附近震蕩。所以抖動頻率增加。
上面兩個調(diào)試的參數(shù)都是其最大值,在實際應(yīng)用當中不使用最大值,而是乘上一個系數(shù)。兩個參數(shù)都調(diào)試完后,讓其乘以0.6作為最終參數(shù)。該值為經(jīng)驗值,可根據(jù)實際效果做變更。至此直立環(huán)調(diào)節(jié)完畢。有些小車如果各方面參數(shù)都比較好的話,到這就能直立了,不過大部分不能直立,會出現(xiàn)小車沿一個方向加速倒下的現(xiàn)象,等加入速度環(huán)就好了。出現(xiàn)這一現(xiàn)象的原因有很多,比如機械結(jié)構(gòu)不行又或者是參數(shù)沒調(diào)好,再或者電機間隙大等等。主要還是理論和實際的差距,理論上參數(shù)都是完美的,實際上參數(shù)是沒有完美的。
4.速度環(huán)Kp、Ki:
1.先確定極性在調(diào)節(jié)速度環(huán)極性時,先將其他環(huán)都屏蔽掉。調(diào)節(jié)速度環(huán)時,只需轉(zhuǎn)動其中一個輪子,兩個輪子就會同方向加速至最大。如果不是上述現(xiàn)象,則調(diào)節(jié)Kp極性。調(diào)節(jié)之后還不行,就要檢查程序和硬件接線是否一致了。這里在強調(diào)下,極性確認這個環(huán)節(jié)一定要把正確的現(xiàn)象調(diào)出來,如果發(fā)現(xiàn)現(xiàn)象不一致,很大可能就是程序和硬件不一致。2.再確認大小確認大小時,將調(diào)好的直立環(huán)加入進來。并且同時打開速度環(huán)的Kp和Ki,Kp = 200ki,這個關(guān)系是一個經(jīng)驗值。所以調(diào)節(jié)一個Kp即可。調(diào)節(jié)大小時,使得小車保持平衡的同時,速度接近于零即可。當然這是理想情況下才能完全靜止,一般情況只要小車不倒,并且擺動幅度不大就已經(jīng)可以了。因為電機存在死區(qū),機械結(jié)構(gòu)也有很大影響。
調(diào)節(jié)到這里基本已經(jīng)能夠使小車直立不倒了。
5.轉(zhuǎn)向環(huán)Kd:
1.先確定極性調(diào)節(jié)轉(zhuǎn)向環(huán)時,將其他兩個環(huán)屏蔽掉,調(diào)節(jié)時推動小車沿Z軸旋轉(zhuǎn),如果電機會阻礙小車旋轉(zhuǎn)說明極性是正確的,反之錯誤。2.再確認大小調(diào)節(jié)大小時讓小車走直線效果較好,且無劇烈抖動即可。
三:總結(jié)
至此,零基礎(chǔ)制作平衡小車連載教程更新完畢。和我一起制作的小伙伴們應(yīng)該收獲也不小吧。第一篇文章是6月底開始的,截止到目前剛好4個月,時間也蠻長的。后面的項目盡量縮短時間吧。
|