Tag Archives: DCモーター

芝刈りロボットへの道 ~DCモーター用ESC~

前回まででRTK環境ホストPC⇔フライトコントローラー間の通信ができたので、次は適当な車体を作って庭を走らせてみたいです。
と言うか、ツギハギだらけな車体ですが、もう試しています。


駆動方式は、左右の駆動輪をそれぞれギヤードモーターで回転させ前進/後退を行い、左右の回転差で旋回する「スキッド式」と呼ばれる方式です。

ギヤードモーターはだいぶ前にAliexpressで買って放置していたものが2個あり、12V駆動のDCモーターで回転数は60rpm(1秒に1回転)です。

そして意外にちょうど良いのが見つからないのがESCでした。
DCモーター用のESCでラジコン用に売られているものは電圧が7.2V程度を前提に作られており、12Vで使えるものが見当たりません。
という事でESCを作ってみました。

2CH DCモーター用ESCの回路

Arduino NANOと秋月電子のモータードライバ基板AE-TB6612FNGを使うシンプルな回路です。
AE-TB6612FNGは東芝製TB6612FNGを扱いやすい様にDIPピッチの基板に載せたもので、TB6612FNGは最大13.5V/1.2A(ピーク3.2A)のDCモータードライバーを2CH分搭載したICです。
最大1.2Aですが、今回のモーターは定格350mAなので大丈夫でしょう。

回路図は下図の通り。
A-SIGIN,B-SIGINからサーボ信号を取りこんで、MOT-A,Bに接続した2個のモーターを駆動できます。
サーボ信号は昔ながらの方式で、パルス幅1.5mSを中心として±0.5mS変化するヤツです。

キャリブレーション

サーボ信号のパルス幅を読んでモータードライバに駆動方向およびPWMを送るのはArduinoの関数を使えば簡単でしたが、面倒なのはキャリブレーションです。
Dshotと違って昔ながらのサーボ信号だと最大値/最小値が割と適当なのでキャリブレーションが必要です。
市販のESCに良くある、電源投入時に入力信号が最大値になっていたらキャリブレーションモードに入る方式としました。

キャリブレーションは次の様に動作します。

  • 電源投入100mS後の入力信号が1.9mS以上になっていたらキャリブレーションモードに入る。
  • キャリブレーションモードへは各CH個別に入る(CH1のみ、CH2のみ、CH1,2両方等)。
  • キャリブレーションモード中の最大パルス幅を最大値として記録する。
  • キャリブレーションモード中の最小パルス幅を最小値として記録する。
  • 入力信号が1.4mS~1.6mSの間をニュートラルと判断し、この状態が3秒続いた時の値をニュートラル値として記録する。
  • キャリブレーションモードに入っている全てのCHがニュートラルを3秒以上保っていたらキャリブレーションを終了する。
  • キャリブレーションの結果はEEPROMに記録し、次回以降起動時にキャリブレーションモードではなかった場合、この値を読み出して使用する。

ブザー

ArduinoのD3端子に接続した圧電ブザーは次の様に鳴ります。

  • CH1がCALMODEに入った/抜けた時・・・440Hzを1秒
  • CH2がCALMODEに入った/抜けた時・・・880Hzを1秒
  • 各CH最大値/最小値を検出した時・・・・1319Hzを0.2秒
  • 実動作モードに入ったとき・・・・・・・1760Hzを細かく10回繰り返し

プログラム

今回使ったArduinoのスケッチはこれです。

DCESC.zip

製作

手っ取り早く動かしたかったのでユニバーサル基板に載せました。

という事で、走りました。