STM32两轮自平衡小车(学习记录)——MPU6050

本文介绍如何将MPU6050的原始数据通过DMP内置滤波算法进行处理,重点讲解了移植过程,包括官方代码的整合与自定义中断的设置。适合航模爱好者和工业应用开发者提升控制系统精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

摘要

MPU6050是一种非常流行的空间运动传感器芯片,可以获取器件当前的三个加速度分量和三个旋转角速度。由于其体积小巧,功能强大,精度较高,不仅被广泛应用于工业,同时也是航模爱好者的神器,被安装在各类飞行器上驰骋蓝天。

MPU6050的数据是有较大噪音的,若不进行滤波会对整个控制系统的精准确带来严重影响。

MPU6050芯片内自带了一个数据处理子模块DMP,已经内置了滤波算法,在许多应用中使用DMP输出的数据已经能够很好的满足要求。

移植过程

移植需要官方代码
dmpKey.h
dmpmao.h
inv_mpu.c
inv_mpu.h
inv_mpu_dmp_motion_driver.c
inv_mpu_dmp_motion_driver.h

以及
mpu6050.c
mpu6050.h
mpuiic.c
mpuiic.h

再自己写一个中断

void MPU6050_EXTI_Init(void)
{  
		GPIO_InitTypeDef GPIO_InitStructure;
		EXTI_InitTypeDef EXTI_InitStructure;
		NVIC_InitTypeDef NVIC_InitStructure;
	
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	          //INT-B5  
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         //上拉输出
		GPIO_Init(GPIOB, &GPIO_InitStructure);					     
		
		GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5);
	
		EXTI_InitStructure.EXTI_Line=EXTI_Line5;
		EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
		EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
		
		EXTI_InitStructure.EXTI_LineCmd = ENABLE;
		EXTI_Init(&EXTI_InitStructure);	 	
	
		//////////////////外部中断5优先级配置也就是MPU6050 INT引脚配置///////////优先级设为最高
		NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;				
		NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;	
		NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;					
		NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								
		NVIC_Init(&NVIC_InitStructure); 
}
### STM32两轮平衡小车毕业设计 #### 设计方案概述 STM32两轮平衡小车的设计主要围绕稳定性和运动控制展开。该系统的核心在于姿态检测与反馈控制机制,确保车辆能够在动态环境中维持垂直状态并平稳移动。具体来说,通过安装于车身内部的姿态传感器持续监控角度变化情况,并据此调整电机转速以补偿任何偏离理想位置的趋势。 对于基于STM32F103C8T6单片机构建的小型无人驾驶平台而言,其工作原理类似于利用手指支撑一根竖直放置的杆子——即不断修正偏差从而达到自我矫正的效果[^2]。然而,在实际应用中还需考虑更多因素如路面条件、负载重量以及外部干扰源的影响等。 #### 主要组件介绍 - **主控单元 (MCU)**: 使用高性能ARM Cortex-M3内核架构的STM32F103系列微控制器作为核心处理器; - **电机驱动**: TB6612FNG双H桥直流马达驱动器负责接收来自CPU发出的速度指令并将之转化为物理动作; - **惯性测量单元(IMU)** : MPU6050六轴加速度/陀螺仪组合模块用于精确感知空间方位角及其瞬态改变速率; - **无线通信接口**: HC-05串口蓝牙适配器允许远程操控设备并与PC端建立数据交换通道; #### 硬件连接说明 各部件之间的电气连线遵循标准SPI/IIC协议规范,其中IMU部分通常会占用I²C总线资源以便简化布板难度同时也提高了传输效率。另外值得注意的是电源管理环节至关重要,建议选用稳压性能良好的DC-DC转换电路为整个系统供电以免因电压波动造成意外停机现象发生。 ```c // 初始化 I2C 接口配置函数定义 void I2C_Init(void){ // 配置 GPIO 和 RCC 寄存器... } // 读取 IMU 数据封装方法声明 uint8_t Read_IMU_Data(uint8_t *data, uint8_t length); ``` #### 控制算法实现思路 为了使机器人具备良好行驶特性,PID调节策略被广泛应用于此类项目当中。通过对采集到的角度信息进行比例积分微分运算处理后得出最优解进而指导执行机构做出相应反应。此外还可以引入模糊逻辑理论进一步优化参数设定过程提高响应灵敏度降低超调量。 ```cpp float pid(float setpoint, float input) { static float last_error = 0; static int integral = 0; float error = setpoint - input; // 计算误差 integral += error; // 积累误差 float derivative = error - last_error; // 差分计算 last_error = error; // 更新上一次误差值 return kp*error + ki*integral + kd*derivative; // 返回 PID 输出结果 } ``` #### 调试技巧分享 调试阶段往往是最具挑战性的时期之一,除了常规手段外还应充分利用开发环境自带工具链辅助分析问题所在。比如借助JTAG/SWD在线仿真功能快速定位程序运行期间产生的异常行为;又或是运用OLED显示屏直观展示当前各项指标数值方便观察趋势走向及时作出适当调整措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值