站内搜索
发作品签到
STM32版FOC平衡小车
专业版

STM32版FOC平衡小车

简介

快速验证 PID、卡尔曼、LQR等自动控制理论的,开源、模块化、易上手的 FOC 平衡小车验证平台

简介:快速验证 PID、卡尔曼、LQR等自动控制理论的,开源、模块化、易上手的 FOC 平衡小车验证平台
星火计划2025
复刻成本:200

开源协议

GPL 3.0

创建时间:2025-08-30 21:26:11更新时间:2025-11-17 16:10:27

描述

视频链接:

B站视频--功能演示及介绍

项目简介

本项目是基于stm32f407做主控;mpu6050测姿态,int引脚产生200hz中断,读取得到俯仰角和角速率;2个mt6701磁编码器读取两个极数对为7的2805无刷电机角度,pwm波频率为10khz。车架是嘉立创cnc制造。
CUBEMX以及源码链接: https://pan.baidu.com/s/1nfYsNzxv2O_eDXpiLXu6ZA 提取码: 6666

项目功能

  • 双轮自平衡
    基于 MPU6050 姿态传感器,实现车体前后自平衡,支持 0° 静止站立。
  • 手机蓝牙遥控
    通过蓝牙串口(115200 bps)实时接收手机指令,支持:
    • 前进/后退
    • 原地左转/右转
  • 四重闭环控制
    由外到内:
    1. 转向环(Turn)
    2. 速度环(Velocity)
    3. 直立环(Balance)
    4. 电流环(FOC-d/q 轴)
  • 载重行驶
    经实测,可稳定承载 2 kg 负载并正常行驶。
  • 调参与监控
    预留 6 路按键调参,VOFA+、手机蓝牙2种方式实时查看波形。

项目参数

类别参数
主控STM32F407VGT6
驱动器DRV8313 ×2
电机2805 无刷电机 ×2,Pole-Pair=7
角度传感器MT6701 磁编码器 ×2
IMUMPU6050(DMP 中断)
电源3节18650电池串联
开关频率20 kHz(中心对齐 SVPWM)
电流采样INA240A2(直连3相绕组)
通信接口USART1 蓝牙、I²C1、SPI2/3
PCB 尺寸100 mm × 70 mm 双层板
车架嘉立创CNC一元打样

感谢伟大的嘉立创

原理解析(硬件说明)

原理解析

1. 系统框图

手机蓝牙 → 转向环 → 速度环 → 直立环 → 电流环 → SVPWM → DRV8313 → 无刷电机

2. 角度/电流获取

  • 机械角度:MT6701 通过 SPI2/3 读取 14-bit 绝对位置,经 Motor_Pole_Pairs 转换为电角度。
  • 三相电流:ADC1/2 注入通道 + TIM1/2 CH4 触发采样,经 INA240A2 放大后 Clarke 变换得到 Iα/Iβ

3. FOC-SVPWM 核心

  1. 坐标变换
    Clarke → Park → 反 Park → 反 Clarke → SVPWM
    在 DQ 坐标系下仅需控制两个直流分量 Id, Iq,计算量小,响应快。
  2. 扇区判断
    根据 Uα/Uβ 计算 UX,UY,UZ,查表得 1~6 扇区。
  3. 占空比计算
    每扇区独立公式,中心对称调制,提升母线电压利用率 15%。

4. 四重闭环

环路输入量输出量采样/执行周期
转向环蓝牙转向指令左右轮目标速度差10 ms
速度环编码器速度目标车身倾角10 ms
直立环MPU6050 俯仰角目标总电流 Iq1 ms
电流环Id/Iq 实测值Ud/Uq 电压矢量50 µs (20 kHz)

软件代码

软件代码

1. 仓库结构

Core/
└─ Src/main.c // 初始化 + 主循环
└─ Src/myFOC_InterFace.c // 电机 API
└─ Src/myFOC_Hidden_Process.c// SVPWM、坐标变换
└─ Src/myBalanceCar.c // 直立/速度/转向环
└─ Src/myPID.c // 通用 PID
└─ Src/myMT6701.c // 磁编码器驱动
└─ Src/myMPU6050.c // IMU 驱动

2. 关键片段

main.c

/* 初始化 */
MT6701_Init(&MT6701_LEFT,  &hspi3, ...);
Motor_Init(&Motor_LEFT, &htim1, TIM_CHANNEL_1, ...);
PID_Init(&Balance_PID, 0.07f, 0.0f, 0.00014f);
PID_Init(&Velocity_PID, 0.028f, 0.036f, 0.0f);

/* 1 ms 中断:电流环 + SVPWM */
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc) {
    if (hadc == &hadc1) {
        FOC_SVPWM_CloseLoop_Current(&Motor_LEFT,  &MT6701_LEFT,  &ADC_LEFT,
                                    &LEFT_Q_Axle, &LEFT_D_Axle);
    }
    ...
}

/* 10 ms 中断:速度/转向环 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim) {
    if (tim->Instance == htim3.Instance) {
        Get_Velocity(&MT6701_LEFT);
        Velocity_PID_Control_Process(&Velocity_PID, &BC, 10.0f,
                                     &MT6701_LEFT, &MT6701_RIGHT);
        ...
    }
}



## 实物图

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
演示视频.mp4
23
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航