Quadrature Decoder

Last-modified: 2015-01-14 (水) 17:26:20
 
 

概要

Quadrature Encoder(クアッドレータ エンコーダ:ロータリーエンコーダとほぼ同義)をデコードするComponentです。
ロータリーエンコーダの値が簡単に読めるので便利です。

Configure の設定

Counter Size タブ

counter_size.png

  • カウンタのサイズを決めます。
  • 選択できるのは8bit,16bit,32bitです。

Counter Resolution タブ

counter_resolution.png

  • カウンタの分解能を決めることができます。
  • 分解能は、x1,x2,x4が選べます。
  • 分解能が高いほど、位置が正確になります。

Use Index Input タブ

use_index_input.png

  • このタブでインデックス入力を使用するか否かを決めます。
  • インデックス入力が入るとカウンタがリセットされます。
  • 使用するロータリーエンコーダにインデックス出力(または、Z出力)がなければ関係ないのでチェックを外してください。
  • このインデックス入力は負論理なので、正論理で出力するロータリーエンコーダなどには、このコンポーネントに入力する前にLogicのNotを入れてください。

Enable Glitch Filtering タブ

enable_glitch_filtering.png

  • このタブではグリッチフィルタリングの有効,無効を選べます。
  • フィルタリングは、入力のグリッチによってのカウントミスを防ぐために適用します。
  • GPIOでのフィルタリング(ヒステリシス)がすでにありますが、これとは別です。
  • 有効にするとすべての入力に適用されます。

関数

void QuadDec_Start(void)

PSoC恒例のスタート関数です。プログラムの初めに実行します。

int8/16/32 QuadDec_GetCounter(void)

現在のカウンタ値を取得します。このカウンタ値で現在ロータリーエンコーダがどれだけ回ったかわかります。
Configureで決めたカウンタの大きさによって帰ってくる型が変わります。

void QuadDec_SetCounter(int8/16/32 value)

カウンタの値をvalueに変更します。
この関数を使うことによって、初期位置を変更するなどの使い方ができます。

uint8 QuadDec_GetEvents(void)

この関数で現在のカウンタの状況を確認できます。

void QuadDec_SetInterruptMask(uint8 mask)

QuadDecによる割り込みをenable(有効)またはdisable(無効)にします。
maskは8ビットで割り込みの有効無効を選択する引数です。
各ビットの名前は下記のように定義されています。

名称ビット説明
QuadDec_COUNTER_OVERFLOWカウンタのオーバーフローによる割り込みをイネーブルにします。
QuadDec_COUNTER_UNDERFLOWカウンタのアンダーフローによる割り込みをイネーブルにします。
QuadDec_COUNTER_RESETカウンタのリセットによる割り込みをイネーブルにします。
QuadDec_INVALID_IN無効な入力状態遷移による割り込みをイネーブルにします。

使い方

コンポーネントの配置

  • 下図のようにTopDesignにコンポーネントを配置してください。
  • ロータリーエンコーダと対応するようにピンを設定してください。
  • Indexを使用しない場合は、Indexピンは必要ありません。
  • クロックの周波数は十分高ければ動きます。(たぶん)
    QuadDec.png

プログラム例

簡単な使い方

main()
{
    int16 Count;
    int16 SetValue = 0;
    QuadDec_1_Start();

    while(1)
    {
        // 現在のカウンタ値取得
        Count = QuadDec_1_GetCounter();

        // カウンタリセット
        if(SW)
        {
            QuadDec_1_SetCounter(SetValue);
        }

        ...

    }
}