【平衡小車(chē)】【串級(jí)PID參數(shù)整定】【詳細(xì)版】根據(jù)現(xiàn)象手動(dòng)調(diào)整平衡小車(chē)的PID
簡(jiǎn)介:二輪平衡小車(chē)的控制分為平衡環(huán)(又稱為直立環(huán),保持穩(wěn)定角度)、速度環(huán)(用來(lái)保持穩(wěn)定時(shí)速度為零)以及轉(zhuǎn)向環(huán)(用來(lái)無(wú)轉(zhuǎn)向命令時(shí)調(diào)整走直線),下面詳細(xì)介紹各環(huán)PID參數(shù)的整定
硬件準(zhǔn)備:平衡小車(chē)之家的小車(chē)底盤(pán),STM32F1,電機(jī)驅(qū)動(dòng)模塊,MPU6050等
軟件準(zhǔn)備:簡(jiǎn)化后的平衡小車(chē)代碼(關(guān)閉了藍(lán)牙功能等),上位機(jī)示波器(觀察角度)
一、直立環(huán)PID
直立環(huán)是為了保持平衡小車(chē)維持在機(jī)械中值,先插入機(jī)械中值的確定:
根據(jù)每個(gè)人搭建的平衡小車(chē)不同,小車(chē)的物理參數(shù)(如重心、質(zhì)量)也會(huì)變化,確定機(jī)械中值是,先將小車(chē)從后往前仰
直到小車(chē)到達(dá)臨界狀態(tài)恰好向前傾倒,記錄此時(shí)角度值1(通過(guò)OLED或者串口顯示出來(lái),這里我用的是串口顯示)
同理反向操作一遍(從前往后傾倒)得到臨界角度值2,取二者平均值記為中值
由于小車(chē)直立環(huán)更需要超前調(diào)節(jié)(D),而不太需要彌補(bǔ)性質(zhì)的積分調(diào)節(jié)(I),所以大多直立環(huán)都是PD控制,關(guān)于P的確定:
首先確定P的極性,也就是P參數(shù)在你的控制函數(shù)里的正負(fù):清零其他參數(shù),設(shè)置P=+1,如果向前傾,車(chē)輪前轉(zhuǎn),則極性正確,反之錯(cuò)誤(車(chē)輪需要向前傾的方向轉(zhuǎn)動(dòng)以達(dá)到矯正的目的,即平衡)
然后確定P的大小,清零其他PID參數(shù),將P從小到大逐漸增大,當(dāng)出現(xiàn)小車(chē)無(wú)大幅晃動(dòng)的情況(可以比較好的矯正角度偏差),到達(dá)第一檔,說(shuō)明你的P已經(jīng)在一個(gè)良好的適合調(diào)節(jié)的范圍,繼續(xù)增大P,中間可能出現(xiàn)更好的更穩(wěn)定的現(xiàn)象,但不要停止增大參數(shù)(因?yàn)槟悴恢雷詈玫拈撝翟谀睦铮?,最終目標(biāo)是增大到小車(chē)出現(xiàn)大幅低頻抖動(dòng),此時(shí)我的Kp=550
接下來(lái)確定Kd,關(guān)于直立環(huán)D的確定:
也是先確定極性,清空之前設(shè)置的Kp及其他PID參數(shù)(單一變量),設(shè)置Kd=+0.5,Kd極性正確的現(xiàn)象與Kp一致,都是向哪里傾倒就像哪里轉(zhuǎn)動(dòng)。
接下來(lái)確定大小,此時(shí)恢復(fù)之前設(shè)置的Kp=550,從小到大設(shè)置Kd,直到出現(xiàn)高頻率的震蕩(此時(shí)有較強(qiáng)的抗干擾性,且小車(chē)極容易觸發(fā)高頻震蕩,找到該參數(shù)時(shí)請(qǐng)及時(shí)關(guān)閉電機(jī)以防止電機(jī)損壞)可以看出此時(shí)的晃動(dòng)幅度被抑制,但是晃動(dòng)頻率變高
我得到的Kd=2.5,根據(jù)工程經(jīng)驗(yàn),將得到的Kp、Kd都乘以0.6,得到最終直立環(huán)的PD參數(shù)330、1.5
二、速度環(huán)PID
速度環(huán)是PI控制,速度環(huán)為了能保證穩(wěn)定時(shí)候速度為0,防止出現(xiàn)小車(chē)為了保持固定角度一直前進(jìn)的情況,更多的需要積分控制,速度環(huán)的變量是輪的速度,對(duì)其進(jìn)行積分可以讓滯后調(diào)節(jié)進(jìn)行反作用,比如小車(chē)前行了一段距離,會(huì)被積分記住,然后讓小車(chē)返回該段距離,這里有一個(gè)平衡小車(chē)的工程經(jīng)驗(yàn):Pi=(1/200)*Kp
,所以我們只需確定Kp即可,關(guān)于Kp的確定
還是老樣子,先確定Kp的極性,此時(shí)根據(jù)單一變量原則,我們需要注釋掉直立環(huán)和轉(zhuǎn)向環(huán)的代碼//Balance_Pwm =balance(Angle_Balance,Gyro_Balance); Velocity_Pwm=velocity(Encoder_Left,Encoder_Right); //Turn_Pwm =turn(Encoder_Left,Encoder_Right,Gyro_Turn);
然后要想知道速度環(huán)Kp的極性,就要知道我們的輪子轉(zhuǎn)向是負(fù)反饋還是正反饋,一些文章里說(shuō)速度環(huán)需要的是正反饋,卻沒(méi)有細(xì)說(shuō)原因是什么。原因是:小車(chē)的平衡以直立環(huán)為主,速度環(huán)為輔,當(dāng)小車(chē)有向前的速度是,主導(dǎo)因素當(dāng)然是因?yàn)樾≤?chē)在向前傾,直立環(huán)使其產(chǎn)生向前的速度,這個(gè)時(shí)候如果想恢復(fù)到速度為0,就需要添加更大的底盤(pán)速度使小車(chē)擺正,正因如此,當(dāng)我們模擬轉(zhuǎn)動(dòng)小車(chē)的輪子時(shí),正確的極性應(yīng)該使得小車(chē)輪子繼續(xù)沿我們剛才轉(zhuǎn)動(dòng)的方向旋轉(zhuǎn)直到最大轉(zhuǎn)速(因?yàn)槟汴P(guān)閉了直立環(huán)調(diào)節(jié)極性時(shí),速度環(huán)一直檢測(cè)不到速度為0的狀態(tài),他就會(huì)很奇怪,以為自己的速度不夠大沒(méi)有使得小車(chē)回正,就一直加速)。
說(shuō)了這么多,結(jié)論就是:轉(zhuǎn)動(dòng)小車(chē)的某一輪胎,小車(chē)自動(dòng)沿著你轉(zhuǎn)動(dòng)的方向繼續(xù)轉(zhuǎn)動(dòng),則極性正確,否則極性錯(cuò)誤
如果你沒(méi)有出現(xiàn)極性正確或者錯(cuò)誤的現(xiàn)象,而是兩輪速度逐漸趨于0(濾波的作用),或者速度維持不變,那你要注意,很可能是你的編碼器相位接錯(cuò)了導(dǎo)致兩輪速度做和等于0文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-437008.html
然后我們來(lái)確定Kp的大小
目標(biāo)達(dá)到的條件:小車(chē)保持平衡的同時(shí),速度接近0,若有輕微跑動(dòng)可以回到原來(lái)的位置
記得之前注釋掉了直立環(huán)嗎,現(xiàn)在我們重新開(kāi)啟直立環(huán),選一個(gè)量級(jí)(比如1,10,100)調(diào)節(jié)速度環(huán)Kp,我選擇10量級(jí),Ki由Kp確定(如上文所述)。調(diào)節(jié)過(guò)程中,
當(dāng)Kp還沒(méi)有足夠大時(shí),現(xiàn)象是小車(chē)已經(jīng)可以保持角度穩(wěn)定,但小車(chē)無(wú)法控制在一個(gè)搖擺范圍內(nèi)運(yùn)動(dòng),仍然會(huì)直線沖刺,此時(shí)繼續(xù)增大Kp&Ki
直到小車(chē)穩(wěn)定在小幅空間及角度范圍內(nèi)搖擺晃動(dòng),效果最好
當(dāng)然此時(shí)如果你繼續(xù)增大可能會(huì)使積分作用大于直立環(huán)作用,現(xiàn)象是小車(chē)向某一方向沖刺或者震蕩,如果你在上一步找到了穩(wěn)定的Kp和Ki的值之后發(fā)現(xiàn)小車(chē)平衡能力雖然有,但抗干擾能力不強(qiáng)的話,你可以略增大Ki,同時(shí)震蕩出現(xiàn),調(diào)節(jié)直立環(huán)Kd使得震蕩消除,也許可以提高小車(chē)抗性.
調(diào)整結(jié)束后,小車(chē)成功平衡
當(dāng)然到此為止,小車(chē)往返的路程里可能會(huì)不走直線(由于物理機(jī)械原因或者原地抖動(dòng)時(shí)摩擦地面轉(zhuǎn)向),這一點(diǎn)可能會(huì)按需求來(lái),
,有的人認(rèn)為僅平衡時(shí)也需要轉(zhuǎn)向環(huán)的作用,但轉(zhuǎn)向環(huán)更主要的作用是可以在之后命令控制時(shí)起到穩(wěn)定作用
三、轉(zhuǎn)向環(huán)
要了解轉(zhuǎn)向環(huán)的參數(shù)極性以及PID設(shè)置,就要直到轉(zhuǎn)向環(huán)所起的作用。我們希望轉(zhuǎn)向環(huán)能在我們下達(dá)轉(zhuǎn)向命令時(shí)加速(幫助)轉(zhuǎn)向進(jìn)程,并且有的人希望能在無(wú)命令時(shí)保持直線位姿,由此分析得到,if語(yǔ)句判斷后,普通的維持平衡的轉(zhuǎn)向只需要Kp比例調(diào)節(jié)即可滿足需求(變量為z軸陀螺儀的值,但我覺(jué)得也可以嘗試一下兩輪的編碼器差值?)轉(zhuǎn)向時(shí)用到的則是PD超前調(diào)節(jié)。
平衡時(shí)的Kp極性:注釋其他代碼后,拿起小車(chē)?yán)@z軸旋轉(zhuǎn),兩輪轉(zhuǎn)向與人為的轉(zhuǎn)向相反,極性正確
平衡時(shí)的Kp大小設(shè)置:從小到大嘗試,過(guò)小無(wú)明顯作用,過(guò)大造成車(chē)體抖動(dòng)(也可以在平衡時(shí)不設(shè)置)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-437008.html
到了這里,關(guān)于【平衡小車(chē)】【串級(jí)PID參數(shù)整定】【詳細(xì)版】根據(jù)現(xiàn)象手動(dòng)調(diào)整平衡小車(chē)的PID的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!