32初学mpu6050小结

欧拉角

四元数,万向节死锁

详解四元数与旋转_零度蛋花粥的博客-CSDN博客_四元数 旋转

寄存器

在这里插入图片描述

 寄存器地址:0x6B(01101011)

DEVICE_RESE=1,复位MPU6050,复位完成后,自动清零。

SLEEP=1,进入睡眠模式;SLEEP=0,正常工作模式。

TEMP_DIS,用于设置是否使能温度传感器,设置为0,则使能CLKSEL[2:0],用于选择系统时钟源,如下所示:

CLKSEL[2:0]    时钟源
001    内部8M RC晶振
010    PLL,使用X轴陀螺作为参考
011    PLL,使用Y轴陀螺作为参考
100    PLL,使用Z轴陀螺作为参考
101    PLL,使用外部32.768Khz作为参考
110    PLL,使用外部19.2Mhz作为参考
11    保留
001    关闭时钟,保持时序产生电路复位状态
在这里插入图片描述

该寄存器用于控制FIFO使能,在简单读取传感器数据的时候,可以不用FIFO,设置对应位为:0,即可禁止FIFO,设置为1,则使能FIFO。加速度传感器的三个轴,全由一个位(ACCEL_FIFO_EN)控制,只要该位为1,则加速度传感器三个通道都开启FIFO;但是陀螺仪传感器的三个轴需要一个一个设置,即XYZ轴分别配置。
在这里插入图片描述

 该寄存器用于设置MPU6050的陀螺仪采样频率,计算公式为:采样频率 = 陀螺仪输出频率 / (1+SMPLRT_DIV)。(相当于分频)这里陀螺仪的输出频率,是1Khz或者8Khz,与数字低通滤波器(DLPF)的设置有关,当DLPF_CFG=0或7的时候,频率为8Khz,其他情况是1Khz。而且DLPF滤波频率一般设置为采样率的一半。采样率,我们假定设置为50Hz,那么:SMPLRT_DIV=1000/50-1=19。
总之,陀螺仪采样率分频寄存器就是用于设置陀螺仪的采样频率,如果采样频率为50Hz,那么采样周期就为1/50=20ms,即20ms采集一次陀螺仪的数据。
在这里插入图片描述

 配置寄存器就是设置数字低通滤波器的DLPF_CFG位来结合陀螺仪采样分频寄存器来共同设置采样周期。

遇到的问题

初始化失败------- 移植官方文件后,ii2没有问题,地址没有问题,延时没问题,最后发现不能用面包板去连线

,直接将引脚连接到芯片上就行了,而且可能初始化前十几次都不成功,一直等个10多秒就成了(痛啊,初始化了快一天)

输出问题------全为0,尽然是延时问题,

while(1)
		{
		//	delay_ms(800);用了延时函数,三个角度全部为0,切记,切记
			if(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0)
			{
			printf("俯仰角:%2d 翻滚角:%2d 偏航角:%2d\r\n",(int)pitch,(int)roll,(int)yaw);
		//	delay_ms(800);用了延时函数,三个角度全部为0,切记,切记
			
				for( i=0;i<10000;i++)//一重延时数据正常,但数据输出速度几乎没有延时
				{
//				for( j=1;j<500;j++)
//					{}//二重延时也全是0
				}
			}
		}

所以在获取数据时不要延时。

一段时间后后输出数据不变-----引脚电压连接不稳,接外界5V,焊死,焊死

yaw偏航角不准------没办法,硬件问题,结合地磁传感器

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MPU6050是一种常用的六轴传感器,用于测量加速度和角速度。在STM32CubeMX中使用MPU6050需要进行一些配置和编程。 首先,需要将MPU6050的相关文件复制到工程文件目录中。将MPU6050.h和MPU6050.c文件复制到工程文件目录的Core\Inc和Core\Src文件夹中。同时,还需要将oled.h和oledfont.h文件复制到Core\Inc文件夹中。 接下来,在MDK-ARM目录中找到UVPROJX文件,双击打开。在打开的界面中,按照提示进行操作,确保MPU6050.h被包含在MPU6050.c目录下,而oled.h和oledfont.h被包含在oled.c目录下。 在驱动源码中,MPU6050.h文件中包含了一些宏定义和MPU6050相关的函数声明。而MPU6050.c文件中则包含了MPU6050相关函数的定义。这些函数可以用于初始化MPU6050设备、写入寄存器数据和读取寄存器数据等操作。 其中,MPU6050_ReadTemp函数用于读取MPU6050芯片的温度值,返回值为摄氏度。该函数需要传入一个MPU6050设备结构体指针作为参数。 另外,MPU6050_WriteReg函数用于写入MPU6050寄存器的数据,需要传入MPU6050设备结构体指针、寄存器地址和要写入的数据作为参数。而MPU6050_ReadReg函数则用于读取MPU6050寄存器的数据,需要传入MPU6050设备结构体指针、寄存器地址、存储读取数据的缓冲区指针和要读取的数据长度作为参数。 通过使用这些函数,可以实现对MPU6050的配置和数据读写操作。 #### 引用[.reference_title] - *1* *2* *3* [STM32CubeMX驱动MPU6050模块](https://blog.csdn.net/qq_52158753/article/details/130390227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值