基于Arduino+MPU6050+Tp-link 703n平衡小車現(xiàn)已完美站立,分享一下制作經(jīng)驗和方法
希望版主申精。。。可以引起大家注意。。。
基于工坊目前還沒有一個帖子能很完整的介紹平衡小車的制作思路以及制作方案,借此機會我將制作成功后的經(jīng)驗分享給大家,由于該課題涉及到我們項目的部分,請允許我現(xiàn)在不能公開,但思路和方案我是可以告訴大家的。我希望能給一群愛學(xué)的同學(xué)們,鐘愛電子制作的朋友們提供一點幫助,也算是我一年來在該論壇學(xué)到很多知識的回報吧。
希望各位懂行的高手不要嘲笑我的無知,更希望你們看了以后,能夠多給我提供一些建議和更好的思路,總之,但愿我們能共同進步,或是說能有機會合作,那是理想的狀態(tài)了。其他的話我就不多說了,我先給大家上圖片和視頻。
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)配,刷進去Openwrt系統(tǒng),同時可以無線更新程序,掛載攝像頭等等)
- 3.Arduino MEGA 2560 r3 (這個單片機做平衡車足矣,當(dāng)時懷疑他不能勝任)
- 4.L298n(最好是用帶光耦的驅(qū)動,不帶光耦也行,我的就沒帶光耦,害怕信號干擾就帶上光耦)
- 5.電機是直流減速電機帶碼盤(扭矩最好是能大一點,我推薦德國空心杯電機,當(dāng)然我用的不是空心杯,下一版一定會用)
- 6.OLED12864 LED屏幕(我就不多說了,等到車很平穩(wěn)了,你愛怎么擴展都行)
- 7.小車輪子(最好是大一點,輪子要用硬橡膠的,我現(xiàn)在這個輪胎是軟的,摩擦力太大,下版本就換掉)
- 8.電池3節(jié)18650,帶上電池盒OK
- 9.穩(wěn)壓模塊(我個人認(rèn)為不能把所有的需要5v供電的傳感器都從單片機供電,單片機提供電流是有限的,可能會造成單片機死機的情況,因此我就外接一個穩(wěn)壓模塊給這一群傳感器供電,一定要注意穩(wěn)壓模塊的輸出的負(fù)極要和單片機共地。)
- 10.遙控器就是安卓手機了(這個就不多說了,有興趣的我會發(fā)關(guān)于Openwrt的相關(guān)教程,這里說就有點跑題了)
注釋:元件就這么多了,其實也沒有什么,重要的是控制思路,和控制算法。如果大家對硬件還有疑問就提出來,今天就講到這里,學(xué)校的事情太多了,又要開會,各位不好意思。。。補充幾句,一定要好好看我括號里面補充的內(nèi)容,很重要,有可能就是由于這些問題導(dǎo)致你很久都不能把小車調(diào)起來的,再上一張圖片。。。
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控制器
注釋:
- Angle[0]表示x軸的角度量,單位是(角度);
- w[0]表示x軸的角速度,單位是(角度/秒);
- speeds_filter表示車輪速度,程序中以單位時間碼盤的格數(shù)代替;
- positions表示位置,是速度對時間的積分。
角度用PD,位置用PI非常簡單,雙閉環(huán)控制,我的控制器就這么簡單一句話,別以為算法是多么高深的東西,我給你說一下原理,看圖:
100311p5xtt5h5h18gpg3v.png (16.03 KB, 下載次數(shù): 183)
下載附件
2016-4-10 01:51 上傳
【平衡車模型】
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)在必然有人問我難道我們要建模嗎?我強烈推薦學(xué)過自控原理和現(xiàn)代控制理論的同學(xué)建模,但可喜的是不建模也可以做平衡車,只是理解的不深刻罷了。現(xiàn)在上一段pid控制代碼: - //=========================================================
- //=== PID_CONTROLLER ===
- //=========================================================
- //串級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; //一階互補濾波
- 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ù)制代碼
今天就寫到這里,等待你們的回復(fù)和提問,然后我在之后的更新中著重以答疑主,同時也能給我編輯帖子確定一個方向。依然在更新中。。。
應(yīng)有人要求,我先上個視頻。。。
【平衡車視頻】
更新中。。。
【關(guān)于MPU6050】
關(guān)于MPU6050有目前就應(yīng)用方法有兩種:
- 直接采數(shù)據(jù),然后Kalman濾波;卡爾曼濾波實現(xiàn)現(xiàn)在有兩種方法,一種是用自己單片機處理,一種是硬件濾波串口方式輸出(這個就是所謂的串口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 上傳
今天就說到這里。。。
現(xiàn)在,我仍然再調(diào)試,發(fā)現(xiàn)濾波參數(shù),也是非常重要的。直接影響小車是否抖動。
希望大家看后,積極回復(fù),把帖子頂起來。。。。
等我這幾天忙完了,給大家上傳一些傳感器模塊的程序,方便大家調(diào)試。。。
今天給大家上傳了兩個測試代碼,喜歡的同學(xué)自己下載。。。
看到大家如此有熱情,我再發(fā)幾張圖片,等之后有時間我再把帖子詳細(xì)說明一下。
手機的上位機——Wi-Fi通信(由于版權(quán)問題,我不能公開傳播,大家可以自己去下載)
194238xemxzzskkxxzykbb.png (417.15 KB, 下載次數(shù): 216)
下載附件
2016-4-10 01:51 上傳
194241o9hw9f1he8kn9i19.png (490.63 KB, 下載次數(shù): 177)
下載附件
2016-4-10 01:51 上傳
電腦上位機——藍(lán)牙通信(我花了一個晚上搞得,做的不好,剛剛學(xué)LabView)
194235fj8a3jkggqqq6cqp.png (11.16 KB, 下載次數(shù): 194)
下載附件
2016-4-10 01:51 上傳
前幾天有點事兒沒時間給大家回帖,在此深表歉意,現(xiàn)在大家有問題盡管提出來,我會傾囊相助。。。
|