900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【平衡小车制作】(四)陀螺仪MPU6050(超详解)

【平衡小车制作】(四)陀螺仪MPU6050(超详解)

时间:2021-04-13 07:47:33

相关推荐

【平衡小车制作】(四)陀螺仪MPU6050(超详解)

大家好,我是小政。本篇文章我将针对平衡小车电机上的陀螺仪MPU6050进行讲解。让每位小伙伴能够对陀螺仪的硬件结构和软件编程有更加清晰的理解。

一、硬件结构

1.什么是陀螺仪?

陀螺仪是用于测量或维护方位和角速度的设备。它是一个旋转的轮子或圆盘,其中旋转轴可以不受影响的设定在任何方向。当旋转发生时,根据角动量守恒定律,该轴的方向不受支架倾斜或旋转的影响。

2.MPU6050三位角度加速度陀螺仪

MPU6050是一个6轴运动处理传感器。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其I2C接口输出一个6轴信号。

MPU6050对陀螺仪和加速度计分别用了三个16位ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的。

陀螺仪的可测范围为±250,±500,±1000,±2000°/秒(dps),加速度计可测范围为±2,±4,±8,±16g。

图1 陀螺仪MPU6050实物图

3.原理图

作用:检测倾斜角

MPU6050中断引脚——PB5

MPU6050所用I2C——PB3/PB4

图2 陀螺仪MPU6050(I2C)

二、软件编程

1.I2C函数——mpuiic.c

GPIO初始化:PB3、PB4,模拟I2C;通过时序函数模拟I2C通信

2.MPU6050函数——mpu6050.c

MPU6050初始化

3.MPU6050中断函数——exti.c

这里主要是通过MPU6050模块上的中断引脚ANT读取角加速度和角速度的原始数据。

exti.c:

#include "exti.h"void MPU6050_EXTI_Init(void){EXTI_InitTypeDef EXTI_InitStruct;GPIO_InitTypeDef GPIO_InitStruct;// 开启时钟// 外部中断,需要使能AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;// PB5配置为上拉输入GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5); // 外部中断和GPIO映射起来EXTI_InitStruct.EXTI_Line=EXTI_Line5;EXTI_InitStruct.EXTI_LineCmd=ENABLE;EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; // 中断触发EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;// MPU6050发生中断时会有一个下降沿EXTI_Init(&EXTI_InitStruct);}

exti.h:

#ifndef _EXTI_H#define _EXTI_H#include "sys.h" void MPU6050_EXTI_Init(void);#endif

MPU6050库函数移植文件百度网盘:

网址:/s/1_1EllsXYmdnJrMeeYY07bw

提取码:p1ui

以上就是平衡小车系列文章第四讲——陀螺仪,包括硬件结构讲解和STM32软件编程的讲解,文章中出现错误或者小伙伴对以上内容有所疑问,欢迎大家在评论区留言,小政看到后会尽快回复大家!

【平衡小车制作】(五)位置式PID、直立环与速度环概念(超详解)/weixin_44270218/article/details/113664633

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。