|
基于Arduino+MPU6050+Tp-link 703n平衡小車(chē)現(xiàn)已完美站立,分享一下制作經(jīng)驗(yàn)和方法
希望版主申精。。�?梢砸鸫蠹易⒁�。。。
基于工坊目前還沒(méi)有一個(gè)帖子能很完整的介紹平衡小車(chē)的制作思路以及制作方案,借此機(jī)會(huì)我將制作成功后的經(jīng)驗(yàn)分享給大家,由于該課題涉及到我們項(xiàng)目的部分,請(qǐng)?jiān)试S我現(xiàn)在不能公開(kāi),但思路和方案我是可以告訴大家的。我希望能給一群愛(ài)學(xué)的同學(xué)們,鐘愛(ài)電子制作的朋友們提供一點(diǎn)幫助,也算是我一年來(lái)在該論壇學(xué)到很多知識(shí)的回報(bào)吧。
希望各位懂行的高手不要嘲笑我的無(wú)知,更希望你們看了以后,能夠多給我提供一些建議和更好的思路,總之,但愿我們能共同進(jìn)步,或是說(shuō)能有機(jī)會(huì)合作,那是理想的狀態(tài)了。其他的話我就不多說(shuō)了,我先給大家上圖片和視頻。
225922b2rk29w5rx5fhzlp.png (425.04 KB, 下載次數(shù): 178)
下載附件
2016-4-10 01:51 上傳
馬上熄燈了,持續(xù)更新中。。。。
2014-3-21 星期五
今天繼續(xù)。。。
應(yīng)大家要求先介紹元件清單:
【元件清單】
- 1.串口MPU6050模塊。(特別注意,是串口MPU6050模塊,不是普通的6050,串口6050只是不需要你自己濾波了,如果你想嘗試一下,也未必不可,但我不推薦新手嘗試Kalman)
- 2.Tp-link-wr703n(官方標(biāo)配,刷進(jìn)去Openwrt系統(tǒng),同時(shí)可以無(wú)線更新程序,掛載攝像頭等等)
- 3.Arduino MEGA 2560 r3 (這個(gè)單片機(jī)做平衡車(chē)足矣,當(dāng)時(shí)懷疑他不能勝任)
- 4.L298n(最好是用帶光耦的驅(qū)動(dòng),不帶光耦也行,我的就沒(méi)帶光耦,害怕信號(hào)干擾就帶上光耦)
- 5.電機(jī)是直流減速電機(jī)帶碼盤(pán)(扭矩最好是能大一點(diǎn),我推薦德國(guó)空心杯電機(jī),當(dāng)然我用的不是空心杯,下一版一定會(huì)用)
- 6.OLED12864 LED屏幕(我就不多說(shuō)了,等到車(chē)很平穩(wěn)了,你愛(ài)怎么擴(kuò)展都行)
- 7.小車(chē)輪子(最好是大一點(diǎn),輪子要用硬橡膠的,我現(xiàn)在這個(gè)輪胎是軟的,摩擦力太大,下版本就換掉)
- 8.電池3節(jié)18650,帶上電池盒OK
- 9.穩(wěn)壓模塊(我個(gè)人認(rèn)為不能把所有的需要5v供電的傳感器都從單片機(jī)供電,單片機(jī)提供電流是有限的,可能會(huì)造成單片機(jī)死機(jī)的情況,因此我就外接一個(gè)穩(wěn)壓模塊給這一群傳感器供電,一定要注意穩(wěn)壓模塊的輸出的負(fù)極要和單片機(jī)共地。)
- 10.遙控器就是安卓手機(jī)了(這個(gè)就不多說(shuō)了,有興趣的我會(huì)發(fā)關(guān)于Openwrt的相關(guān)教程,這里說(shuō)就有點(diǎn)跑題了)
注釋?zhuān)涸瓦@么多了,其實(shí)也沒(méi)有什么,重要的是控制思路,和控制算法。如果大家對(duì)硬件還有疑問(wèn)就提出來(lái),今天就講到這里,學(xué)校的事情太多了,又要開(kāi)會(huì),各位不好意思。。。補(bǔ)充幾句,一定要好好看我括號(hào)里面補(bǔ)充的內(nèi)容,很重要,有可能就是由于這些問(wèn)題導(dǎo)致你很久都不能把小車(chē)調(diào)起來(lái)的,再上一張圖片。。。
092621bbdhppfdg5uc9qhn.png (439.45 KB, 下載次數(shù): 198)
下載附件
2016-4-10 01:51 上傳
繼續(xù)更新。。。
【控制算法】
1.PID(如此經(jīng)典的算法,你能不用嗎,尤其是學(xué)習(xí)自控原理的同學(xué))
Pwm_out = Kap*Angle[0] + Kad*w[0] + Ksp*speeds_filter + Ksi*positions ; //PID控制器
注釋?zhuān)?/strong>
- Angle[0]表示x軸的角度量,單位是(角度);
- w[0]表示x軸的角速度,單位是(角度/秒);
- speeds_filter表示車(chē)輪速度,程序中以單位時(shí)間碼盤(pán)的格數(shù)代替;
- positions表示位置,是速度對(duì)時(shí)間的積分。
角度用PD,位置用PI非常簡(jiǎn)單,雙閉環(huán)控制,我的控制器就這么簡(jiǎn)單一句話,別以為算法是多么高深的東西,我給你說(shuō)一下原理,看圖:
100311p5xtt5h5h18gpg3v.png (16.03 KB, 下載次數(shù): 183)
下載附件
2016-4-10 01:51 上傳
【平衡車(chē)模型】
131207rw5qld6njjq584r5.png (23.08 KB, 下載次數(shù): 198)
下載附件
2016-4-10 01:51 上傳
131208mgbv5f48xxv4i5mf.png (49.48 KB, 下載次數(shù): 206)
下載附件
2016-4-10 01:51 上傳
131208zoofpsokoobvihos.png (53.65 KB, 下載次數(shù): 187)
下載附件
2016-4-10 01:51 上傳
現(xiàn)在必然有人問(wèn)我難道我們要建模嗎?我強(qiáng)烈推薦學(xué)過(guò)自控原理和現(xiàn)代控制理論的同學(xué)建模,但可喜的是不建模也可以做平衡車(chē),只是理解的不深刻罷了�,F(xiàn)在上一段pid控制代碼: - //=========================================================
- //=== PID_CONTROLLER ===
- //=========================================================
- //串級(jí)PID: 主調(diào):角度
- // 副調(diào):速度
- //先控制角度,后控制速度
- //=========================================================
- int Pwm_out = 0;
- int Turn_Need = 0;
- int Speed_Need = 0;
- int speed_output_R , speed_output_L;
- float speeds , speeds_filter, positions;
- float diff_speeds,diff_speeds_all;
- //========================
- float Kap = 24.5; //
- float Kad = 10; //
- float Ksp = 2.8; //
- float Ksi = 0.11; //
- //========================
- void PID_PWM()
- {
- speeds=(count_left + count_right)*0.5;
-
- diff_speeds = count_left - count_right;
- diff_speeds_all += diff_speeds;
-
- speeds_filter *=0.85; //一階互補(bǔ)濾波
- speeds_filter +=speeds*0.15;
-
- positions += speeds_filter;
- positions += Speed_Need;
- positions = constrain(positions, -2300, 2300);//抗積分飽和
-
- Pwm_out = Kap*Angle[0] + Kad*w[0] + Ksp*speeds_filter + Ksi*positions ; //PID控制器
- if(Turn_Need == 0)
- {
- speed_output_R = int(Pwm_out - diff_speeds_all);
- speed_output_L = int(Pwm_out + diff_speeds_all);
- }
- speed_output_R = int(Pwm_out + Turn_Need);
- speed_output_L = int(Pwm_out - Turn_Need);
- Motor(speed_output_L , speed_output_R);
- count_left = 0;
- count_right = 0;
-
- // Serial.print(Angle[0]); //主調(diào)被調(diào)量
- // Serial.print(',');
- // Serial.print(speeds_filter);//副調(diào)被調(diào)量
- // Serial.print(',');
- // Serial.println(Pwm_out); //輸出量
- }
復(fù)制代碼
今天就寫(xiě)到這里,等待你們的回復(fù)和提問(wèn),然后我在之后的更新中著重以答疑主,同時(shí)也能給我編輯帖子確定一個(gè)方向。依然在更新中。。。
應(yīng)有人要求,我先上個(gè)視頻。。。
【平衡車(chē)視頻】
更新中。。。
【關(guān)于MPU6050】
關(guān)于MPU6050有目前就應(yīng)用方法有兩種:
- 直接采數(shù)據(jù),然后Kalman濾波;卡爾曼濾波實(shí)現(xiàn)現(xiàn)在有兩種方法,一種是用自己?jiǎn)纹瑱C(jī)處理,一種是硬件濾波串口方式輸出(這個(gè)就是所謂的串口MPU6050,就是有商家自己已經(jīng)給你做好卡爾曼濾波,你只需要接受他的數(shù)據(jù))
- 用MPU6050中的DMP,它也可以直接輸出角度等值,但是由于它受溫度,電壓的干擾較大,一般不建議用。
124237tzxouondfdxnh9il.png (114.52 KB, 下載次數(shù): 176)
下載附件
2016-4-10 01:51 上傳
124242b59c5s83ce85ech9.png (219.22 KB, 下載次數(shù): 178)
下載附件
2016-4-10 01:51 上傳
今天就說(shuō)到這里。。。
現(xiàn)在,我仍然再調(diào)試,發(fā)現(xiàn)濾波參數(shù),也是非常重要的。直接影響小車(chē)是否抖動(dòng)。
希望大家看后,積極回復(fù),把帖子頂起來(lái)。。。。
等我這幾天忙完了,給大家上傳一些傳感器模塊的程序,方便大家調(diào)試。。。
今天給大家上傳了兩個(gè)測(cè)試代碼,喜歡的同學(xué)自己下載。。。
看到大家如此有熱情,我再發(fā)幾張圖片,等之后有時(shí)間我再把帖子詳細(xì)說(shuō)明一下。
手機(jī)的上位機(jī)——Wi-Fi通信(由于版權(quán)問(wèn)題,我不能公開(kāi)傳播,大家可以自己去下載)
194238xemxzzskkxxzykbb.png (417.15 KB, 下載次數(shù): 216)
下載附件
2016-4-10 01:51 上傳
194241o9hw9f1he8kn9i19.png (490.63 KB, 下載次數(shù): 177)
下載附件
2016-4-10 01:51 上傳
電腦上位機(jī)——藍(lán)牙通信(我花了一個(gè)晚上搞得,做的不好,剛剛學(xué)LabView)
194235fj8a3jkggqqq6cqp.png (11.16 KB, 下載次數(shù): 194)
下載附件
2016-4-10 01:51 上傳
前幾天有點(diǎn)事兒沒(méi)時(shí)間給大家回帖,在此深表歉意,現(xiàn)在大家有問(wèn)題盡管提出來(lái),我會(huì)傾囊相助。。。
|
評(píng)分
-
查看全部評(píng)分
|