NUCLEO-F302R8 モータ センサーレス6step
以下の書籍の開発キットを使用して、3相BLDCモータを回転させるプログラムを作ります。
https://shop.cqpub.co.jp/hanbai/books/48/48011.htm
前回は6step制御を行いました。
今回はBEMFを検出して6step制御を行い、モータを回します。
- マイコンのRM(リファレンスマニュアル)
- マイコンのDS(データシート)
- DS: https://www.st.com/resource/en/datasheet/stm32f302r6.pdf
- マイコンのPin配置やポートの機能一覧、HW特性
- マイコンのPM(プログラミングマニュアル)
- モータドライバーボードの製品シート
- IHM: https://www.st.com/resource/en/data_brief/x-nucleo-ihm07m1.pdf
- マイコンとの接続が分かる回路図
- センサーレス制御のアプリケーションノート
SW構成
6step制御
- PWM出力設定を行います。INxxとENxxを設定します。
- High-Zにした相でBEMFのAD変換を開始します。AD変換の割込みでAD値が閾値を超えたときにモータタスクに通知します。
- AD変換の割込みから通知を受けるまで待機します。
- 次の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]
rpm = 8.6° / 3027us * 360° * 60s = 471[rpm]
rpm = 8.6° / 864us * 360° * 60s = 1653[rpm]
rpm = 8.6° / 431us * 360° * 60s = 3314[rpm]
次回
次は回転速度の指令値を与えて、指令値の回線速度になるように制御します。