3軸姿勢制御モジュール SHISEIGYO-3 DC の製法

Home > 電子工作 > 3軸姿勢制御モジュール SHISEIGYO-3 DC の製法
すき 1
うんこ 0

はじめに

SHISEIGYO-3 DC は小型ドローンに使用されるコアレスモータを採用した 1辺82mmの小型3軸姿勢制御モジュールです。コントローラとしてIMU内蔵のATOMS3を使用し点倒立を実現します。

本作例ではSHISEIGYO-3 DC をアクセスポイントとしてスマホ等でWiFi接続して専用ブラウザアプリで倒立パラメータの調整や回転制御も可能です。

構成

マイコンにはIMU内蔵のATOMS3を使用します。
1セルのLiPoバッテリを使用してマイコンとモータに電源供給しています。
モータはモータドライバDRV8835で駆動

回路図

部品

ここで使用した部品は以下のとおりです。
購入先はあくまで参考です。

 

使用したネジは以下のとおりです。

  • M2×6mmネジ:1本 (ATOMと基板固定用) 
  • M3×6mmネジ:4本 (基板固定用)
  • M3×5mmネジとナット:24セット (フライホイール重り用)
  • M2×5mmネジ:6本 (フライホイールシャフト固定用)

専用基板

以下で専用基板を販売しております。
もちろんユニバーサル基板などでの自作も可能です。

[電子工作キット] SHISEIGYO-3 DC 専用基板

 

基板のサイズは以下のとおりで、筐体3Dモデルもこの基板サイズを元に製作しています。

3Dモデル

3Dモデルは以下よりダウンロードできます。zipファイルがダウンロードされます。
 筐体モデルデータ

ここではPLAフィラメントで出力しました。強度が求められるwheel.stlは充填密度100%で印刷し、残りのモデルは25%としました。

筐体は2パーツ構成とシンプルにしました。

 

ネジを使用しないスナップフィットです。

 

筐体組み立てキット

3Dプリント品も販売しております。
よろしければご検討ください。

[電子工作キット] SHISEIGYO-3 DC 筐体組み立てキット

製作

SHISEIGYO-3 DC を組み立てます。ここでは専用基板を使用した製法を記載します。

コントローラ作製

専用基板オモテ面に逆起電力防止用ダイオードと電源スイッチ、ATOMS3用ピンヘッダ、ATOMS3用4ピンコネクタケーブルをはんだ付けします。

4ピンコネクタケーブルはATOMS3のIO1とIO2への配線のために使用します。
残りの電源・GND配線は使用しません。
基板表記のIO1とIO2がATOMS3のGPIOに対応するように配線してください。

 

専用基板ウラ面にモータドライバDRV8835、LiPoバッテリ用配線コネクタ、モータ接続用コネクタをはんだ付けします。

DRV8835は付属のピンヘッダを介して実装します。ICの向きは基板表記に従ってください。
モータ接続用コネクタを使用せずにモータ配線を直接はんだ接続しても問題ありません。

 

基板にATOMS3をスペーサ (spacer.stl) を挟んでM2×6mmで固定します。

モータ実装

モータに接続用の2ピンPHコネクタを接続します。
配線が赤青モータの場合は 赤:1pin/青2pin、配線が黒白の場合は 黒:1pin/白2pinとします。

物によっては配線方向が異なる場合がありますので、後述するモータ回転方向確認プログラミングでご確認ください。

 

以下でコネクタ配線し動作確認済みのモータ3個セットの販売もしております。

[電子工作キット] SHISEIGYO-3 DC 用コアレスモータ

 

 
モータを筐体case1.stlにはめ込みます。緩い場合は瞬間接着剤点付けなどで固定。
モータをコネクタを使用せずにはんだ付けする場合にも先にモータを筐体に固定します。

コントローラ実装

筐体case1.stlのネジ穴をM3のタップでねじ切りして、モータコネクタを接続して基板を実装します。

 
モータコネクタは正面をCo、左をLo、右をRoに接続します。

バッテリ、フライホイール実装

LiPoバッテリをモータ固定部の底面に両面テープで固定し基板のコネクタと接続。

 

ホイールフレーム (wheel.stl) のモータシャフト固定部の穴2か所をM2のタップでねじ切りしておきます。

 

ホイールフレームの穴に重りとして M3×5mmネジとナットを8個ずつ取り付けます。
ここではホイール1個の総重量は9gになりました。ネジ長やナットの数を変えてホイール重量を調整も可能です。

 

ホイールをモータシャフトにはめて軸のネジ穴2か所をM2×5mmネジで固定します。
モータシャフトに入らない場合はホイールの穴を1.2㎜ピンバイスで拡張してください。

バッテリなどに干渉しないか各ホイールのまわり具合をよく確認してください。

完成

筐体case2.stlをかぶせて組み立て完了です。

モータ回転確認コード

以下のコードを書きこんでモータの回転方向の確認を実施します。
モータ接続に不安がない場合はスキップしてください。

Arduinoやライブラリのバージョンは次節を確認ください。

回転確認

全てのホイールが正面から見て時計回りに回っていたら問題ありません。

反転しているホイールがある場合は配線を逆にするか、コード(L. 8~13)の各モータドライバへの入力ピン(Lin, Rin Cin)の1と2を逆にしてください。

Arduinoコード

倒立動作用のコードです。以下よりダウンロードしてください。
ATOMS3のIMUライブラリの自由度が低いためM5StickのMPU6886ライブラリをATOMS3用にカスタマイズして使用しています。

コードダウンロードリンク (Zipファイル)

使用ライブラリ

ここでは以下のバージョンを使用しています。各自の環境に合わせて適宜カスタマイズください。

・Arduino IDEバージョン:1.8.19
・ESP32ボードマネージャ:2.0.17
・M5GFXライブラリ:0.1.17
Kalman Filter Library:1.0.2

書き込みの設定は以下の通りです。

コード

コード説明

L. 10~16 WiFi設定 SSID、パスワード、IPアドレスは適宜変えてください。

L. 18~30 PWM出力Ch、GPIO指定
 前節のモータ回転確認時にIOピンの反転がある際はここで実施ください。

L. 40~45 パラメータ値指定
 これらを調整して点倒立動作を実現させる。

L. 67~73
 加速度センサからX軸とY軸の傾斜角を算出する関数
 コードやアプリで各軸のオフセット調整 (offsetX, offsetY)が可能です。

L. 75~80 角速度取得関数
 X軸とY軸の角速度を検出

L. 84~330ブラウザアプリ表示設定
 APモード接続時の回転や各パラメータ設定用の表示を記述しています。 

L. 335~420 core0動作
 ATOMS3 デュアルコアのcore0でLCDディスプレイ表示とIMUセンサの処理とブラウザ表示およびハンドラ処理を実行します。

 LCDにはのX軸とY軸の角度の値と以下の通りインジケータ表示しています。
 ・±1°以内:緑表示
 ・±15°以上:赤表示
 ・その他:青表示

 

L. 424~483 setup関数
 IMUセンサMPU6886のフルスケールレンジは以下で指定 (L. 430, 431)
 ・加速度:16bit ±2 g
 ・ジャイロ(角速度):16bit ±250 deg/sec

  
 モータドライバへのPWM信号設定 (L. 437~457)
 ・周波数: 20kHz
 ・分解能: 10bit 0~1023
 

 アプリで設定した各オフセット値はPreferences機能でフラッシュに記録します。
 電源起動時にフラッシュに記録されたオフセット値を読み出します (L. 459~471)

 

L. 486~601 loop関数
 カルマンフィルタライブラリの関数を用いてセンサの姿勢角と角速度を算出 (L. 487~503)

 倒立動作 (L. 506~600)
  センサのX軸、Y軸が共に角度±1°以下になるとモータを起動します (L. 506~508)。

  センサの角度が±15°以上になるとモータを停止させます (L. 513~524)。

  センサによるX軸とY軸の傾斜角と角速度とモータの回転速度から各軸の安定に必要なトルクを計算します (L. 527~533)。
  それぞれの値にかける係数Kp (L. 41), Kd (L. 42), Kw (L.43)を調整して倒立を実現します。
  パラメータが極端に大きくなったり小さくなったりしないように各パラメータ値は割って正規化しております。
  またモータの回転数をセンサ角度にフィードバックして安定性の向上を図っています(L. 528, 531)
  このフィードバックのかけ具合は係数IDRS (L. 44)で調整します。
  これによって床が傾いてもモジュールの安定ターゲット角度が自動で調整されホイールの回転が抑制されます。
  必要ない場合はIDRS = 0.0としてください。

 倒立自転制御 (L. 536~546)
  IMUセンサのZ軸の角速度との差でP制御してモジュールを自転させます。
  パラメータ omegaZで回転速度 [deg/sec]を指定します。
   P制御パラメータはProt(L. 40)で調整。
  omegaZが0指定となりP制御値とモータ回転(ここでは右のモータの回転)が小さくなると自転回転動作は自動でOFFします。

 

 先ほど算出したモジュールのX, Y軸の必要トルクに基づいてドライバに印可するPWMのデューティ値を導出して各モータを回転させます (L. 549~591)。

  真ん中のモータCはY軸上に配置しているのでY軸のトルク(MtY)で回転させます。
  また自転用のオフセット(varW)も加算してモジュールを倒立自転させます (L. 549)。
  モータの回転速度(MpreY)はセンサがないためここで算出したデューティ値で代用しています (L. 550)。
  ここではデューティ値(0~1023)が小さいほどモータ回転が速くなり300いかにならないように制限しています (L. 552)

  左右のモータはセンサのX軸、Y軸に対してそれぞれ斜めに配置されているので、各軸の必要トルクを振り分けて回転デューティを算出します。
  左右モータの回転トルクは以下のように軸上に分解されて、Y軸の傾きによるトルクは左右で打ち消してX軸によるトルクにのみ寄与するように回転させます (L. 555, 560)。

  真ん中のモータと同様に速度制限をして(L. 557, 563)、モータ速度は左右のモータの平均MpreXをフィードバックしています (L. 561)。

 

 算出したモータのデューティで回転実行 (L. 567~590)。

 ループディレイ (L. 600)
  delayTime (L. 45) で制御のループ時間を調整します。

アプリ画面

  • アプリを書き込んだATOMS3を起動して、スマホもしくはPCのWiFi接続設定でSSID ”S-3 DC”に接続
     パスワード:password

  • ブラウザで”192.168.22.33”にアクセス

パラメータは “-“、”+”をクリックして値を増減させます。
回転以外の値は電源OFF後も保持されます。

動作

スイッチをONして機体を優しく起き上げて点倒立させます。
アプリの回転で速度[deg/sec]を指定すると自転します。

 

機体のX軸とY軸の傾きが共に±1°以内になるとモータが回転し始めますので直ぐに手を放してください。
LCDのインジケータが助けになります。

 

センサ自体のオフセットが大きい場合には倒立ができない場合があります。
ATOMS3単体を平らなところに置いて起動し、LCDディスプレイに表示される角度が0に近いかご確認ください。

大きくズレがある場合にはアプリのOffsetX、offsetYで0に近い値にしてください。

おわりに

ここではコアレスモータによる3軸姿勢制御モジュールの製法を紹介いたしました。

軽量で小型で安価な点倒立モジュールを提案できたかと思います。
是非製作してみてご感想をお聞かせください。

 

以下でATOMS3とLiPoバッテリ以外をまとめた準完成キットの販売もしております。ご検討ください。 

[電子工作キット] SHISEIGYO-3 DC 準完成キット

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください