ST-MCSDKでPMSMモータを動かす

はじめに

NUCLEO STM32F446REとIHM07M1の組み合わせに、ST MCSDK(ソフトウェア)を組み込んで、ドローンに使用可能なA2208-1100KVモータを動かした。FOCに手入れなくても動作可能になった。確認環境、確認手順を以下にメモしておく。中間生成物のモータプロファイルとワークベンチに、結果物のSTM32CubeIDEプロジェクトを含めるリポジトリをGithubに公開済み。

確認環境

NUCLEO STM32F446RE
X-NUCLEO-IHM07M1
A2208-1100KV SM-PMSM Motor
DC Power Output 14.8V
X-CUBE-MCSDK_5.4.7(Motor profiler & Motor workbench含む)
stm32cubemx-win_v6-3-0
stm32cubeide_1.14.0_19471_20231121_1200_x86_64.
Windows 11

※何回かの試行錯誤から、MCSDK_5.4.7と、stm32cubemx-win_v6-3-0の組み合わせではエラーなく行けると確認された。

確認手順

以下、Motor Profiler→Workbench→STM32CubeIDE→WorkbenchMonitorの順でメモしていく。

Motor Profiler

12極=6ペア、3セル=14.8V、1100KV * 14.8V=16280RPM、永久磁石は回転子表面実装=SM-PMSMとして入力して、一度モータを馳せて、測定したモータプロファイルを書き出す。入力したMAX SPEEDまでモータを回転させるので、机に固定することに注意すること。

motor-profiler
motor-profiler

Workbench

Workbenchを立ち上げて、制御ボード、モータドライバ、モータプロファイルとともに、Workbenchプロジェクトを書き出す。

create-workbench
create-workbench

save-workbench
save-workbench

project-generation
project-generation

STM32CubeIDE

Workbenchプロジェクトを読み込んで、コンパイルして制御ボードに書き込む。

stm32cubeide-import-workbench
stm32cubeide-import-workbench

Workbench Monitor

Workbench Monitorを立ち上げて、Start/Stop Motorでモータを制御する。

workbench-monitor
workbench-monitor

リポジトリ

https://github.com/soarbear/stm32f446-ihm07m1に公開済み。

参考資料

STM32向けモータ制御ソフトウェア開発キット(MCSDK)
X-NUCLEO-IHM07M1
Three-phase brushless DC motor driver expansion board based on L6230 for STM32 Nucleo

NUCLEO-F446RE
STM32 Nucleo-64 development board with STM32F446RE MCU, supports Arduino and ST morpho connectivity

1+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

ブラシレスDCモータ~Hブリッジ回路

概要

DCブラシレスモータはブラシや整流子に依存しなくなり、代わりに整流用の半導体デバイスを使用する。同期モータの一種で、特性はDCモータと同様。速度はモータ電圧に比例し、トルクはモータ電流に比例する。下図のように、回転部としてのロータは外側にある、アウターロータ型モータと呼ばれるのを例に説明してみる。回転子の内周には磁石が配置されており、U、V、W相コイルの位置は120°ずれている。三相コイルは中心(中性点)で互いに接続されている。U、V、W相コイルの外側にホールセンサが配置され、出力信号はプルアップされて制御プロセッサに入力される。アウターロータ(回転子、磁石)のN極がホールセンサに近いときはH、S極がホールセンサに近いときはLとなる。

三相ブラシレスDCモータの例
三相ブラシレスDCモータの例

Hブリッジ回路でモータ制御

ブラシレスDCモータを駆動するHブリッジ回路の一例は下図のように示される。

BLDCM_H-bridge
BLDCM_H-bridge

下図のように、120°矩形波のU、V、W相ホールセンサと、U、V、W相電圧のH、Lの対応関係が分かる。
BLDCM_Pullup
BLDCM_Pullup

よって、アウターロータが一周360°回転の場合、U、V、W相ホールセンサのUH、UL、VH、VL、WH、WLがそれぞれ180°、U、V、W相電圧のUH、UL、VH、VL、WH、WLがそれぞれ120°と分かる。
ブラシレスDCモータには、FOC(ベクトル周波数変換、磁界ベクトル方向制御とも呼ばれる)、方形波制御(台形波制御、120°制御、6ステップ整流制御とも呼ばれる)、正弦波制御の3つの主な制御方法がある。

矩形波制御

矩形波制御は、ホールセンサまたは無誘導推定アルゴリズムを使用してモータの回転子の位置を取得し、360°の電気サイクルで回転子の位置に応じて6回の転流(60°の転流ごと)を実行する。各転流位置モータは特定の方向に力を出力するので、矩形波制御の位置精度は電気的に60°であると言える。この制御では、モータの相電流波形は方形波に近いため、矩形波制御と呼ばれている。

正弦波制御

正弦波制御方式はSVPWM波を使用し、出力は三相正弦波電圧であり、対応する電流も正弦波電流。矩形波制御と比較してトルク変動が少なく、高調波が少なく、制御時の「細かい」感じが明らかだが、制御器の性能要件は矩形波制御よりわずかに高く、モータ効率が発揮できない。

FOC制御

正弦波制御は、電圧ベクトルの制御を実現し、間接的に電流の大きさの制御を実現するが、電流の方向を制御することはできない。 FOC制御は、電流ベクトルの制御、すなわちモータの固定子磁界のベクトル制御を実現する正弦波制御の改良版と見なすことができる。

1+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

ロータリエンコーダによる速度計算

はじめに

ロータリエンコーダ(Rotary Encoder)は、入力軸の回転の変位を内蔵した格子円盤を基準としてデジタル信号として出力する角位置センサである。回転を測定するセンサではもっとも一般的である。同様の仕組みで直線変位を検出するものをリニアエンコーダという。そもそもは回転角測定用検出器としての考案であるが、ロボットや情報機器のサーボ系統の位置決めなど、新たな使用用途が確立されてきている。とwikiよりそのまま引用する。

光学式LEDセンサまたは非接触型磁気センサ(ホールセンサ)を使用したロータリエンコーダ(エンコーダと略す)により、回転速度と方向が検出可能とするエンコーダがインクリメンタル・ロータリー・エンコーダと呼ばれる。光学式LEDセンサとホールセンサの原理は類似しているが、光を検出するための感光素子を使用するのと、磁界の脈動を検出するためのホール素子を使用するセンサである。

以下のように、インクリメンタル・ロータリー・エンコーダを使用した車輪の直線速度を計算してみる。他に、回転角度の絶対値を出力するアブソリュート・ロータリー・エンコーダがあるが、ここで割愛とする。

ロータリエンコーダについて_new
ロータリエンコーダについて

エンコーダ分解能

エンコーダ分解能を表すには、PPR LPR CPRとの指標またパラメータがある。PPRあるいはLPRは、Pulses or Lines Per Revolution即ち、車輪1回転あたりのパルス数である。CPRは、Counts Per Revolution 即ち、車輪1回転あたりのカウント数である。PPR CPRの換算について、位相Aと位相Bパルスの状態0/1を組み合わせて、00、01、11、10の4パタンがあり、ついては「4倍速周波数」CPR = PPR * 4 の関係がある。

ギアボックス(減速機)つきDCモータ、エンコーダの回転軸がモータシャフトに取り付けたの場合、エンコーダ分解能 = 車輪1回転(即ちギアボックス出力シャフト1回転)当たり、エンコーダが出力するパルス数 = 基礎パルス数(モータシャフト1回転当たりのエンコーダが出力するパルス数) * 減速比。ここの減速比は虫眼鏡のズーム倍率と例えることができる。

上図のようなロータリエンコーダの分解能が、以下のように計算される。
基礎パルス数 = 8(p)
減速比 = モータ回転速度 / モータシャフト回転速度 = 100

車輪1回転につき、エンコーダ位相AのPPRあるいはLPR = 800(p)
車輪1回転につき、エンコーダ位相BのPPRあるいはLPR = 800(p)
位相Aと位相Bの位相差 = 90°(センサAとセンサBの位相差)から、車輪1回転あたりのカウント数CPR = 800(p)(PPR) * 4 = 3200(c)

状態カウント数

状態カウント数は、状態(時計まわりの回転か反時計まわりの回転か静止)の変化をカウントしたパルス数である。もし時計まわりの回転で状態カウント数が増えると、以下の擬似コードで記述される。

if 時計まわりの回転
then 状態カウント数(c) = 状態カウント数(c) + 1(c)
else if 反時計まわりの回転
then 状態カウント数(c) = 状態カウント数(c) – 1(c)
else if 静止
then 状態カウント数(c) = 状態カウント数(c) + 0(c)
end if

車輪の直線速度m/s

車輪の直線速度は、以下の式より計算される。
車輪の直線速度(m/s) = 車輪の円周の長さ(m) * 状態カウント数(c) / [エンコーダ分解能CPR(c) * パルスをカウントした時間(s)]

車輪の回転速度(角速度)rad/s

車輪の回転速度(角速度)は、以下の式より計算される。
車輪の角速度(rad/s) = 2π * 状態カウント数(c) / [エンコーダ分解能CPR(c) * パルスをカウントした時間(s)]

関連記事

9軸IMU 6軸/9軸フュージョン 低遅延 USB出力 補正済み ROS対応
エンコーダ付きDCモータPID制御の実験-haya_imu応用例
エンコーダ付きDCモータPID制御の実験-hayate_imu応用例
点検向け自律移動ロボットRED(薄型・小型)
研究開発用 台車型ロボット キット
SLAM~拡張カルマンフィルタ

1+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア