目次 |
概要
Quadrature Encoder(クアッドレータ エンコーダ:ロータリーエンコーダとほぼ同義)をデコードするComponentです。
ロータリーエンコーダの値が簡単に読めるので便利です。
Configure の設定
Counter Size タブ
- カウンタのサイズを決めます。
- 選択できるのは8bit,16bit,32bitです。
Counter Resolution タブ
- カウンタの分解能を決めることができます。
- 分解能は、x1,x2,x4が選べます。
- 分解能が高いほど、位置が正確になります。
Use Index Input タブ
- このタブでインデックス入力を使用するか否かを決めます。
- インデックス入力が入るとカウンタがリセットされます。
- 使用するロータリーエンコーダにインデックス出力(または、Z出力)がなければ関係ないのでチェックを外してください。
- このインデックス入力は負論理なので、正論理で出力するロータリーエンコーダなどには、このコンポーネントに入力する前にLogicのNotを入れてください。
Enable Glitch Filtering タブ
- このタブではグリッチフィルタリングの有効,無効を選べます。
- フィルタリングは、入力のグリッチによってのカウントミスを防ぐために適用します。
- 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ピンは必要ありません。
- クロックの周波数は十分高ければ動きます。(たぶん)
プログラム例
簡単な使い方
main()
{
int16 Count;
int16 SetValue = 0;
QuadDec_1_Start();
while(1)
{
// 現在のカウンタ値取得
Count = QuadDec_1_GetCounter();
// カウンタリセット
if(SW)
{
QuadDec_1_SetCounter(SetValue);
}
...
}
}