DCモーターは、安価ですが、制御が出来ません。
これを克服したのがエンコーダーモーターです。
今回は、容易に手に入る直流エンコーダーモーターを簡単に解説します。
エンコーダーモーターとは?
モーターの回転速度や、位置情報を出力可能なモーターです。
エンコーダーモーターは、検出用の素子がついています。
この素子は基本5Vで動作しますが、3.3vでも動作するものがあります。
まずは、現物を見てみましょう
12VのDCモーターに基板がついています。
中心のコアの周りに2個の素子がありますね。
これがA相、B相に当たる検出素子です
そして、コネクタがありますね。
コネクタ
私が知っているだけで数種類あります。
今回は、手持ちのXHコネクタ(2.54㎜ピッチ)、PHコネクタ(2㎜ピッチ)を撮影しましたが
ほかにも種類があることとピン配列がモーターごとに異なります。
ピン配列一例
これ以外にもいろいろあります。
基本は、ケーブルの配線の入れ代えを自分でやる必要があります。
5VとGNDの位置が逆なものは配線を入れ替えれば済みます。
A相とB相については、1信号のみで良い場合は、そのままでいいですしソフトで修正も可能です。
ケーブル
モーターのコネクタとドライバーボードのコネクタが違う場合、変換コネクタを製作する必要があります。
モーターは購入時に、同じコネクタ同士のケーブルと、製作用に片側が繋がっていないものがついてくることが多いようです
真ん中のものが私が作ったXH⇔PH用のケーブルでKs0193とXHのモーターをつなげるために作ったものです。
ケーブルを製作することでドライバーボードとモーターのコネクタを考えないで選択可能ですね(ピン配列も)
エンコーダーモーター対応ドライバーボード
私が入手したのは以下の4つです
KeyStudio Ks0193 / RikiRobot Stm32 Robot 4WD V1.4
ARDUINO_HR8833 / 当方製作 STM32F103 4WD エンコーダーモータードライバー
左2つがPHコネクタでArduinoUno、右2つがXHコネクタでSTM32です
Ks0193のみ2モーターとなります。
CPUが必要な理由?
ROSは基本Pub/Sub通信を行っており、Subscriber(購読者)は、Publisher(配信者)からの指示を受けて行動します。
これにより、中央装置(RaspberryPiなど)がすべての処理を行う必要がないというのがメリットのようです。
モータードライバーにCPUを載せるのは、処理を分離したいがためです。
しかしArduinoUnoは8bitのATmega328です。
これですと、様々な処理が行えないという事とROS Serialの帯域等の問題から32bitCPUであるSTM32系を使用したいと言う人が出てきました。
**Turtlebot3はSTM32F7にArduinoを入れています。
これで作られたのが、RikiRobotや当方のモータードライバーです。
近年は、CortexM4が主流であり、CortexM3を使用しているSTM32F103は時代遅れになりつつあるようですが、
そこまで多くの処理をしないのであれば、これで十分だと私は思います。
なお、Jetbotは、JetsonNano自信が処理を行っておりモータードライバーにCPUはついていません。