続・オムニホイールの使い方 6Chコントローラについて
ダイセンの6Chコントローラは使い方によっては不具合があることが、ダイセンからも報告されている。
こちらに、まとめられた記事がある。
特に、大電流を流せるリチウム系のバッテリーを使う場合は発熱だけで済まずに、煙を吹いて回路自体が損傷し、火災の危険性もあるので十分に注意する。
不具合を避ける方法として、上記ダイセンの報告では正転から逆転する切り替える前に待ち時間を入れることが推奨されている。
以下は、うちの6Chで試しているアイデアであり、ダイセン推奨の対策とは違うので試す場合は十分にやっていることを考慮の上、自己責任で対応してください。
上記紹介ページにもあるように6CHコントローラは、Hブリッジという回路でモーターの正転・逆転を制御している。また、以前にも[id:ohguma:20141218]で取り上げたがブレーキのモードが存在するので、Hブリッジの状態は
- 正転
- 逆転
- ブレーキ
- 停止
の4通りが存在する。
(上記図のブレーキは「−」側の2つのSWがONにしているが、6CHコントローラの内部では「+」側の2つのSWがONになっているかもしれない。)
個々のSWは実際にはFETという半導体で実装されており、マイコンからの指示でFETがON/OFFを切り替えるが、FETにはその動作にタイムタグがある。
左右片側の「+」側「−」側の2つのFETが同時にON状態になってしまうと、電源の「+」「−」がショートした状態になり、最悪、大電流でFETが焼けて煙を吹くという事故が発生する。
そこで、「+」側「−」側の2つのFETが同時にONにならないように、正・逆転・ブレーキが切り替わる場合は、間に意図的に「停止」状態を入れ全FETをOFFにすることで、ショート状態を回避する。
▼ブレーキを使わない場合、今回の3状態(正・逆・停止)と前回ループ時の3状態の組み合わせは9通り。
▼ブレーキありの場合、今回の4状態(正・逆・ブレーキ・停止)と前回ループ時の4状態の組み合わせは16通り。
前回ループ時のX,Y,Zの値を別の変数V,U,Wに保存しておき、今回値と前回値を比較して「停止」が必要かどうか判断し、モーターのいづれか1つでも停止が必要なら、一瞬だけ全停止を実行する。
▼サブルーチンを使う例
▼メインプログラムの6CHコマンドの直前でサブルーチン実行