Raspberry Piに何かをつなごう

さて、バッテリーから電源が供給できるようになったので、次は色々なパーツを接続していきたいと思います。

まず、モーターを回したいと思ったとします。ラズパイのGPIOピンの5vから電源を取って、モータを回す事はできるでしょうか?

かなり小さなモーター(クーリングファンなど)なら出来るのですが、私が使おうとしている車輪用のモーターだと消費電力が大きいので、GPIOから電源を取るとラズパイの電圧が低くなってしまい、動作不安定になる事が容易に想像できます。

任意のGPIOピンをONにしてそこから電源を取るのはどうでしょうか。

ラズパイの汎用GPIOピンは、ONで3.3vという仕様です。そして、ラズパイのGPIOピンは制御チップ(SoC)に直接繋がっているので、大きな電流が流れたらラズパイが壊れます。従って、次のような制限がかかっています。

  • ピン1本あたり最大16mAまで。
  • ピン合計で50mAまで。

詳しくは、以下の公式ドキュメントに書いてあります。

つまり、モーターを回す場合は別に電源を用意しなければいけないのです。しかし、FPV-TANKでは、バッテリーからラズパイに電源を供給しているので、結論的にはモーターの電源も同じバッテリーから取る事になります。

ちなみに、私が買ったモーターはこちらです。モーター1台につき最大200mAの電流が流れるようです。

FPV-TANK ver1.0では、前輪用のモーターと後輪用のモーターがあって、それを左右2組なので、モーターを4つ使いました。ところが、モーターに電力を持っていかれるためか、ラズパイには常にカミナリマークがついてて、電圧が足りなくなってしまっていたのです。

そこで、ver2.0ではモーターを左右1つずつにしています。消費電力対策と過電流防止のためです。モーターの数を減らすことで、何とか正常電圧で動かないかなと淡い期待を持っているのです。

このモーターにはカタログ値で、最適な動作電圧6-8vと書かれているので、5vに下げる前のバッテリー直の電圧をくれてやります。

さて、モーターへ電圧をくれてやるのは良いとして、ラズパイからそれをコントロールしなければならないのですが、どうするか。

そこで登場するのがモータードライバーです。私が使ったモータードライバーはこちら。

そこで登場するのがモータードライバーです。私が使ったモータードライバーはこちら。

さて、このモータードラーバーは何をしてくれるのかというと、バッテリーから直で受け取った電圧を-100%〜+100%の範囲で、モーターに送ってくれるのです。

従って、+100%で送れば全速前進となるし、+50%で送れば微速前進。25%位だと様々な物理的抵抗で車輪は回らなくなると思います。で、-100%にすれば全速後退となるわけです。

それを左右2ch別々に制御できるので、FPV-TANKに様々な動作をさせる事ができるのです。

さて、ここで困った問題が発生します。

ラズパイのGPIOピンは5vか0vかどちらかしか出力しないのです。アナログ的な信号を出力することは基本できないのです。(12番ピンと、35番ピンだけはアナログ的な信号を出力できるようです。)

そこで、そういったアナログ的な信号を出力する下請け会社というか、子分というか、そんなチップが必要なのです。

そこで目をつけたのが、PCA9685というPWM制御に特化したチップです。

これを使えば、最大16個の何かをPWM制御できます。

PWM制御とは、Pulse Width Modulation の頭文字を取ったもので、パルス信号のONとOFFの時間比率を自由に変えて制御対象(私の場合、モータードライバーやサーボモーター、LEDなど)に信号を送って制御する方法です。

LEDもPWMを使うと明るさを自由に変更できるのです。(ONの時間比率を長くすれば明るくなり、OFFの比率を長くすれば暗くなります。)

いよいよ電子工作の深い所までやってきましたね。(と言っても、私にとって深いだけですが^^;)

では、この下請け会社PCA9685にはどうやって指示を出したら良いでしょうか?

それがI2C通信です。

I2C通信については、次の記事で書きたいと思います。

コメント

タイトルとURLをコピーしました