STM32迷你平衡摩托车设计与PID控制实现

张开发
2026/4/22 18:17:14 15 分钟阅读

分享文章

STM32迷你平衡摩托车设计与PID控制实现
迷你平衡摩托车设计与实现指南1. 项目概述1.1 系统架构本项目实现了一款基于STM32的迷你平衡摩托车系统采用倒立摆控制原理通过PID算法维持车身平衡。系统由以下核心模块构成主控单元STM32F103C8T6微控制器姿态检测MPU6050六轴传感器(GY521模块)动力系统N20减速电机配合皮带传动转向系统9g微型舵机供电系统3.3V/5V/12V三级电源架构1.2 技术特点20ms控制周期实现实时平衡调节互补滤波算法处理传感器数据PWM驱动电机保持恒定转速蓝牙模块支持远程调试与参数调整2. 平衡原理分析2.1 倒立摆模型自行车平衡本质上是一维倒立摆控制问题具有以下特性不稳定系统重心位于支点上方恢复力需求需要外部力抵消倾斜力矩控制变量通过前轮转向产生离心力作为恢复力2.2 机械自平衡机制传统自行车通过三种机械设计实现自平衡前轮转轴后倾倾斜时自动产生转向把手前置设计重心变化带动转向陀螺效应旋转车轮产生的进动效应2.3 电子控制平衡本项目采用主动控制方案通过传感器检测姿态偏差经PID算法计算后驱动舵机转向产生精确的恢复力矩。3. 硬件设计3.1 核心电路设计3.1.1 电源系统电压等级供电对象实现方案3.3VSTM32/GY521/蓝牙LM1117-3.3稳压5V舵机独立稳压模块12VN20电机升压模块3.1.2 电机驱动电路// 电机驱动原理图 电池 → 升压模块 → 电机 → NPN三极管 → GND PWM控制端 → 单片机PA03.1.3 传感器接口GY521模块通过模拟I2C连接PB0SCLPB1SDA3.2 机械结构设计3.2.1 动力传输方案采用皮带传动系统具有以下优势传动比易调整安装容差大噪音振动小3.2.2 车架选型建议1:6比例模型车架参数要求轴距15-20cm前叉转向角度±30°整车重量500g4. 软件实现4.1 系统控制流程void balance_tick() { // 1. 读取MPU6050原始数据 read_sensor_data(); // 2. 互补滤波计算姿态角 calculate_angle(); // 3. PID算法计算转向角 pid_control(); // 4. 输出舵机控制信号 set_servo_angle(); }4.2 关键算法实现4.2.1 互补滤波算法float complementary_filter(float accel_angle, float gyro_rate) { static float angle 0; const float alpha 0.98; // 陀螺仪权重 // 加速度计短期可靠陀螺仪长期稳定 angle alpha * (angle gyro_rate * DT) (1-alpha) * accel_angle; return angle; }4.2.2 PID控制器typedef struct { float kp, ki, kd; float integral; float prev_error; } PID_Controller; float pid_update(PID_Controller* pid, float error) { // 比例项 float p pid-kp * error; // 积分项(抗饱和处理) pid-integral error; if(fabs(pid-integral) INTEGRAL_LIMIT) { pid-integral copysign(INTEGRAL_LIMIT, pid-integral); } float i pid-ki * pid-integral; // 微分项 float d pid-kd * (error - pid-prev_error) / DT; pid-prev_error error; return p i d; }4.3 调试接口设计通过蓝牙串口实现以下调试功能实时输出姿态角数据动态调整PID参数电机PWM占空比设置5. 关键参数配置5.1 BOM清单器件名称型号/参数数量备注主控MCUSTM32F103C8T61最小系统板姿态传感器GY521(MPU6050)1I2C接口减速电机N20 6V1200RPM带编码器微型舵机SG9019g标准舵机稳压芯片LM1117-3.313.3V LDO升压模块MT360812-24V可调5.2 PID初始参数参数值调节建议Kp15.0影响响应速度Ki0.5消除稳态误差Kd2.0抑制振荡6. 系统调试要点6.1 机械调试步骤确保车体左右对称检查皮带张力适中验证舵机中立位对应直行状态测试电机空载转速稳定性6.2 电子调试方法先单独测试各模块功能通过串口绘图观察原始传感器数据先调P项使系统能勉强平衡加入D项抑制振荡最后加入I项消除稳态误差6.3 典型问题处理持续单边倾倒检查MPU6050安装方向高频振荡增大Kd或降低Kp响应迟缓适当提高Kp值电机动力不足检查升压模块输出电流

更多文章