您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子元器件>传感器>

初始化 - mpu6050六轴传感器模块驱动程序源代码分享

2017年12月11日 14:26 网络整理 作者: 用户评论(0

  接下来,我们介绍一下利用STM32F1读取MPU6050的加速度和角度传感器数据(非中断方式),需要哪些初始化步骤:

  1)初始化IIC接口

  MPU6050采用IIC与STM32F1通信,所以我们需要先初始化与MPU6050连接的SDA和SCL数据线。

  2)复位MPU6050

  这一步让MPU6050内部所有寄存器恢复默认值,通过对电源管理寄存器1(0X6B)的bit7写1实现。复位后,电源管理寄存器1恢复默认值(0X40),然后必须设置该寄存器为0X00,以唤醒MPU6050,进入正常工作状态。

  3)设置角速度传感器(陀螺仪)和加速度传感器的满量程范围

  这一步,我们设置两个传感器的满量程范围(FSR),分别通过陀螺仪配置寄存器(0X1B)和加速度传感器配置寄存器(0X1C)设置。我们一般设置陀螺仪的满量程范围为±2000dps,加速度传感器的满量程范围为±2g。

  4)设置其他参数

  这里,我们还需要配置的参数有:关闭中断、关闭AUXIIC接口、禁止FIFO、设置陀螺仪采样率和设置数字低通滤波器(DLPF)等。本章我们不用中断方式读取数据,所以关闭中断,然后也没用到AUXIIC接口外接其他传感器,所以也关闭这个接口。分别通过中断使能寄存器(0X38)和用户控制寄存器(0X6A)控制。MPU6050可以使用FIFO存储传感器数据,不过本章我们没有用到,所以关闭所有FIFO通道,这个通过FIFO使能寄存器

  (0X23)控制,默认都是0(即禁止FIFO),所以用默认值就可以了。陀螺仪采样率通过采

  样率分频寄存器(0X19)控制,这个采样率我们一般设置为50即可。数字低通滤波器(DLPF)则通过配置寄存器(0X1A)设置,一般设置DLPF为带宽的1/2即可。

  5)配置系统时钟源并使能角速度传感器和加速度传感器

  系统时钟源同样是通过电源管理寄存器1(0X1B)来设置,该寄存器的最低三位用于设置系统时钟源选择,默认值是0(内部8MRC震荡),不过我们一般设置为1,选择x轴陀螺PLL作为时钟源,以获得更高精度的时钟。同时,使能角速度传感器和加速度传感器,这两个操作通过电源管理寄存器2(0X6C)来设置,设置对应位为0即可开启。

  至此,MPU6050的初始化就完成了,可以正常工作了(其他未设置的寄存器全部采用默认值即可),接下来,我们就可以读取相关寄存器,得到加速度传感器、角速度传感器和温度传感器的数据了。

  首先,我们介绍电源管理寄存器1,该寄存器地址为0X6B,各位描述如图1.1.3所示:

  mpu6050六轴传感器模块驱动程序源代码分享

  图1.1.3电源管理寄存器1各位描述

  其中,DEVICE_RESET位用来控制复位,设置为1,复位MPU6050,复位结束后,MPU硬件自动清零该位。SLEEEP位用于控制MPU6050的工作模式,复位后,该位为1,即进入了睡眠模式(低功耗),所以我们要清零该位,以进入正常工作模式。TEMP_DIS用于设置是否使能温度传感器,设置为0,则使能。最后CLKSEL[2:0]用于选择系统时钟源,选择关系如表1.1.1所示:

  表1.1.1CLKSEL选择列表

  mpu6050六轴传感器模块驱动程序源代码分享

  mpu6050六轴传感器模块驱动程序源代码分享

  默认是使用内部8MRC晶振的,精度不高,所以我们一般选择X/Y/Z轴陀螺作为参考的PLL作为时钟源,一般设置CLKSEL=001即可。

  接着,我们看陀螺仪配置寄存器,该寄存器地址为:0X1B,各位描述如图1.1.4所示:

  mpu6050六轴传感器模块驱动程序源代码分享

  图1.1.4陀螺仪配置寄存器各位描述

  该寄存器我们只关心FS_SEL[1:0]这两个位,用于设置陀螺仪的满量程范围:0,±250°/S;1,±500°/S;2,±1000°/S;3,±2000°/S;我们一般设置为3,即±2000°/S,因为陀螺仪的ADC为16位分辨率,所以得到灵敏度为:65536/4000=16.4LSB/(°/S)。

  接下来,我们看加速度传感器配置寄存器,寄存器地址为:0X1C,各位描述如图1.1.5所示:

  mpu6050六轴传感器模块驱动程序源代码分享

  图1.1.5加速度传感器配置寄存器各位描述

  该寄存器我们只关心AFS_SEL[1:0]这两个位,用于设置加速度传感器的满量程范围:0,±2g;1,±4g;2,±8g;3,±16g;我们一般设置为0,即±2g,因为加速度传感器的ADC也是16位,所以得到灵敏度为:65536/4=16384LSB/g。

  接下来,我看看FIFO使能寄存器,寄存器地址为:0X1C,各位描述如图1.1.6所示:

  mpu6050六轴传感器模块驱动程序源代码分享

  图1.1.6FIFO使能寄存器各位描述

  该寄存器用于控制FIFO使能,在简单读取传感器数据的时候,可以不用FIFO,设置对应位为0即可禁止FIFO,设置为1,则使能FIFO。注意加速度传感器的3个轴,全由1个位(ACCEL_FIFO_EN)控制,只要该位置1,则加速度传感器的三个通道都开启FIFO了。

  接下来,我们看陀螺仪采样率分频寄存器,寄存器地址为:0X19,各位描述如图1.1.7所示:

  mpu6050六轴传感器模块驱动程序源代码分享

  图1.1.7陀螺仪采样率分频寄存器各位描述

  该寄存器用于设置MPU6050的陀螺仪采样频率,计算公式为:

  采样频率=陀螺仪输出频率/(1+SMPLRT_DIV)

  这里陀螺仪的输出频率,是1Khz或者8Khz,与数字低通滤波器(DLPF)的设置有关,当DLPF_CFG=0/7的时候,频率为8Khz,其他情况是1Khz。而且DLPF滤波频率一般设置为采样率的一半。采样率,我们假定设置为50Hz,那么SMPLRT_DIV=1000/50-1=19。

非常好我支持^.^

(254) 99.6%

不好我反对

(1) 0.40000000000001%

( 发表人:金巧 )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!