2 マイコン・カーの速度を制御する
 マイコン・カーのモータ制御にはモータ・ドライバICのTA7291Pを使用しています。
 このモータ・ドライバICは、「マイコン・カーを製作してみよう(6)」で紹介していますが、IN1とIN2に信号を与えることで、前進や後進、停止を簡単に制御することができます。ほかにも速度制御の機能があり、Vrefの電圧を変化することでモータへの電圧を制御できます。速度制御はモータ・ドライバの機能を使う以外に一般的に用いられるPWM制御という方法もありますので、今回はVrefとPWMを使った速度制御をそれぞれ紹介します。


2-1 フォト・リフレクタを使った回転数の読み取り
 マイコン・カーの速度を制御するときモータがどのくらいで回転しているか測定するために、フォト・リフレクタを使用します。このセンサは図8のように赤外線LEDとフォト・トランジスタが一体になっており、赤外線LEDから出た光が反射したものをフォト・トランジスタで読み取ります。
 このとき、図9のように測定対象の色が白の場合は赤外線をよく反射するため、フォト・トランジスタは反射した光を読み取りONになります。一方色が黒い場合は赤外線が吸収されるため、フォト・トランジスタは光を読み取ることができずOFFになります。この動作を利用して、ライントレースのライン読取りや今回のような回転数の検出で使用します。

s図8_フォトリフレクタ(LBR-1.jpg
図8 フォトリフレクタ(LBR-127HLD)


s図9_フォトリフレクタについ.jpg
図9 フォト・リフレクタについて


 今回使用するセンサは秋月電子通商で販売されている LBR-127HLDです。フォト・リフレクタについては、使用しているセンサの型式は違いますが、エレキジャックのページで詳しく解説されていますので、ぜひ参考にしてください。

 それでは、フォト・リフレクタの動作を確認してみましょう。図10はフォト・リフレクタ(LBR-127HLD)を上から見たもので、切欠きがあるほうを右上としたピン配置を記載しています。図11はフォト・リフレクタの動作を調べるための実験回路で、赤外線LEDから出力された光を白色と黒色でそれぞれで反射させたものをフォト・トランジスタで読み取ったときの出力電圧を測定しました。

s図10_フォトリフレクタ(LBR-.jpg
図10 フォト・リフレクタ(LBR-127HLD)端子図


s図11_フォトリフレクタ動作.jpg
図11 フォト・リフレクタ動作確認回路


図12は実験結果で、
  黒い部分 3.2[V]
  白い部分 0.4[V]
になりました。

s図12_フォトリフレクタ実験.jpg
図12 フォト・リフレクタ実験結果


 ちなみに、今回は白と黒に二つの値しか使用していませんが、出力値は色の濃淡によってにアナログで変化します。
 それでは、フォト・リフレクタを使って回転数を測ってみましょう。図13のようにマイコン・カーのシャフトにスチレン・ボードで加工したマーカーと、それを読み取るセンサを取付けます。マーカーのスチレン・ボードには、色紙で4か所黒い帯を貼り付けました。

s図13_マイコンカーにマーカ.jpg
図13 マイコン・カーにマーカーとフォト・リフレクタを取付け


 これにより、モータが1回転すると、フォト・リフレクタは4回黒い帯の部分を読み取ります。
 それでは、マイコン・カーを動作させて回転数を測定してみましょう。図14はマイコン・カーのモータに3[V]を印加したときのフォト・リフレクタの出力波形をオシロスコープで観測したものです。

s図14_フォトリフレクタの出.jpg
図14 フォト・リフレクタの出力波形


 測定結果を見ると、約100[ms](0.1秒)ごとに1回出力が高くなり黒い帯の部分を検出しています。これより、60秒だと約600回程度の黒い帯の部分を読み取っていることになります。ただし、1回転で4回黒い帯を読み取るので、モータに3[V]の電圧を印加したときのマイコン・カーの回転数は150回程(=600/4)であることが確認できました。

 それでは、フォト・リフレクタからの出力をmbedで読み取り、LCDに回転数を表示してみましょう。
--- reflective_prm ---
#include "mbed.h"
#include "TextLCD.h"

TextLCD lcd(p24, p26, p27, p28, p29, p30);
// InterruputIn オブジェクトは、端子に入力される信号の立ち上がり/立ち下がりで
// 割込み処理を実行する
InterruptIn count(p5) ; // フォト・リフレクタの出力を読取る
Ticker min ; // 60秒ごとに割り込み処理が入る

int cnt = 0;
int rpm = 0;

void count_r()
{
    cnt++; // 黒い帯の読み取り回数をカウントアップする処理
}

void measure()
{
    rpm = cnt * 5 ; // rpm = cnt * ( 60秒 / 3秒 ) / 4回
    cnt = 0;
}

int main() {
    lcd.cls();
    count.rise(&count_r); // 黒い帯の回数を読み取る(信号が立ち上がる)たびに count 関数を呼び出す
    min.attach(&measure ,3.0) ; // 3秒ごとに measure関数を呼び出す
    while(1) {
        // 回転数の表示
        lcd.locate(1,0);
        lcd.printf("rpm [%4d]",rpm) ;     
    }
}
 図15はmbedで回転数を表示している様子です。右側のマルチメータはモータの電圧を表示しています。このように、mbedでモータの回転数を表示することができるようになりました。
 フォト・リフレクタを使えば、このように簡単に回転数を測定することができます。次項の速度制御でもフォト・リフレクタで読み取った回転数を表示しています。

s図15_mbedで回転数を表示.jpg
図15 mbedで回転数を表示

飯田 忠夫


| | トラックバック(0)

トラックバック(0)

このブログ記事を参照しているブログ一覧: マイコン・カーを製作してみよう(9)

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/6865





カテゴリ


Copyright (C) 2006-2015 CQ Publishing Co.,Ltd. All Rights Reserved.