さて、バッテリーから電源が供給できるようになったので、次は色々なパーツを接続していきたいと思います。
まず、モーターを回したいと思ったとします。ラズパイの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通信については、次の記事で書きたいと思います。
コメント