添加MPU6050陀螺仪模块

添加MPU6050陀螺仪模块

又是新的一天,今天开始撸MPU6050模块!
平衡小车最重要的就是平衡,加入MPU6050陀螺仪模块可以有效控制小车得以平衡!
--------------------------------------------- 分 界 线 ---------------------------------------------------------------------------
MPU6050是个神奇的东西!更确切的说IIC是个神奇的东西!不好好搭建基础,就要做好啃土的准备
-------------------------------------------------------------------------------------------------------------------------------------

1、IIC引脚配置问题

针对MPU6050,其主要通讯在于IIC,如若引脚配置出现问题,则将无法提取相关信息!
其中主要关注有几下几点:
I/O配置(参考了正点原子相关文档)

//初始化IIC
void MPU_IIC_Init(void)
{					     
  GPIO_InitTypeDef  GPIO_InitStructure;
	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//先使能外设IO PORTB时钟 
		
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;	 // 端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIO 
	
  GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9);						 //PB10,PB11 输出高	
}
//IO方向设置
#define MPU_SDA_IN()  {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8<<4;}
#define MPU_SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=3<<4;}

//IO操作函数	 
#define MPU_IIC_SCL    PBout(8) 		//SCL
#define MPU_IIC_SDA    PBout(9) 		//SDA	 
#define MPU_READ_SDA   PBin(9) 		//输入SDA 

以上2个是对引脚的配置信息,其中难以理解的是后面的I/O方向设置,采用了寄存器配置,可能没学过的就难以理解,具体参考芯片手册中I/O输入输出模式寄存器设置相关介绍,而端口配置又分为低寄存器和高寄存器,低寄存器包括(0、1、2、3、4、5、6、7),高寄存器包括(8、9、10、11、12、13、14、15),其中每一位需要配置CNFyMODEy,以此来控制其输入输出模式以及其配置速度!

端口低寄存器配置方法:
在这里插入图片描述
端口高寄存器配置方法
在这里插入图片描述

上面为端口配置方法,下面具体按程序来讲解细节部分,首先此程序配置的SCL为端口PB8、SDA为端口PB9,其余大概都能有所了解下面重点分析一下寄存器配置部分:

//IO方向设置
#define MPU_SDA_IN()  {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8<<4;}
#define MPU_SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=3<<4;}

具体细节只是此处不做详细介绍,博主也是一个渣渣,哈哈,大概意会一下就行~

其中若是对高位寄存器进行配置,则是GPIOB->CRH;若是对低位寄存器进行配置,则是GPIOB->CRL

因为此处对PB9进行定义,而PB9又是在高位的第二个,所以先对此位置零,即0XFFFFFF0F。然后进行配置,此处对于MPU_SDA_IN()来说是需要对PB9口进行上拉/下拉输入模式,因此配置CNFyMODEy位时,参照芯片手册,选择对应模式,得到CNFy配置为10、MODEy配置为00。因此此时需要将此位配置成1000,二进制换算一下就是8。GPIOB->CRH|=8<<4这个就是将8左移四位送至PB9寄存器中!
MPU_SDA_OUT()的配置类似上面,其模式有所不同,配置在输出50MHZ下。

举个例子,如果对PB2进行IIC引脚配置,则相关程序如下:

//IO方向设置
#define MPU_SDA_IN()  {GPIOB->CRL&=0XFFFFF0FF;GPIOB->CRL|=8<<4*2;}
#define MPU_SDA_OUT() {GPIOB->CRL&=0XFFFFF0FF;GPIOB->CRL|=3<<4*2;}

2、DMP数字移动处理器

参考了不少姿态融合运算方案,有的说卡尔曼滤波处理好,有的说DMP处理简单,本博主资历尚浅,不做评价~ 各位图方便直接借用学习就行~

说到底,博主就是菜

3、MPU6050开启注意事项

初始化程序,即开机时,要保持模块处于静态稳定,否则无法初始化,使得无法得到四元数!
这是一个神奇的东西,目前尚未明白其中原因,后续亟待更新,huany若有大佬知晓原理,欢迎留言!

以上相关更新信息,参考了数篇博主文档并加以理解总结而成~ 如有不妥之处,请多指正!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值