STM32两轮自平衡小车(学习记录)——MPU6050

本文介绍如何将MPU6050的原始数据通过DMP内置滤波算法进行处理,重点讲解了移植过程,包括官方代码的整合与自定义中断的设置。适合航模爱好者和工业应用开发者提升控制系统精度。

在这里插入图片描述

摘要

MPU6050是一种非常流行的空间运动传感器芯片,可以获取器件当前的三个加速度分量和三个旋转角速度。由于其体积小巧,功能强大,精度较高,不仅被广泛应用于工业,同时也是航模爱好者的神器,被安装在各类飞行器上驰骋蓝天。

MPU6050的数据是有较大噪音的,若不进行滤波会对整个控制系统的精准确带来严重影响。

MPU6050芯片内自带了一个数据处理子模块DMP,已经内置了滤波算法,在许多应用中使用DMP输出的数据已经能够很好的满足要求。

移植过程

移植需要官方代码
dmpKey.h
dmpmao.h
inv_mpu.c
inv_mpu.h
inv_mpu_dmp_motion_driver.c
inv_mpu_dmp_motion_driver.h

以及
mpu6050.c
mpu6050.h
mpuiic.c
mpuiic.h

再自己写一个中断

void MPU6050_EXTI_Init(void)
{  
		GPIO_InitTypeDef GPIO_InitStructure;
		EXTI_InitTypeDef EXTI_InitStructure;
		NVIC_InitTypeDef NVIC_InitStructure;
	
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	          //INT-B5  
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         //上拉输出
		GPIO_Init(GPIOB, &GPIO_InitStructure);					     
		
		GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5);
	
		EXTI_InitStructure.EXTI_Line=EXTI_Line5;
		EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
		EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
		
		EXTI_InitStructure.EXTI_LineCmd = ENABLE;
		EXTI_Init(&EXTI_InitStructure);	 	
	
		//////////////////外部中断5优先级配置也就是MPU6050 INT引脚配置///////////优先级设为最高
		NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;				
		NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;	
		NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;					
		NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								
		NVIC_Init(&NVIC_InitStructure); 
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值