MPU6050调试

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

1 原理简介
1.1 MPU6050芯片资料
1.内部主要结构:陀螺仪、加速度计、数字运动处理器DMP(Digital Motion Processor)。另外MPU6050还含有第二个IIC接口,用于连接一个第三方数字传感器AUXAUX_DA(如磁力计)用于输出完整九轴信号(角速度、角加速度以及磁场信号等)
2.连接接口:
(1)IIC通信接口:SDA、SCL
(2)电源接口:VCC、GND
(3)外部接口:AUX_CL
3.内部电路:
MPU6050调试
图1.1 MPU60X0内部电路结构解析图
(1)16位ADC三轴加速度计:
三轴加速度计为每个轴使用单独的检测质量。
平坦放置时,x、y轴上为0g,z轴为1g
(2)16位ADC三轴陀螺仪:
当陀螺仪绕轴旋转时,模数转换器会对三个轴接受到的电压频率取样,陀螺仪传感器可以被解算为每秒±250,±500,±1000或±2000度(dps)。
1.2 MPU6050电路设计

  1. 典型工作电路
    MPU6050调试

图1-2 MPU60X0典型工作电路图

2.AD原理图绘制
MPU6050调试
图1-3 MPU6050 AD原理图
3.PCB绘制
MPU6050调试
图1-4 MPU6050 PCB图

1.3MPU6050自带运动数字处理器(DMP)

通过MPU6050得到四元数和欧拉角的过程有两种方法:
一是利用直接读取寄存器原始数据(三轴加速度,三轴角速度),通过一些(积分运算,卡尔曼滤波,减少误差临点漂移等)姿态融合算法转化为角度输出
二是用MPU6050内部自带的数字运动处理器(DMP)实现直接向MCU输出四元数,MCU可以通过四元数得到欧拉角:偏航角(YAW)、横滚角(ROLL)、俯仰角(PITCH)
2.1 实验现象描述
本实验我们调试MPU6050将通过配置寄存器实现主控STM32F103C8T6与MPU6050通信并通过串口打印输出当前欧拉角。
MPU6050调试
3.1 代码
(1)STM32F103C8T6与MPU6050通信初始化配置
1、 开启GPIOA和GPIOB时钟
2、 配置PA15,PB3为推挽输出模式。
3、 配置MCU对MPU6050外部中断的响应

GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //外部中断,需要使能AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);     //使能PA端口时钟
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIO
 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;// 端口配置
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(GPIOA,GPIO_Pin_15);//初始化拉高总线
GPIO_SetBits(GPIOB,GPIO_Pin_3);//初始化拉高总线
 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;               //上拉输入
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB 
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource4);
 
EXTI_InitStructure.EXTI_Line=EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;     //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);   //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级2, 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
NVIC_Init(&NVIC_InitStructure); 

(2)MPU6050内部寄存器配置
1、 初始化IIC总线
2、 配置电源管理寄存器1唤醒MPU6050
3、 配置陀螺仪传感器
4、 配置加速度传感器
5、 设置采样率
6、 配置中断使能寄存器关闭所有中断
7、 配置用户控制寄存器关闭IIC主模式
8、 配置中断使能寄存器关闭FIFO中断
9、 配置中断/旁路设置寄存器使INT引脚低电平触发
10、读取器件ID寄存器自检
11、配置电源管理寄存器1设置CLKSEL,PLL X轴为参考
12、配置电源管理寄存器2使加速度与陀螺仪都工作

u8 res; 
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(200);//设置采样率200Hz
MPU_Write_Byte(MPU_INT_EN_REG,0X00);//关闭所有中断
MPU_Write_Byte(MPU_USER_CTRL_REG,0X00);//I2C主模式关闭
MPU_Write_Byte(MPU_INT_EN_REG, 0X00);   //关闭FIFO中断
MPU_Write_Byte(MPU_INTBP_CFG_REG, 0X80);//INT引脚0X80低电平触发
res=MPU_Read_Byte(MPU_DEVICE_ID_REG); 
if(res==0x68)//器件ID正确
{
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X02); //设置CLKSEL,PLL X轴为参考
MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00);//加速度与陀螺仪都工作
MPU_Set_Rate(200);//设置采样率为50Hz
}else return 1;
return 0;

(3)DMP配置
1、 初始化IIC总线
2、 初始化MPU6050
3、 设置需要的传感器(本次实验为陀螺仪和加速度计)
4、 设置FIFO
5、 设置采样率
6、 加载DMP固件
7、 设置陀螺仪方向
8、 设计DMP功能
9、 设置DMP输出速率(最大不超过200Hz)
10、自检
11、使能DMP

u8 res=0;
MPU_IIC_Init(); 
if(mpu_init()==0)
{
res=mpu_set_sensors(INV_XYZ_GYRO|INV_XYZ_ACCEL);//设置所需要的传感器
if(res)return 1; 
res=mpu_configure_fifo(INV_XYZ_GYRO|INV_XYZ_ACCEL);//设置FIFO
if(res)return 2; 
res=mpu_set_sample_rate(DEFAULT_MPU_HZ);
if(res)return 3; 
res=dmp_load_motion_driver_firmware();
if(res)return 4; 
res=dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation));//设置陀螺仪方向
if(res)return 5; 
res=dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT|DMP_FEATURE_TAP|
 DMP_FEATURE_ANDROID_ORIENT|DMP_FEATURE_SEND_RAW_ACCEL|
   DMP_FEATURE_SEND_CAL_GYRO| DMP_FEATURE_GYRO_CAL);
if(res)return 6; 
res=dmp_set_fifo_rate(DEFAULT_MPU_HZ);
if(res)return 7;   
res=run_self_test();
if(res)return 8;    
res=mpu_set_dmp_state(1);
if(res)return 9;     
}else return 10;
return 0;

(4)读取初始数据和欧拉角并输出
1、 读取陀螺仪原始数据
2、 得到DMP处理后的角度数据
3、 串口打印角度信息

MPU_Get_Gyroscope(&gyro_X,&gyro_Y,&gyro_Z);//陀螺仪数据
mpu_dmp_get_data(&pitch,&roll,&yaw);//角度数据
printf("Pitch:%f Roll:%f Yaw: %f\r\n",Pitch,Roll,Yaw);  //串口打印数据

4.1操作流程
1、配置MCU的GPIO为模拟IIC
2、MCU与MPU6050通信,配置MPU6050寄存器
3、配置DMP用以数据处理
4、输出数据
5.1实验中可能出现的问题及注意事项
1、在配置MCU的模拟IIC通信时,要注意修改.C和.H两个文件中的IO口配置
2、接线时注意MCU的数据线和时钟线要与MPU6050的数据线和时钟线相对应连接
否则会通信不成功
3、定时器中断处理函数周期要大于MPU6050数据输出周期文章来源地址https://www.toymoban.com/news/detail-458515.html

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

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

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

相关文章

  • ICN6202 MIPIDSI转LVDS桥接芯片的功能及特征 调试文档资料

    产品特征功能: 输入:MIPI DSI 支持MIPI ® D-PHY Version 1.00.00 和 MIPI ® DSI Version 1.02.00. 可接收MIPI DSI 18bpp RGB666 and 24bpp RGB888 packets 4 lane data+1 lane clock 4对数据线可以选择1、2、3、4lane data 每对差分数据传输线最大可传输1Gbps,总共最大传输数据4Gbps。 支持mipi低功耗,超低功耗和休眠

    2024年02月14日
    浏览(28)
  • 模块学习(二)——MPU6050

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

    2024年02月16日
    浏览(41)
  • STM32----MPU6050

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

    2024年02月15日
    浏览(40)
  • MPU6050详解(含源码)

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

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

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

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

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

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

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

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

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

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

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

    2024年02月06日
    浏览(48)
  • 借助MPU6050上手卡尔曼滤波

    它是一个6轴姿态传感器,测量芯片X、Y、Z轴的角速度和加速度,通过数据融合进一步得到姿态角,其中数据融合可以用互补滤波或者卡尔曼滤波,它还内置了加速度计和陀螺仪 对于加速度计而言,它的测量原理可以这么理解:芯片内部有三个弹簧测力计,通过牛顿第二定律

    2024年02月15日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包