Skip to content

Repository files navigation

STM32 BLDC FOC — 2804 无刷云台电机驱动

Platform Framework Algorithm License

基于 STM32F103C8T6 HAL 库的 2804 无刷云台电机 FOC 驱动,使用 SimpleFOC 开源算法。支持单/双电机控制,位置/速度/力矩三种模式,串口实时控制。

🔗 3D 结构文件: gimbal-structure — 云台机械结构、电机装配、外壳。


📷 效果演示

上电后自动校准,两个电机在 0°~180° 之间平滑来回摆动:

串口调试助手:
M0:45.2 M1:120.8
M0:90.1 M1:89.5
M0:135.3 M1:45.0
M0:179.8 M1:0.2

通过串口发送 M0:90 即可让电机转到 90°,M1:45 让另一个电机转到 45°。


🔌 硬件接线

         STM32F103C8T6 (LQFP48)
    ┌─────────────────────────────────┐
    │  M0(Pan) — TIM2 + I2C1          │
    │  PA0/PA1/PA2 → 驱动板0 U/V/WH   │
    │  PA3         → 驱动板0 EN        │
    │  PB6/PB7     → AS5600(0) SCL/SDA│
    │                                 │
    │  M1(Tilt) — TIM3 + I2C2         │
    │  PA6/PA7/PB0 → 驱动板1 U/V/WH   │
    │  PB1         → 驱动板1 EN        │
    │  PB10/PB11   → AS5600(1) SCL/SDA│
    │                                 │
    │  PA9/PA10  ←→ USART1(串口调试)   │
    │  PA13/PA14 ←→ SWD(下载/调试)     │
    └─────────────────────────────────┘
外设 数量 说明
STM32F103C8T6 1 最小系统板(BluePill)
SimpleFOCmini (MS8313) 2 三相无刷驱动板
2804 无刷电机 2 云台电机,极对数=7
AS5600 编码器 2 I2C 磁编码器,安装时磁铁对准芯片中心
12V 3A 电源 1 驱动板供电,两块共地

🚀 快速上手

1. 编译 & 下载

Keil MDK → 打开 MDK-ARM/FOC_2Load.uvprojx → Rebuild → Download

2. 串口控制

默认波特率 115200, 8N1。打开串口助手,上电后等待校准完成,然后发送命令:

命令 效果
H 通信测试 → 回复 OK
M0:90 M0 转到 90°
M1:45 M1 转到 45°
M0:3.14 M0 转到 180°(3.14 rad = π)
M1:-0.5 M1 转到 -28.6°

发送命令后自动恢复摆动需重新上电。如果想永久手动控制,见下方"修改控制方式"。


🛠️ 修改控制方式

所有逻辑在 Core/Src/main.cinit()while(1) 中,已逐行中文注释。

切换模式

// 位置控制(默认): 锁定在指定角度
controller = Type_angle;    target = 1.57;  // 90°

// 速度控制: 持续转动
controller = Type_velocity; target = 5;     // 5 rad/s

// 力矩控制: 直接控电压
controller = Type_torque;   target = 2;     // 2V

改摆动角度

// 在 while(1) 中找到 goal 行:
float goal = swing_dir ? (home_angle + 3.1416f) : home_angle;  // 180°
// 改成:
float goal = swing_dir ? (home_angle + 1.57f)  : home_angle;   // 90°
float goal = swing_dir ? (home_angle + 0.785f) : home_angle;   // 45°

改速度

float ramp = 1.5f * dt * 1e-6f;  // 1.5 rad/s
// 改成:
float ramp = 3.0f * dt * 1e-6f;  // 更快
float ramp = 0.5f * dt * 1e-6f;  // 更慢

PID 手感

P_angle.P = 18;       // 改大=制动力大, 改小=平滑
voltage_limit = 5;    // 改大=更有力, 改小=更稳
PID_velocity.I = 0.3; // 改大=消除误差, 过大=振荡

📂 目录结构

STM32_BLDC_FOC/
├── 2804_FOC_HAL_DUAL/           ⭐ 经过测试的双电机控制工程
│   ├── Core/Src/main.c          主程序 (所有控制逻辑)
│   ├── SimpleFOC/               FOC库 (PID/SVPWM/编码器)
│   ├── Drivers/                 STM32 HAL 库
│   └── MDK-ARM/                 Keil 工程
│
├── 2804无刷电机_STM32_不同控制模式/  📚 参考代码合集 (未完整测试)
│   └── 2804/CODE/               原始版本/扩展功能版本
│
├── README.md                    本文件
└── LICENSE                      MIT License

🔧 开发环境

  • IDE: Keil MDK-ARM V5.32
  • HAL: STM32Cube FW_F1 V1.8.5
  • CubeMX: 引脚配置 & 生成初始化代码
  • 下载: ST-Link / DAP-Link (SWD)

📚 参考资料


🔗 相关仓库

仓库 说明
gimbal-structure 云台 3D 结构文件 — 电机装配、外壳、3D 打印模型

About

No description, website, or topics provided.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages