
有刷平衡车开源
简介
自己的毕设,学了两个月搓出来的平衡车小板,用来验证串级pid的直立算法
简介:自己的毕设,学了两个月搓出来的平衡车小板,用来验证串级pid的直立算法开源协议
:GPL 3.0
描述
【开源毕设/项目】基于STM32F103C8T6与TB6612FNG的串级PID直立平衡小车
自己的毕设,学了两个月搓出来的平衡车小板,用来验证串级pid的直立算法,有演示视频:https://www.bilibili.com/video/BV1CZ9ZBTELb/
代码和3d模型在附件
本项目是一个基于STM32F103C8T6单片机制作的迷你两轮平衡小车,包含原理图PCB、3D打印外壳及全开源软件算法。核心算法采用串级PID(双闭环) 进行直立控制,非常适合单片机初学者、控制理论入门以及毕业设计参考。
🧩 项目亮点
- 纯国产/易购买器件:STM32F103C8T6 + TB6612FNG(经典低成本方案)。
- 核心算法:使用 串级PID + 互补滤波,实现稳定的自平衡效果。
- 硬件开源:提供Altium Designer/立创EDA源文件,修改方便。
- 3D打印结构:提供小车底壳、电机支架、电池卡扣等STL模型。
- 快速上手:提供完整的Keil工程代码和烧录教程。
🔧 硬件方案详解 (基于原理图)
1. 主控单元 (MCU)
- 型号:STM32F103C8T6
- 最小系统:8M晶振 + 复位电路,支持SWD调试接口。
2. 电机驱动
- 驱动芯片:TB6612FNG (双路直流电机驱动)
- 优点:相比L298N,TB6612的发热量更小,响应频率更高,支持大电流。可直接接入锂电池供电。
3. 电源管理
- 输入:7.4V - 12V 锂电池。
- 5V稳压:R3TPS5430DDAR(高效率DC-DC降压芯片),为大功率电机驱动提供稳定5V。
- 3.3V稳压:RT9013-33GB(低压差线性稳压器),为MCU和传感器提供低噪3.3V。
4. 姿态传感器 (通常配合板载I2C接口)
- 板载预留I2C接口,推荐使用 MPU6050 六轴陀螺仪/加速度计。
5. 人机交互
- 按键:SW1 (PB3), SW2 (PB4), SW3 (PB5)
- 用途:控制小车启停、切换调试模式、PID参数加减调整。
- 指示灯:提供系统状态LED。
6. 引脚分配(核心)
- MCU - 电机A (左/右):
- PB14, PB15 (PWM/方向)
- PB12, PB13 (PWM/方向)
- 传感器:支持I2C (PB10/PB11) 连接MPU6050。
🧠 软件与算法设计 (核心部分)
1. 姿态解算:互补滤波 (Complementary Filter)
为了获得平滑且无漂移的角度,软件中使用互补滤波融合陀螺仪与加速度计数据:
Angle = 0.98 * (Angle + GyroY*dt) + 0.02 * AccelAngle
2. 控制算法:串级PID (Cascade PID)
为什么不只用单级PID?
单级PID直接调节电机输出来平衡车身,响应慢且容易过冲。本项目采用内环+外环模式:
- 外环 (角度环):输入为目标角度(0°)和当前实际角度。输出为目标角速度。
- 内环 (角速度环):输入为上面计算出的目标角速度和实测角速度。输出直接为电机PWM值。
调参心得:一定要先调内环P值(使车能僵直地阻止你推它),再调外环P值(让车快速回正),最后加一点D值抑制震荡。
3. 避震与保护代码
- 死区补偿:解决电机在极小PWM下不动的问题。
- 限幅保护:PWM输出上限保护电机不烧坏。
- 电池过放检测:通过ADC读取电池电压(如有),低电量时自动停机。
🖨️ 3D打印结构件 (基于此PCB)
本小车的3D打印件包含(需自行组装):
- 车架:固定PCB和电池和电机。
注:附件中包含 xxx.stl 和 xxx.step 源文件,可根据个人电机尺寸调整。
🚀 快速上手 & 复现指南
- 准备物料:
- 本PCB打样 * 1。
- STM32F103C8T6 * 1、TB6612FNG * 1、MPU6050 * 1。
- N20或GA12电机 * 2(带编码器非必需,纯位置/速度控制)。
- 电池组2s/3s * 1。
- 组装:
- 焊接好板子 -> 安装MPU6050 -> 安装电机 -> 连接电源。
- 烧录程序:
- 使用ST-Link连接SWD接口。
- 打开
Keil_Project/目录下的工程,编译并下载。
- 试车:
- 打开开关 -> 放置在地面上 -> 等待MPU6050初始化完毕 -> 轻推小车观察是否平衡。
💡 常见问题 (FAQ)
- Q:小车一直往一边倒怎么调?
- A:调整板子的物理重心,或者通过软件给PID增加一个机械零点补偿值。
- Q:电机发出嗡嗡声且剧烈震荡怎么办?
- A:这是因为PID参数P值过大。请降低角速度环(内环)的P参数。
- Q:遥控控制怎么实现?
- A:你可以在代码中添加HC-05蓝牙模块(在串口1/UART上),通过把上位机发送的速度值叠加到电机总输出上即可实现。
📺 演示视频
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。









