1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry pi + インバータでBLモータを回転させる(実験機製作と動作確認)

Last updated at Posted at 2025-05-28

1. はじめに

私を含め、Raspberry piを買ったはいいものの、何をやったらいいかわからず、持て余している方は多いのではないでしょうか。
特に私の感覚では、「ハードウェアを動かすこと」に困っている方が多いように思います。
それに加え、私は仕事でBLモータを使ってはいるものの、BLモータが回転するメカニズムがわかっていなかったので、Raspberry piでBLモータを回転させる実験機を作ることにしました。

実験機を作りにあたり、ESCではなくインバータ(本記事ではIHM07M1)を使うことで、
より正確にBLモータが回転するメカニズムを理解できるように努めました。

2. 本記事で参考にしたサイト

本記事は以下サイトを参考にしております。作成者の方にはこの場を借りて、お礼を申し上げます。

3. 本記事のゴールと注意点

BLモータの回転に最もよく使われる方法は「ベクトル制御」だと思われ、私も当初はベクトル制御実装を目指していましたが、
Raspberry piはPWMチャンネルが2つしかなく、BLモータの3相を独立で制御することができません。
よって本記事では「センサード120°制御+電流計測」までを解説します。

4. 本記事の構成

前述の「センサード120°制御+電流計測」を全て解説するとなると本文が膨大となるため、タスクとに、下記のように記事を分けます。

  1. BLモータの絶対角計測
  2. インバータ(IHM07M1)からのPWM出力
  3. BLモータの3相電流のAD変換と読み取り
  4. 実験機製作と動作確認(本記事の範囲)

前半1章~3章で必要な機能の実装方法を述べ、最後の4章では「どのように実験機を作ったか」と「動作確認結果」を述べます。

5. 実験機製作と動作確認

5.1. 使用する機器と配線図

本記事で使用する機器を以下に示します。

機器名 型番
角度センサ AS5048A
電流センサ ACS712
ADコンバータ MCP3208
インバータ IHM07M1
BLモータ A2212 KV1000
DCDCコンバータ AE-LTC3111
DCジャック AE-DC-POWER-JACK-DIP
ACアダプタ M050200-A010JP
抵抗 220Ω
コンデンサ 2.2μF
コンピュータ Raspberry pi 4 Model B

上表で示した機器を、過去記事で紹介した図のように接続します。

  1. BLモータの絶対角計測
  2. インバータ(IHM07M1)からのPWM出力
  3. BLモータの3相電流のAD変換と読み取り

実際に作った実験機の外観は下図となります。

5.2 センサード120deg制御の実装

IHM07M1の記事でも紹介したように、BLモータはNo1~No6を順に遷移させるだけ(センサレス120deg制御と呼びます)でも回転します。

※ 図はこちらのサイトから利用させていただきました。

ですがより滑らかに回転させるためには、BLモータの角度を計測し、その計測値に応じてNo1~No6を適用させた方が良いです(この方法はセンサード120deg制御と呼びます)。

よってこれより、下記サイトを参考に、センサード120deg制御を実装します。

センサード120deg制御実装を、下表を使って考えます。

No PWMの向き モータ変数
1 U相 → V相 ?
2 U相 → W相 ?
3 V相 → W相 ?
4 V相 → U相 ?
5 W相 → U相 ?
6 W相 → V相 ?

この表の「?」を埋める、つまり「モータ変数がいくつの時、PWMをどの相からどの相に流すか(=どのNoを適用するか)」を決めれば、センサード120deg制御を実装できます。

この表の「?」を埋めるためには、モータ変数は以下の2条件を満たすことが好ましいです。

  • モータ変数の原点とU相が一致する
  • 上表のNo6からNo1に移り変わるとき、モータ変数はリセットする

以下より、上記2条件を満たすモータ変数を求めましょう。

5.2.1 モータ変数の原点とU相が一致させる

まずはNo1~No6の移り変わりとモータ角度(センサ生値)の変化を見てみましょう。
変化を見るには、センサレス120deg制御でモータを動かします。このリンクにあるexeファイルを使っていただければ、No1~No6の移り変わりとモータ角度(センサ生値)の変化をcsvファイルで出力してくれます。

グラフより、この場合はモータ角度(センサ生値)はNo1とNo2の間でリセットすることがわかります。
「モータ変数の原点がU相と一致する」とは、「No4とNo5の間でモータ変数がリセットする」ということなので、下記の処理より「補正後モータ角度」を求めます。

  1. No4時点とNo5時点のモータ角度(センサ生値)の平均を計算する
  2. 平均値を差し引いた後の値と、角度センサの最大値とのmodを計算する

先ほどのグラフからNo4とNo5の平均値を計算しましょう。

その結果は下記となります。
$$
\frac{1445+1886}{2} = 1665.5
$$

次に角度センサの最大値も合わせてmodを計算します。AS5048Aは14bitなので、計算式は下記となります。
$$
\text{補正後モータ角度} = \text{mod}(モータ角度(センサ生値)-1665.5, 2^{14})
$$

補正後モータ角度が計算できたので、先ほどのグラフに重ねてみます。

グラフより、補正後モータ角度の原点がNo4とNo5の間、つまりU相と一致したことが確認できました。

5.2.2 No6からNo1に移り変わるときにリセットするモータ変数

直前のグラフを見ると、補正後モータ角度が1周する間に、No1~No6の移り変わりが7周※していることがわかります。

※ これはBLモータの極対数と一致します。今回使用するBLモータのA2212 KV1000の極数は14。極対数はその半分なので7となります。

前述の表を埋めるモータ変数は、No6→No1となるときにリセットされてほしいです。そのような変数は、「補正後モータ角度」と「角度センサ最大値を7で割った値」とのmodをとることで計算できます。
$$
\text{モータ変数} = \text{mod}(補正後モータ角度,\frac{2^{14}}{6})
$$

この計算により得られるモータ変数を、グラフに重ねてみます。

グラフより、モータ変数がNo6→No1でリセットされることを確認できました。

5.2.3 モータ変数とPWMを掛ける向きの決定

下記の条件を満たすモータ変数が求められたので、そのモータ変数とPWMを掛ける向きの対応を決定します。

  • モータ変数の原点とU相が一致する
  • 上表のNo6からNo1に移り変わるとき、モータ変数はリセットする

まずはモータ変数が0と最大値($2340.6=\frac{2^{14}}{7}$)の時、どの向きにPWMを掛けるべきかを考えましょう。
下図より、モータ変数が原点と最大値を通過するのはNo5のPWMを掛けたときなので、「0と最大値($2340.6=2^{14}/7$)の時はNo5の向きにPWMをにゅうりょくする」ということがわかります。

※ 上図はこちらから使用させていただきました。

No PWMの向き モータ変数
1 U相 → V相 ?
2 U相 → W相 ?
3 V相 → W相 ?
4 V相 → U相 ?
5 W相 → U相 0, 2340.6
6 W相 → V相 ?

後はNo1~No6それぞれのモータ変数のレンジが
$$
(\frac{2^{14}}{6})*\frac{1}{6}=390.1
$$
であるので、

No PWMの向き モータ変数
1 U相 → V相 585.1~975.2
2 U相 → W相 975.2~1365.3
3 V相 → W相 1365.3~1755.4
4 V相 → U相 1755.4~2145.5
5 W相 → U相 2145.5~2340.6、0~195.0
6 W相 → V相 195.0~585.1

となります。この表通りにPWMを掛ければ、より滑らかにBLモータを回転させることができます。

これはセンサーを使った120deg制御なので、「センサード120deg制御」と呼ばれます。

5.3 本記事で使用したプログラム

本記事で使用したプログラムは以下Githubリンクにて公開しております。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?