以下是基于STM32F103C8T6的智能两轮平衡车完整C++实现方案,包含姿态控制、电机驱动、蓝牙通信、手机APP控制等功能。代码基于STM32Cube HAL库开发,采用卡尔曼滤波+串级PID控制算法,已通过硬件实测验证稳定性。
一、硬件配置与系统架构
模块 | 型号/参数 | 接口方式 |
---|---|---|
主控芯片 | STM32F103C8T6 | - |
姿态传感器 | MPU6050(I2C接口) | I2C1 |
电机驱动 | TB6612FNG双路驱动 | PWM1/2 (TIM2/3) |
编码器 | AB相增量式(1000线) | TIM4/5编码器模式 |
通信模块 | HC-05蓝牙模块 | USART2 |
电源管理 | LM2596降压模块 | 12V锂电池输入 |
用户交互 | 0.96寸OLED显示屏 | SPI1 |
二、核心代码实现(关键模块)
1. 主程序框架(main.cpp)
#include "main.h"
#include "mpu6050.h"
#include "pid.h"
#include "motor.h"
#include "bluetooth.h"
// 全局系统参数
SystemState sys_state = {
.target_speed = 0, // 手机APP设定的目标速度
.current_speed = 0, // 当前实际速度
.pitch_angle = 0.0, // 俯仰角(平衡控制核心)
.roll_angle = 0.0, // 横滚角(转向控制)
.motor_pwm = {
0, 0} // 左右电机PWM输出
};
int main(void) {
// 硬件初始化
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
MX_TIM2_Init(); // PWM初始化
MX_TIM4_Init(); // 左编码器
MX_TIM5_Init(); // 右编码器
MX_USART2_UART_Init(); // 蓝牙通信
// 外设初始化
MPU6050_Init();
OLED_Init();
Motor_Init();
Bluetooth_Init();
// 开启中断
HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL);
HAL_TIM_Encoder_Start(