MPU-60X0是全球首例9軸運動處理傳感器。它集成了3軸MEMS陀螺儀,3軸MEMS
加速度計,以及一個可擴展的數(shù)字運動處理器DMP(Digital Motion Processor),可用I2C
接口連接一個第三方的數(shù)字傳感器,比如磁力計。擴展之后就可以通過其I2C或SPI接口
輸出一個9軸的信號(SPI接口僅在MPU-6000可用)。MPU-60X0也可以通過其I2C接口
連接非慣性的數(shù)字傳感器,比如壓力傳感器。
MPU-60X0對陀螺儀和加速度計分別用了三個16位的ADC,將其測量的模擬量轉化
為可輸出的數(shù)字量。為了精確跟蹤快速和慢速的運動,傳感器的測量范圍都是用戶可控的,
陀螺儀可測范圍為±250,±500,±1000,±2000°/秒(dps),加速度計可測范圍為±2,±4,±8,±16g
對MPU6050的配置主要需要1.上電檢測芯片序列號,自檢2.設定加速度陀螺儀的閾值和檢測頻率3.設定外部鏈接設備的驅動模式以及地址4.設定中斷模式,比如要打開自由落體中斷需要的設置,數(shù)據準備好中斷需要的設置等5.設定電源管理模式,防止進入休眠6.循環(huán)讀取數(shù)據
MPU輸出一共三種數(shù)據,包括陀螺儀輸出加速度傳感器輸出和溫度輸出,溫度輸出需要計算,計算方法是讀出16位溫度數(shù)據temp,然后temp/340.0 + 36.53
另外,中斷引腳的模式也是可以配置的,詳細的說明在MPU6050驅動的頭文件中有,包含每一個寄存器的說明,請查看源碼,如下
1.MPU6050.h
#ifndef__MPU6050_H_
#define__MPU6050_H_
#include"common.h"
#include"ioremap.h"
#include"stm32f10x.h"
#include"delay.h"
#include"uart.h"
#defineMPU_ACK_WAIT_TIME200//us
#defineMPU6050_ADDRESS_AD0_LOW0xD0//AD0為低的時候設備的寫地址
#defineMPU6050_ADDRESS_AD0_HIGH0XD1//AD0為高的時候設備的寫地址
#defineMPU_ADDR0xD0//IIC寫入時的地址字節(jié)數(shù)據
#defineMPU_DEBUG1
//技術文檔未公布的寄存器主要用于官方DMP操作
#defineMPU6050_RA_XG_OFFS_TC0x00//[bit7]PWR_MODE,[6:1]XG_OFFS_TC,[bit0]OTP_BNK_VLD
#defineMPU6050_RA_YG_OFFS_TC0x01//[7]PWR_MODE,[6:1]YG_OFFS_TC,[0]OTP_BNK_VLD
//bit7的定義,當設置為1,輔助I2C總線高電平是VDD。當設置為0,輔助I2C總線高電平是VLOGIC
#defineMPU6050_RA_ZG_OFFS_TC0x02//[7]PWR_MODE,[6:1]ZG_OFFS_TC,[0]OTP_BNK_VLD
#defineMPU6050_RA_X_FINE_GAIN0x03//[7:0]X_FINE_GAIN
#defineMPU6050_RA_Y_FINE_GAIN0x04//[7:0]Y_FINE_GAIN
#defineMPU6050_RA_Z_FINE_GAIN0x05//[7:0]Z_FINE_GAIN
#defineMPU6050_RA_XA_OFFS_H0x06//[15:0]XA_OFFS兩個寄存器合在一起
#defineMPU6050_RA_XA_OFFS_L_TC0x07
#defineMPU6050_RA_YA_OFFS_H0x08//[15:0]YA_OFFS兩個寄存器合在一起
#defineMPU6050_RA_YA_OFFS_L_TC0x09
#defineMPU6050_RA_ZA_OFFS_H0x0A//[15:0]ZA_OFFS兩個寄存器合在一起
#defineMPU6050_RA_ZA_OFFS_L_TC0x0B
#defineMPU6050_RA_XG_OFFS_USRH0x13//[15:0]XG_OFFS_USR兩個寄存器合在一起
#defineMPU6050_RA_XG_OFFS_USRL0x14
#defineMPU6050_RA_YG_OFFS_USRH0x15//[15:0]YG_OFFS_USR兩個寄存器合在一起
#defineMPU6050_RA_YG_OFFS_USRL0x16
#defineMPU6050_RA_ZG_OFFS_USRH0x17//[15:0]ZG_OFFS_USR兩個寄存器合在一起
#defineMPU6050_RA_ZG_OFFS_USRL0x18
/*陀螺儀的采樣頻率*/
/*傳感器的寄存器輸出,FIFO輸出,DMP采樣、運動檢測、
*零運動檢測和自由落體檢測都是基于采樣率。
*通過SMPLRT_DIV把陀螺儀輸出率分頻即可得到采樣率
*采樣率=陀螺儀輸出率/(1+SMPLRT_DIV)
*禁用DLPF的情況下(DLPF_CFG=0或7),陀螺儀輸出率=8khz
*在啟用DLPF(見寄存器26)時,陀螺儀輸出率=1khz
*加速度傳感器輸出率是1khz。這意味著,采樣率大于1khz時,
*同一個加速度傳感器的樣品可能會多次輸入到FIFO、DMP和傳感器寄存器*/
#defineMPU6050_RA_SMPLRT_DIV0x19//[0-7]陀螺儀輸出分頻采樣率
/*配置外部引腳采樣和DLPF數(shù)字低通濾波器*/
#defineMPU6050_RA_CONFIG0x1A
//bit5-bit3一個連接到FSYNC端口的外部信號可以通過配置EXT_SYNC_SET來采樣
//也就是說,這里設置之后,FSYNC的電平0或1進入最終數(shù)據寄存器,具體如下
//0不使用1FSYNC電平進入所有數(shù)據寄存器2FSYNC電平進入GYRO_XOUT_L3FSYNC電平進入GYRO_YOUT_L
//4FSYNC電平進入GYRO_ZOUT_L5FSYNC電平進入ACCEL_XOUT_L6FSYNC電平進入ACCEL_YOUT_L
//7FSYNC電平進入SYNC_ACCEL_ZOUT_L
//bit2-bit0數(shù)字低通濾波器用于濾除高頻干擾高于這個頻率的干擾被濾除掉
/*對應關系如下
**|加速度傳感器|陀螺儀
**DLPF_CFG|帶寬|延遲|帶寬|延遲|采樣率
*-------------+--------+-------+--------+------+-------------
*0|260Hz|0ms|256Hz|0.98ms|8kHz
*1|184Hz|2.0ms|188Hz|1.9ms|1kHz
*2|94Hz|3.0ms|98Hz|2.8ms|1kHz
*3|44Hz|4.9ms|42Hz|4.8ms|1kHz
*4|21Hz|8.5ms|20Hz|8.3ms|1kHz
*5|10Hz|13.8ms|10Hz|13.4ms|1kHz
*6|5Hz|19.0ms|5Hz|18.6ms|1kHz
*7|Reserved|Reserved|Reserved
**/
/*陀螺儀的配置,主要是配置陀螺儀的量程與自檢(通過相應的位765開啟自檢)*/
#defineMPU6050_RA_GYRO_CONFIG0x1B
//bit4-bit3量程設置如下
//0=+/-250度/秒
// 1 = +/- 500 度/秒