WORD wCnt;
//チャンネル1で立上り時にカウント
TWB_TimerSetMode(hDev, 1, TWB_TIMER_RISE);
//タイマ1のカウントをスタート
TWB_TimerStart(hDev, TWB_TIMER_BIT1);
//タイマ1のカウンタ値を符号なし整数として読出し
TWB_TimerReadCnt(hDev, 1, (short*)&wCnt);
リスト 18 ハードウェアカウンタの使用例(Visual Basic) Dim wCnt As System.UInt16
'チャンネル1で立上り時にカウント
TWB_TimerSetMode(hDev, 1, TWB_TIMER_MODE.COUNT_RISE)
'タイマ1のカウントをスタート
TWB_TimerStart(hDev, TWB_TIMER_BITS.TIMER1)
'タイマ1のカウンタ値を符号なし整数として読出し
TWB_TimerReadCnt(hDev, 1, wCnt)
リスト 19 ハードウェアカウンタの使用例(C#) ushort wCnt;
//チャンネル1で立上り時にカウント
TWB.TimerSetMode(hDev, 1, TWB.TIMER_MODE.COUNT_RISE);
//タイマ1のカウントをスタート
TWB.TimerStart(hDev, TWB.TIMER_BITS.TIMER1);
//タイマ1のカウンタ値を符号なし整数として読出し
TWB.TimerReadCnt(hDev, 1, out wCnt);
33
パルスカウンタ(ソフトウェアカウンタ)による単相パルスカウント
パルスカウンタによる単相カウントの場合、PC0#~PC3#入力をそれぞれチャンネル
0~3
でカウント します。カウンタは入力が"Hi"→"Lo"に変化したタイミングでカウントアップします。パルスカウンタ(ソフトウェアカウンタ)による2相パルスカウント
パルスカウンタにより
90°位相差 2
相パルスをカウントする場合、チャンネル0
と1
の組み合わせ、または、チャンネル
2
と3
の組み合わせでカウントします。後述する直接エンコーダ出力を接続する 簡易な方法もありますが、外付けのインバータロジックと組み合わせて図 8 のように構成することを 推奨します。図 9に回路例を示します。チャンネル
0
と1
の組み合わせでカウントする場合には、PC0#にA
相の反転信号、PC1#にA
相信 号を入力し、P26端子にB
相信号を接続します。カウント値はチャンネル0
と1
の合計値になります。チャンネル
2
と3
の組み合わせでカウントする場合には、PC2#にA
相の反転信号、PC3#にA
相信 号を入力し、P27端子にB
相信号を接続します。カウント値はチャンネル2
と3
の合計値になります。どちらの組み合わせを使用した場合も、インクリメンタル方式のロータリーエンコーダを接続した場 合、1回転あたりのカウント数は出力パルス数の
2
倍になります(図 10)。PC0#端子
PC1#端子
パルスカウンタ チャンネル0 パルスカウンタ
チャンネル1 B相信号1
A相信号1(反転)
P26端子
PC2#端子
PC3#端子
パルスカウンタ チャンネル2 パルスカウンタ
チャンネル3 B相信号2
A相信号2(反転)
P27端子 A相信号1
A相信号2
図 8 ソフトウェアカウンタによる2相パルスカウント(推奨接続)
34
図 9 推奨接続の回路例
A相信号 B相信号
PC0+PC1カウンタ 増加 増加 増加 増加 減少 減少 減少
逆転
Hi Lo Hi Lo
図 10 2相パルス入力とパルスカウンタの増減(推奨接続)
35
パルスカウンタ(ソフトウェアカウンタ)による3相パルスカウント
基本的にはパルスカウンタ
2、3
チャンネルを使用した2
相パルスカウントと同様の動作をしますが、パルスカウンタ
0
への入力で、パルスカウンタ2、3
のカウンタ値がクリアされます。PC0#にZ
相信号 を接続すると1
回転毎にカウンタ値がクリアされ、パルスカウンタ0
の値が増加します。パルスカウンタ(ソフトウェアカウンタ)の使用方法
ソフトウェアカウンタを使用するには、まず
TWB_PCSetMode()
関数(表 42)を呼び出し、使用する チャンネルの動作モードを設定します。ChBits
引数には表 43に示すチャンネルを示す定数を指定 します。Mode
引数には表 44に示すカウントモードを指定します。TWB_PCStart()
関数でカウントを開始します。カウント値の読出しにはTWB_PCReadCnt()
関数(表45)を使用します。1
チャンネルずつ読み出すこともできますが、ChBits
引数にTWB_PC_ALL (相当
の値)を指定すると
0~3
チャンネルまで全てのカウンタ値を読み出すことができます。その場合は、pCnt
引数として4
チャンネル分(16バイト)の領域を確保するようにしてください。表 41 ソフトウェアカウンタで使用する関数
関数名 説明
TWB_PCSetMode() カウントモードを設定します。
TWB_PCStart() カウントを開始します。
TWB_PCStop() カウントを停止します。
TWB_PCReadCnt() カウンタ値を読み出します。
TWB_PCSetCnt() カウンタ値をセットします。主にカウンタクリアに使用します。
表 42 TWB_PCSetMode() の関数宣言
言語 関数宣言
C/C++ TW_STATUS TWB_PCSetMode(TW_HANDLE hDev, long ChBits, long Mode)
VB Function TWB_PCSetMode(ByVal hDev As System.IntPtr, ByVal ChBits As TWB_PC_BITS, ByVal Mode As TWB_PC_MODE) As Integer
VBA Function TWB_PCSetMode(ByVal hDev As Long, ByVal ChBits As TWB_PC_BITS, ByVal Mode As TWB_PC_MODE) As Long
C# STATUS PCSetMode(System.IntPtr hDev, PC_BITS ChBits, PC_MODE Mode);
36
表 43 ソフトウェアカウンタ操作関数のChBits引数に指定する値
言語 値 説明
C/C++ TWB_PC0
パルスカウンタ0の設定や読出しなどで指定します。
C++ TWB::PC_BITS::PC0 VB/VBA TWB_PC_BITS.PC0 C# TWB.PC_BITS.PC0 C/C++ TWB_PC1
パルスカウンタ1の設定や読出しなどで指定します。
C++ TWB::PC_BITS::PC1 VB/VBA TWB_PC_BITS.PC1 C# TWB.PC_BITS.PC1 C/C++ TWB_PC2
パルスカウンタ2の設定や読出しなどで指定します。
C++ TWB::PC_BITS::PC2 VB/VBA TWB_PC_BITS.PC2 C# TWB.PC_BITS.PC2 C/C++ TWB_PC3
パルスカウンタ3の設定や読出しなどで指定します。
C++ TWB::PC_BITS::PC3 VB/VBA TWB_PC_BITS.PC3 C# TWB.PC_BITS.PC3 C/C++ TWB_PC0_PC1
パルスカウンタ0と1の設定や読出しなどで指定します。
読出しの場合はカウンタ0と1の合計値が返ります。
C++ TWB::PC_BITS::PC0_PC1 VB/VBA TWB_PC_BITS.PC0_PC1 C# TWB.PC_BITS.PC0_PC1 C/C++ TWB_PC2_PC3
パルスカウンタ2と3の設定や読出しなどで指定します。
読出しの場合はカウンタ2と3の合計値が返ります。
C++ TWB::PC_BITS::PC2_PC3 VB/VBA TWB_PC_BITS.PC2_PC3 C# TWB.PC_BITS.PC2_PC3 C/C++ TWB_PC_ALL
全てのチャンネルを同じ動作設定にする場合や、全てのカ ウンタ値を読み出す場合に指定します。
C++ TWB::PC_BITS::PC_ALL VB/VBA TWB_PC_BITS.PC_ALL C# TWB.PC_BITS.PC_ALL
表 44 TWB_PCSetMode() のMode引数に指定する値
言語 値 説明
C/C++ TWB_PC_SINGLE
単相カウントを行う場合に指定します。入力の立下りでカウ ントします。
C++ TWB::PC_MODE::COUNT_SINGLE VB/VBA TWB_PC_MODE.COUNT_SINGLE C# TWB.PC_MODE.COUNT_SINGLE C/C++ TWB_PC_2PHASE_E
90°位相差のA相、B相の2相信号をカウントするモードで
す。図 8に従って信号を入力する必要があります。
C++ TWB::PC_MODE::COUNT_2PHASE_E VB/VBA TWB_PC_MODE.COUNT_2PHASE_E C# TWB.PC_MODE.COUNT_2PHASE_E C/C++ TWB_PC_3PHASE_E
PC2#とPC3#で2相信号のカウントを行い、PC0#でカウンタ
をクリアします。PC2#、PC3#は図 8 に従って信号を入力す る必要があります。ChBitsの値は無視されます。
C++ TWB::PC_MODE::COUNT_3PHASE_E VB/VBA TWB_PC_MODE.COUNT_3PHASE_E C# TWB.PC_MODE.COUNT_3PHASE_E C/C++ TWB_PC_2PHASE
90°位相差のA相、B相の2相信号をカウントするモードで
す。簡易接続(図 11)の場合に指定します。
C++ TWB::PC_MODE::COUNT_2PHASE VB/VBA TWB_PC_MODE.COUNT_2PHASE C# TWB.PC_MODE.COUNT_2PHASE C/C++ TWB_PC_3PHASE
PC2#とPC3#で2相信号のカウントを行い、PC0#でカウンタ
をクリアします。PC2#と PC3#を簡易接続(図 11)とした場合 に指定します。ChBitsの値は無視されます。
C++ TWB::PC_MODE::COUNT_3PHASE VB/VBA TWB_PC_MODE.COUNT_3PHASE C# TWB.PC_MODE.COUNT_3PHASE