【平衡小车制作】(四)陀螺仪MPU6050(超详解)
大家好,我是小政。本篇文章我将针对平衡小车电机上的陀螺仪MPU6050进行讲解。让每位小伙伴能够对陀螺仪的硬件结构和软件编程有更加清晰的理解。
一、硬件结构
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。
3.原理图 作用:检测倾斜角 MPU6050中断引脚——PB5 MPU6050所用I2C——PB3/PB4
二、软件编程
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库函数移植文件百度网盘: 网址: 提取码:p1ui
