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