zoukankan      html  css  js  c++  java
  • 重力加速度陀螺仪传感器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驱动怎么写,这两个地址我都试过,没问题……

  • 相关阅读:
    为什么 execute(`echo 中文`) 输出中文源码?
    使用图片跨域方式获取图片数据 使用 jsonp 方式跨域获取数据
    js 中的 sleep 方法, 阻塞式
    大数据存储单位介绍(TB、PB、EB、ZB、YB有多大)
    在 chrome 开发工具中使用终端
    作为一个代码搬运工,如何应对突如其来的灵魂拷问『你今天做了什么』?
    JVM相关
    python和C++联合调试
    Google protobuf解析消息逻辑的版本问题
    卷积转换为矩阵运算中填充数的计算-GEMM
  • 原文地址:https://www.cnblogs.com/zhb123456/p/10628016.html
Copyright © 2011-2022 走看看