SimpleFOC で倒立振子2
前回はSimpleFOCによる倒立振子をESP32搭載のMakerbase社製のコントローラを後いて検証いたしました。
ここでは前回の問題点を解決しながら倒立振子の実現を目指します。
目次
エンコーダ修理
前回壊してしまったAS5600 磁気エンコーダモジュールを修理します。
もちろん俺が悪い
支給されたコネクタで電源逆挿しして壊れた
もちろん俺が悪い pic.twitter.com/wD8LpkwUcY— HomeMadeGarbage (@H0meMadeGarbage) September 18, 2024
☟この磁気エンコーダモジュール
Amazonで別のAS5600基板を購入してICを載せ替えました。
修理したエンコーダを前回作成した倒立振子につけて片輪走行を確認しました。
無事にエンコーダ修理終了です。
エンコーダ治ってすっかり元気に#倒立振子 #SimpleFOC pic.twitter.com/yd4C0ths7n
— HomeMadeGarbage (@H0meMadeGarbage) September 19, 2024
エンコーダアナログ出力検証
倒立振子製作に際して機体の姿勢を検知するIMUセンサ(MPU6050)と磁気エンコーダの2個で計3個のI2C通信が必要となります。
しかし、ESP32には2個のI2Cチャンネルしかないためここでは別の磁気エンコーダ出力インターフェースを検討します。
磁気エンコーダAS5600にはI2Cの他にアナログ出力もあります。
SimpleFOCライブラリにはアナログ出力エンコーダの関数も用意があり、サンプルコードを用いて動作確認しました。
https://docs.simplefoc.com/magnetic_sensor_analog
エンコーダによる回転検知をアナログ出力で取得してクローズドループ制御で動作確認しました。
やはりエンコーダ アナログ出力だとうまく制御できん
なんでだろA相, B相出力のあるエンコーダで割り込むのが無難かな#SimpleFOC pic.twitter.com/kQWNtBnWb9
— HomeMadeGarbage (@H0meMadeGarbage) September 19, 2024
しかし、うまくモータを回すことができませんでした。 ESP32で電圧をリニアにセンスするのが難しいことが要因かもしれません。
またESP32のアナログ入力ピンはWiFi使用時に使えなくなるピンがあるなど(ADC2が使えなくなる)の制約もあるので別のデジタル検知できるインターフェース方が良さそうです。
ここではブラシレスモータドライバには以下を使用しました。
ちなみにAS5600のI2C出力ではしっかり回転制御を確認できました。
コンパクトいいドライバですね。
磁気エンコーダI2Cでクローズドループ制御を楽しみました。#SimpleFOC pic.twitter.com/XqMdMm515f— HomeMadeGarbage (@H0meMadeGarbage) September 19, 2024
モータは従来通りのコレ
新規エンコーダ検証
磁気エンコーダ AS5600の倒立振子への使用が難しいことがわかりましたので別のエンコーダを試します。
A/B相のパルス出力のある磁気エンコーダを見つけました!
磁気エンコーダ AS5601
AS5601はI2C通信でA/B相のパルス数や各種設定を変更可能です。
データシートによるとA/B出力分解能を8~2048まで可変できるとのことです。
オシロで観測したところA/B相からはそれぞれ1周で2パルス出力していましたので出力分解能は4逓倍することを想定しているようです。
電源投入時のA/B相のパルス数はI2Cで1度だけ不揮発メモリ(OTPメモリ)に書き込むことで変更が可能でした。
以下にしたがってA/B出力分解能を8から最大の2048(各相 1周 512パルス)に変更しました。
設定レジスタの焼き付けによる分解能の固定
A相, B相出力のある磁気エンコーダAS5601を味見
実に具合が良さそう pic.twitter.com/HPftUx2EMC— HomeMadeGarbage (@H0meMadeGarbage) September 20, 2024
モータ動作
早速 AS5601のA/B相出力を用いてクローズドループ制御モータ動作を確認してみました。
磁気エンコーダAS5601を用いてのブラシレスモータ回転制御動作確認
これにてエンコーダインターフェース問題解決#SimpleFOC pic.twitter.com/YdhRihlkql— HomeMadeGarbage (@H0meMadeGarbage) September 20, 2024
無事に回転しました!!
SimpleFOCにはもちろんA/B相エンコーダ用の関数も用意がありますのでそちらを使用しました。
https://docs.simplefoc.com/encoder
AS5601は AS5600の基板を活用して以下のように実装しました。
たまたまモータの固定ネジ穴とAS5601基板の穴位置がハマりました。
ちなみに磁気エンコーダに付属の磁石は円の半分で磁極が別れています。
磁界が見える魔法のシート
普通のネオジム磁石は円の面の表裏がN極S極で
磁気エンコーダ用の磁石は円の左右半分が磁極になっている pic.twitter.com/4MTjlbvB8A— HomeMadeGarbage (@H0meMadeGarbage) September 20, 2024
倒立振子作製
AS5601によってI2Cインターフェース問題が解決できたので早速 倒立振子を組んでいきます。
AS5601のA/BピンをMakerbase社製のコントローラの従来I2CのSDA/SCLピンに接続します。
コネクタを加工しました。
無事にモータ2個の回転動作を確認できました!
やっと倒立振子くめた
後はお楽しみの駆動システム構築と調整#SimpleFOC pic.twitter.com/jJKi5yUgKn— HomeMadeGarbage (@H0meMadeGarbage) September 22, 2024
☟ちょっとコードにミスがあり前後進がまっすぐ進めていないww
前後進がまっすく進まない
なんか間違ってるみたい#SimpleFOC pic.twitter.com/DG7fnW25lr— HomeMadeGarbage (@H0meMadeGarbage) September 22, 2024
コード修正で無事にええ感じに走行
おわりに
I2Cインターフェース問題などを解決して無事にSimpleFOCによるブラシレスモータ制御によって倒立振子を実現することができました。
エンコーダのインターフェースも各種試すことができて良い経験となりました。
SimpleFOCによってブラシレスモータを自由自在に制御できるようになりましたから (リアクションホイール姿勢制御モジュールと倒立振子作れたら大概のことできるっしょ)、以後大いに活用したいと思います。
ブラシレスモータが元気ですから起き上がりも余裕
モータ元気で起上り余裕 pic.twitter.com/v1FBgLMjr5
— HomeMadeGarbage (@H0meMadeGarbage) September 22, 2024
ブラシレスモータは適切に選定すれば高トルクと高速回転の両立も可能でしょうから、以前つくったWheel-Legged Robotでは中腰での倒立振子動作しかできませんでしたが元気に直立させることもできるかもしれません。
倒立振子 pic.twitter.com/cESj4Fjc85
— HomeMadeGarbage (@H0meMadeGarbage) May 30, 2024
今後も勉強を重ねて色々作っていきたいと思っております。
SimpleFOCでブーン pic.twitter.com/K7Wz0OYgCq
— HomeMadeGarbage (@H0meMadeGarbage) September 28, 2024