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