MPU-60X0 對陀螺儀和加速度計分別用了三個16 位的ADC,將其測量的模擬量轉化
為可輸出的數字量。為了精確跟蹤快速和慢速的運動,傳感器的測量范圍都是用戶可控的,陀螺儀可測范圍為±250,±500,±1000,±2000°/秒(dps),加速度計可測范圍為±2,±4,±8,±16g。
在網上找了一會,好像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)
1)SMPLRT_DIV 8位無符號值,通過該值將陀螺儀輸出分頻,得到采樣頻率
該寄存器指定陀螺儀輸出率的分頻,用來產生MPU-60X0的采樣率。
傳感器寄存器的輸出、FIFO輸出、DMP采樣和運動檢測的都是基於該采樣率。
采樣率的計算公式
采樣率 = 陀螺儀的輸出率 / (1 + SMPLRT_DIV)
當數字低通濾波器沒有使能的時候,陀螺儀的輸出平路等於8KHZ,反之等於1KHZ。
2)Register 26 – Configuration (CONFIG)
1)EXT_SYNC_SET 3位無符號值,配置幀同步引腳的采樣
2)DLPF_CFG 3位無符號值,配置數字低通濾波器
該寄存器為陀螺儀和加速度計配置外部幀同步(FSYNC)引腳采樣和數字低通濾波器(DLPF)。
通過配置EXT_SYNC_SET,可以對連接到FSYNC引腳的一個外部信號進行采樣。
FSYNC引腳上的信號變化會被鎖存,這樣就能捕獲到很短的頻閃信號。
采樣結束后,鎖存器將復位到當前的FSYNC信號狀態。
根據下面的表格定義的值,采集到的數據會替換掉數據寄存器中上次接收到的有效數據
數字低通濾波器是由DLPF_CFG來配置,根據下表中DLPF_CFG的值對加速度傳感器和陀螺儀濾波
3)Register 27 – Gyroscope Configuration (GYRO_CONFIG)
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選擇陀螺儀輸出的量程:
4)Register 28 – Accelerometer Configuration (ACCEL_CONFIG)
1)XA_ST 設置為1時,X軸加速度感應器進行自檢。
2)YA_ST 設置為1時,Y軸加速度感應器進行自檢。
3)ZA_ST 設置為1時,Z軸加速度感應器進行自檢。
4)AFS_SEL 2位無符號值。選擇加速度計的量程。
具體細節和上面陀螺儀的相似。
根據下表,AFS_SEL選擇加速度傳感器輸出的量程。
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)
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,如下面的表中所示:
6)Registers 65 and 66 – Temperature Measurement (TEMP_OUT_H and TEMP_OUT_L)
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)
對應的靈敏度:
8)Register 107 – Power Management 1 (PWR_MGMT_1)
該寄存器允許用戶配置電源模式和時鍾源。它還提供了一個復位整個器件的位,和一個關閉溫度傳感器的位
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 指定設備的時鍾源
時鍾源的選擇:
9)Register 117 – Who Am I (WHO_AM_I)
WHO_AM_I中的內容是MPU-60X0的6位I2C地址
上電復位的第6位到第1位值為:110100
為了讓兩個MPU-6050能夠連接在一個I2C總線上,當AD0引腳邏輯低電平時,設備的地址是 b1101000 ,當AD0引腳邏輯高電平時,設備的地址是 b1101001
(2013.01.24)
淘寶買的貨終於到了,學習用所以沒買好的,這個模塊只要18塊錢。
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協議規范:
PS:很多人在MPU6050的I2C地址上面弄不清楚,有人說地址是0x68,也有人說是0xD0,其實這兩個都是可以的,取決於你的I2C驅動怎么寫,這兩個地址我都試過,沒問題……