基于 STM32 两轮自平衡小车系统设计与控制
本文设计了一种基于STM32F103C8T6的两轮自平衡小车系统。硬件采用MPU6050传感器检测姿态,TB6612FNG驱动电机,通过卡尔曼滤波融合数据并运用PID算法(直立环+速度环+转向环)实现平衡控制。系统达到直立误差≤±3°、速度精度±5cm/s等指标,支持蓝牙遥控和上位机调试。软件在Keil MDK5环境下开发,包含姿态解算、PID控制等核心算法。经调试优化后,系统运行稳定,可作为自动
一、系统设计目标与原理
本设计以 STM32F103C8T6 为控制核心,构建两轮自平衡小车系统,旨在实现小车的稳定直立、前进后退、左右转向等功能。核心目标是直立平衡误差≤±3°,速度控制精度 ±5cm/s,转向响应时间≤0.5s,续航时间≥30 分钟(满电状态),同时具备蓝牙遥控与上位机调试功能,满足机器人控制与自动控制原理教学实验需求。
系统工作原理基于 “姿态检测 - 闭环控制 - 执行驱动” 的动态平衡架构:MPU6050 传感器实时采集小车的倾角与角速度,STM32 通过卡尔曼滤波融合数据得到当前姿态;采用 PID 控制算法(直立环 + 速度环 + 转向环)计算电机输出量,经电机驱动模块控制左右轮转速;通过调节两轮转速差实现转向,转速同步实现前进后退,最终维持小车直立状态。
二、硬件设计(含原理图与 PCB)
(一)核心控制模块
主控芯片:STM32F103C8T6(ARM Cortex-M3 内核,72MHz 主频,64KB RAM),负责数据处理与控制算法运行。
外设接口:
I2C1:连接 MPU6050 传感器(SCL=PB6,SDA=PB7)。
TIM1/TIM2:生成 PWM 信号(频率 10kHz),控制左右电机(TIM1_CH1=PA8,TIM1_CH2=PA9;TIM2_CH1=PA0,TIM2_CH2=PA1)。
USART1:连接 HC-05 蓝牙模块(TX=PA9,RX=PA10)。
GPIO:连接按键(PA2)、LED 指示灯(PA3)、循迹传感器(可选,PB0-PB3)。
(二)姿态检测模块
传感器:MPU6050(3 轴加速度 + 3 轴陀螺仪),量程 ±2g/±2000°/s,通过 I2C 通信,采样率 100Hz。
电路设计:VCC 接 3.3V,GND 与系统共地,INT 引脚(PB4)接 STM32 外部中断,触发数据就绪中断。
(三)电机驱动模块
驱动芯片:TB6612FNG 双通道电机驱动,支持 2 路电机正反转与 PWM 调速,工作电压 5-12V,持续电流 2A。
连接方式:
PWM_A(AIN1=PA4,AIN2=PA5)控制左轮方向与转速。
PWM_B(BIN1=PA6,BIN2=PA7)控制右轮方向与转速。
STBY=PA2(高电平使能),GND 与电机电源共地。
(四)电源模块
供电方案:7.4V/2000mAh 锂电池(2 串锂聚合物电池),经以下电路转换:
5V 输出:通过 LM1117-5V 为 TB6612FNG 与蓝牙模块供电。
3.3V 输出:通过 AMS1117-3.3V 为 STM32、MPU6050 供电。
保护电路:电池正极串联 10A 自恢复保险丝,防止过流;并联 100μF 电解电容滤除纹波。
(五)机械结构与执行机构
电机:N20 减速电机(转速 6000rpm,减速比 1:100,空载转速 60rpm),配套 65mm 橡胶轮。
底盘:亚克力板(直径 12cm),电机对称安装(轴距 10cm),重心位于轮轴正上方。
(六)原理图与 PCB 设计
原理图:采用 Altium Designer 绘制,主要包含 STM32 最小系统、MPU6050 接口、TB6612 驱动电路、电源管理四部分,关键节点标注网络名(如 “MPU_SCL”“MOTOR_A_PWM”)。
PCB 布局:两层板设计,顶层放置 STM32 与传感器(模拟地),底层放置电机驱动与电源(功率地),模拟地与功率地通过 0 欧电阻单点连接,减少干扰;电机接线采用粗铜皮(≥2mm),确保载流能力。



三、软件设计(含源码)
(一)开发环境
IDE:Keil MDK5(V5.32)
库:STM32CubeMX 生成初始化代码,HAL 库开发
调试工具:J-Link V9,支持在线仿真与断点调试
(二)核心算法
姿态解算:
// 卡尔曼滤波融合加速度与角速度
void Kalman_Filter(float acc_angle, float gyro_angle, float dt){
// 预测
angle_err = acc_angle - angle;
P[0][0] += dt*(P[1][1]*dt + Q_angle);
P[0][1] = P[1][0];
P[1][1] += Q_gyro * dt;
// 更新
K[0] = P[0][0] / (P[0][0] + R_angle);
K[1] = P[1][0] / (P[0][0] + R_angle);
angle += K[0] * angle_err;
gyro_bias += K[1] * angle_err;
// 更新协方差
P[0][0] -= K[0] * P[0][0];
P[0][1] -= K[0] * P[0][1];
P[1][0] -= K[1] * P[0][0];
P[1][1] -= K[1] * P[0][1];
}
PID 控制:
// 直立环PID(目标角度0°)
float Balance_PID(float target, float current, float gyro){
err = target - current;
err_sum += err * dt;
// 积分限幅
if(err_sum > 500) err_sum = 500;
else if(err_sum < -500) err_sum = -500;
output = Kperr + Kierr_sum + Kd*gyro;
return output;
}
// 速度环与转向环类似,此处省略
(三)主程序流程
int main(void){
HAL_Init();
SystemClock_Config(); // 配置72MHz系统时钟
MPU6050_Init(); // 初始化传感器
Motor_Init(); // 初始化电机驱动
PID_Init(); // 初始化PID参数
Bluetooth_Init(); // 初始化蓝牙模块
while(1){
if(MPU6050_DataReady()){
MPU6050_GetData(&acc, &gyro); // 读取加速度与角速度
Calculate_Angle(acc, gyro); // 计算原始角度
Kalman_Filter(acc_angle, gyro_angle, 0.01); // 融合角度
balance_output = Balance_PID(0, angle, gyro.y); // 直立控制
speed_output = Speed_PID(target_speed, current_speed); // 速度控制
turn_output = Turn_PID(target_turn, gyro.z); // 转向控制
// 分配左右轮输出
left_pwm = balance_output + speed_output - turn_output;
right_pwm = balance_output + speed_output + turn_output;
Motor_SetPWM(left_pwm, right_pwm); // 输出到电机
}
Bluetooth_Receive(); // 接收遥控指令
HAL_Delay(10); // 10ms控制周期
}
}
(四)蓝牙通信协议
指令格式:帧头(0xAA) + 指令码(1字节) + 参数(2字节) + 校验和(1字节)
示例:前进指令 0xAA 0x01 0x00 0x64 0xCF(参数 0x0064 表示速度 100)
四、调试与优化
(一)PID 参数整定步骤
直立环:
先调 Kp:从 0 开始增大,直至小车能短暂直立(约 1-2 秒)。
再调 Kd:抑制震荡,使小车稳定直立(约 5-10 秒)。
最后加少量 Ki:消除静态偏差(如小车偏向一侧)。
速度环与转向环:
速度环 Kp 从 0.1 开始,确保加减速平稳。
转向环 Kp 略大于速度环,保证转向灵活无超调。
(二)常见问题解决
抖动问题:增加低通滤波(截止频率 5Hz),或减小 Kd 参数。
平衡偏移:通过 MPU6050 校准(水平放置时执行校准函数)。
续航不足:优化电机 PWM 输出(避免长时间满速),降低 STM32 主频至 36MHz。
五、文件清单
原理图:SelfBalancingCar_Schematic.PDF(Altium Designer 格式)
PCB 文件:SelfBalancingCar_PCB.PcbDoc(含 Gerber 文件)
源码:
Core/:主程序与算法实现
Drivers/:STM32 HAL 库与外设驱动
Projects/:Keil 工程文件
调试工具:PID_Tuning_Tool.xlsx(PID 参数调试记录表)
六、结语
本设计通过 STM32 与 MPU6050 构建了两轮自平衡小车的软硬件系统,核心 PID 控制算法实现了稳定平衡与灵活运动。系统硬件布局紧凑,软件模块化程度高,适合作为自动控制原理的实践平台。后续可扩展功能包括循迹导航(增加红外对管)、避障功能(超声波传感器)、APP 遥控(开发 Android 客户端)等,进一步提升小车的智能化水平。
文章底部可以获取博主的联系方式,获取源码、查看详细的视频演示,或者了解其他版本的信息。
所有项目都经过了严格的测试和完善。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。
更多推荐



所有评论(0)