MPU6050的使用


前言

本文章使用开发板正点原子STM32F407核心板,配置模拟iic来使用mpu6050陀螺仪。
配套代码可在我的资源中免费下载,仅供参考!


一、MPU6050配置步骤:

1.初始化IIC接口
初始化与MPU6050连接的SDA和SCL数据线。
2.复位MPU6050
MPU的地址由D0引脚决定,D0接地了,则地址为0x68;若接VDD,则地址为0x69.
通过对电源管理寄存器1(0x6b)的bit7位写1实现对MPU6050复位。复位后默认值位0X40,设置该寄存器为0x00唤醒MPU6050.
3.设置角速度传感器和加速度传感器的满量程范围
陀螺仪配置寄存器(0x1B)和加速度传感器配置寄存器(0x1C)。分别为+_2000dps、±2g.
4.设置其它参数
关中断,关AUX IIC接口,禁止FIFO,设置陀螺仪采样率和设置数字低通滤波器(DLPF).
分别通过中断使能寄存器
(0X38)和用户控制寄存器(0X6A)控制,通过 FIFO 使能寄存器(0X23)控制,默
认都是 0(即禁止 FIFO),采样率分频寄存器(0X19)
控制:50.数字低通滤波器(DLPF)寄存器(0X1A)
带宽的 1/2 。
5.配置系统时钟源并使能角速度传感器和加速度传感器
系统时钟源:电源管理寄存器 1(0X6B)
使能角速度传感器和加速度传感器:电源管理寄存器 2(0X6C)
陀螺仪配置寄存器,该寄存器地址为: 0X1B在这里插入图片描述只关心 FS_SEL[1:0]这两个位,用于设置陀螺仪的满量程范围
加速度传感器配置寄存器,寄存器地址为: 0X1C
在这里插入图片描述
只关心 AFS_SEL[1:0]这两个位,用于设置加速度传感器的满量程范围

FIFO 使能寄存器,寄存器地址为: 0X23在这里插入图片描述
可以不用 FIFO,设置对应
位为 0 即可禁止 FIFO,设置为 1,则使能 FIFO。

陀螺仪采样率分频寄存器,寄存器地址为: 0X19
在这里插入图片描述
采样频率 = 陀螺仪输出频率 / (1+SMPLRT_DIV)
假定设置为 50Hz,那么 SMPLRT_DIV=1000/50-1=19。

配置寄存器,寄存器地址为: 0X1A在这里插入图片描述
主要关心数字低通滤波器(DLPF)的设置位,即: DLPF_CFG[2:0],

电源管理寄存器 2,寄存器地址为: 0X6C
在这里插入图片描述

二、使用步骤

1.修改模拟iic的硬件接口

代码如下(示例):

AD0-->GND
SCL-->PC4
SDA-->PC5
INT-->PC0

//初始化IIC  SCL/SDA
void IIC_Init(void)
{			
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟

  //GPIOC4,C5初始化设置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化
  IIC_SCL=1;
  IIC_SDA=1;
}



//IO方向设置
#define SDA_IN()  {GPIOC->MODER&=~(3<<(5*2));GPIOC->MODER|=0<<5*2;}	//PC5输入模式
#define SDA_OUT() {GPIOC->MODER&=~(3<<(5*2));GPIOC->MODER|=1<<5*2;} //PC5输出模式

//IO操作函数	 
#define IIC_SCL    PCout(4) //SCL
#define IIC_SDA    PCout(5) //SDA	 
#define READ_SDA   PCin(5)  //输入SDA 

//INT
GPIO_InitTypeDef  GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);//先使能外设IO PORTA时钟 
	
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;	 // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; 		 //推挽输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;		 //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);					
	

2.读入数据

代码如下(示例):

temp=MPU_Get_Temperature();	//得到温度值
MPU_Get_Accelerometer(&aacx,&aacy,&aacz);	//得到加速度传感器数据
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);	//得到陀螺仪数据
if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//用自定义帧发送加速度和陀螺仪原始数据
if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));

总结

1.陀螺仪数据输出寄存器,总共有 6 个寄存器组成,地址为: 0X43~0X48, 通过读取这 6 个寄存器,就可以读到陀螺仪 x/y/z 轴的值 ,比如 x 轴的数据,可以通过读取 0X43 (高 8 位)和 0X44(低 8 位)寄存器得到,其他轴以此类推。 2.加速度传感器数据输出寄存器,也有 6 个,地址为: 0X3B~0X40,通过读取这 6 个 寄存器,就可以读到加速度传感器 x/y/z 轴的值 ,比如读 x 轴的数据,可以通过读取 0X3B(高 8 位)和 0X3C(低 8 位)寄存器得到,其他轴以此类推。 3.温度传感器的值,可以通过读取 0X41(高 8 位)和 0X42(低 8 位)寄存器得到 , 温度换算公式为: Temperature = 36.53 + regval/340
  • 10
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值