1、 MPU-60X0 对陀螺仪和加速度计分别用了三个 16 位的 ADC,将其测量的模拟量转化 为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为 250, 500, 1000, 2000/秒( dps),加速度计可测范围为 2, 4, 8,16g。 在网上找了一会,好像 MPU-6050 没有中文的数据手册,由于本人也处于学习阶段,翻译的可能不太准确,只能表达一下简单的意思,以官方数据手册为准。 引脚说明: VDD 供电电压为 2.5V5%、 3.0V5%、 3.3V5%; VDDIO 为 1.8V 5% 内建振荡器在工作温度范围内仅有 1%频率变
2、化 。可选外部时钟输入 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) Reg
3、ister 26 Configuration ( CONFIG) 1) EXT_SYNC_SET 3位无符号值,配置帧同步引脚的采样 2) DLPF_CFG 3位无符号值,配置数字低通滤波器 该寄存器为陀螺仪和加速度计配置外部帧同步( FSYNC)引脚采样和数字低通滤波器( DLPF)。 通过配置 EXT_SYNC_SET,可以对连接到 FSYNC引脚的一个外部信号进行采样。 FSYNC引脚上的信号变化会被锁存,这样就能捕获到很短的频闪信号。 采样结束后,锁存器将复位到当前的 FSYNC信号状态。 根据下面的表格定义的 值,采集到的数据会替换掉数据寄存器中上次接收到的有效数据 数字低通滤波器是
4、由 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可以激活陀螺
5、仪对应轴的自检。每个轴的检测可以独立进行或同时进行。 自检的响应 = 打开自检功能时的传感器 输出 - 未启用自检功能时传感器的输出 在 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
6、设置为 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位 2s补码值。 存储最近的 X轴加速度感应器的测量值。 2) ACCEL_YOUT 16位 2s补
7、码值。 存储最近的 Y轴加速度感应器的测量值。 3) ACCEL_ZOUT 16位 2s补码值。 存储最近的 Z轴加速度感应器的测量值。 这些寄存器存储加速感应器最近的测量值。 加速度传感器寄存器,连同温度传感器寄存器、陀 螺仪传感器寄存器和外部感应数据寄存器,都由两部分寄存器组成(类似于 STM32F10X 系列中的影子寄存器):一个内部寄存器,用户不可见。另一个用户可读的寄存器。内部寄存器中数据在采样的时候及时的到更新,仅在串行通信接口不忙碌时,才将内部寄存器中的值复制到用户可读的寄存器中去,避免了直接对感应测量值的突发访问。 在寄存器 28中定义了每个 16位的加速度测量值的最大范围,对
8、于设置的每个最大范围,都对应一个加速度的灵敏度 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) 这个和加速度感应器的寄存
9、器相似 对应的灵敏度: 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)寄
10、存器中,可以设置唤醒后的采样率和被唤醒的频率。 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) 淘宝买的货终于到了,学习用所以没买好的,这个模
11、块只要 18块钱。 MPU-6000可以使用 SPI和 I2C接口,而 MPU-6050只能使用 I2C,其中 I2C的地址由 AD0引脚决定 ;寄存器共 117个,挺多的,下面的是精简常用的,根据具体的要求,适当的添加。 #define SMPLRT_DIV 0x19 /采样率分频,典型值: 0x07(125Hz) */ #define CONFIG 0x1A / 低通滤波频率,典型值: 0x06(5Hz) */ #define GYRO_CONFIG 0x1B / 陀螺仪自检及测量范围,典型值: 0x18(不自检,2000deg/s) */ #define ACCEL_CONFIG 0x1
12、C / 加速计自检、测量范围及高通滤波频率,典型值: 0x01(不自检, 2G, 5Hz) */ #define ACCEL_XOUT_H 0x3B / 存储最近的 X轴、 Y轴、 Z轴加速度感应器的测量值 */ #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
13、0x42 #define GYRO_XOUT_H 0x43 / 存储最近的 X轴、 Y轴、 Z轴陀螺仪感应器的测量值 */ #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地址寄存器 (默认数值 0x68,只读 ) */ 编程时用到的关于 I2C协议规范: