Top / Elec / RoboCon / 簡易ロータリーエンコーダ

はじめに

ロータリーエンコーダは、ロボットの動きをとらえるのには大変便利な素子ですが、パーツ屋さんで見かけると、ちょっと買うのをためらってしまう程の値段で 売られていると思います。

今回は、車輪の回転方向と、おおよその回転数をカウントする簡単なロータリーエンコーダの 回路を紹介します。

回転数をカウントするには、お手頃なところでマウスを思いつくと思います。 ロボットコンテストでも、マウスをそのまま使ったり、マウスの中の回転子を取り出したりして 使っている様子を見かけました。

精度の面では、こちらの方が圧倒的によいと思います。ただ、設計段階から 組み込むことが決まっているならまだしも、作っている途中でどうしても必要になったのだが、 お金もない、時間もないというときには、(つくばロボコンの数日前によく見かける光景(笑)) そんなに手の込んだことはできないと思います。 ここでは、とりあえず回転数がとれる、回転方向が分かるものを作ります。

先に注意しておきますが、ここで製作するのはセンサの部分だけで、 回転数も回転方向もマイコンのプログラムで処理します。つくばロボコンでよく見かける日立「H8/3048」は、 元々この機能がマイコンに組み込まれていますので、 C言語からの呼び出し方法のみ紹介します。

回路図

Vcc=5[V]

rotaryencoder_1.png

実体写真

rotaryencoder_2.png

(左:増幅回路二組、右:センサ二組を二段重ね)

回路について

上記の回路が二組必要です。

回路自体はそんなに難しいものではありませんが、センサ(写真右側)の取り付けで、 頭を悩ませると思います。二つのセンサが順番にON/OFFするように取り付ける必要があります。

呼び出しプログラム

センサ二組のそれぞれの出力をRA.0, RA.1に入力します。 これはあくまで一例です。

#include &lt3048.h>
//サンプルメイン関数(この関数に限っては、実際に試してません)
void main(void)
{
    int i;
    
    init_h8();
    init_rotencoder();
    
    while (1){
        //何らかのユーザ処理
        
        i = _rotenc_get();  //回転数取得
                //(正・反転により、カウント数が増減します)
        
        //何らかのユーザ処理
    }
}

//H8初期化
void init_h8(void)
{
    PA.DDR = 0xfc;          //入力:ロータリーエンコーダ、出力:走行モータ 
}

//位相係数モードの設定
void init_rotencoder(void)
{
    ITU2.TCNT = 0;          //カウンターをリセット。
    ITU.TMDR.BIT.MDF = 1;       //チャンネル2を位相計数モードに設定
    ITU.TSTR.BIT.STR2 = 1;      //カウント開始
}

//距離の取得
unsigned int _rotenc_get(void)
{
    return ITU2.TCNT;
}
2005-06-05 03:03:59 (日)

Elec/RoboCon



添付ファイル: filerotaryencoder_2.png 458件 [詳細] filerotaryencoder_1.png 430件 [詳細]
トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-12-26 (月) 00:53:18 (4254d)