MPU6050详解(含源码)

这篇具有很好参考价值的文章主要介绍了MPU6050详解(含源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:MPU6050是一款强大的六轴传感器,需要理解MPU6050首先得有IIC的基础,MPU6050 内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个第二 IIC 接口,可用于连接外部磁力传感器,内部有硬件算法支持.

1.IO分配(MPU6050模块)

MPU6050详解(含源码)

1. SCL 和 SDA 是连接 MCU 的 IIC 接口, MCU 通过这个 IIC 接口来控制 MPU6050,
另外还有一个 IIC 接口

2.AUX_CL 和 AUX_DA,这个接口可用来连接外部从设备,比如磁传感
器,这样就可以组成一个九轴传感器。

3.AD0 是从 IIC 接口(接 MCU)的地址控制引脚,该引脚控制 IIC 地址的最低位。如果接 GND,则 MPU6050 的 IIC 地址是: 0X68,如果接 VDD,则是 0X69.

2.MPU6050初始化(PA15 接 AD0 = GND)

注意:PA15默认是JTAG引脚,使用PA15时,需要使用IO的重映射功能。

(1)设置MPU6050的地址(AD0的电平) 

MPU6050详解(含源码)


RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//打开辅助功能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;	 // 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
 GPIO_Init(GPIOA, &GPIO_InitStructure);					

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
	
MPU_AD0_CTRL=0;	//设置为低电平		

注:这里使用PA15是默认是JTAG引脚 ,需要重映射。

(2)完成IIC的初始化 

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//ÏÈʹÄÜÍâÉèIO PORTBʱÖÓ 
		
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;	 // ¶Ë¿ÚÅäÖÃ
  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_10|GPIO_Pin_11);						 //PB10,PB11 Êä³ö¸ß	

(3)配置MPU6050的设置

	MPU_IIC_Init();//初始化IIC总线
	MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80);	//复位MPU6050
  delay_ms(100);
	MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00);	//唤醒MPU6050 
	MPU_Set_Gyro_Fsr(3);					//陀螺仪传感器,±2000dps
	MPU_Set_Accel_Fsr(0);					//加速度传感器,±2g
	MPU_Set_Rate(50);						//设置采样率50Hz
	MPU_Write_Byte(MPU_INT_EN_REG,0X00);	//关闭所有中断
	MPU_Write_Byte(MPU_USER_CTRL_REG,0X00);	//I2C主模式关闭
	MPU_Write_Byte(MPU_FIFO_EN_REG,0X00);	//关闭FIFO
	MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80);	//INT引脚低电平有效
	res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
	if(res==MPU_ADDR)//器件ID正确
	{
		MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01);	//设置CLKSEL,PLL X轴为参考
		MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00);	//加速度与陀螺仪都工作
		MPU_Set_Rate(50);						//设置采样率为50Hz
 	}

注:这里配置MPU6050的操作,都是通过IIC协议,直接对MPU6050的寄存器进行访问.

这里提供一个芯片初始化是否成功的小技巧,通常每个芯片都有自己的芯片ID,通常可以把初始化函数设置为u8类型,通过读取ID是否正确,返回不同类型的值(return 1或0),如:while(mpu_dmp_init())

 3.MPU6050通信协议分析

发送一个字节

(1)MCU发送一个起始信号。

(2)传输从机7位地址+读/写位,等待应答信号

(3)发送寄存器地址,等待应答

(4)发送1个字节数据,等待应答

(5)结束信号

使用IIC写一个字节数据,程序如下:

u8 MPU_Write_Byte(u8 reg,u8 data) 				 
{ 
    MPU_IIC_Start(); 
	MPU_IIC_Send_Byte((MPU_ADDR<<1)|0);//发送器件地址+写命令	
	if(MPU_IIC_Wait_Ack())	//等待应答
	{
		MPU_IIC_Stop();		 
		return 1;		
	}
    MPU_IIC_Send_Byte(reg);	//写寄存器地址
    MPU_IIC_Wait_Ack();		//等待应答 
	MPU_IIC_Send_Byte(data);//发送数据
	if(MPU_IIC_Wait_Ack())	//等待ACK
	{
		MPU_IIC_Stop();	 
		return 1;		 
	}		 
    MPU_IIC_Stop();	 
	return 0;
}

 读取IIC多个字节数据

u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf)
{ 
 	MPU_IIC_Start(); 
	MPU_IIC_Send_Byte((addr<<1)|0);//发送器件地址+写命令	
	if(MPU_IIC_Wait_Ack())	//等待应答
	{
		MPU_IIC_Stop();		 
		return 1;		
	}
    MPU_IIC_Send_Byte(reg);	//写寄存器地址
    MPU_IIC_Wait_Ack();		//等待应答
    MPU_IIC_Start();
	MPU_IIC_Send_Byte((addr<<1)|1);//发送器件地址+读命令	
    MPU_IIC_Wait_Ack();		//等待应答 
	while(len)
	{
		if(len==1)*buf=MPU_IIC_Read_Byte(0);//读数据,发送nACK 
		else *buf=MPU_IIC_Read_Byte(1);		//读数据,发送ACK  
		len--;
		buf++; 
	}    
    MPU_IIC_Stop();	//产生一个停止条件 
	return 0;	
}

代码连接: 

 链接:https://pan.baidu.com/s/1SKYUonB0yKy9iG6hjabvGQ?pwd=a81l 
提取码:a81l文章来源地址https://www.toymoban.com/news/detail-437530.html

到了这里,关于MPU6050详解(含源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 模块学习(二)——MPU6050

    去年电赛备赛期间,学的STM32标准库,那一整个繁琐直接给我劝退了,当时学习MPU6050时就非常痛苦,代码也看不懂,无非抄来抄去,然后就是编译,改错,编译无穷尽也。最近参考野火的MPU6050代码,将其移植到了MSP430f5529之上,今天分享出来。 1.重要性 MPU6050模块对于不论平

    2024年02月16日
    浏览(33)
  • MPU6050调试

    1 原理简介 1.1 MPU6050芯片资料 1.内部主要结构:陀螺仪、加速度计、数字运动处理器DMP(Digital Motion Processor)。另外MPU6050还含有第二个IIC接口,用于连接一个第三方数字传感器AUXAUX_DA(如磁力计)用于输出完整九轴信号(角速度、角加速度以及磁场信号等) 2.连接接口: (1

    2024年02月06日
    浏览(29)
  • STM32----MPU6050

    前言:最近几个月没有写文章了,因为这学期的事情真的有点多,但是想了想,文章还是要更新,总结自己学习的知识,真的很重要!!! MPU6050 是 InvenSense 公司推出的全球首款整合性 6 轴运动处理组件 ,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减

    2024年02月15日
    浏览(33)
  • MPU6050简介

    MPU6050是一个6轴姿态传感器,可以测量芯片自身X,Y,Z轴的加速度,角速度,从而得到姿态角,用于平衡车,飞行器等。 内部结构: 3轴加速度计(Accelerometer):测X,Y,Z轴的加速度 3轴陀螺仪传感器(Gyroscope):测X,Y,Z轴的角速度 16位ADC采集传感器的模拟信号,量化范围:-32768~3276

    2024年02月16日
    浏览(25)
  • 姿态传感器——MPU6050

    MPU6050是由三个陀螺仪和三个加速度传感器组成的 6轴运动处理组件 ,是一款六轴(三轴加速度+三轴角速度(陀螺仪))传感器。 · 内部主要结构 陀螺仪 、 加速度计 、 数字运动处理器DMP (Digital Motion Processor) MPU6050含有两个IIC接口,第一IIC接口可作为主接口给单片机传输

    2024年02月02日
    浏览(41)
  • 学习笔记5-MPU6050模块

    MPU-60X0是世界上第一款集成 6 轴MotionTracking设备。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器 DMP( DigitalMotion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其 I2C或SPI接口输出一个9轴的信号( SPI接口仅

    2023年04月25日
    浏览(42)
  • 【嵌入式模块】MPU6050

      作为惯性传感器中入门级别的器件,MPU6050凭借它出色的性价比成为一款非常常用的角度姿态传感器,在很多科创项目中被使用。我之前也接触过很多次这个器件,也收集了不少资料,趁此机会总结一下学习笔记。   MPU6050包含3轴陀螺仪和3轴加速度计,其中陀螺仪的主

    2024年01月25日
    浏览(29)
  • 【STM32学习】——I2C通信协议&MPU6050姿态传感器&软件I2C读写MPU6050

    ​   目录 前言 一、I2C通信协议 1.简介 2.硬件电路设计 3.I2C时序(软件)

    2024年02月16日
    浏览(45)
  • 从MPU6050了解姿态解算

    最近正在学习和 陀螺仪 有关的知识,要将陀螺仪用到期末大作业中,代码还处在调试阶段,目前先总结一下学到的理论知识,学习资料来源 三维转动的四元数表述 - 中国知网 (cnki.net) MPU6050姿态解算2-欧拉角旋转矩阵 - 知乎 (zhihu.com) 姿态解算说明(Mini AHRS) MPU6050.pdf (szlcsc

    2024年02月06日
    浏览(38)
  • 【记录】MPU6050原理快速入门(附手册)

            MPU6050 MPU6050主要参数 MPU6050通信接口 MPU6050电路 向MPU6050的一个寄存器写一个字节的数据 从MPU6050的一个寄存器读一个字节的数据 MPU6050是一个运动处理传感器,其内部集成了3轴加速度传感器和3轴陀螺仪(角速度传感器) (芯片内部陀螺仪,当改变其转动时会产生

    2023年04月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包