基于 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 | 驱动板供电,两块共地 |
Keil MDK → 打开 MDK-ARM/FOC_2Load.uvprojx → Rebuild → Download
默认波特率 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.c 的 init() 和 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; // 更慢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 打印模型 |