顯示具有 MPU6050 標籤的文章。 顯示所有文章
顯示具有 MPU6050 標籤的文章。 顯示所有文章

2018年6月18日 星期一

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: