NUCLEO-F302R8 モータ センサーレス6step

以下の書籍の開発キットを使用して、3相BLDCモータを回転させるプログラムを作ります。

https://shop.cqpub.co.jp/hanbai/books/48/48011.htm

前回は6step制御を行いました。

前回: 6step制御

今回はBEMFを検出して6step制御を行い、モータを回します。

SW構成

SW構成

6step制御

  1. PWM出力設定を行います。INxxとENxxを設定します。 各stepのPWM出力設定
  2. High-Zにした相でBEMFのAD変換を開始します。AD変換の割込みでAD値が閾値を超えたときにモータタスクに通知します。
  3. AD変換の割込みから通知を受けるまで待機します。
  4. 次のstepに移り、1.~3.を行います。

コード

https://github.com/ohmusso/NUCLEO-F302R8/blob/mortor/src/app/app.c#L56C40-L56C40

動作確認

  • stepTimeが1stepの時間です。1tick=1μsです。1stepをrpmに変換する式は以下になります。
    • 1相の電気角 = 360° / 極数 / 3 = 360° / 7 / 3 = 17.1°
    • 1stepの電気角 = 1相の電気角 / 2 = 17.1° / 2 = 8.6°
    • 角速度 = 1stepの電気角 / 1stepの時間 = 8.6° / 1stepの時間
    • rpm = 角速度 / 1stepの時間 * 360° * 60s

回転速度

rpm = 8.6° / 3664us * 360° * 60s = 389[rpm] 389rpm

rpm = 8.6° / 3027us * 360° * 60s = 471[rpm] 471rpm

rpm = 8.6° / 864us * 360° * 60s = 1653[rpm] 1653rpm

rpm = 8.6° / 431us * 360° * 60s = 3314[rpm] 3314rpm

次回

次は回転速度の指令値を与えて、指令値の回線速度になるように制御します。

以上