电赛平衡小车:轮腿式平衡小车技术深度解析
在各类高校电子竞赛中,自平衡小车始终是检验学生综合工程能力的“试金石”。尤其是近年来,随着赛题对地形适应性和动态稳定性的要求不断提高,传统的两轮倒立摆结构已逐渐显现出局限。取而代之的,是一种更具前瞻性的设计方案—— 轮腿式平衡小车 。
它不再只是简单地“站着不动”,而是能在台阶前抬腿、在启动时稳住重心、在静止时自动支撑。这种融合了轮式高效移动与腿部主动调节能力的架构,正在成为电赛高阶项目的主流选择。那么,它是如何实现的?背后又依赖哪些关键技术?
核心感知:MPU6050 如何让小车“感知姿态”
任何平衡控制的第一步,都是精确测量车身倾斜角度。这正是 MPU6050 的核心使命。作为一款集成了三轴加速度计和三轴陀螺仪的六轴惯性传感器,它通过 MEMS 技术捕捉微小的运动变化,为控制系统提供实时的姿态反馈。
但这里有个关键问题:加速度计容易受振动干扰,陀螺仪则存在积分漂移。单独使用哪一个都不够可靠。因此,实际应用中必须进行数据融合——最常见的是采用互补滤波或卡尔曼滤波算法,将两者优势结合。
更进一步,MPU6050 内置了一个名为 DMP(Digital Motion Processor)的硬件协处理器,可以直接输出四元数甚至欧拉角,极大减轻主控 MCU 的计算负担。对于资源有限的 STM32F103 这类芯片来说,这一特性几乎是“救命级”的优化。
它的量程可调(如 ±2g~±16g 加速度、±250°/s~±2000°/s 角速度),采样率可达 1kHz,完全满足毫秒级响应的控制需求。而且出厂已完成校准,省去了复杂的标定流程,非常适合比赛场景下的快速开发。
下面这段代码展示了如何启用 DMP 并获取俯仰角(pitch),这是平衡控制中最关键的一个参数:
#include "mpu6050.h"
#include "i2c.h"
MPU6050_t mpu;
float pitch, roll;
void Get_Attitude(void) {
uint8_t status;
Quaternion q;
float ypr[3];
status = MPU6050_GetIntStatus(&hi2c1);
if ((status & 0x02) == 0x02) {
MPU6050_ReadQuaternion(&hi2c1, &q);
MPU6050_QuaternionToEuler(q, ypr);
pitch = ypr[1] * 180 / M_PI; // 转换为角度
roll = ypr[2] * 180 / M_PI;
}
}
值得注意的是,DMP 固件需要正确加载,FIFO 缓冲区也需定期清空,否则会出现数据滞后甚至锁死现象。很多初学者调试失败,并非硬件问题,而是忽略了这些细节。
此外,建议开启低通滤波器(例如设置带宽为 20Hz),有效抑制高频噪声。同时利用其内置温度传感器做温漂补偿,在长时间运行或环境温度变化较大时尤为重要。
控制大脑:为什么选 STM32F103C8T6
如果说 MPU6050 是“感官”,那主控 MCU 就是整个系统的“大脑”。在众多候选方案中,STM32F103C8T6 凭借出色的性价比和丰富的外设资源,几乎成了电赛标配。
它基于 ARM Cortex-M3 内核,主频达 72MHz,拥有 64KB Flash 和 20KB SRAM,足以承载 PID 算法、编码器处理、通信协议等多重任务。更重要的是,它配备了多个高级定时器(TIM1/TIM2)、通用定时器以及完整的 I²C/SPI/USART 接口,能够轻松对接各类传感器和执行机构。
比如:
- 使用 TIM2 捕获编码器脉冲,实现闭环速度测量;
- 利用 TIM3 输出 PWM 波驱动电机;
- 通过 I²C 总线读取 MPU6050 数据;
- 外接蓝牙模块(如 HC-05)实现无线遥控或遥测。
相比 Arduino UNO 这类 AVR 单片机,STM32 不仅运算更快,中断响应更精准,还能支持嵌套向量中断(NVIC),确保关键任务不被延误。这对于平衡系统至关重要——哪怕延迟几毫秒,也可能导致失衡倾倒。
来看一段典型的串级 PID 实现:
float Kp_angle = 110, Ki_angle = 0.4, Kd_angle = 2.5;
float error, last_error = 0, integral = 0;
float angle_output, speed_output;
// 外环:角度环(维持直立)
float Balance_PID(float current_angle, float target_angle) {
error = target_angle - current_angle;
integral += error;
if (integral > 500) integral = 500;
if (integral < -500) integral = -500;
float derivative = error - last_error;
last_error = error;
return Kp_angle * error + Ki_angle * integral + Kd_angle * derivative;
}
// 内环:速度环(调节前进后退)
float Velocity_PID(int encoder_speed, int target_speed) {
// 类似逻辑...
}
// 主循环中合并输出
motor_left = Balance_PID(pitch, 0) + Velocity_PID(left_speed, target_vel);
motor_right = Balance_PID(pitch, 0) - Velocity_PID(right_speed, target_vel);
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, ABS(motor_left));
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, ABS(motor_right));
这里采用了经典的 串级 PID 控制 结构:外环控制车身倾角,目标是保持接近零度;内环控制轮速,用于调整行进速度或转向。两个环路叠加输出,既能保证稳定站立,又能完成前进、刹车、转弯等动作。
特别提醒一点:PID 参数整定不能盲目照搬网上的数值。不同机械结构、重心高度、电机响应速度都会影响最佳参数。推荐采用“先调 Kp 稳住基本姿态 → 再加 Kd 抑制振荡 → 最后引入 Ki 消除静态误差”的顺序,配合示波器观察响应曲线逐步优化。
动力执行:TB6612FNG 为何优于 L298N
再聪明的大脑,也需要强健的四肢来执行命令。电机驱动芯片就是连接控制信号与物理运动的桥梁。
传统项目常用 L298N,但它有几个明显短板:压降大(约 2V)、效率低(典型 60%~70%)、发热严重、必须外接散热片。尤其在锂电池供电的小车上,这意味着宝贵的电量大量浪费在发热上,续航时间大幅缩水。
相比之下, TB6612FNG 是一个更优解。这款东芝推出的双 H 桥驱动芯片,最大持续电流 1.2A(峰值 2A),工作效率超过 90%,且无需额外散热片即可稳定工作。它支持高达 100kHz 的 PWM 频率,可避开人耳听觉范围(20Hz~20kHz),避免恼人的“滋滋”声。
另一个常被忽视的优势是待机模式(STBY 引脚)。当系统休眠或故障时,可通过拉低 STBY 引脚使芯片进入极低功耗状态(<1μA),显著延长待机时间。
接线也非常简洁,以驱动右侧电机为例:
| STM32 引脚 | TB6612FNG 引脚 |
|---|---|
| PB13 | PWMB |
| PB14 | BIN1 |
| PB15 | BIN2 |
| PA8 | STBY |
对应的控制函数如下:
void Motor_Right_Run(int pwm_val) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET); // 正转
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, pwm_val);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); // 启动驱动
}
需要注意的是,电源端务必做好去耦处理:在 VCC 引脚附近并联一个 100μF 电解电容 + 0.1μF 陶瓷电容,用于吸收电机启停时产生的反电动势尖峰,防止干扰主控复位或损坏芯片。
轮腿协同:不只是“多两条腿”
很多人以为“轮腿式”就是在车身下方加两个舵机带动的支腿。其实不然。真正的设计精髓在于 功能融合与模式切换 。
想象这样一个场景:小车从静止启动。普通两轮车必须靠快速前行才能维持平衡,一旦起步太慢就会后仰摔倒。但在轮腿结构中,可以先让前腿撑地,形成三点支撑,然后主控慢慢抬升车身,直到达到平衡角度后再收起支腿、开始滚动。这个过程就像体操运动员借助辅助器械完成起跳动作。
停车时同理。直接断电会让小车向前扑倒,但如果提前放下后腿,就能实现平稳驻停,甚至可以在斜坡上安全站立。
而在遇到障碍物时,轮腿结构更能体现优势。当前轮触到台阶边缘时,舵机驱动前腿向上抬起,带动车头跃升,随后后轮跟进,完成越障。整个过程类似于仿生跳跃,突破了纯轮式机器人对地形的高度限制。
当然,这也带来了新的挑战:
-
机械刚性要足
:腿部连杆若松动,会导致姿态抖动,影响 MPU6050 判断;
-
重心设计要合理
:电池、主控板尽量靠近底部中心,降低整体转动惯量;
-
控制逻辑要分层
:需定义多种工作模式(如“平衡态”、“越障态”、“驻停态”),并通过传感器判断自动切换。
系统整合与实战建议
一个典型的轮腿式平衡小车系统架构如下:
[MPU6050] → I²C → [STM32F103C8T6]
↘
[编码器] → EXTI/TIMER → [STM32] → PWM → [TB6612FNG] → [直流减速电机+轮毂]
↗
[电源管理] ← 锂电池 → [稳压模块(ME6211)]
在此基础上,还可扩展 OLED 显示屏显示倾角、电压,或接入蓝牙模块实现手机遥控。
为了提升成功率,给出几点实战经验:
1.
采样周期控制在 5~10ms
:太快会增加 CPU 负担,太慢则响应迟钝;
2.
优先保证角度环稳定
:速度环初期可用固定 PWM 测试;
3.
机械装配宁紧勿松
:所有螺丝拧紧,避免共振;
4.
电源独立供电
:电机与主控最好使用同一电池但分开滤波,防止干扰;
5.
加入电压检测
:ADC 监测电池电压,低于 6.5V 时报警或降功率运行。
结语
轮腿式平衡小车看似只是一个“能站住还会爬台阶”的小装置,实则浓缩了现代智能机器人技术的核心要素: 感知—决策—执行 闭环。
它不仅考验学生的电路搭建能力,更挑战他们对控制理论的理解深度与工程调参的耐心。每一个成功的平衡瞬间,背后都是无数次对 PID 参数的打磨、对滤波算法的推敲、对机械结构的优化。
更重要的是,这种设计理念具有很强的延展性。未来完全可以在此基础上引入超声波避障、OpenMV 视觉导航、WiFi 图传等功能,逐步演变为一个具备自主行为能力的服务机器人平台。
对于参赛者而言,完成这样一套系统,收获的远不止是一块奖牌,更是面向真实工程世界的完整方法论训练。
1289

被折叠的 条评论
为什么被折叠?



