2016年1月12日 星期二

How to Enable MPU6050 Orientation from DMP on STM32F4

1. 最近開始在研究平衡車和空拍機的方案, 發現目前幾乎都是InvenSense mpu6050的天下,
    最主要的原因是因為InvenSense的sensor有內建算法, 因此對於沒有算法team的公司而言,
    使用I家的產品自然成為首選.

2. 現在這個範例是使用mpu6050 sensor board + stm32f401 discovery board + processing來示範,
    主要的流程如下:

  • STM32F401透過I2C來Init MPU6050 DMP, 並透過I2C來讀取MPU6050算出來的Orientation資料.
  • STM32F401透過Virtual Com-Port將Orientation傳送給PC上的Processing軟體.
  • Processing根據Orientation的數據來轉動小飛機.

3. 因此在操作之前, 必須先裝好裝滿Processing以及相關的Library.

  • 接著會出現問你要不要捐錢, 直接點選No Donation, 就會出現Download的標幟.

  • 接著就根據你自己的平台來選擇安裝, 由於我是使用win10 64bit, 因此安裝64bit版本, 選擇後就會下載約100MB左右的壓縮檔.

  • 解壓縮後, 會看到processing.exe, 執行後即可完成安裝.

  • 由於我們在Processing上執行的demo範例必須要使用到toxiclibs這個library, 因此
    我們必須也要到toxiclibs的網站去下載library.
  • 到達下載頁面後, 直接選擇toxiclibs-complete-0020.zip, 即可下載至PC.
  • toxiclibs-complete-0020.zip解壓縮後, 將整個資料夾複製到C:\Users\user\Documents\Processing\libraries資料夾內, 到這邊我們已經完成了PC端軟體的設置.

4. 接下來可以準備相關的硬體, 首先先完成mpu6050 sensor board和stm32f401 discovery board之
    間的連接線路.
  • stm32f401 discovery board :3V ->  mpu6050 sensor board: VCC
  • stm32f401 discovery board :GND -> mpu6050 sensor board: GND 
  • stm32f401 discovery board :PB6 -> mpu6050 sensor board: SCL
  • stm32f401 discovery board :PB9 -> mpu6050 sensor board: SDA

  • 接著將ST-LINKUSB端口分別使用USB CablePC相連, 此時會看到mpu6050 sensor board上的LED亮起, 這樣應該就代表電源沒接錯了, 到此硬體已全部準備完成.

5. Code Flow:
  • STM32F401:
    • 針對硬體上的Init, 其中最重要的是對I2C & USB VCP的初始化, 使用I2C與MPU6050溝通, 使用USB VCP將Orientation data傳給PC.

    • 使用I2C對MPU6050執行初始化, 中間只要有一個步驟不正確, 則會跑到無窮迴圈.
    • 當MPU6050 Init成功後, 便會跑到主迴圈, 此時會不斷地去詢問dmp fifo data是否已完成準備, 若是完成準備的話, 則會一口氣將fifo data全讀回來.
    • 接著便會開始計算Yaw/Roll/Pitch, 並把quaternion透過USB VCP傳送給PC.


  • Processing:
    • 使用Processing開啟程式後, 會看到左上角的Run的符號, 按下即可執行程式.

    • Processing程式中特別需要注意的是要去設定com port的編號, 首先我們先去觀察stm32 virtual com port在裝置管理員上的com port編號是多少, 從下圖可以看到目前是COM8.
    • 接著我們可以先執行Processing端的程式, 可以看到下面的訊息窗會把目前PC上面的所有com port及編號皆列出來, 而我們要找的就是virtual com port對應的編號(ex: COM8), 從下圖看到COM8是第4個.
    • 確定了vcp的編號後, 接著就是去修改processing程式上的com port編號, 如下圖在line 74行的地方, 將vcp number填入Serial.list()[vcp number].


6. Test Flow:
  • 將stm32f401的測試程式燒入到stm32f401 discovery board上.
  • 使用USB Cable將stm32f401 discovery board與PC相連接.
  • 執行Processing程式, 成功的話會看到如下圖的小飛機出現, 此時移動sensor board, 飛機會有相對應的動作出現.

  • Test Video:


7. Test Code Download Link:
    

沒有留言:

張貼留言