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は、将来のための予備です。現在は使用していません。
ご注意ください。

特殊設定
ワードデバイス 説明
D8300 Unit0 モード[ENCO,HSAM,DSAM]
D8301 A相のIO番号
D8302 B相のIO番号
D8303 出力のIO番号
D8304 設定パルスL[高速カウンタ測定値]
D8305 設定パルスH[高速カウンタ測定値]
D8306 現在カウント数L[周期値L]
D8307 現在カウント数H[周期値H]
D8308 デューティ値L
D8309 デューティ値H
D8310 Unit1 モード[ENCO,HSAM,DSAM]
D8311 A相のIO番号
D8312 B相のIO番号
D8313 出力のIO番号
D8314 設定パルスL[高速カウンタ測定値]
D8315 設定パルスH[高速カウンタ測定値]
D8316 現在カウント数L[周期値L]
D8317 現在カウント数H[周期値H]
D8318 デューティ値L
D8319 デューティ値H
途中省略
D8370 Unit7 モード[ENCO,HSAM,DSAM]
D8371 A相のIO番号
D8372 B相の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以下の場合
正しく測定できません。ご了承ください。

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