学院首页 > 人才培养 > 本科生培养 > 通知公告 > 正文

【机情无限 精彩毕设】机械2026届毕业设计(论文)中期检查优秀案例分享第十五期——基于STM32的遥控自平衡小车设计

发布时间:2026.04.13 | 编辑: 李艳梅

学生姓名陈静

       测控2022-02班

指导教师曾祥光

毕设题目基于STM32的遥控自平衡小车设计

一、概况

(一) 选题意义

随着城市化进程加快,传统交通工具带来的能源消耗、交通拥堵及环境污染问题日益突出。两轮自平衡小车因其体积小、机动性强、零排放等特点,被视为未来短途出行与末端物流配送的潜在解决方案。同时,两轮自平衡系统本质上是一个动态不稳定的“轮式倒立摆”模型,具有强耦合、非线性、欠驱动等复杂动力学特性,是验证各类控制算法的理想实验平台。本课题以STM32微控制器为核心,设计并实现一款具备遥控功能的自平衡小车。其工程意义在于研制低功耗、易操控的平衡车原型,为个人智能交通工具提供技术参考;理论意义在于构建完整的实物控制平台,用于验证经典PID控制算法,并为后续更先进控制方法的研究提供实验基础;个人培养意义在于综合运用嵌入式、自动控制、传感器及机械设计等多学科知识,提升复杂工程系统的全流程实践能力。

(二) 任务分解

将整个毕业设计工作分解为以下六个有机联系的子任务:

1. 开题调研与总体方案设计

学习两轮自平衡系统的动力学原理;系统调研PID、LQR等平衡控制算法及无线通信技术;完成开题报告撰写;明确系统总体技术路线,制定包括机械结构、硬件电路、控制软件在内的总体设计方案。

2. 机械系统设计与实现

完成小车的机械结构三维设计,包括车架、轮系、电机安装结构等;进行关键部件的选型;完成零件的加工或采购,并进行整机的机械装配与初步检查。

3. 控制系统硬件开发与搭建

完成以STM32为核心的控制系统硬件方案设计,包括电源管理、电机驱动、姿态传感器(MPU6050)、无线通信等模块的电路设计;绘制原理图与PCB图;完成PCB打样、元器件焊接与硬件电路调试,确保各模块工作正常。

4. 控制系统软件开发与算法实现

Keil环境中进行软件开发。主要工作包括:系统外设(PWM、定时器、ADC、I2C、UART)驱动编程;姿态传感器数据采集与滤波处理;核心平衡控制算法PID的设计、仿真与代码实现;电机控制程序;无线通信协议解析与指令处理程序。

5. 系统集成与联合调试

将控制电路板、传感器、电机等集成到装配好的车体上,进行整车线缆连接。开展系统软硬件联合调试,依次实现:传感器数据准确读取、电机正常运行、算法初步稳姿、遥控指令响应,最终完成动态平衡与遥控运动功能的整体调试与优化。

6. 设计文档整理与答辩准备

整理整个设计过程的所有资料,撰写完整的毕业设计论文;绘制并整理所有必要的机械、电气图纸;准备毕业设计答辩的演示材料与讲稿。

二、已完成工作

截至目前,本设计已按计划完成了平衡车子系统的全部硬件搭建与软件开发,实现了小车的自主直立平衡以及通过蓝牙串口进行的遥控行进与转向功能。遥控器子系统尚未启动,计划在后续阶段完成。以下分三个方面详述已完成的研究工作。

(一) 机械结构设计与实现

完成了平衡车机械结构设计,车架使用5mm厚亚克力板激光切割成型,电机支架使用电机自带铝合金,车轮选用直径65mm的橡胶轮。各零部件已加工或采购完毕,并完成了整车的机械装配,装配后结构稳固,无异常晃动。图1展示了装配完成后的整车实物照片。

1 装配完成的实物照片

(二) 硬件电路设计与实现

1. 原理图与PCB设计

基于STM32F103C8T6微控制器,在嘉立创EDA(专业版)中完成了主控板原理图和双层PCB设计。电路集成了以下模块:

(1) 电源管理:使用AMS1117-3.3 LDO降压模块将7.4V转为3.3V,为STM32、传感器、OLED等供电。

(2) 姿态传感器MPU6050通过I2C总线(PB10/SCL,PB11/SDA)连接。

(3) 电机驱动TB6612FNG芯片,接收STM32的PWM信号(PA0/PA1)和方向控制信号(PB12~PB15),输出驱动左右直流减速电机。

(4) 编码器接口:左右电机编码器A、B相信号分别接入TIM3(PB4/PB5)和TIM4(PB6/PB7)的编码器模式。

(5) 通信接口USART1(PA9/PA10)用于蓝牙串口模块(调试与临时遥控),USART2(PA2/PA3)预留用于NRF24L01无线模块。

(6) 人机交互OLED 屏幕采用独立的软件 I2C 总线(PB8/SCL,PB9/SDA)连接;独立按键接入 PB0、PB1、PA4、PA5。

主控板的原理图如图2所示,集成了电源、MCU、传感器、电机驱动等模块。

2 主控板原理图

PCB布局图(左)和打样完成的实物(右)如图3所示。

3 PCB布局图(左)和实物(右)

2. 元器件采购与焊接

根据物料清单采购了所有元器件,包括STM32F103C8T6最小系统板、MPU6050模块、TB6612FNG模块、JGB-520直流减速电机、7.4V锂电池组、OLED屏幕等。完成了PCB的手工焊接;MPU6050 I2C通信正常(能正确读取WHO_AM_I寄存器值0x68);电机驱动在PWM信号下可正反转;编码器在转动时输出正交脉冲;蓝牙模块能进入AT模式并与手机配对。

焊接完成的主控板正面如图4所示,元器件排列整齐。整车硬件集成后如图5所示,电池、主控板、电机等均已固定。


                          图4 焊接完成的主控板正面               图5 整车硬件集成

(三) 嵌入式软件设计与实现

软件在Keil MDK环境下采用模块化编程,按照驱动层、算法层、应用层组织。以下分六个小节介绍关键实现。

1. 底层驱动

(1) PWM驱动:配置TIM2的通道1和通道2为PWM输出模式,频率1kHz,占空比0~100对应PWM值0~100。封装函数PWM_SetCompare1()和PWM_SetCompare2(),用于控制左右电机的转速。

(2) 编码器驱动:配置TIM3和TIM4为编码器模式(双边沿计数),封装Encoder_Get()函数返回计数值增量并自动清零,用于计算电机实际转速。

(3) 电机驱动:封装Motor_SetPWM(),根据PWM正负设置方向GPIO(PB12/PB13为左电机,PB14/PB15为右电机)并调用PWM设置函数输出占空比。

(4) MPU6050驱动:使用软件模拟I2C(PB10/PB11),实现了寄存器读写、初始化、连续读取加速度和陀螺仪数据。

(5) OLED驱动:采用I2C通信,实现了显存管理、字符/汉字/数字/图像显示、printf格式化输出、滚动显示等功能,并集成12×12和16×16中文字模库。

(6) 蓝牙串口:使用USART1,配置中断接收,实现自定义数据包解析(格式[tag,参数1,参数2,...])。

2. 姿态解算算法

10ms定时中断中读取MPU6050原始数据,执行互补滤波融合,得到车身俯仰角Angle和角速度(由陀螺仪Y轴GY提供)。关键代码如下:

AngleAcc = -atan2(AX, AZ) / 3.14159 * 180;   // 加速度计计算角度

AngleGyro = Angle + GY / 32768.0 * 2000 * 0.01; // 陀螺仪积分

float Alpha = 0.01;  // 互补滤波系数

Angle = Alpha * AngleAcc + (1 - Alpha) * AngleGyro;

实测滤波后角度噪声小、无漂移,满足平衡控制需求。同时进行了陀螺仪零漂校准。

3. 多环PID控制算法

采用串级PID结构,包括角度环、速度环和转向环。位置式PID算法封装为PID_t结构体和PID_Update()函数,支持积分限幅、输出限幅以及积分分离(Ki为0时自动清零积分项)。

(1) 角度环:实际值为Angle,目标值为0°(静止平衡)或速度环输出(运动时)。输出AvePWM作为平均PWM。

(2) 速度环:实际值为左右轮平均速度AveSpeed(单位:转/秒),目标值由遥控指令给定。输出作为角度环的目标值,实现速度跟随。

(3) 转向环:实际值为左右轮差速DifSpeed,目标值由遥控转向指令给定。输出DifPWM作为差分PWM。

最终左右电机PWM计算为:

LeftPWM = AvePWM + DifPWM / 2;

RightPWM = AvePWM - DifPWM / 2;

同时调用PWM_Compensate()对左右电机差异进行分段补偿。

采用的串级PID控制结构如图6所示,角度环、速度环、转向环协同工作。

6 串级PID控制框图

4. 蓝牙遥控指令解析

通过USART1中断接收手机蓝牙串口助手发送的数据包,格式遵循[tag,参数1,参数2,...]。解析函数BlueSerial_DataProcessing()支持以下指令:

l [key, K1, up]:按键K1按下,切换运行标志RunFlag。

l [slider, AngleKp, 9.0]:动态修改角度环Kp(同理可修改其他PID参数)。

l [joystick, LH, LV, RH, RV]:摇杆数据,LV缩放1/50后映射为速度环目标值,RH缩放1/50后映射为转向环目标值。

该机制允许在调试过程中实时调整PID参数并控制小车运动,极大提高了调试效率。

5. OLED显示与调试辅助

OLED_ShowPIDData()函数在屏幕上显示以下信息:

l 角度环的Kp、Ki、Kd、目标值、实际角度、输出值、陀螺仪Y轴原始值。

l 速度环的Kp、Ki、Kd、目标值、实际平均速度、输出值。

l 转向环的Kp、Ki、Kd、目标值、实际差速、输出值

此外,通过蓝牙以[plot, Angle, AveSpeed]格式发送数据,配合手机小程序,实时绘制角度和速度波形,便于观察控制响应。

OLED实时显示PID参数及角度,如图7所示。图8是通过蓝牙绘制的角度与速度波形,便于调试。


7 OLED显示界面               8蓝牙波形绘制图


6. 主程序逻辑

主程序流程如图9所示。系统上电后完成外设初始化,等待任意按键按下后进入主循环。主循环中处理按键、显示更新、蓝牙数据解析和波形发送。定时中断(TIM1)每1ms触发一次,内部通过计数器分频实现10ms和50ms的任务调度:

l 10ms任务:读取MPU6050、互补滤波、角度环PID计算并输出PWM

l 50ms任务:读取编码器、计算轮速、执行速度环与转向环PID,更新角度环目标值和差分PWM

9 主程序流程图

1ms定时中断流程如图10所示。

10 1ms定时中断程序流程图

总结:截至目前,平衡车子系统的硬件和软件均已完成并通过调试,实现了自主直立平衡以及通过蓝牙串口的遥控行进与转向功能。遥控器子系统(基于NRF24L01)设计尚未完成,后续将按计划推进。

三、下一步工作计划

针对当前已完成的工作以及存在的技术问题,后续工作将围绕“解决平衡车现存缺陷、完成遥控器子系统、系统联调与性能优化、毕业论文撰写”四条主线展开,具体安排如下:

(一) 优化平衡车控制性能(3-5天)

1. 提升抗干扰能力

针对大扰动下系统振荡发散的问题,计划采取以下措施:①重新整定角度环PID参数;②适当缩短速度环控制周期,提高速度环响应速度,使大扰动时速度环能更快提供前馈补偿;③尝试引入积分分离或变积分系数策略,避免角度环积分饱和;

2. 解决电机不一致导致的偏航问题

重新标定左右电机的PWM-转速映射曲线:在不同PWM值(0~100,步长10)下测量左右轮实际转速(通过编码器),绘制散点图并拟合线性或分段线性补偿函数,替换当前简单的分段补偿(PWM_Compensate函数)。同时在速度环中引入差速闭环修正:将转向环的目标值与实际差速的偏差作为反馈,动态调整差分PWM,使小车能自动纠偏。

3. 优化姿态解算算法

将互补滤波系数Alpha改为动态可调:当加速度计的高频分量(通过高通滤波获得)较大时,增大Alpha值,使加速度计更快介入修正;静止或匀速时恢复小Alpha值以保证平滑性。或直接移植卡尔曼滤波算法,对比两者效果后选择较优方案,目标将姿态角滞后降至5ms以内。

(二) 完成遥控器子系统设计与实现(1-2周)

遥控器子系统尚未开始,计划按以下步骤推进:

1. 硬件设计

绘制遥控器PCB,集成STM32F103C8T6最小系统、双轴摇杆(ADC采集)、OLED显示屏(0.96英寸,I2C接口)、NRF24L01无线模块、锂电池充电电路及电源管理(3.3V LDO)。完成元器件采购、PCB打样及焊接组装。

2. 软件开发

编写摇杆ADC采集程序,将摇杆X/Y轴映射为速度指令和转向指令。

编写NRF24L01驱动,实现遥控器端的数据发送。

自定义通信协议:数据包包含帧头、摇杆X/Y值、按键状态、CRC8校验、帧尾(0xFF)。遥控器每20ms发送一帧。

3. 车体端集成

在平衡车主板上增加NRF24L01模块接口,编写NRF24L01接收驱动及协议解析代码。

将解析出的摇杆指令替换当前的蓝牙串口指令,接入速度环和转向环的目标值。

(三) 系统联调与综合测试(1-2周)

完成遥控器后,进行整车联调,测试以下性能指标:

(1) 遥控距离:空旷环境下≥20米。

(2) 抗干扰能力:模拟轻微碰撞后自动恢复;斜坡(≤5°)上能保持平衡。

(3) 直线行驶精度:10米内偏航≤0.5米。

(4) 续航时间:连续运行≥25分钟。

(5) 响应延迟:从摇杆动作到小车响应延迟≤50ms。

记录测试数据,对不满足指标的项目进行迭代优化。

(四) 毕业论文撰写与答辩准备(2周)

同步整理设计资料,按照学院毕业论文格式要求,完成毕业论文的撰写及答辩PPT的制作。

问题演示的视频中,小车时不时的会发生震荡,晃动比较大,这是为什么?

回答这正是我目前面临的核心问题之一。可能是PID参数在静态整定对大扰动鲁棒性不足,或者环控制周期较长在大倾斜时无法快速提供前馈补偿,导致平衡车在受到较大的干扰时,总是来回震荡,有时甚至调整不过来,最终倒地。后续我将继续优化平衡车性能以解决这一问题。

问题从演示视频中,没有看到平衡车受到什么外界干扰,哪里来的干扰?

回答视频中小车发生震荡是因为当我通过遥控发送较大的前进速度指令时,小车需要前倾一定角度来加速我通过遥控发送较大的前进速度指令时,小车倾斜角度比较大,角度环的回复力矩不足以抑制倾倒趋势导致发生震荡。在调试的过程中,我总结了小车目前在倾斜角度在±30°以内能够正常保持直立,当超过这一范围时可能会发生震荡,导致小车不平衡。

问题你的课题的应用场景是什么呢?从设计的实物来看更像是一款玩具,它可以应用在什么地方呢?

回答主要是考虑避免成本过高,同时毕业设计周期较短,所以小车设计为一款桌面玩具型的平衡车,实现自平衡、遥控运动等核心功能,可以用于验证PID、LQR等算法,为后续研究更先进的智能控制方法提供实物实验平台同时,其硬件架构与商用平衡车本质一致,可为个人智能交通工具的开发提供低成本的参考原型

问题作为载人平衡车的参考的话,从设计来看现在平衡车的重心比较低,控制会相对简单,如何解决这个问题?

回答老师您说得对,我这台小车的重心确实比较低,控制起来相对容易一些。不过我想说明的是,我这次设计的定位是做一个桌面级的算法验证平台。因为我本科毕设的时间有限,经费也有限,所以我选择先做一个低重心的小车,把整个软硬件框架跑通,把PID调稳,把遥控功能实现。至于“重心低”这个问题,其实在我的设计里不算一个需要解决的缺陷,而是一个刻意的简化。后续如果我想往载人方向延伸,需要把电池和主控板抬高,换更大功率的电机,再重新整定PID就行,整个控制框架是可以复用的。

通过这次中期答辩,我把自己前期做的工作捋了一遍,与开题时定的计划和安排进行了对比,总结了实际进度和原计划之间的出入,后面会按照开题时的安排,把各项工作认真完成。同时,感谢几位评委老师提的宝贵意见,让我意识到设计中还有一些自己没注意到的问题,后续我会针对这些问题一一解决,把整个设计完善好。