MPU-60X0對陀螺儀和加速度計分別用了三個16 位的ADC,將其測量的模擬量轉(zhuǎn)化
為可輸出的數(shù)字量。為了精確跟蹤快速和慢速的運動,傳感器的測量范圍都是用戶可控的,陀螺儀可測范圍為±250,±500,±1000,±2000°/秒(dps),加速度計可測范圍為±2,±4,±8,±16g。
在網(wǎng)上找了一會,好像MPU-6050沒有中文的數(shù)據(jù)手冊,由于本人也處于學(xué)習(xí)階段,翻譯的可能不太準確,只能表達一下簡單的意思,以官方數(shù)據(jù)手冊為準。
引腳說明:
VDD 供電電壓為2.5V±5%、3.0V±5%、3.3V±5%;VDDIO 為1.8V± 5%
內(nèi)建振蕩器在工作溫度范圍內(nèi)僅有±1%頻率變化。可選外部時鐘輸入32.768kHz 或19.2MHz
找出幾個重要的寄存器:
1)Register 25 – Sample RateDivider (SMPRT_DIV)
1)SMPLRT_DIV 8位無符號值,通過該值將陀螺儀輸出分頻,得到采樣頻率
該寄存器指定陀螺儀輸出率的分頻,用來產(chǎn)生MPU-60X0的采樣率。
傳感器寄存器的輸出、FIFO輸出、DMP采樣和運動檢測的都是基于該采樣率。
采樣率的計算公式
采樣率 = 陀螺儀的輸出率 / (1 + SMPLRT_DIV)
當(dāng)數(shù)字低通濾波器沒有使能的時候,陀螺儀的輸出平路等于8KHZ,反之等于1KHZ。
2)Register 26 –Configuration (CONFIG)
1)EXT_SYNC_SET3位無符號值,配置幀同步引腳的采樣
2)DLPF_CFG3位無符號值,配置數(shù)字低通濾波器
該寄存器為陀螺儀和加速度計配置外部幀同步(FSYNC)引腳采樣和數(shù)字低通濾波器(DLPF)。
通過配置EXT_SYNC_SET,可以對連接到FSYNC引腳的一個外部信號進行采樣。
FSYNC引腳上的信號變化會被鎖存,這樣就能捕獲到很短的頻閃信號。
采樣結(jié)束后,鎖存器將復(fù)位到當(dāng)前的FSYNC信號狀態(tài)。
根據(jù)下面的表格定義的值,采集到的數(shù)據(jù)會替換掉數(shù)據(jù)寄存器中上次接收到的有效數(shù)據(jù)
數(shù)字低通濾波器是由DLPF_CFG來配置,根據(jù)下表中DLPF_CFG的值對加速度傳感器和陀螺儀濾波
3)Register 27 – GyroscopeConfiguration (GYRO_CONFIG)
1)XG_ST設(shè)置此位,X軸陀螺儀進行自我測試。
2)YG_ST設(shè)置此位,Y軸陀螺儀進行自我測試。
3)ZG_ST設(shè)置此位,Z軸陀螺儀進行自我測試。
4)FS_SEL2位無符號值。選擇陀螺儀的量程。
這個寄存器是用來觸發(fā)陀螺儀自檢和配置陀螺儀的滿量程范圍。
陀螺儀自檢允許用戶測試陀螺儀的機械和電氣部分,通過設(shè)置該寄存器的XG_ST、YG_ST和 ZG_STbits可以激活陀螺儀對應(yīng)軸的自檢。每個軸的檢測可以獨立進行或同時進行。
自檢的響應(yīng) =打開自檢功能時的傳感器輸出-未啟用自檢功能時傳感器的輸出
在MPU-6000/MPU-6050數(shù)據(jù)手冊的電氣特性表中已經(jīng)給出了每個軸的限制范圍。當(dāng)自檢的響應(yīng)值在規(guī)定的范圍內(nèi),就能夠通過自檢;反之,就不能通過自檢。
根據(jù)下表,F(xiàn)S_SEL選擇陀螺儀輸出的量程:
4)Register 28 – AccelerometerConfiguration (ACCEL_CONFIG)
1)XA_ST 設(shè)置為1時,X軸加速度感應(yīng)器進行自檢。
2)YA_ST 設(shè)置為1時,Y軸加速度感應(yīng)器進行自檢。
3)ZA_ST 設(shè)置為1時,Z軸加速度感應(yīng)器進行自檢。
4)AFS_SEL 2位無符號值。選擇加速度計的量程。
具體細節(jié)和上面陀螺儀的相似。
根據(jù)下表,AFS_SEL選擇加速度傳感器輸出的量程。
5)Registers 59 to 64 – AccelerometerMeasurements (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軸加速度感應(yīng)器的測量值。
2)ACCEL_YOUT 16位2’s補碼值。
存儲最近的Y軸加速度感應(yīng)器的測量值。
3)ACCEL_ZOUT 16位2’s補碼值。
存儲最近的Z軸加速度感應(yīng)器的測量值。
這些寄存器存儲加速感應(yīng)器最近的測量值。
加速度傳感器寄存器,連同溫度傳感器寄存器、陀螺儀傳感器寄存器和外部感應(yīng)數(shù)據(jù)寄存器,都由兩部分寄存器組成(類似于STM32F10X系列中的影子寄存器):一個內(nèi)部寄存器,用戶不可見。另一個用戶可讀的寄存器。內(nèi)部寄存器中數(shù)據(jù)在采樣的時候及時的到更新,僅在串行通信接口不忙碌時,才將內(nèi)部寄存器中的值復(fù)制到用戶可讀的寄存器中去,避免了直接對感應(yīng)測量值的突發(fā)訪問。
在寄存器28中定義了每個16位的加速度測量值的最大范圍,對于設(shè)置的每個最大范圍,都對應(yīng)一個加速度的靈敏度ACCEL_xOUT,如下面的表中所示:
6)Registers 65 and 66 – TemperatureMeasurement (TEMP_OUT_H andTEMP_OUT_L)
1)TEMP_OUT16位有符號值。
存儲的最近溫度傳感器的測量值。
7)Registers 67 to 72 – GyroscopeMeasurements (GYRO_XOUT_H, GYRO_XOUT_L, GYRO_YOUT_H, GYRO_YOUT_L, GYRO_ZOUT_H,and GYRO_ZOUT_L)
這個和加速度感應(yīng)器的寄存器相似
對應(yīng)的靈敏度:
8)Register 107 – Power Management1 (PWR_MGMT_1)
該寄存器允許用戶配置電源模式和時鐘源。它還提供了一個復(fù)位整個器件的位,和一個關(guān)閉溫度傳感器的位
1)DEVICE_RESET 置1后所有的寄存器復(fù)位,隨后DEVICE_RESET自動置0.
2)SLEEP 置1后進入睡眠模式
3)CYCLE 當(dāng)CYCLE被設(shè)置為1,且SLEEP沒有設(shè)置,MPU-60X0進入循環(huán)模式,為了從速度傳感器中獲得采樣值,在睡眠模式和正常數(shù)據(jù)采集模式之間切換,每次獲得一個采樣數(shù)據(jù)。在LP_WAKE_CTRL(108)寄存器中,可以設(shè)置喚醒后的采樣率和被喚醒的頻率。
4)TEMP_DIS 置1后關(guān)閉溫度傳感器
5)CLKSEL 指定設(shè)備的時鐘源
時鐘源的選擇:
9)Register 117 – Who AmI (WHO_AM_I)
WHO_AM_I中的內(nèi)容是MPU-60X0的6位I2C地址
上電復(fù)位的第6位到第1位值為:110100
為了讓兩個MPU-6050能夠連接在一個I2C總線上,當(dāng)AD0引腳邏輯低電平時,設(shè)備的地址是 b1101000,當(dāng)AD0引腳邏輯高電平時,設(shè)備的地址是 b1101001
(2013.01.24)
淘寶買的貨終于到了,學(xué)習(xí)用所以沒買好的,這個模塊只要18塊錢。
MPU-6000可以使用SPI和I2C接口,而MPU-6050只能使用I2C,其中I2C的地址由AD0引腳決定;寄存器共117個,挺多的,下面的是精簡常用的,根據(jù)具體的要求,適當(dāng)?shù)奶砑印?/p>
#define SMPLRT_DIV 0x19 //采樣率分頻,典型值:0x07(125Hz) */
#define CONFIG 0x1A // 低通濾波頻率,典型值:0x06(5Hz) */
#define GYRO_CONFIG 0x1B // 陀螺儀自檢及測量范圍,典型值:0x18(不自檢,2000deg/s) */
#define ACCEL_CONFIG 0x1C //加速計自檢、測量范圍及高通濾波頻率,典型值:0x01(不自檢,2G,5Hz) */
#define ACCEL_XOUT_H 0x3B // 存儲最近的X軸、Y軸、Z軸加速度感應(yīng)器的測量值 */
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40
#define TEMP_OUT_H 0x41 // 存儲的最近溫度傳感器的測量值 */
#define TEMP_OUT_L 0x42
#define GYRO_XOUT_H 0x43// 存儲最近的X軸、Y軸、Z軸陀螺儀感應(yīng)器的測量值 */
#define GYRO_XOUT_L 0x44
#define GYRO_YOUT_H 0x45
#define GYRO_YOUT_L 0x46
#define GYRO_ZOUT_H 0x47
#define GYRO_ZOUT_L 0x48
#define PWR_MGMT_1 0x6B //電源管理,典型值:0x00(正常啟用) */
#define WHO_AM_I 0x75 //IIC地址寄存器(默認數(shù)值0x68,只讀)*/
編程時用到的關(guān)于I2C協(xié)議規(guī)范:
PS:很多人在MPU6050的I2C地址上面弄不清楚,有人說地址是0x68,也有人說是0xD0,其實這兩個都是可以的,取決于你的I2C驅(qū)動怎么寫,這兩個地址我都試過,沒問題……