圖一(圖片來至google) |
最近在研究Quadcopter,需要使用加速度計和陀螺儀來做為平衡的依據,而選用的晶片是MPU6050(如圖一),首先先簡易了解一下晶片的一些特性
1. 三軸陀螺儀(Gyroscope)
- 數位輸出X,Y,Z的角速度(°C)
- Range : ±250, ±500, ±1000, and ±2000°/sec
- 數位輸出X,Y,Z的重力(g)
- Range : ±2g, ±4g, ±8g, and ±16g
- 使用I2C與MCU溝通
- 可以外加地磁計(Magnetometer),組成九軸偵測
- X/Y/Z Accel、X/Y/Z-Gyro 經過ADC轉換,儲存Sensor Registers,最後再透過I2C介面提供data給MCU。
#include "mpu6050.h"
int main()
{
s16 Buffer[6]={0x00};
MPU6050_Initialize();
while ( 1 ) {
// index:0~2 acceleration
// 3~5 Angular rate
MPU6050_GetRawAccelGyro(Buffer);
}
}
int main()
{
s16 Buffer[6]={0x00};
MPU6050_Initialize();
while ( 1 ) {
// index:0~2 acceleration
// 3~5 Angular rate
MPU6050_GetRawAccelGyro(Buffer);
}
}
從Debug Mode,確定已經可以取到加速度和腳速度的值(圖二)。
圖二 |
但問題又來了,這些值,到底代表甚麼含義呢??還有要如何測試呢??
首先從MPU6050 Doucment得到以下幾個資訊(圖三)
圖三 |
- 使用二的補數來表示正負號
- 正號 : 0x0000~0x7FFF ( 0 ~ 32767)
- 負號 : 0x8000~0xFFFF ( 32768 ~ 65535 )
- Gyroscope (AFS_SEL = 0)
- 測量角速度
- 131 LSB/°:表示一度使用131表示
- 正號 : 0x0001~0x7FEE ( 1 ~ 32750 )
- 負號 : 0xFFFF~0x80C7 ( -1~-32750 )
- 測試方式
- 理論上,在靜止時,角速度的值應該都要為0,但從圖二可得知,實際上並不為0,會有一個誤差值,不過我測試的結果,大概誤差在正負1~2度左右,還在可接受範圍內。
- 針對X/Y/Z軸,做順時針與逆時針旋轉,可得知值變化狀態
- Accelerometer (AFS_SEL = 0)
- 測量加速度
- 16384 LSB/mg :表示1g使用16384表示
- 正號: 0x0001~0x7FFF ( 0~ 32767 )
- 負號: 0xFFFF~0x8000 (-1~-32768 )
- Reference
[1] 以陀螺儀 (HiTechnic Gyro)推算物體的旋轉角度的實作測試
[2] MPU6050lib for STM32
[3] Product mpu6050 for invensense
[4] 陀螺儀和方向感應器
您好:
回覆刪除想請問一下關於mpu6050的問題
在加速度計上有 ±2g, ±4g, ±8g, and ±16g 四種範圍可以選擇
原本以為這四種靈敏度 如果不動放在桌上都會呈現 1g
但經過我更改靈敏度範圍 則分別是 1g, 2g, 4g, and 8g
想請問這個狀況是正確的嗎?
根據我查到的資料更改方式是 arduino 比如輸出x軸加速度是ax
依datasheet 除以lab (ax/16384.0) 這樣的方式去更改靈敏度
請大師 解惑感謝
你好,很抱歉,信被歸類到垃圾信了,今天才發現Orz....
刪除理論上,只要靜止不動,Z軸的值應該都是落在 1g(16834左右的值),而x,y軸的值則約為0
不知是否有回答道你的問題?
您好:
回覆刪除請問MPU6050內部的資料儲存空間是多少?
看到DataSheet說是有1024byte 的FIFO buffer...
請問這算是資料儲存空間嗎?
謝謝!
您好!再次請教一個問題:
回覆刪除該如何計算Z軸的角度?
是用這個公式嗎?
angle_n += (gyroZ - gyroZ_O) * dt;
我使用PIC的晶片進行測試
但是角度都不正確...
請問該如何處理?
謝謝!
請問
回覆刪除三軸陀螺儀(Gyroscope)
數位輸出X,Y,Z的角速度(°C)
°C是什麼樣的單位 跟角度的°有關嗎
請問
回覆刪除我的mpu6050為什麼在arduino 上開啟序列埠 但是卻無法讀到數值 一直卡在尋找裝置的這個地方?因為有焊接過 所以一開始想說可能焊壞了 之後再去買新的一塊還是一樣的情形 還是有可能是arduino板子上連結mpu6050的腳位壞掉了呢?
謝謝
I2C找不到嗎?你試試換個有上拉電阻的腳位看看,我用WEMOS R1也發生過,或目前pin加二個電阻到5v
刪除請教您一下:
回覆刪除測量角速度
131 LSB/°:表示一度使用131表示
正號 : 0x0001~0x7FEE ( 1 ~ 32750 )
負號 : 0xFFFF~0x80C7 ( -1~-32750 )
如果沒有在這區間的數值,是否都是=0?