闭环角度控制
本教程介绍如何在 Aotenjo One 开发板上运行闭环角度控制。
准备工作
本教程使用以下硬件:
- Aotenjo One 控制板 单片机:STM32G431CBU6 版本:Aotenjo One V1.4
- 沿直径方向充磁的圆片磁铁(Aotenjo One 附带)
- ST-LINK V2 克隆版
- BlackPill STM32 板
- BE4108 75T云台电机
- 电源(12V)
您需要 ST-LINK V2 克隆版来将固件上传到开发板。您可以以低于 5 美元的价格购买廉价的 ST-LINK V2 克隆版。
USB 转串口适配器
由于 Aotenjo One 开发板没有 USB 端口,因此您需要一个 USB 转串口适配器才能通过串行方式与开发板进行通信。 本教程使用 BlackPill STM32 开发板作为 USB 转串口适配器。也可以使用现成的 USB 转串口适配器,或其他支持此功能的开发板。
您可以使用以下开发板作为 USB 转串口适配器:
- BlackPill STM32 板
- BluePill STM32 板
- ESP32-DevKitC

如果您不确定如何使用BlackPill STM32板作为USB转串口适配器,您可以参考串口通信教程。
确保您的 BLDC 电机内阻大于 10Ω;否则,可能会烧毁控制板。
测量方法请参阅如何测量内阻
配置开发环境
VSCode 与 PlatformIO
您可以从 VSCode 扩展市场安装 PlatformIO。
STM32CubeProgrammer
您需要它来将固件烧录到开发板。
克隆代码仓库
git clone https://github.com/aotenjo-xyz/one.git
cd one
闭环角度控制的示例代码位于examples/closed_loop_angle_control目录中,因此如果您使用Linux或macOS,请运行以下命令将示例代码复制到src目录中:
rm src/*
cp examples/closed_loop_angle_control/main.cpp src/
cp examples/closed_loop_angle_control/platformio.ini platformio.ini
对于 Windows,您可以手动复制文件。
快速入门
- 将磁铁放在电机轴上。

-
将 Aotenjo One 板连接到 ST-LINK V2 编程器。
ST-LINK V2 <-> Aotenjo One3.3V <---> 3.3VGND <---> GNDSWDIO <---> SWDIOSWCLK <---> SWCLKRST <---> NRST信息
与 BlackPill 不同,STM32G4 系列还需要将控制板的 NRST 引脚连接到 ST-LINK V2 编程器。
或者,您可以在上传过程中按住Aotenjo One板上的NRST按钮来达到相同的效果。
:::
3. 将 ST-LINK V2 编程器连接到计算机。
4. 在 VSCode 中打开项目文件夹。
5. 单击左侧栏上的 PlatformIO 选项卡,然后单击 Upload 按钮将固件上传到开发板。
-
断开ST-LINK V2编程器,然后将电源和BlackPill STM32板连接到Aotenjo One板。最后,将 BlackPill STM32 板连接到您的计算机。
Power Supply <-> Aotenjo One12V <---> VCCGND <---> GNDAotenjo One <-> Blackpill STM32TX <---> PA3 (RX)RX <---> PA2 (TX)GND <---> GNDBlackpill STM32 <-> ComputerUSB <---> USB

-
单击左侧边栏上的 PlatformIO 选项卡,然后单击
Monitor按钮以打开串口监视器。
-
打开电源,电机开始旋转,初始化FOC(磁场定向控制)。
-
在串口监视器中输入以下命令并按回车键:
T6.28
电机将完成一整圈并停止在初始位置。您可以通过更改弧度值来调整目标角度。
您还可以输入负值,例如T-6.28,以相反方向旋转电机。
以下视频展示了实际运行效果:
代码
以下是闭环角度控制实现的相关代码片段:
// set motion control loop to be used
motor.controller = MotionControlType::angle;
// velocity PI controller parameters
motor.PID_velocity.P = 0.2;
motor.PID_velocity.I = 20;
motor.PID_velocity.D = 0.001;
// maximal voltage to be set to the motor
motor.voltage_limit = 3.0;
// velocity low pass filtering time constant
// the lower the less filtered
motor.LPF_velocity.Tf = 0.01f;
// angle P controller
motor.P_angle.P = 20;
// maximal velocity of the position control
motor.velocity_limit = 10;
可以尝试调整 PID 控制器参数,观察它们对电机运行效果的影响。
