ハイパワー型のCuBaseクローラモジュールを動かす為にモータードライバーを選定して実験したのが過去記事↓です。
※ハイパワー型のCuBaseとは、↓のクローラーモジュール
<参考:CuboRex社のCuBase>
http://cuborex.com/products/cubase/
のモーターをハイパワー版に変えたものです。
今回は、新しく組み直したモータードライバーの回路がたまに動かなくなるというトラブルに見舞われたのでその対処法を備忘録として残します。
<正常動作>
安定化電源に繋いでArduinoでスピードのコントロールをすると、見事にスピードを調整しながら動作をします。
当たり前ですが、一度停止してもちゃんと動きます。
しかし、
<異常動作>
バッテリーでの動作中、一度止まってしまったら二度と動かなくなるという不具合が発生しました。(右側のクローラーが一度目で停止してしまう)
電源を入れ直すと一度は動きますが、一度止まったら止まったままでウンともスンとも言いません。
ノイズの影響なのか?
電源の容量不足なのか?
当初Arduinoの異常だと思い込んでコンデンサを付け足したりフェライトコアを入れてみたりと、ノイズ対策を試行錯誤してみても状況は変わりませんでした。
Arduinoはちゃんと動いてるのか改めて回路をチェックしてみると、モーターが停止していてもArduino側はきちんと制御信号をモータードライバーに送っています。
ということは、ずっと疑っていたArduino側の異常ではなくモータードライバー側に何かしら問題がありそうです。
そこでデータシートを見直してみましたら、
<データシート>
http://akizukidenshi.com/download/ds/toshiba/TB67H303HG_datasheet_ja_20160607.pdf
ここに重要なことが書いてあります。
- モータードライバー内部に8つあるトランジスタのうち1つでも過剰な電流が流れたらモータードライバーを停止させる。
- 停止したモータードライバーは勝手に復旧はしない。
- 復旧させるには「STBY」ピンをH→L→Hの順で操作させてモータードライバーをリセットする必要がある。
ということです。
なにそれ?
要するに「過電流が流れて保護機能が働いて停止しているので適切なリセット処理をしないと動きませんよ」ということです。
やはりハイパワーなモータードライバーはそれだけ電流を流せてしまうので、異常時に迂闊に復帰させないために保護回路がしっかり搭載されているのですね。
ということで、前回の回路を少し変更します。
<前回の回路>
STBYピンが常にHになるようにしていましたので、このままではリセット操作が出来ません。
<今回の回路>
今回はSTBYピンをArduinoで制御出来るようにして、それに合わせてプログラムに下記のように内容を加えました。
「PWM信号を送る前にSTBYピンをHに、停止する時にSTBYピンをLにする。」
これだけ。
<完成した回路>
色々変更して見事にスパゲッティーですが、ちゃんと動きました。
ということで、モータードライバー「TB67H303HG」で定格ギリギリのモーターを制御するなら、過電流検出時にエラー検出してリセットする、或いは今回のように制御信号に合わせて切り替える構造にする必要があります。
(本当はRSAピンRSBピンをチェックして保護機能が働いているのか否かをArduinoで監視しないといけないのですが、回路変更が面倒なので今回は後者の方法で解決することにしました。)
あといろいろ実験していて気付いた点として、モーターとそれを制御するドライバーとの相性がどうやら存在するようです。
過電流異常を起こしやすい組み合わせ(モータードライバーとモーターと回転方向)の場合、異常動作の再現率が高かったです。
実際に走らせてみたのがコチラ↓。