找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 14608|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

基于Arduino+MPU6050+Tp-link 703n平衡車(chē)完美站立(部分代碼上傳)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
基于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ō)了,我先給大家上圖片和視頻。

    馬上熄燈了,持續(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)的,再上一張圖片。。。

    繼續(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ō)一下原理,看圖:

【平衡車(chē)模型】
   

    現(xiàn)在必然有人問(wèn)我難道我們要建模嗎?我強(qiáng)烈推薦學(xué)過(guò)自控原理和現(xiàn)代控制理論的同學(xué)建模,但可喜的是不建模也可以做平衡車(chē),只是理解的不深刻罷了�,F(xiàn)在上一段pid控制代碼:
  1.     //=========================================================   
  2.     //===                  PID_CONTROLLER                   ===
  3.     //=========================================================
  4.     //串級(jí)PID: 主調(diào):角度
  5.     //         副調(diào):速度
  6.     //先控制角度,后控制速度
  7.     //=========================================================
  8.     int Pwm_out = 0;
  9.     int Turn_Need = 0;
  10.     int Speed_Need = 0;
  11.     int speed_output_R , speed_output_L;
  12.     float speeds , speeds_filter, positions;
  13.     float diff_speeds,diff_speeds_all;
  14.     //========================
  15.     float Kap = 24.5;       //
  16.     float Kad = 10;         //
  17.     float Ksp = 2.8;        //
  18.     float Ksi = 0.11;       //
  19.     //========================
  20.     void PID_PWM()
  21.     {
  22.       speeds=(count_left + count_right)*0.5;
  23.      
  24.       diff_speeds = count_left - count_right;
  25.       diff_speeds_all += diff_speeds;
  26.      
  27.       speeds_filter *=0.85;  //一階互補(bǔ)濾波
  28.       speeds_filter +=speeds*0.15;
  29.      
  30.       positions += speeds_filter;
  31.       positions += Speed_Need;
  32.       positions = constrain(positions, -2300, 2300);//抗積分飽和
  33.      
  34.       Pwm_out = Kap*Angle[0] + Kad*w[0] + Ksp*speeds_filter + Ksi*positions ;  //PID控制器
  35.       if(Turn_Need == 0)
  36.       {
  37.         speed_output_R = int(Pwm_out - diff_speeds_all);
  38.         speed_output_L = int(Pwm_out + diff_speeds_all);
  39.       }
  40.       speed_output_R = int(Pwm_out + Turn_Need);
  41.       speed_output_L = int(Pwm_out - Turn_Need);
  42.       Motor(speed_output_L , speed_output_R);
  43.       count_left = 0;
  44.       count_right = 0;
  45.      
  46.     //  Serial.print(Angle[0]);      //主調(diào)被調(diào)量
  47.     //  Serial.print(',');
  48.     //  Serial.print(speeds_filter);//副調(diào)被調(diào)量
  49.     //  Serial.print(',');
  50.     //  Serial.println(Pwm_out);  //輸出量
  51.     }
復(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,它也可以直接輸出角度等值,但是由于它受溫度,電壓的干擾較大,一般不建議用。

    今天就說(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)傳播,大家可以自己去下載)



    電腦上位機(jī)——藍(lán)牙通信(我花了一個(gè)晚上搞得,做的不好,剛剛學(xué)LabView)


前幾天有點(diǎn)事兒沒(méi)時(shí)間給大家回帖,在此深表歉意,現(xiàn)在大家有問(wèn)題盡管提出來(lái),我會(huì)傾囊相助。。。

補(bǔ)充樓主展示的仿真建模代碼下載地址:http://www.mathworks.com/matlabc ... --controller-design

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
赤炎木 + 5 很給力!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:130679 發(fā)表于 2016-7-21 09:11 | 只看該作者
最近在做小車(chē),學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

板凳
ID:138313 發(fā)表于 2016-11-27 00:55 | 只看該作者
折騰平衡車(chē)一周了,PID算是有了點(diǎn)覺(jué)悟,然而小車(chē)一脫離實(shí)驗(yàn)桌就站不穩(wěn)
回復(fù)

使用道具 舉報(bào)

地板
ID:155077 發(fā)表于 2016-12-15 20:13 | 只看該作者
新手來(lái)學(xué)習(xí)了,哈哈哈
回復(fù)

使用道具 舉報(bào)

5#
ID:165861 發(fā)表于 2017-2-21 23:19 | 只看該作者
久違u 發(fā)表于 2016-12-15 20:13
新手來(lái)學(xué)習(xí)了,哈哈哈

沒(méi)有看到代碼呀
回復(fù)

使用道具 舉報(bào)

6#
ID:187533 發(fā)表于 2017-4-20 22:27 | 只看該作者
請(qǐng)樓主分享一下電路圖吧。
回復(fù)

使用道具 舉報(bào)

7#
ID:183134 發(fā)表于 2017-4-20 22:42 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

8#
ID:227864 發(fā)表于 2017-10-17 14:58 | 只看該作者
這么高深的東西,頂樓主
回復(fù)

使用道具 舉報(bào)

9#
ID:243555 發(fā)表于 2017-10-27 21:56 | 只看該作者
點(diǎn)贊,點(diǎn)贊,謝謝分析
回復(fù)

使用道具 舉報(bào)

10#
ID:667116 發(fā)表于 2020-1-3 12:54 | 只看該作者
什么是串口MPU6050
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表