個人資料
歸檔
正文

兩輪自平衡車

(2016-05-23 12:45:21) 下一個

原理:http://tieba.baidu.com/p/3653812543 

http://makezine.com/projects/arduroller-self-balancing-robot/  http://www.51hei.com/bbs/dpj-49869-1.html  bluetooth http://www.51hei.com/bbs/dpj-32234-1.html  

http://forum.eepw.com.cn/thread/269607/1  http://forum.eepw.com.cn/thread/273140/1 http://www.51hei.com/bbs/dpj-48038-1.html  books http://www.51hei.com/bbs/dpj-49814-1.html 

選擇方案,主控STM32,傳感器Mpu6050,采用四元數互補濾波進行姿態解算(求角度),國產直流減速電機,電機驅動用TB6612FNG,體積比L298N小效率高。電池用3S航模電池或3x18650.

    控製方式通過串級PID進行控製,預計先加上角度環和角速度環。PID調試的時候,用Nrf2401無線收發來進行實時參數整定,同時也作為遙控功能。預計有時間就加上藍牙,可能可以用手機app控製,還有一個體感遙控,這個看情況是否加上,嘿嘿。基本思路跟做四軸飛行器也差不多,準備開搞~

加速度傳感:http://playground.arduino.cc/Main/MPU-6050 

http://diyhacking.com/arduino-mpu-6050-imu-sensor-tutorial/  http://playground.arduino.cc/Code/PIDLibrary 

電機:https://item.taobao.com/item.htm?spm=a230r.1.14.21.BtXTI1&id=41433521806 

程序思路如下:STM32通過讀取傳感器數據,做濾波和姿態計算,然後通過串級PID進行控製;同時接收遙控指令,做出前後左右以及旋轉的動作。下麵開始分步介紹:

1)MPU6050采用I2C總線驅動,樓主使用模擬I2C,速度很快,100多個us就能讀完傳感器數據,然後進行濾波+姿態解算,得到小車的角度信息。

    數據處理和PID控製就是自平衡小車的核心了。我們對加速度計做低通濾波,對陀螺儀做滑動濾波,過濾大部分由震動引起的數據噪聲。 然後用四元數來計算姿態,最後轉換成角度(歐拉角),就能用於控製了。初次接觸MPU6050的網友可能對數據解算比較陌生,建議看一下下麵這個精品貼: 【討論帖】姿態解算相關知識儲備

關於MPU6050的驅動:: stm32f103運行mpu6050源碼

為什麽選擇6050呢,因為它內部集成了一個硬件算法,能夠直接輸出表示姿態的四元數,我們隻需要把這個四元數用公式轉化成角度(歐拉角),就能用於控製了,是不是很方便呢!前期調過姿態解算,後期再慢慢研究姿態解算的問題。 公式如下:

view plaincopy to clipboardprint?

  1. Q_ANGLE.Yaw = atan2(2 * q1 * q2 + 2 * q0 * q3, -2 * q2*q2 - 2 * q3* q3 + 1)* 57.3; // yaw  
  2. Q_ANGLE.Y  = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; // pitch  
  3. Q_ANGLE.X = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; // roll  

實際上我們用到一個角度即可

關於MPU6050的DMP功能,請看:傳感器驅動實驗(DMP測試,串口回傳歐拉角及四元數,附視頻,工程文件)(歐拉角萬向鎖視頻)

2)串級PID相關介紹:串級PID----代碼+調參

3Nrf2401通訊實驗:NRF無線通訊實驗(附視頻,工程文件)

4)電機控製,TB6612是雙驅動,也就是可以驅動兩個電機 。

7、調試流程

    程序對應了一個MWC開源飛控的上位機,簡單實用,主要調試工作通過上位機即可,下麵開始講解:

1,把遙控器的串口1鏈接到電腦上,小車和遙控器通過2401進行半雙工無線數據。傳輸打開上位機,即MultiWiiConf文件夾下的MultiWiiConf.exe。下載地址:MultiWiiConf.rar

要想運行MultiWiiConf.exe,得先安裝JAVA虛擬機。Multiwii 的GUI程序需要JAVA虛擬機的支持,需下載安裝:http://java.com/zh_CN/download/manual.jsp?locale=zh_CN
(如果你的電腦是win7 64位的係統,安裝了JAVA虛擬機後GUI仍然運行不了,那你就需要到C:Program FilesJavajre7bin找到並複製javaw.exe,然後粘貼到C:WindowsSysWOW64這個文件夾下麵,再重新運 行GUI即可)成功運行則出現如下界麵,會顯示出PID參數,遙控數據,姿態,傳感器數據等等,同時可以通過上位機進行PID參數設置。

2,加速度計和陀螺儀(MPU6050)由於安放的位置,是有零偏的,帶著這個零偏去做姿態解算,就會造成解算誤差,因此要去除這個零偏。通過上位機可以處理零偏問題。

A、校準加速度計

具體操作:將小車貼牆放置,這樣一來就保證了小車是豎直向上的。遙控器連接電腦,運行GUI,點擊CALIB_ACC,你會發現ACC的pitch、roll、Z三軸輸出值會變成0,0,512左右的值,則表明校準完成。

B、校準陀螺

具體操作:在校準了加速度計基礎上,點擊CALIB_MAG,GYRO的pitch、roll、Z三軸輸出值會變成0,0,0左右的值,則表明校準完成。

C、調整PID參數

具體操作:將鼠標定位在待調整的PID參數上,按住鼠標左鍵左右移動鼠標即可調整該數值,很為奇特。
ROLL對應的PID參數是外環參數,PITCH對應的PID參數是內環參數。慢慢調參數即可。調參方法詳見:串級PID----代碼+調參

9、個人總結

    首先,此次自平衡小車製作,耗時較短,還有N多功能沒加上。近期有很多事,考慮四月份後加上新功能,敬請期待。參數多試幾次就出來了,效果還可以,有時間再調調。

 有以下幾點收獲也體會,跟大家分享下:
    1,樓主用的是11.1V航模電池,放電倍數20C。經過穩壓後給電機驅動和STM32+MPU6050供電。不清楚是否較差的電池會對傳感器數據造成影響。反正這個航模電池沒問題。
    2,角速度要濾波,實際調試的時候,看到上位機的角速度震動很大,這樣子就給控製造成了很大震蕩,經過濾波後,控製效果較好。
    3,有一個上位機真心方便,點幾下上位機,參數就設置好了,功能強大,還能分析傳感器數據。
    4,小車的電池要固定好,不能晃動,最好在中心,這樣調試比較方便容易。
    5,小車十個很有意思的項目,有壇友回複說在小車上裝個攝像頭,這想法很棒,後期裝一個試試,看看不同視角能拍到啥有意思的~

 

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.