大家好,我是小政。本篇文章我将针对平衡小车电机上的陀螺仪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。
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库函数移植文件百度网盘:
网址:https://pan.baidu.com/s/1_1EllsXYmdnJrMeeYY07bw
提取码:p1ui
以上就是平衡小车系列文章第四讲——陀螺仪,包括硬件结构讲解和STM32软件编程的讲解,文章中出现错误或者小伙伴对以上内容有所疑问,欢迎大家在评论区留言,小政看到后会尽快回复大家!
【平衡小车制作】(五)位置式PID、直立环与速度环概念(超详解)https://blog.csdn.net/weixin_44270218/article/details/113664633