IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32CubeMX(05) 移植陀螺仪MPU6050的DMP库读取三轴角度,加速度 -> 正文阅读

[嵌入式]STM32CubeMX(05) 移植陀螺仪MPU6050的DMP库读取三轴角度,加速度

在这里插入图片描述


前言

今天来学习mpu6050这款陀螺仪,并用MPU6050的DMP库来读取三轴角度,加速度,什么是DMP库,就是自带数字运动处理(DMP: Digital Motion Processing)引擎可减少 MCU 复杂的融合演算数据、感测器同步化、姿势感应等的负荷。也就是说什么时序和函数都封装好了,你只要调用就好了。懒人福音。只要我们在cubeMX初始化好IIC的引脚就好了。

硬件条件:STM32F407ZGT6,USB转TTL,mpu6050模块
软件条件:STM32CubeMX,keil5

一、MPU6050是什么?

MPU6050是一款性价比很高的陀螺仪,可以读取X Y Z 三轴角度,X Y Z 三轴加速度,还有内置的温度传感器,在姿态解析方面应用非常广泛。
某宝上的卖的也非常多。介绍也是很全面,我这里就不介绍了。
在这里插入图片描述

二、STM32CubeMX配置

由于我们用的是串口打印调试信息,所以我们接上一篇文章串口中断实验
的基础上继续配置。我们打开我们的cubeMX工程
在这里插入图片描述

2.1.IIC配置

在这里插入图片描述

2.2.开启中断

同时看cubeMX上的引脚配置和实际原理图是否一致。同时使能IIC的中断
在这里插入图片描述
在这里插入图片描述

串口在上一节已经重复过了,这里啥也不变。

2.3 硬件连接

由于采用IIC通信,最基本的只需要采用四根线就可以了。分别VCC,GND,SCL,SDA
连接到单片机
即SCL-----PB6
SDA-----PB7
VCC接3V或者5V都行。
在这里插入图片描述
在这里插入图片描述

2.4 软件编写

参考博文:jackxu
上述配置完后,生成工程。
由于需要用到printf函数,所以需要在usatr.c函数中添加重定向函数。

//printf重定向代码,修改其底层fputc
#if 1
#include <stdio.h>

/* 告知连接器不从C库链接使用半主机的函数 */
#pragma import(__use_no_semihosting)

/* 定义 _sys_exit() 以避免使用半主机模式 */
void _sys_exit(int x)
{
    x = x;
}

/* 标准库需要的支持类型 */
struct __FILE
{
    int handle;
};

FILE __stdout;

/*  */
int fputc(int ch, FILE *stream)
{
    /* 堵塞判断串口是否发送完成 */
	/* 不同芯片的串口标志位不一定相同! */
    while((USART1->SR & 0X40) == 0);

    /* 串口发送完成,将该字符发送 */
    USART1->DR = (uint8_t) ch;

    return ch;
}

#endif

添加位置
在这里插入图片描述

三、导入DMP库

进入CubeMX生成的代码工程,在工程文件夹下新建一个Hardware文件夹
老经典了,在学标准库的时候
在这里插入图片描述
下载jackxu博主的驱动代码,0积分的
下载DMP库的驱动代码
下载好后解压放到我们刚才的文件夹里面
在这里插入图片描述

3.1 keil配置

点击我们这个品字,这个方块,把mpu6050文件夹里面.c文件添加进来。
在这里插入图片描述
在这里插入图片描述

3.2 添加头文件路径

点击我们的魔术棒,C++,选择路径。
在这里插入图片描述
在这里插入图片描述

3.3 添加头文件

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "../../../Hardware/MPU6050/mpu6050.h"
#include "../../../Hardware/MPU6050/delay.h"
#include "../../../Hardware/MPU6050/eMPL/inv_mpu.h"
#include "../../../Hardware/MPU6050/eMPL/inv_mpu_dmp_motion_driver.h" 

/* USER CODE END Includes */

插入位置
在这里插入图片描述
添加用户变量

/* USER CODE BEGIN PV */
float pitch,roll,yaw; 		//欧拉角
short aacx,aacy,aacz;		//加速度传感器原始数据
short gyrox,gyroy,gyroz;	//陀螺仪原始数据
short temp;					//温度


/* USER CODE END PV */

插入位置
在这里插入图片描述

3.4 添加初始化代码

    
	while(MPU_Init());					//初始化MPU6050
	while(mpu_dmp_init())
	{
		delay_ms(200);
		printf("%s\r\n","Mpu6050 Init Wrong!");
	}
	  printf("%s\r\n","Mpu6050 Init OK!");

添加位置
在这里插入图片描述

3.5 主循环添加代码

调用我们的函数

/* USER CODE BEGIN 3 */

    
    if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
		{
			temp=MPU_Get_Temperature();								//得到温度值
			MPU_Get_Accelerometer(&aacx,&aacy,&aacz);	//得到加速度传感器数据
			MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);	//得到陀螺仪数据
			printf("三轴角度:%f-%f-%f\r\n",pitch,roll,yaw);
			printf("三轴加速度:%d-%d-%d\r\n",aacx,aacy,aacz);
			printf("三轴角角度:%d-%d-%d\r\n",gyrox,gyroy,gyroz);
		}
		delay_ms(100);

    
  }
  /* USER CODE END 3 */

插入位置
在这里插入图片描述
到这里就结束了,我们可以烧录程序到单片机观察现象了。

四、测试结果

硬件连接好
然后打开串口调试助手就可以看到传感器传回来的数据了,然后摇一摇,晃一晃我们的传感器,就可以发现我们传感器发生变化了。
在这里插入图片描述

在这里插入图片描述

总结

参考博文1:STM32CubeMX移植MPU6050的DMP库读取角度信息
参考博文2 : MPU6050学习
可能会出现的问题,就是u8 u16 可能未定义
那我们就自己定义成一个头文件就行了,一个common.h

#ifndef __COMMON_H
#define __COMMON_H	


typedef   signed          char int8_t;
typedef   signed short     int int16_t;
typedef   signed           int int32_t;
typedef   signed       __int64 int64_t;
typedef unsigned          char uint8_t;
typedef unsigned short     int uint16_t;
typedef unsigned           int uint32_t;
typedef unsigned       __int64 uint64_t;


typedef uint32_t  u32;
typedef uint16_t u16;
typedef uint8_t  u8;


#endif

在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:34:55  更:2021-08-10 13:36:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 20:53:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码