メインコンテンツまでスキップ

閉ループ角度制御

このチュートリアルでは、Aotenjo One ボードで閉ループ角度制御を実行する方法を検討します。

前提条件

このチュートリアルでは、次のハードウェアが使用されます。

ファームウェアをボードにアップロードするには、ST-LINK V2 クローンが必要です。安価なクローン ST-LINK V2 は 5 ドル以下で購入できます。

USB - シリアルアダプター

Aotenjo One ボードには USB ポートがないため、シリアル経由でボードと通信するには USB - シリアル アダプターが必要です。 このチュートリアルでは、Blackpill STM32 ボードを USB - シリアル アダプターとして使用して Aotenjo One ボードと通信しますが、安価な USB - シリアル アダプターや Blackpill などの別の STM32 ボードを USB - シリアル アダプターとして使用することもできます。

ヒント

次の開発ボードを USB - シリアル アダプターとして使用できます。

  • BlackPill STM32 ボード
  • BluePill STM32 ボード
  • ESP32-DevKitC

USB - シリアル アダプターの図

BlackPill STM32 ボードを USB - シリアル アダプタとして使用する方法がわからない場合は、シリアル通信チュートリアル] を参照してください。

注意

BLDC モーターの内部抵抗が 10Ω より大きいことを確認してください。そうしないと、ボードが焼損する可能性があります。

参照。 内部抵抗の測定方法

インストール

VScode と PlatformIO

PlatformIO は、VSCode 拡張機能マーケットプレイスからインストールできます。

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 ボードとは異なり、NRST ピンを STM32G4 シリーズの 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(Field Oriented Control)が初期化されます。

  3. シリアル モニターに次のコマンドを入力し、Enter キーを押します。

    T6.28

モーターは 1 回転し、初期位置で停止します。ラジアン単位で値を変更することで、ターゲットの角度を調整できます。 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 コントローラーのパラメーターを試してみて、モーターの動作にどのような影響を与えるかを確認できます。

参考文献