STM32系列(HAL库)——F103C8T6通过MPU6050+DMP姿态解算读取角度及温度

1.软件准备

(1)编程平台:Keil5

(2)CubeMX

(3)XCOM(串口调试助手)

(4)文件资料包:点击跳转下载

2.硬件准备

(1)一个捡来的MPU6050

(2)F1的板子,本例使用经典F103C8T6

(3)ST-link 下载器

(4)USB-TTL模块

(5)杜邦线若干

3.模块资料

(1)模块简介:

        MPU-6000为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。MPU-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(DMP:Digital MotionProcessor)硬件加速引擎,由主要I2C端口以单一数据流的形式,向应用端输出完整的9轴融合演算技术
        MPU-6000的角速度全格感测范围为±250、 主500、±1000与±2000° /sec (dps),可准确追緃快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为±2g、±4g± 8g与± 16g。产品传输可透过最高至400kHz的I2C或最高达20MHz的SPI。

(2)部分参数:

【使用芯片】:MPU-6050
【供电电源】:3-5V(内部低压差稳压)
【通信方式】:标准IIC通信协议
【芯片内置】:16bit AD转换器
【陀螺仪范围】:± 250 500 1000 2000 °/s
【加速度范围】: ±2±4±8±16g 

4.CubeMX配置

(1)芯片选择

 (2)配置RCC、SYS、时钟树

配置RCC

配置SYS

配置时钟树

(3)配置GPIO 

(4)配置串口1

(5)设置路径、生成代码工程

(6)解压文件

5、Keil5代码

(1)勾选Use MicroLIB

(2)添加文件

 (3)添加头文件路径

 (4)usrat.c代码添加

/* USER CODE BEGIN 0 */
#include "stdio.h"
/* USER CODE END 0 */
 
 
 
/* USER CODE BEGIN 1 */
/*********************************************************
*
*重定义 fputc 函数
*
*********************************************************/
int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
	return ch;
}
/* USER CODE END 1 */

(5)main函数

#include "stdio.h"
#include "IIC.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"

//========================================================================
int main(void)
{
  /* USER CODE BEGIN 1 */
    float pitch,roll,yaw; 		    //欧拉角
    short aacx,aacy,aacz;			//加速度传感器原始数据
    short gyrox,gyroy,gyroz;		//陀螺仪原始数据
    float temp;					    //温度
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
    MPU_Init();			//MPU6050初始化
    mpu_dmp_init();		//dmp初始化
  /* USER CODE END 2 */
    printf("初始化成功!\r\n");
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
        HAL_Delay(500);
        while(mpu_dmp_get_data(&pitch, &roll, &yaw));	//必须要用while等待,才能读取成功
        MPU_Get_Accelerometer(&aacx,&aacy, &aacz);		//得到加速度传感器数据
        MPU_Get_Gyroscope(&gyrox, &gyroy, &gyroz);		//得到陀螺仪数据
        temp=MPU_Get_Temperature();						//得到温度信息
        printf("X:%.1f°  Y:%.1f°  Z:%.1f°  %.2f°C\r\n",roll,pitch,yaw,temp/100);//串口1输出采集信息
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

6.接线图及效果

  本例程源码下载:点击跳转 

  • 122
    点赞
  • 414
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 102
    评论
MPU6050是一种6轴运动处理组件,它整合了3轴陀螺仪和3轴加速度计,并且还包含了数字运动处理器(DMP)硬件加速引擎。通过使用MPU6050DMP功能,可以进行姿态解算,得到四元数,并通过转换得到欧拉角,如俯仰角、横滚角和航向角。\[2\] 在使用MPU6050进行姿态解算时,需要创建MPU6050对象,并设置相应的地址和I2C通信对象。可以使用MPU6050_Base构造函数来创建对象,并传入地址和I2C通信对象的指针。\[1\] MPU6050的角速度感测范围可以设置为±250、±500、±1000或±2000°/sec,而加速度感测范围可以设置为±2g、±4g、±8g或±16g。此外,MPU6050可以通过I2C或SPI进行数据传输,最高传输速率分别为400kHz和20MHz。\[3\] 因此,通过使用MPU6050DMP功能,结合相应的设置和参数,可以实现姿态解算。 #### 引用[.reference_title] - *1* [ESP32上手笔记 | 05 - 获取MPU6050数据进行姿态解算和展示(I2Cdev+MPU6050+Processing)](https://blog.csdn.net/Mculover666/article/details/123541279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [mpu6050+dmp姿态解算](https://blog.csdn.net/m0_58028719/article/details/125949274)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32系列(HAL库)——F103C8T6通过MPU6050+DMP姿态解算读取角度温度](https://blog.csdn.net/lwb450921/article/details/123575209)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式创客工坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值