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