【DRV8320HでBLDCを回したい】第4回+α:NUCLEO-F302R8でセンサレス120度通電制御+α
はじめに
第4回ではNUCLEO-F302R8でセンサレス120度通電制御する方法について書きました。
しかし、ドローンのESCとして使用するには前回の制御では回転速度が足りないという問題も抱えていました。 あれから色々試行錯誤した結果、なんとかそれなりにモータを回せるようになってきたのでやったことをメモ書きで残しておきます。
変更点
下記に変更点を書いていきます。色々と変更したのですが、最終的に何が効いてモータが回るようになったのかは自分でもいまいち理解できていない部分もあります。なので、とりあえず変更点を列挙します。
ゼロクロス検出方法の変更
前回は下図のようにPWM周期のHIGHのタイミングでゼロクロスを判定するようにしていました。
今回は下図のように常にゼロクロス判定をするように変更しています。
変更した理由としては6000KVや7000KVのような高速回転するモータではPWM周波数にもよりますがサンプリングが足りずにゼロクロス間隔が飽和しているような気がしたためです。正直、変更後の検出方法はなんでPWMの出力Lowタイミングでもゼロクロス検出できるのか自分でも分かっていません。よくわかんないけど動くからヨシ!の状態...。
転流処理の高速化
下記のような相補PWMによる駆動を行うために転流のタイミングでLow Side出力ピンのモードを相補PWMモードとGPIOモードにHAL_GPIO_Init()関数を読んで切り替えていました。
しかし、この部分の処理が異常に重く下記のように転流処理に28.6usの時間がかかっていました。
そこで、必要最低限の処理だけを実行するようにした所、転流にかかる処理を4usまで高速化できました。
ピンモードの切替としてはMODERレジスタを操作するだけで良い感じでした。
PWM周波数・供給電圧の変更
Dutyを上げて行くとある程度のDutyからDRV8320Hの何らかの保護機能に引っかかては復帰しを繰り返す現象が見られました。過電流などが流れている場合、CLR_FLT動作をしないと復帰できないようなので、自動で復帰してくることから「VCPチャージ・ポンプの低電圧誤動作防止」が働いているような気がしました。また、PWM周波数を上げると回せるDuty上限が上昇していく現象を確認しました。さらに、電源電圧を上げることでも回せるDuty上限が上昇しました。このことがわかったので最終的にPWM周波数は40kHzから72kHzに変更、電源電圧は7.4Vから11.1Vで駆動させるようにした所、Duty100%でも保護機能に引っかからないようになりました。
チャージポンプに関しては下記のデータシートにあるようにPWM周波数と電源電圧に依存するっぽいので、やはりこの辺りが影響していたのかなあという感じです。
残課題
モータは回るようになりましたがが処理負荷的に通信機能が実装できるか微妙です。ESCとして機能させるには上位ECUと通信が必要なのでその処理が入るかはこれから検討が必要です。
おわりに
今回は完全に個人的な備忘録として書いています。読んでいる人にはナンノコッチャだと思うので適当に流し読みしてください。 これで【DRV8320HでBLDCを回したい】に関しては一区切りにしたいと思います。