ODriveでBLDCモーターの制御 #01
勇者技術研究所で、BRAVE ROBOTICSのケンジさん、もとい華姉りあんちゃんと一緒に、オリジナルの変形ロボット「ファイバリオン」を建造中なのですが・・・
高トルクが必要な膝等に使用するアクチュエーターの検討として、高トルクな中華サーボや、双葉のRS405を6連に束ねたものを実験していましたが、新たにBLDCモーターを使い、ハーモニックドライブで関節を作ろうという話になり、BLDCモーターを回すためのコントローラー「ODrive」を試してみることになりました。
とりあえず、下記の記事において、華姉りあんちゃんがODriveを先行して触り始めていますが、同時並行で進めていきたいと思います。この日記は、その忘備録になります。
【編集中】ODrive試験装置を作ってBLDCモーターをSPI接続アブソリュートマグネットエンコーダで位置制御、速度制御できるよう設定した
https://note.com/kenjiishida/n/n95e1f4f2c2f0
最終的には、PC側のアプリケーションから、原則後の関節の位置制御およびモーションコントローラーまで作成して、ロボットの関節として使えるようにしたいと思います。
テスト用のハードに関しては、華姉りあんちゃんが、テストボードを組んでくれました。
いきなり完成しております。
構成としては、
- ODRIVE V3.6 (12-56V仕様)
- ブレーキ抵抗 50W2RJ
- BLDCモーター GoolRC SURPASS 1200KV 4極ブラシレスモーター
- エンコーダー AS5047P-TS_EK_AB
- 電源 アルインコ DM-330MV (とりあえず12V設定、最大32A)
- メイン電源スイッチ (配線用遮断器)
- ワットメーター(200Aパワーメータ)
という感じです。
とりあえず、華姉りあんちゃんの記事に沿って、同じところまで動作確認です。
位置制御で、とりあえずBLDCモーターを回してみました。
エンコーダーの解像度も14bitくらいあるんですが、エンコーダーとモーターが直結なので、とりあえず回転回数で位置決めしてます。
高速に回るんで、ホントに指定回数回ってるのかなーと、iPhoneでスロー撮影。
スロー再生で目視可能な10回転ですが、ちゃんと10回転して、元の位置で止まっています。(ズレてたらエンコーダーの意味ないですが^^;A)
あまりエンコーダー単体で使うことなくて、昔ロボコンで使った光学式の知識しかなかったのですが、マグネットエンコーダー解像度高いし、軸合わせもカップリングとかいらないし便利ですね。
とりあえず、今回は、華姉りあんちゃんの記事と同じところまで追いついて、課題を確認しました。
今のところ、「Encoder without index signal」での動作は確認できているのですが、このモードだと毎回起動時にキャリブレーションが必要になるため、起動してすぐくクローズドループを起動して位置制御することが出来ません。
index signalの設定がイマイチわからず、単に設定をミスってるだけなのか、AS5047P-TS_EK_ABの問題なのか、いろいろ検索していると、公式のコミュニティの方で、同じエンコーダーを使用している人が同じようなことを質問していました。
How do I use index signal of AS5047P?
https://discourse.odriverobotics.com/t/how-do-i-use-index-signal-of-as5047p/2850
結局解決したのかわかりませんが、レスの内容としては「出来る」ということなので、出来るのだろう、ということで次回は、起動してすぐにクローズドループの状態にして、制御できるところまでやりたいと思います。
一応初回なので、いろいろリンクを貼っておきます。(忘備録なので)
- 公式ドキュメント
https://docs.odriverobotics.com/ - BLDC制御実験キットの製作
https://qiita.com/ohaginia218/items/4f130d26aeb32024afdb - ODrive 入門 – 初期設定から動作確認まで
https://qiita.com/ohaginia218/items/82bb377205fe2405a8b3 - ODrive入門 – ArduinoでBLDC制御
https://qiita.com/ohaginia218/items/ba58d33acf5f958197e6
あと、GUIのツールを試してみて、なかなか起動しないなーと思ったら、どうややファームウェアのアップデートから動かなくなったという記事を見つけました。
なるほど・・・。
はじめまして。odriveを使用してインホイールモーターを回したい初心者です。。
できればarduinoでodriveを制御したいのですが、最初からつまづいております。
PCとodriveを接続してもodriveを駆動することができないのです。。
通常のUSBケーブルをPCに接続しているのですが、それではだめなのでしょうか?
まずはPCとodriveを接続してモーターを動かしてみたいです。
アドバイスいただけると助かります。
おそらく解決済みかとは思いますが、コメント遅くなってすみません。
最近は、ODriveではなくmoteusに鞍替えしています。
当時の記憶だと、USBケーブルでつなぐだけで、Pythonから制御出来ていました。