重力加速度陀螺儀傳感器MPU-6050(一)


  MPU-60X0 對陀螺儀和加速度計分別用了三個16 位的ADC,將其測量的模擬量轉化
為可輸出的數字量。為了精確跟蹤快速和慢速的運動,傳感器的測量范圍都是用戶可控的,陀螺儀可測范圍為±250,±500,±1000,±2000°/秒(dps),加速度計可測范圍為±2,±4,±8,±16g。

   在網上找了一會,好像MPU-6050沒有中文的數據手冊,由於本人也處於學習階段,翻譯的可能不太准確,只能表達一下簡單的意思,以官方數據手冊為准。

 引腳說明:

重力加速度陀螺儀傳感器MPU-6050(一)
VDD 供電電壓為2.5V±5%、3.0V±5%、3.3V±5%;VDDIO 為1.8V± 5%

內建振盪器在工作溫度范圍內僅有±1%頻率變化。可選外部時鍾輸入32.768kHz 或19.2MHz

找出幾個重要的寄存器:

1)Register 25 – Sample Rate Divider  (SMPRT_DIV)

重力加速度陀螺儀傳感器MPU-6050(一)
1)SMPLRT_DIV 8位無符號值,通過該值將陀螺儀輸出分頻,得到采樣頻率 

 

  該寄存器指定陀螺儀輸出率的分頻,用來產生MPU-60X0的采樣率。
  傳感器寄存器的輸出、FIFO輸出、DMP采樣和運動檢測的都是基於該采樣率。

  
采樣率的計算公式

                    采樣率 = 陀螺儀的輸出率 / (1 + SMPLRT_DIV)

  當數字低通濾波器沒有使能的時候,陀螺儀的輸出平路等於8KHZ,反之等於1KHZ。

2)Register 26 – Configuration        (CONFIG)

重力加速度陀螺儀傳感器MPU-6050(一)

 1)EXT_SYNC_SET 3位無符號值,配置幀同步引腳的采樣

 2)DLPF_CFG 3位無符號值,配置數字低通濾波器

 

 該寄存器為陀螺儀和加速度計配置外部幀同步(FSYNC)引腳采樣和數字低通濾波器(DLPF)。
 通過配置EXT_SYNC_SET,可以對連接到FSYNC引腳的一個外部信號進行采樣。 

 FSYNC引腳上的信號變化會被鎖存,這樣就能捕獲到很短的頻閃信號。
 采樣結束后,鎖存器將復位到當前的FSYNC信號狀態。
 根據下面的表格定義的值,采集到的數據會替換掉數據寄存器中上次接收到的有效數據

重力加速度陀螺儀傳感器MPU-6050(一)
數字低通濾波器是由DLPF_CFG來配置,根據下表中DLPF_CFG的值對加速度傳感器和陀螺儀濾波

重力加速度陀螺儀傳感器MPU-6050(一)

 

 

3)Register 27 – Gyroscope Configuration   (GYRO_CONFIG)

重力加速度陀螺儀傳感器MPU-6050(一)
1)XG_ST 設置此位,X軸陀螺儀進行自我測試。
2)YG_ST 設置此位,Y軸陀螺儀進行自我測試。
3)ZG_ST 設置此位,Z軸陀螺儀進行自我測試。
4)FS_SEL 2位無符號值。選擇陀螺儀的量程。

   這個寄存器是用來觸發陀螺儀自檢和配置陀螺儀的滿量程范圍。

   陀螺儀自檢允許用戶測試陀螺儀的機械和電氣部分,通過設置該寄存器的 XG_ST、YG_ST和 ZG_ST bits可以激活陀螺儀對應軸的自檢。每個軸的檢測可以獨立進行或同時進行。

    自檢的響應 = 打開自檢功能時的傳感器輸出 - 未啟用自檢功能時傳感器的輸出

    在MPU-6000/MPU-6050數據手冊的電氣特性表中已經給出了每個軸的限制范圍。當自檢的響應值在規定的范圍內,就能夠通過自檢;反之,就不能通過自檢。

    根據下表,FS_SEL選擇陀螺儀輸出的量程:

重力加速度陀螺儀傳感器MPU-6050(一)

 

4)Register 28 – Accelerometer Configuration  (ACCEL_CONFIG)

重力加速度陀螺儀傳感器MPU-6050(一)
1)XA_ST    設置為1時,X軸加速度感應器進行自檢。
2)YA_ST    設置為1時,Y軸加速度感應器進行自檢。
3)ZA_ST    設置為1時,Z軸加速度感應器進行自檢。
4)AFS_SEL  2位無符號值。選擇加速度計的量程。

 

  具體細節和上面陀螺儀的相似。

  根據下表,AFS_SEL選擇加速度傳感器輸出的量程。

重力加速度陀螺儀傳感器MPU-6050(一)

5)Registers 59 to 64 – Accelerometer Measurements (ACCEL_XOUT_H, ACCEL_XOUT_L, ACCEL_YOUT_H, ACCEL_YOUT_L, ACCEL_ZOUT_H, and ACCEL_ZOUT_L)

重力加速度陀螺儀傳感器MPU-6050(一)

1)ACCEL_XOUT  16位2’s補碼值。
   存儲最近的X軸加速度感應器的測量值。
2)ACCEL_YOUT  16位2’s補碼值。
   存儲最近的Y軸加速度感應器的測量值。
3)ACCEL_ZOUT  16位2’s補碼值。
   存儲最近的Z軸加速度感應器的測量值。

 

  這些寄存器存儲加速感應器最近的測量值。

   加速度傳感器寄存器,連同溫度傳感器寄存器、陀螺儀傳感器寄存器和外部感應數據寄存器,都由兩部分寄存器組成(類似於STM32F10X系列中的影子寄存器):一個內部寄存器,用戶不可見。另一個用戶可讀的寄存器。內部寄存器中數據在采樣的時候及時的到更新,僅在串行通信接口不忙碌時,才將內部寄存器中的值復制到用戶可讀的寄存器中去,避免了直接對感應測量值的突發訪問。 

   在寄存器28中定義了每個16位的加速度測量值的最大范圍,對於設置的每個最大范圍,都對應一個加速度的靈敏度ACCEL_xOUT,如下面的表中所示:

重力加速度陀螺儀傳感器MPU-6050(一)

6)Registers 65 and 66 – Temperature Measurement   (TEMP_OUT_H and TEMP_OUT_L)

重力加速度陀螺儀傳感器MPU-6050(一)

1)TEMP_OUT 16位有符號值。
   存儲的最近溫度傳感器的測量值。

 

7)Registers 67 to 72 – Gyroscope Measurements    (GYRO_XOUT_H, GYRO_XOUT_L, GYRO_YOUT_H, GYRO_YOUT_L, GYRO_ZOUT_H, and GYRO_ZOUT_L)

 

重力加速度陀螺儀傳感器MPU-6050(一)
這個和加速度感應器的寄存器相似

對應的靈敏度:

重力加速度陀螺儀傳感器MPU-6050(一)

8)Register 107 – Power Management 1   (PWR_MGMT_1)

重力加速度陀螺儀傳感器MPU-6050(一)

 

該寄存器允許用戶配置電源模式和時鍾源。它還提供了一個復位整個器件的位,和一個關閉溫度傳感器的位

1)DEVICE_RESET  置1后所有的寄存器復位,隨后DEVICE_RESET自動置0.

2)SLEEP         置1后進入睡眠模式  

3)CYCLE         當CYCLE被設置為1,且SLEEP沒有設置,MPU-60X0進入循環模式,為了從速度傳感器中獲得采樣值,在睡眠模式和正常數據采集模式之間切換,每次獲得一個采樣數據。在LP_WAKE_CTRL(108)寄存器中,可以設置喚醒后的采樣率和被喚醒的頻率。

4)TEMP_DIS      置1后關閉溫度傳感器

5)CLKSEL        指定設備的時鍾源   

 

時鍾源的選擇:

重力加速度陀螺儀傳感器MPU-6050(一)
     

9)Register 117 – Who Am I         (WHO_AM_I)

重力加速度陀螺儀傳感器MPU-6050(一)

 WHO_AM_I中的內容是MPU-60X0的6位I2C地址

上電復位的第6位到第1位值為:110100

為了讓兩個MPU-6050能夠連接在一個I2C總線上,當AD0引腳邏輯低電平時,設備的地址是 b1101000 ,當AD0引腳邏輯高電平時,設備的地址是 b1101001 

 

 

(2013.01.24)

 淘寶買的貨終於到了,學習用所以沒買好的,這個模塊只要18塊錢。

重力加速度陀螺儀傳感器MPU-6050(一)

MPU-6000可以使用SPI和I2C接口,而MPU-6050只能使用I2C,其中I2C的地址由AD0引腳決定;寄存器共117個,挺多的,下面的是精簡常用的,根據具體的要求,適當的添加。

 

 1   
 2   #define SMPLRT_DIV  0x19    //采樣率分頻,典型值:0x07(125Hz) */
 3   #define CONFIG   0x1A       // 低通濾波頻率,典型值:0x06(5Hz) */
 4   #define GYRO_CONFIG  0x1B   // 陀螺儀自檢及測量范圍,典型值:0x18(不自檢,2000deg/s) */
 5  #define ACCEL_CONFIG 0x1C  // 加速計自檢、測量范圍及高通濾波頻率,典型值:0x01(不自檢,2G,5Hz) */
 6  
 7  
 8  #define ACCEL_XOUT_H 0x3B  // 存儲最近的X軸、Y軸、Z軸加速度感應器的測量值 */
 9  #define ACCEL_XOUT_L 0x3C
10  #define ACCEL_YOUT_H 0x3D
11  #define ACCEL_YOUT_L 0x3E
12  #define ACCEL_ZOUT_H 0x3F
13  #define ACCEL_ZOUT_L 0x40
14  
15   
16  
17  #define TEMP_OUT_H  0x41   // 存儲的最近溫度傳感器的測量值 */
18  #define TEMP_OUT_L  0x42
19 
20  
21 
22  #define GYRO_XOUT_H  0x43 // 存儲最近的X軸、Y軸、Z軸陀螺儀感應器的測量值 */
23  #define GYRO_XOUT_L  0x44 
24  #define GYRO_YOUT_H  0x45
25  #define GYRO_YOUT_L  0x46
26  #define GYRO_ZOUT_H  0x47
27  #define GYRO_ZOUT_L  0x48
28  
29 #define PWR_MGMT_1  0x6B // 電源管理,典型值:0x00(正常啟用) */
30 #define WHO_AM_I  0x75 //IIC地址寄存器(默認數值0x68,只讀) */

 

編程時用到的關於I2C協議規范:

重力加速度陀螺儀傳感器MPU-6050(一)

  PS:很多人在MPU6050的I2C地址上面弄不清楚,有人說地址是0x68,也有人說是0xD0,其實這兩個都是可以的,取決於你的I2C驅動怎么寫,這兩個地址我都試過,沒問題……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM