[其他ST产品] STM32 使用DMP库处理MPU6050数据

[复制链接]
 楼主| 和下土 发表于 2022-5-28 19:48 | 显示全部楼层 |阅读模式
1、实验分析
MPU6050包含一个三轴陀螺仪,三轴加速度计,并且可以通过AUX_CL和AUX_DA再扩展一个磁力计,内部设有一个可扩展的数字运动处理器DMP,可以将欧拉角以四元数的形式输出。本次实验我们使用DMP库对MPU6050初始化并



评论

原文链接:https://blog.csdn.net/qq_44011116/article/details/113738183  发表于 2022-5-28 19:49
 楼主| 和下土 发表于 2022-5-28 19:49 | 显示全部楼层
2、实验前准备
使用DMP库需要在MPU官方下载固件并将下面六个导入工程
2781662920c5022a85.png
并且在固件库中需要进行一定的设定。
 楼主| 和下土 发表于 2022-5-28 19:50 | 显示全部楼层
在inv_mpu.c文件中预留有调用文件的接口,需要我们提前设定一下
首先

  1. #define MPU6050 //定义我们使用的传感器为MPU6050
  2. #define MOTION_DRIVER_TARGET_MSP430 //定义驱动部分,采用MSP430的驱动(移植到STM32F1)
 楼主| 和下土 发表于 2022-5-28 19:51 | 显示全部楼层
其次
要对接接口函数
/* The following functions must be defined for this platform:
1. i2c_write(unsigned char slave_addr, unsigned char reg_addr,
2.      unsigned char length, unsigned char const *data)
3. i2c_read(unsigned char slave_addr, unsigned char reg_addr,
4.      unsigned char length, unsigned char *data)
5. delay_ms(unsigned long num_ms)
6. get_ms(unsigned long *count)
7. reg_int_cb(void (*cb)(void), unsigned char port, unsigned char pin)
8. labs(long x)
9. fabsf(float x)
10. min(int a, int b)
*/
#define i2c_write   MPU_Write_Len
#define i2c_read    MPU_Read_Len
#define delay_ms    delay_ms
#define get_ms      mget_ms
#define log_i         printf        //打印信息
#define log_e          printf        //打印信息
 楼主| 和下土 发表于 2022-5-28 19:52 | 显示全部楼层
按照官方注释的要求,接口函数的入口参数必须按照要求对齐,否则将无法使用DMP库函数。
 楼主| 和下土 发表于 2022-5-28 19:52 | 显示全部楼层
3、实验分析
上一次我们编写了软模拟IIC的程序,本次需要增加IIC连续写和连续读,这样我们才可以直接操作MPU中的寄存器。
 楼主| 和下土 发表于 2022-5-28 19:53 | 显示全部楼层
操作步骤:
IIC初始化-》MPU的初始化-》DMP库初始化-》使用库函数读取数据
(1)MPU初试步骤

设置AD0引脚电平(低电平,从机地址为0x68;高电平,从机地址为0x69)
IIC初始化
复位从机,唤醒从机
设置陀螺仪、加速度计、设置采样速率
关闭所有中断、IIC主模式关闭、关闭FIFO
设置INT引脚低电平有效
判断从机地址是否正确
设置正方向
使能陀螺仪和加速度计
 楼主| 和下土 发表于 2022-5-28 19:54 | 显示全部楼层
4、MPU6050寄存器分析
1、自检寄存器
63962920d53459d0.png
MPU自检寄存器,会产生自检反馈:STR=Gyroscope Output with Self Test Enabled — Gyroscope Output with Self Test Disabled。可以判断自检成功or失败
 楼主| 和下土 发表于 2022-5-28 19:54 | 显示全部楼层
2、采样频率分频器
2001362920d877eecb.png
传感器寄存器输出, FITO 输出, DMP 采样, Motion 检测, Zero Motion 检测和 Free Fall检测都基于这个采样频率。
 楼主| 和下土 发表于 2022-5-28 19:55 | 显示全部楼层
采样频率=陀螺仪输出频率/( 1+SMPLRT_DIV)
陀螺仪的输出频率是1KHz或者8KHz,与数字低通滤波器(DLPF)有关,当DLPF_CFG=0/7时,频率为8K,其他为1K,而且 DLPF 滤波频率一般设置为采样率的一半。采样率,我们假定设置为 50Hz,那么SMPLRT_DIV=1000/50-1=19。
 楼主| 和下土 发表于 2022-5-28 19:56 | 显示全部楼层
3、陀螺仪配置寄存器
2293762920debac8f3.png
这个寄存器我们只需要设置FS_SEL位,用于设置陀螺仪满量程范围:0,±250°/s;1,±500°/s;2,±1000°/s;3,±2000°/s
陀螺仪为16位的ADC,所以灵敏度可以达到65536/4000=16.4LSB/(° /S)。
 楼主| 和下土 发表于 2022-5-28 19:56 | 显示全部楼层
4、加速度计配置寄存器
8958962920e094c577.png
和陀螺仪一样,只需要设置AFS_SEL位,0,±2g; 1,±4g; 2,±8g; 3,±16g;我们一般设置为 0,即±2g,因为加速度传感器的 ADC,也是 16 位,所以得到灵敏度为: 65536/4=16384LSB/g。
 楼主| 和下土 发表于 2022-5-28 19:58 | 显示全部楼层
5、FIFO使能寄存器
3750662920e4be739b.png
该寄存器用于控制 FIFO 使能,在简单读取传感器数据的时候,可以不用 FIFO,设置对应位为 0 即可禁止 FIFO,设置为 1,则使能 FIFO。注意加速度传感器的 3 个轴,全由 1 个位(ACCEL_FIFO_EN)控制,只要该位置 1,则加速度传感器的三个通道都开启 FIFO。
 楼主| 和下土 发表于 2022-5-28 19:59 | 显示全部楼层
6、配置寄存器
3435962920ea01810d.png
 楼主| 和下土 发表于 2022-5-28 20:00 | 显示全部楼层
这里的DLPF_CFG位就是数字低通滤波器的设置位
8118962920eb6c120f.png
 楼主| 和下土 发表于 2022-5-28 20:01 | 显示全部楼层
一般我们设置角速度传感器的带宽为其采样率的一半,比如前面设置的采样率为100Hz,那么带宽就应该设置50Hz,取表中角速度近似值42Hz,就应该设置DLPF_CFG=011;
 楼主| 和下土 发表于 2022-5-28 20:02 | 显示全部楼层
7、电源管理寄存器1
6526062920f3656e98.png
DEVICE_RESET 位用来控制复位,设置为 1,复位 MPU6050,复位结束后, MPU硬件自动清零该位。
SLEEEP 位用于控制 MPU6050 的工作模式,复位后,该位为 1,即进入了睡眠模式(低功耗),所以我们要清零该位,以进入正常工作模式。
TEMP_DIS 用于设置是否使能温度传感器,设置为 0,则使能。
 楼主| 和下土 发表于 2022-5-28 20:03 | 显示全部楼层
CLKSEL[2:0]用于选择系统时钟源
6840062920f7dda54b.png
内部8M晶振,不太准确,一般采用X轴的PLL作为时钟源
 楼主| 和下土 发表于 2022-5-28 20:03 | 显示全部楼层
8、电源管理寄存器2
3038462920f9c16704.png
LP_WAKE_CTRL 用于控制低功耗时的唤醒频率,用不到。
剩下的 6 位,分别控制加速度和陀螺仪的 x/y/z 轴是否进入待机模式,这里我们全部都不进入待机模式,所以全部设置为 0 即可。
 楼主| 和下土 发表于 2022-5-28 20:04 | 显示全部楼层
9、数据输出寄存器
陀螺仪数据输出寄存器,总共有 6 个寄存器组成,
地址为: 0X43~0X48,
通过读取这 6 个寄存器,就可以读到陀螺仪 x/y/z 轴的值,
比如 x 轴的数据,可以通过读取 0X43(高 8 位)和 0X44(低 8 位)寄存器得到,其他轴以此类推。
同样,加速度传感器数据输出寄存器,也有 6 个,地址为: 0X3B~0X40,
通过读取这 6 个寄存器,就可以读到加速度传感器 x/y/z 轴的值,
比如读 x 轴的数据,可以通过读取 0X3B(高8 位)和 0X3C(低 8 位)寄存器得到,其他轴以此类推。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

108

主题

1366

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

108

主题

1366

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部