跳到主要内容

闭环角度控制

本教程介绍如何在 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

USB 转串口适配器图

如果您不确定如何使用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,您可以手动复制文件。

快速入门​

  1. 将磁铁放在电机轴上。

电机轴上的磁铁

  1. 将 Aotenjo One 板连接到 ST-LINK V2 编程器。

    ST-LINK V2 <-> Aotenjo One
    3.3V <---> 3.3V
    GND <---> GND
    SWDIO <---> SWDIO
    SWCLK <---> SWCLK
    RST <---> NRST
    信息

与 BlackPill 不同,STM32G4 系列还需要将控制板的 NRST 引脚连接到 ST-LINK V2 编程器。 或者,您可以在上传过程中按住Aotenjo One板上的NRST按钮来达到相同的效果。 ::: 3. 将 ST-LINK V2 编程器连接到计算机。 4. 在 VSCode 中打开项目文件夹。 5. 单击左侧栏上的 PlatformIO 选项卡,然后单击 Upload 按钮将固件上传到开发板。

  1. 断开ST-LINK V2编程器,然后将电源和BlackPill STM32板连接到Aotenjo One板。最后,将 BlackPill STM32 板连接到您的计算机。

    Power Supply <-> Aotenjo One
    12V <---> VCC
    GND <---> GND

    Aotenjo One <-> Blackpill STM32
    TX <---> PA3 (RX)
    RX <---> PA2 (TX)
    GND <---> GND

    Blackpill STM32 <-> Computer
    USB <---> USB

开环控制设置

  1. 单击左侧边栏上的 PlatformIO 选项卡,然后单击 Monitor 按钮以打开串口监视器。 PlatformIO 监视器

  2. 打开电源,电机开始旋转,初始化FOC(磁场定向控制)。

  3. 在串口监视器中输入以下命令并按回车键:

    T6.28

电机将完成一整圈并停止在初始位置。您可以通过更改弧度值来调整目标角度。 您还可以输入负值,例如T-6.28,以相反方向旋转电机。

以下视频展示了实际运行效果:

BLDC电机闭环角度控制

代码​

以下是闭环角度控制实现的相关代码片段:

main.cpp
// 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 控制器参数,观察它们对电机运行效果的影响。

参考​