閉ループ角度制御
このチュートリアルでは、Aotenjo One ボードで閉ループ角度制御を実行する方法を検討します。
前提条件
このチュートリアルでは、次のハードウェアが使用されます。
- Aotenjo Oneボード MCU: STM32G431CBU6 バージョン: Aotenjo One V1.4
- 直径方向着磁ディスクマグネット(Aotenjo Oneに付属)
- ST-LINK V2 クローン
- BlackPill STM32 ボード
- BE4108 75T ジンバルモーター
- 電源(12V)
ファームウェアをボードにアップロードするには、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

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 の場合、ファイルを手動でコピーできます。
クイックスタート
- モーターのシャフトに磁石を置きます。

-
Aotenjo One ボードを ST-LINK V2 プログラマに接続します。
ST-LINK V2 <-> Aotenjo One3.3V <---> 3.3VGND <---> GNDSWDIO <---> SWDIOSWCLK <---> SWCLKRST <---> NRST備考
blackpill ボードとは異なり、NRST ピンを STM32G4 シリーズの 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(Field Oriented Control)が初期化されます。
-
シリアル モニターに次のコマンドを入力し、Enter キーを押します。
T6.28
モーターは 1 回転し、初期位置で停止します。ラジアン単位で値を変更することで、ターゲットの角度を調整できます。
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 コントローラーのパラメーターを試してみて、モーターの動作にどのような影響を与えるかを確認できます。
