NUCLEO-F302R8 BLDC センサーレス6step

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

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

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

前回: 6step制御

今回はBEMFから回転速度を算出して、指令値の回転数に近づくように速度制御を行うプログラムを追加してモータを回します。

SW構成

SW構成

速度制御

モータ制御の概要を表したフローチャート、速度制御について記載した状態遷移図を以下に記載します。

速度制御

  • 6step制御は前回の記事を見てください。
  • 速度制御はBEMFの閾値とPWMのDutyを調整します。
  • BEMFの閾値
    • BEMF閾値はBEMFのAD変換割込みからモータタスクへ通知するかを判断するための閾値として使用します。モータタスクは通知を受けてステップを切り替えます。
    • 回転数が早くなるとBEMFが大きくなります。回転数に合わせてBEMFの閾値を調整します。
    • BEMFの閾値が適切な場合、固定子磁界が回転子を回転方向に引き付けます。その結果、モータの回転が速くなります。
    • BEMFの閾値が不適切な場合、固定子磁界が回転子を回転方向とは逆向きに引き付けます。その結果、モータの回転が遅くなります。
    • BEMFの検出の動作確認が参考になると思います。
    • BEMFの閾値を大きくしすぎると通知が発生しなくなり、最悪の場合は回転が止まります。
  • PWMのDuty
    • PWMのDutyを大きくすると固定子磁界が大きくなります。固定子の磁界が大きくなると回転子を引き付ける力も大きくなります。その結果、モータの回転が速くなります。
    • PWMのDutyを小さくすると固定子磁界が小さくなります。固定子の磁界が小さくなると回転子を引き付ける力も小さくなります。その結果、モータの回転が遅くなります。

コード

https://github.com/ohmusso/NUCLEO-F302R8/blob/a5f40ccf42c928380b98bf6383ab22cd16eeac8f/src/app/app.c#L91

動作確認結果

  • 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
  • 注意: stepTimeはプログラムの制御時間であり、stepTimeから算出した回転数が実際の回転数と一致しているかは検証していません。

指令値: 1step = 1000[us], 1428[rpm] SW構成

指令値: 1step = 800[us], 1785[rpm] SW構成

指令値: 1step = 500[us], 2857[rpm] SW構成

指令値: 1step = 250[us], 5714[rpm] SW構成

次回

モータ制御はいったんここまでにします。書籍は正弦波駆動や空間ベクトル制御の記載もあり、いつか試してみようと思います。

以上