打印
[其他ST产品]

STM32CubeMX驱动MPU6050模块

[复制链接]
138|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1. MPU6050模块简介
MPU6050模块是一款由InvenSense公司生产的数字运动处理器,它集成了三轴陀螺仪和三轴加速度计,采用MEMS技术,可以通过I2C接口与其他微控制器进行通信。

MPU6050模块中的加速度计和陀螺仪分别测量物体在三个轴上的加速度和角速度。加速度计的输出被称为加速度,而陀螺仪的输出被称为角速度。经过一些复杂的数**算和算法,可以将这些数据转换为物体的姿态、位置和移动方向等信息。

除了加速度计和陀螺仪之外,MPU6050还具有许多其他功能。例如,它内置了一个温度传感器,可以测量环境温度并输出一个温度值;另外,它还包含一个数字低通滤波器,可用于去除高频噪声和干扰。此外,MPU6050还具有两个可编程中断引脚和一些可编程GPIO引脚,使其能够适应不同的应用场景。

MPU6050模块的输出数据可以通过I2C接口传输给其他微控制器或单片机,如Arduino或树莓派等。但是,由于其集成了多种传感器和计算功能,因此对于一些复杂的应用程序而言,这些外部处理器可能无法完成所有的计算任务。为了解决这个问题,MPU6050还支持数字运动处理器(DMP)功能,可以在芯片内部进行一些姿态计算和滤波操作,并将结果输出给外部微控制器或应用程序。

总之,MPU6050模块是一款非常实用的惯性传感器模块,具有高精度、低功耗、多种功能和易于编程等特点。它被广泛应用于机器人、遥控器、运动追踪器、智能家居和其他需要精确运动控制的应用领域。

使用特权

评论回复
沙发
逢dududu必shu|  楼主 | 2023-12-29 00:19 | 只看该作者
2. MPU6050重要寄存器介绍
2.1 数字低通滤波器配置寄存器CONFIG

可以用于设置数字低通滤波器的截止频率、加速度计和角速度计的初始采样率和选择外部同步信号的触发方式。

使用特权

评论回复
板凳
逢dududu必shu|  楼主 | 2023-12-29 00:19 | 只看该作者
DLPF_CFG[2:0]: 数字低通滤波器配置位,用于设置数字低通滤波器的截止频率、加速度计和角速度计初始采样率,加速度计采样率在1KHz时才能有效配置数字低通滤波器截止频率。可选值包括:

DLPF_CFG[2:0]=7:禁用数字低通滤波器,直接输出ADC转换器的数据,对应的截止频率为最高,即不限制频率,此时数据中包含所有频率的噪声,初始采样率为 8kHz。
DLPF_CFG[2:0]=6:截止频率为 5Hz,初始采样率为 1kHz。
DLPF_CFG[2:0]=5:截止频率为 10Hz,初始采样率为 1kHz。
DLPF_CFG[2:0]=4:截止频率为 21Hz,初始采样率为 1kHz。
DLPF_CFG[2:0]=3:截止频率为 44Hz,初始采样率为 1kHz。
DLPF_CFG[2:0]=2:截止频率为 94Hz,初始采样率为 1kHz。
DLPF_CFG[2:0]=1:截止频率为 184Hz,初始采样率为 1kHz。
DLPF_CFG[2:0]=0:截止频率为 260Hz,初始采样率为 8kHz。
需要注意的是,数字低通滤波器的截止频率越高,输出数据的带宽越宽,但也越容易受到高频干扰,数据的噪声也会增加。

使用特权

评论回复
地板
逢dududu必shu|  楼主 | 2023-12-29 00:19 | 只看该作者
EXT_SYNC_SET[2:0]:外部同步信号触发位,用于选择外部同步信号的触发方式。可选值包括:

EXT_SYNC_SET[2:0]=0:禁用外部同步信号。
EXT_SYNC_SET[2:0]=1:选择陀螺仪 X 轴作为外部同步信号。
EXT_SYNC_SET[2:0]=2:选择陀螺仪 Y 轴作为外部同步信号。
EXT_SYNC_SET[2:0]=3:选择陀螺仪 Z 轴作为外部同步信号。
EXT_SYNC_SET[2:0]=4:选择陀螺仪 X 轴的脉冲信号作为外部同步信号。
EXT_SYNC_SET[2:0]=5:选择陀螺仪 Y 轴的脉冲信号作为外部同步信号。
EXT_SYNC_SET[2:0]=6:选择陀螺仪 Z 轴的脉冲信号作为外部同步信号。
EXT_SYNC_SET[2:0]=7:选择从外部信号引脚(EXT_SYNC)接收外部同步信号。

使用特权

评论回复
5
逢dududu必shu|  楼主 | 2023-12-29 00:19 | 只看该作者
DLPF_CFG 和 EXT_SYNC_SET 的设置还可以结合使用,以实现更加精细的滤波和同步控制。具体来说,可以根据不同的需求将数字低通滤波器和外部同步信号结合使用,实现以下功能:

降低噪声和干扰:可以根据具体的应用场景,选择合适的数字低通滤波器截止频率,将高频噪声和干扰滤除,提高数据的准确性和稳定性。
提高同步精度:当需要将多个MPU6050进行同步控制时,可以通过设置外部同步信号,将多个陀螺仪的采样时刻进行同步。这样可以提高同步的精度,减小采样时刻的误差。
需要注意的是,数字低通滤波器和外部同步信号的设置需要根据具体的应用场景和需求进行选择,以达到最优的效果。同时,在进行设置时还需要考虑采样率和带宽的匹配问题,以保证输出数据的准确性和稳定性。

使用特权

评论回复
6
逢dududu必shu|  楼主 | 2023-12-29 00:20 | 只看该作者
2.2 采样率分频寄存器SMPRT_DIV


采样分频寄存器 SMPLRT_DIV 用于设置陀螺仪和加速度计的采样率的分频系数进一部设置采样率,其默认值为 0,当数字低通滤波器中DLPF_CFG[2:0]为7或0时,表示初始采样率为 8kHz;当数字低通滤波器中DLPF_CFG[2:0]为1-6时,表示初始采样率为 1kHz。该寄存器是一个 8位寄存器,最大可设置的采样率为 8kHz。
具体设置方式如下: 采样率计算公式:Sample_Rate = Gyroscope_Output_Rate / (1 +SMPLRT_DIV) 其中Gyroscope_Output_Rate 为陀螺仪的输出频率,在DLPF_CFG[2:0]为0或7时,其默认值为 8kHz。通过修改SMPLRT_DIV 寄存器的值,可以控制 Sample_Rate 的大小,例如:
当 SMPLRT_DIV 的值为 4 时,Sample_Rate = 8000 / (1 + 4) = 1600Hz;
当SMPLRT_DIV 的值为 9 时,Sample_Rate = 8000 / (1 + 9) = 800Hz;
由于陀螺仪和加速度计的采样率是一样的,因此修改 SMPLRT_DIV 寄存器的值也会同时改变加速度计的采样率。
需要注意的是,在修改 SMPLRT_DIV寄存器的值时,需要保证采样率的值符合设定的范围。此外,修改采样率可能会对数据质量产生影响,过高的采样率可能会导致陀螺仪和加速度计的输出数据出现噪声,而过低的采样率则可能会影响姿态解算的精度和响应速度。因此,在实际应用中需要根据具体情况选择合适的采样率和采样频率。

使用特权

评论回复
7
逢dududu必shu|  楼主 | 2023-12-29 00:20 | 只看该作者
2.3 加速度计配置寄存器ACCEL_CONFIG

用于配置加速度计的量程范围、自检和高通滤波器等功能。
AFS_SEL[1:0]:加速度计量程位,用于设置加速度计的量程范围,可选值包括:

AFS_SEL[1:0]=0:±2g。
AFS_SEL[1:0]=1:±4g。
AFS_SEL[1:0]=2:±8g。
AFS_SEL[1:0]=3:±16g。

使用特权

评论回复
8
逢dududu必shu|  楼主 | 2023-12-29 00:20 | 只看该作者
ACCEL_HPF[2:0]: 高通滤波器截止频率配置位。可选值包括:

ACCEL_HPF[2:0]=000:禁用高通滤波器。
ACCEL_HPF[2:0]=001:截止频率为 5Hz。
ACCEL_HPF[2:0]=010:截止频率为 2.5Hz。
ACCEL_HPF[2:0]=011:截止频率为 1.25Hz。
ACCEL_HPF[2:0]=100:截止频率为 0.63Hz。
ACCEL_HPF[2:0]=111:禁用高通滤波器。
说明:相比加速度计的测量值,陀螺仪的测量值通常受到低频振动的影响较小,因此在 MPU6050 中没有对陀螺仪进行高通滤波器配置。

XA_ST、YA_ST、ZA_ST:加速度计自检使能位,用于加速度计的自检功能,这三个位分别对应X、Y、Z轴。当设置为1时,加速度计将进行自检,自检时需要将加速度计放在静止的表面上。自检完成后,这些位将自动清除。正常使用时,这些位应该设置为0。

使用特权

评论回复
9
逢dududu必shu|  楼主 | 2023-12-29 00:21 | 只看该作者
2.4 角速度计配置寄存器GYRO_CONFIG

用于配置角速度计的量程范围和自检测功能等。
FS_SEL[1:0]: 陀螺仪量程选择位,用于设置陀螺仪的量程范围。可选值包括:

FS_SEL[1:0]=0:±250°/s。
FS_SEL[1:0]=1:±500°/s。
FS_SEL[1:0]=2:±1000°/s。
FS_SEL[1:0]=3:±2000°/s。
需要注意的是,量程范围越大,陀螺仪可以测量的角速度范围也越大,但精度也会相应降低。

使用特权

评论回复
10
逢dududu必shu|  楼主 | 2023-12-29 00:21 | 只看该作者
XG_ST, YG_ST, ZG_ST: 陀螺仪自检测使能位,用于启用或禁用陀螺仪自检测功能。当这些位被置为 1 时,陀螺仪会进行自检测,通过比较自检测前后的输出数据来检测陀螺仪是否正常工作。这些位域的具体含义如下:

XG_ST:启用或禁用 X 轴陀螺仪的自检测功能。
YG_ST:启用或禁用 Y 轴陀螺仪的自检测功能。
ZG_ST:启用或禁用 Z 轴陀螺仪的自检测功能。
需要注意的是,陀螺仪自检测功能只适用于陀螺仪,不适用于加速度计。

使用特权

评论回复
11
逢dududu必shu|  楼主 | 2023-12-29 00:21 | 只看该作者
举例:
如果要将陀螺仪的量程范围设置为±500°/s,并启用 X 轴的自检测功能,可以将 GYRO_CONFIG 寄存器设置为 0x88=1000 1000,其中:

GYRO_FS_SEL[1:0]=01,表示选择±500°/s的量程范围。
XG_ST=1,表示启用 X 轴陀螺仪的自检测功能。
YG_ST=0,表示禁用 Y 轴陀螺仪的自检测功能。
ZG_ST=0,表示禁用 Z 轴陀螺仪的自检测功能。

使用特权

评论回复
12
逢dududu必shu|  楼主 | 2023-12-29 00:21 | 只看该作者
3. 移植源码到工程
提前创建一个文件夹,用来存放工程(文件夹路径建议全英文)
打开STM32CubeMX,选择芯片(这里选择STM32F103ZET6),配置Debug,ST-LINK选择Serial Wire。

使用特权

评论回复
13
逢dududu必shu|  楼主 | 2023-12-29 00:21 | 只看该作者
使能HSE和LSE,配置时钟频率为72M。

使用特权

评论回复
14
逢dududu必shu|  楼主 | 2023-12-29 00:21 | 只看该作者

使用特权

评论回复
15
逢dududu必shu|  楼主 | 2023-12-29 00:22 | 只看该作者
由于要使用OLED模块显示采集到的加速度、角速度和温度数据,因此配置硬件IIC,这里使能IIC1,对应STM32F103ZET6引脚为PB6和PB7。

使用特权

评论回复
16
逢dududu必shu|  楼主 | 2023-12-29 00:22 | 只看该作者
因为MPU6050常用通信协议为IIC,因此使能IIC2,对应STM32F103ZET6引脚为PB10和PB11。

使用特权

评论回复
17
逢dududu必shu|  楼主 | 2023-12-29 00:22 | 只看该作者
创建工程名,配置编译环境。

使用特权

评论回复
18
逢dududu必shu|  楼主 | 2023-12-29 00:22 | 只看该作者
这里用keil5编译,因此选择MDK-ARM-V5。
点击配置代码生成器并生成代码。

使用特权

评论回复
19
逢dududu必shu|  楼主 | 2023-12-29 00:22 | 只看该作者
点击GENERATE CODE即可生成代码。
打开工程存放的位置。
移植MPU6050相关的.h和.c文件到工程中。
说明:MPU6050.h中是一些宏定义和MPU6050相关的函数声明,MPU6050.c中是MPU6050相关函数的定义。
将MPU6050.h、oled.h和oledfont.h文件复制到工程文件目录MPU6050_test\Core\Inc中

使用特权

评论回复
20
逢dududu必shu|  楼主 | 2023-12-29 00:23 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

320

帖子

0

粉丝