ENCO命令(P版)

WROOM32では、0~7つのユニットがあり、カウント機能があります。
各ユニットにはチャンネルが2つあり、組み合わせることで、4相のエンコーダーの
回転数測定が行えます。単体で使用した場合も、カウンタ機能やパルス幅の計測なども
行えます

ENCODコマンド

ENCODコマンドでは以下の内容の測定が行えます。

  • 4相エンコーダー(A相、B相のロータリエンコーダ)モード:0
  • パルス数カウント(指定カウント間の出力HIGH)モード:1
  • パルスON幅及び周期測定 モード:2

ENCODコマンドは、コマンドと共に特殊設定のレジスタD8300以降を必ず
使用します。初期設定等を忘れないようにしてください。
また、ENCOD命令はパルス命令です。再起動は、一度指令をOFFにしてから行ってください。

コマンドの基本的な使い方は、以下の通りです。
ENCODコマンドの指定デバイスの10の位がユニット番号です。
このユニット番号と特殊設定のレジスタを確認し、動作内容が決定します。

これに加えて、D83x0番台のレジスタを使用します。
xはユニット番号です。
ユニットのモード設定レジスタの値が動作を決定します。
モード設定レジスタが0なら、4相エンコーダーモードです。
1なら、高速カウンタモード。2ならパルスON幅および周期測定モードです。


4相エンコーダー

A相およびB相を持つロータリエンコーダ(チャッタがない)を対象として
回転数を測定するモードです。
使用するA相のIO番号、B相のIO番号を必ず指定します。
Unitのモードは初期値が0のため、設定しなくても使用できます。
従来の連枝では、エンコーダー命令をOFFにするとカウント値がリセットされましたが、
カウントを停止するだけです。カウント値のリセットについては、現在検討中です。

(参考)各相の周波数が5MHzでも問題なくカウントできていました。
10MHzになるとカウント値が正しくカウントされていませんでした。

使用例1.ロータリエンコーダのパルスカウント

A相をDIO4、B相をDIO5として、Y19がONの間パルスをカウントするラダー回路です。
カウント値はD8304に入ります。これを使用するために、MOV命令でD0に読み出しています。


以下の表内のHは、将来のための予備です。現在は使用していません。
ご注意ください。

特殊設定
ワードデバイス説明
D8300Unit0 モード[ENCO,HSAM,DSAM]
D8301A相のIO番号
D8302B相のIO番号
D8303出力のIO番号
D8304設定パルスL[高速カウンタ測定値]
D8305設定パルスH[高速カウンタ測定値]
D8306現在カウント数L[周期値L]
D8307現在カウント数H[周期値H]
D8308デューティ値L
D8309デューティ値H
D8310Unit1 モード[ENCO,HSAM,DSAM]
D8311A相のIO番号
D8312B相のIO番号
D8313出力のIO番号
D8314設定パルスL[高速カウンタ測定値]
D8315設定パルスH[高速カウンタ測定値]
D8316現在カウント数L[周期値L]
D8317現在カウント数H[周期値H]
D8318デューティ値L
D8319デューティ値H
途中省略
D8370Unit7 モード[ENCO,HSAM,DSAM]
D8371A相のIO番号
D8372B相のIO番号
D8373出力のIO番号
D8374設定パルスL[高速カウンタ測定値]
D8375設定パルスH[高速カウンタ測定値]
D8376現在カウント数L[周期値L]
D8377現在カウント数H[周期値H]
D8378デューティ値L
D8379デューティ値H

パルス数カウント(高速カウンタ)

指定したパルス数が発生するまで、指定したデバイスをONにします。
D83x0を1に設定します。これにより、パルス数カウント動作となります。
D83x1に入力を監視するデバイスを指定します。D83x3に監視中にONするデバイスを指定します。
D83x4にパルス数を指定します。この回数のパルスが入力されると、D83x3のデバイスをOFFにします。
D83x4を読み出すと、現在のカウント値が格納されます。
D83x6を読み出すと、監視開始からカウント終了までの時間がusで格納されます。

指定した出力デバイスのリレーは内部のプログラムではリレーとしては使用できません。
あくまで、出力ピンのHIGH、LOWの変更だけです。

パルスON幅及び周期測定

D83x0を2に設定します。これにより、パルスON幅及び周期測定となります。
D83x4を読み出すと、現在のカウント値が格納されます。
D83x6を読み出すと、監視開始後の立ち上がりから次の立ち上がりまでの時間がusで格納されます。
D83x8を読み出すと、監視開始後の立ち上がりから次の立下りまでの時間がusで格納されます。
※監視開始後の立ち上がりから計測します。立下りが最初に来た場合は、正しく測定できません。
今後、この現象につきましては、解決したいと思っております。
※内部のタイマーの経過時間で測定しているため、HIGH時間および周期がus以下の場合
正しく測定できません。ご了承ください。

現在までの測定可能内容です。ただし、高速カウンタの動作を見る限り
さらにいろいろな測定が可能なようです。
ご希望により、さらに機能は追加が可能と考えております。