SimpleFOC で倒立振子1
前回はSimpleFOCの応用を考え、姿勢制御モジュールの検討などを実施しました。
ここでは倒立振子の検討について報告いたします。
目次
機体製作
これまで同様にMakerbase社製のコントローラをベースに倒立振子を構成します。
IMUセンサ MPU6050を搭載するためにコントローラを加工しました (のちにコレは意味のない作業であることが判明します)。
ESP32の未使用ピンIO4, IO12をI2Cラインとしました。
・加工しやすくコネクタ排除
・未使用ピンにI2Cライン配線
・コネクタお直し
筐体を3Dプリントして、IMUを搭載したコントローラに磁気エンコーダとモータのセットを2個接続。
↓エンコーダ基板のみ利用
ここでとんでもないことに気づく。。
ESP32はI2Cチャンネル2個しかない。。。
ブラシレスモータ2個とIMUセンサでやりたいこととは pic.twitter.com/dSVxyXK8KJ
— HomeMadeGarbage (@H0meMadeGarbage) September 17, 2024
完全に忘れていました。。2個のエンコーダとIMUセンサで3つの独立したI2C通信をしようと思っていたのですが。。。
磁気エンコーダAS5600はアドレスが1個しかないので同一I2Cラインでの使用もできない(アドレス選択できたとしても切り替えで時間要して倒立動作に影響しそうだし)。
こりゃ参った。。
動作
しょうがないのでモータ1個のみの制御で動作確認だけしてみました。
前回の姿勢制御モジュールと同様にクローズドループトルク制御で、IMUによる機体の角度と角速度とエンコーダによるモータ回転速度をフィードバックして倒立させています。
タイヤ一個ですが頑張って倒立を保持しています。
うーん。。モータ2個で制御したいーーー
バッテリは3セルのLiPoを使った。
今後どうするか
I2C問題で倒立振子の実現が難しくなってしまいました。
今後モータ複数使用で通信リソースが足りなくなることも多々ありそう。。
ソフトウェアI2Cで対応などもありうるのですが IMUやSimpleFOCのエンコーダライブラリを改造するのが大変そう (私には無理)ですし、マルチプレクサやアドレスを分けて同一I2Cでの通信ではリアルタイム動作が厳しそうです。
したがってエンコーダのインターフェースをI2C以外で検討する必要がありそうです。
磁気エンコーダAS5600にはI2Cの他にアナログ出力もあります。
SimpleFOCライブラリにはアナログ出力エンコーダの関数も用意があります。
https://docs.simplefoc.com/magnetic_sensor_analog
ESP32のアナログ入力ピンはWiFi使用時に使えなくなるピンがあるので注意が必要です (ADC2が使えなくなる)。
使用しているコントローラのADC1ピン(IO32~39)は既に使用されているため、アナログ出力を使う場合には加工が必要そうです。
コントローラ回路図
すこしアナログ出力によるモータ制御を試してみたのですがあまりうまくいきませんでした。
今後詳細確認が必要です。
ちなみに付属のエンコーダアナログ出力用のコネクタ配線の配色がひどくて実験の際に電源逆挿しして壊してしまいました。
もちろんよく確認しない私が悪いのですが。。。。。。ひでー色だ!!
おわりに
ここではSimpleFOCによる倒立振子の検討を実施しました。
SimpleFOCによってモータ駆動が楽にできるので倒立振子も容易に実現できそうでしたが、I2C通信リソース問題でつまづいてしまいました( ノД`)シクシク…
どうしてもSimpleFOCでブラシレスモータ倒立振子を実現したいので、エンコーダのインターフェースについて検討を進めていこうと思います。
それではまた。