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

閉ループ角度制御

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

事前準備​

このチュートリアルでは、以下の機器を使用します。

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

USB シリアル変換アダプター​

Aotenjo One ボードには USB ポートがないため、シリアル経由でボードと通信するには USB シリアル変換アダプターが必要です。 このチュートリアルでは、BlackPill STM32 ボードを USB シリアル変換アダプターとして使います。市販の 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

閉ループ角度制御のサンプルコードは 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
    備考

STM32G4 シリーズでは、BlackPill と異なり、基板の NRST ピンも ST-LINK V2 に接続する必要があります。 あるいは、アップロード中に Aotenjo One ボードの NRST ボタンを押し続けると、同じ効果が得られます。 ::: 3. ST-LINK V2 書き込み器を PC に接続します。 4. VSCode でプロジェクトフォルダーを開きます。 5. 左側のサイドバーの「PlatformIO」タブをクリックし、「Upload」ボタンをクリックしてファームウェアをボードにアップロードします。

  1. ST-LINK V2 書き込み器を取り外し、電源と BlackPill STM32 ボードを Aotenjo One ボードに接続します。最後に、BlackPill STM32 ボードを PC に接続します。

    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 コントローラーのパラメーターを試してみて、モーターの動作にどのような影響を与えるかを確認できます。

参考文献​