跳到主要内容

闭环角度控制

在本教程中,我们将探讨如何在 Aotenjo One 开发板上运行闭环角度控制。

先决条件

在本教程中,使用以下硬件:

  • Aotenjo One Board 单片机: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 转串口适配器来与 Aotenjo One 板进行通信,但您可以使用廉价的 USB 转串口适配器或其他 STM32 板(例如 Blackpill)作为 USB 转串口适配器。

提示

您可以使用以下开发板作为 USB 转串口适配器:

  • BlackPill STM32 板
  • BluePill STM32 板
  • ESP32-DevKitC

USB 转串口适配器图

如果您不确定如何使用BlackPill STM32板作为USB转串口适配器,您可以参考【串口通信教程](./serial)。

警告

确保您的 BLDC 电机内阻大于 10Ω;否则,可能会烧毁单板。

参考号如何测量内阻

安装

VScode 与 PlatformIO

您可以从 VSCode 扩展市场安装 PlatformIO。

STM32CubeProgrammer

您需要它来将固件刷新到主板上。

克隆存储库

git clone https://github.com/aotenjo-xyz/one.git
cd one

LED闪烁的示例代码位于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 控制器参数,看看它们如何影响电机的行为。

参考