1. 项目概述
两轮自平衡车一直是嵌入式开发者验证控制算法的经典项目。这个基于STM32F103C8T6核心的方案,通过MPU6050传感器获取姿态数据,经过卡尔曼滤波处理后,由PID控制器输出PWM信号驱动电机,实现自主平衡。整个项目涉及传感器数据处理、控制算法实现和电机驱动三个关键环节。
我在实验室调试这个项目时,最令人兴奋的时刻就是当平衡车第一次稳稳立住的那一刻。不过要实现这种效果,需要克服传感器噪声、控制参数整定、电机响应等一系列工程难题。下面我就从硬件选型到软件实现,详细拆解这个项目的技术细节。
2. 硬件设计与选型
2.1 主控芯片选择
STM32F103C8T6作为主控芯片有几个明显优势:
- 72MHz主频提供足够的计算能力
- 内置定时器支持PWM生成
- 丰富的外设接口
- 性价比极高(约10元/片)
注意:虽然F103系列已经有些年头,但其性能对于平衡车项目完全够用。新手不建议盲目追求高性能芯片。
2.2 传感器方案
MPU6050是项目的核心传感器,它集成了:
- 三轴加速度计(±16g)
- 三轴陀螺仪(±2000°/s)
- 内置DMP(数字运动处理器)
实际使用中发现几个关键点:
- 加速度计数据受振动影响大,但长期稳定
- 陀螺仪短期精确但存在漂移
- 原始数据噪声明显,必须进行滤波处理
2.3 电机驱动设计
采用TB6612FNG电机驱动模块,相比传统的L298N:
- 效率更高(可达95%)
- 体积更小
- 支持3A峰值电流
- 内置短路保护
电机选用N20减速电机,关键参数:
- 电压:12V
- 空载转速:200RPM
- 减速比:1:30
- 扭矩:2kg·cm
3. 软件架构设计
3.1 系统流程图
code复制传感器数据采集 → 卡尔曼滤波 → PID计算 → 电机控制
↑ ↑ ↑
定时中断 角度估计 参数整定
3.2 关键数据结构
3.2.1 卡尔曼滤波器结构体
c复制typedef struct {
float Q_angle; // 过程噪声协方差
float Q_bias; // 陀螺
