JP2005198428A - ロータリエンコーダによる回転子の位置検出方法および装置 - Google Patents
ロータリエンコーダによる回転子の位置検出方法および装置 Download PDFInfo
- Publication number
- JP2005198428A JP2005198428A JP2004002508A JP2004002508A JP2005198428A JP 2005198428 A JP2005198428 A JP 2005198428A JP 2004002508 A JP2004002508 A JP 2004002508A JP 2004002508 A JP2004002508 A JP 2004002508A JP 2005198428 A JP2005198428 A JP 2005198428A
- Authority
- JP
- Japan
- Prior art keywords
- signal
- noise
- rotor
- signals
- elsif
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Transmission And Conversion Of Sensor Element Output (AREA)
- Control Of Electric Motors In General (AREA)
Abstract
【課題】 従来のラインレシーバでは除去できなかったノイズの影響を除くことで、正確な回転子位置を検出して各種機械等の制御をより高精度にする。
【解決手段】 同一波長で位相が互いにπ/2 radずれたA信号およびB信号と、回転子の1回転毎に生成するZ信号から、ラインレシーバによりコモンノイズを除去した後、A,B両信号の生成規則に反して推移したものをノイズとみなすことでA,B両信号それぞれに重畳するコモンノイズ以外のノイズ除去を行う。A,B両信号の立ち上がりおよび立ち下がりの関係から回転子の回転方向を検出し、回転方向に応じたノイズ除去を行う。回転速度が回転方向転換可能な限界速度を超えているか否かを判定し、限界速度を超えているときにコモンノイズ以外のノイズ除去を行う。
【効果】 特に、SRモータを使用した各種機械の高精度制御が効果的に実現できる。
【選択図】 図5
【解決手段】 同一波長で位相が互いにπ/2 radずれたA信号およびB信号と、回転子の1回転毎に生成するZ信号から、ラインレシーバによりコモンノイズを除去した後、A,B両信号の生成規則に反して推移したものをノイズとみなすことでA,B両信号それぞれに重畳するコモンノイズ以外のノイズ除去を行う。A,B両信号の立ち上がりおよび立ち下がりの関係から回転子の回転方向を検出し、回転方向に応じたノイズ除去を行う。回転速度が回転方向転換可能な限界速度を超えているか否かを判定し、限界速度を超えているときにコモンノイズ以外のノイズ除去を行う。
【効果】 特に、SRモータを使用した各種機械の高精度制御が効果的に実現できる。
【選択図】 図5
Description
本発明は、高精度な位置制御が必要なサーボドライブ等に使用されるロータリエンコーダがモータ回転子の位置情報として発する信号から、従来のラインレシーバでは除去できなかったノイズの影響を除くことで、正確な回転子位置を検出するための方法および装置に関するものである。
各種機械等の制御において、ロータリエンコーダによるモータ回転子の位置検出は不可欠である。ロータリエンコーダは、モータ回転子の軸端に設置されて回転軸の角変位をデジタル信号化し、図1のようなA信号、B信号およびZ信号を回転子の位置情報として発信する。図1において、clkは時間を表わすクロック信号である。
A信号とB信号は、同一波長で位相が互いに1/4波長(π/2 rad)ずれた信号である。この両信号の位相関係から回転子の回転方向を検知することができる。また、A,B信号のパルスを累積加算することにより、回転子の位置(何回転目で何°回転した位置か)を検知することができる。Z信号は回転子の1回転毎に発信され、何回転したかを知ることができる。
ロータリエンコーダが発信したA,B,Z各信号は、制御装置に入力され、サーボドライブ等によってモータの回転が制御される。このとき、サーボドライブ等の電力変換装置がスイッチング動作を伴うため、スイッチングノイズがA,B,Z各信号に重畳する。その他、外部の装置などに起因する種々のノイズも重畳する。
これらノイズのうちコモンノイズは、従来技術によりラインレシーバを用いて除去することができる。コモンノイズは、各信号とその反転信号に同時に同一高さで重畳するノイズである。例えば、図2に示すように、A信号とA信号の反転信号であるnotA信号に重畳しているコモンノイズ1は、(A−notA)/2を演算することにより除去される。
しかし、このようなコモンノイズ以外のノイズ、すなわち各信号(A,B,Z)とその反転信号(notA,notB,notZ)に独立して重畳するノイズ(以下、単にノイズという)は、従来のラインレシーバでは除去できない。そして、ノイズによって回転子の正確な位置情報が得られず、さらには回転子を誤って反転させることにもなり、各種機械等の制御に支障を来す。
そこで本発明が解決しようとする課題は、高精度な位置制御が必要なサーボドライブ等に使用されるロータリエンコーダにおいて、モータ回転子の位置情報として発する信号から、従来のラインレシーバでは除去することのできなかったノイズの影響を除くことで、正確な回転子位置を検出して各種機械等の制御をより高精度にすることである。
上記課題を解決するための本発明法は、ロータリエンコーダから、同一波長で位相が互いにπ/2 radずれたA信号およびB信号と、回転子の1回転毎に生成するZ信号とを発信させ、ラインレシーバにより各信号に重畳するコモンノイズを除去した後、A,B両信号の生成規則に反して推移したものをノイズとみなすことでA,B両信号それぞれに重畳するコモンノイズ以外のノイズ除去を行い、位置検出を行うことを特徴とするロータリエンコーダによる回転子の位置検出方法である。
上記本発明法において、A,B両信号の立ち上がりおよび立ち下がりの関係から回転子の回転方向を検出し、回転方向に応じたノイズ除去を行うことができる。
そして、回転子の回転速度が回転方向転換可能な限界速度を超えているか否かを判定し、限界速度を超えているときにコモンノイズ以外のノイズ除去を行うことができる。
そして、回転子の回転速度が回転方向転換可能な限界速度を超えているか否かを判定し、限界速度を超えているときにコモンノイズ以外のノイズ除去を行うことができる。
また上記課題を解決するための本発明装置は、ロータリエンコーダが発信する上記A,B,Z各信号から各信号に重畳するコモンノイズを除去するラインレシーバと、A,B両信号の生成規則に反して推移したものをノイズとみなすことでA,B両信号それぞれに重畳するコモンノイズ以外のノイズ除去を行うノイズ除去機構と、ノイズ除去を行った信号に基づいて回転子の位置を検出する位置検出機構とからなることを特徴とするロータリエンコーダによる回転子の位置検出装置である。
上記本発明装置において、A,B両信号の立ち上がりおよび立ち下がりの関係から回転子の回転方向を検出する回転方向検出機構を有し、前記ノイズ除去機構を回転方向に応じた機構とすることができる。
また、回転子の回転速度が回転方向転換可能な限界速度を超えているか否かを判定する回転速度判定機構を有し、限界速度を超えているときはノイズ除去を行った信号を出力し、限界速度以下のときはノイズ除去を行わない信号を出力する信号セレクタを有し、前記位置検出機構を信号セレクタの出力により検出する機構とすることができる。
また、回転子の回転速度が回転方向転換可能な限界速度を超えているか否かを判定する回転速度判定機構を有し、限界速度を超えているときはノイズ除去を行った信号を出力し、限界速度以下のときはノイズ除去を行わない信号を出力する信号セレクタを有し、前記位置検出機構を信号セレクタの出力により検出する機構とすることができる。
本発明は、ハードウェア記述言語であるVHDL(VHSIC Hardware Description Language)やVerilog-HDL(Verilog Hardware Description Language)を使用してプログラミングすることにより、FPGA(Field Programmable Gate Array)上で効果的に実現できる。FPGAは、高速で複雑なデジタルシステムを実現できる書換え可能な集積回路であり、近年、デジタル回路製造分野でシェアを伸ばしている。
SRモータは、回転子構造が簡単なので大変堅牢である。従って、一般の回転機と比較して高速回転が可能であり、高速回転が必要な用途に用いられる。そのため、高速回転時における位置検出には高速な信号処理が不可欠となる。そこで、高速で複雑な信号処理が可能であるFPGAがSRモータの制御系にとって有効となる。
本発明により上記課題が解決され、特に、SRモータを使用した各種機械の高精度制御が効果的に実現できる。
SRモータは、回転子構造が簡単なので大変堅牢である。従って、一般の回転機と比較して高速回転が可能であり、高速回転が必要な用途に用いられる。そのため、高速回転時における位置検出には高速な信号処理が不可欠となる。そこで、高速で複雑な信号処理が可能であるFPGAがSRモータの制御系にとって有効となる。
本発明により上記課題が解決され、特に、SRモータを使用した各種機械の高精度制御が効果的に実現できる。
本発明法は、モータ回転子に取り付けたロータリエンコーダから、図1のようなA,B,Z各信号を発信させ、ノイズを除去して回転子の位置を正確に検出する。A信号とB信号は、同一波長で位相が互いにπ/2 radずれており、Z信号は回転子の1回転毎に生成される。
まず、図2の例で説明したように、ラインレシーバにより、A,B,Z各信号からコモンノイズを除去する。その後、従来のラインレシーバでは除去できなかったノイズを、A,B両信号の生成規則に反して推移したものをノイズとみなすことで、A,B両信号それぞれに重畳するコモンノイズ以外の影響を除く。以下、これをノイズ除去という。
まず、図2の例で説明したように、ラインレシーバにより、A,B,Z各信号からコモンノイズを除去する。その後、従来のラインレシーバでは除去できなかったノイズを、A,B両信号の生成規則に反して推移したものをノイズとみなすことで、A,B両信号それぞれに重畳するコモンノイズ以外の影響を除く。以下、これをノイズ除去という。
A,B両信号の生成規則について、図3および図4により説明する。図3は、一点鎖線で回転方向が変化した場合を示している。A信号がB信号よりπ/2 rad進んで出力しているときを正転とすると、反転時はA信号がB信号よりπ/2 rad遅れて出力する。各信号のパルスのHi時を「1」、Lo時を「0」とする2進法で状態を表示すると、π/2 rad毎に、正転時には、A信号が1,1,0,0と推移するとき、B信号は0,1,1,0と推移する。反転時には、A信号が1,1,0,0と推移するとき、B信号は1,0,0,1と推移する。
A信号が1でB信号が0の状態を「10」、A信号が1でB信号が1の状態を「11」、A信号が0でB信号が1の状態を「01」、A信号が0でB信号が0の状態を「00」、と表示すると、A,B両信号の状態は、図4の生成規則で推移する。すなわち、
正転時は 10→11→01→00→10→・・・
反転時は 10→00→01→11→10→・・・
と推移する。
正転時は 10→11→01→00→10→・・・
反転時は 10→00→01→11→10→・・・
と推移する。
図5の例により、コモンノイズ以外のノイズ除去について説明する。本例は正転であり、すでにラインレシーバでコモンノイズを除去してある。190ns近辺でB信号にノイズ2が、390ns近辺でB信号にノイズ3が、580ns近辺でA信号にノイズ4が、それぞれ重畳し、両信号の状態は、10→11→10→11→01→00→01→00→10→11→01→11→01と推移している。ここで、アンダーラインの状態が生成規則に反している。
ノイズ除去後の信号をRA,RBで示す。図5の状態遷移において、A,B各信号の状態が130ns近辺で10から11へ推移したのは図4の生成規則のとおりであるから、この時点ではRA,RB各信号は変わらない。しかし、ノイズ2で11から10へ推移したのは図4の生成規則に反している。生成規則どおりの状態遷移では、11から01に推移する。したがって、ここでは、RA,RB各信号はこの生成規則に反した状態10を無視し、状態11であり続ける。その結果、B信号のノイズ2はRBのように除去される。
また、ノイズ3では状態が00から01へ推移しているが、これも生成規則に反しているので、RA,RB各信号はこの状態01を無視して状態00であり続ける。その結果、B信号のノイズ3もRBのように除去される。
また、ノイズ3では状態が00から01へ推移しているが、これも生成規則に反しているので、RA,RB各信号はこの状態01を無視して状態00であり続ける。その結果、B信号のノイズ3もRBのように除去される。
図5の状態遷移において、ノイズ4では、状態が11から01へ推移している。これは、生成規則のとおりであるから、この時点でRA,RB各信号は11から01へと推移する。そして、A信号のノイズ4を過ぎると、状態が01から11へと推移し、これは生成規則に反しているので、RA,RB各信号は状態01であり続ける。その結果、ノイズ4は除去されるが、ノイズ4の位置でRA,RB各信号の状態が11から01へと推移し、実線のように、破線で示す本来の信号よりも状態11の幅が縮小し、次の状態01の幅が増大する。しかし、ノイズ除去による信号幅変動は、A,B信号の位相差(π/2 rad)未満の僅少なものであり、その影響が小さくなるように位置・速度制御系を設計することが可能である。
本発明法は、このようにして、ロータリエンコーダが発信するA信号およびB信号から、コモンノイズ以外の、従来は除去困難であったノイズ除去を行い、モータ回転子の位置検出を行う。
本発明法は、このようにして、ロータリエンコーダが発信するA信号およびB信号から、コモンノイズ以外の、従来は除去困難であったノイズ除去を行い、モータ回転子の位置検出を行う。
本発明法において、A,B両信号の立ち上がりおよび立ち下がりの関係から回転子の回転方向を検出することができる。回転子の正転と反転を図3のように定義すると、次のような関係になっている。
正転では、A信号が立ち上がったとき、B信号は「0」である。
A信号が立ち下がったとき、B信号は「1」である。
B信号が立ち上がったとき、A信号は「1」である。
B信号が立ち下がったとき、A信号は「0」である。
反転では、A信号が立ち上がったとき、B信号は「1」である。
A信号が立ち下がったとき、B信号は「0」である。
B信号が立ち上がったとき、A信号は「0」である。
B信号が立ち下がったとき、A信号は「1」である。
正転では、A信号が立ち上がったとき、B信号は「0」である。
A信号が立ち下がったとき、B信号は「1」である。
B信号が立ち上がったとき、A信号は「1」である。
B信号が立ち下がったとき、A信号は「0」である。
反転では、A信号が立ち上がったとき、B信号は「1」である。
A信号が立ち下がったとき、B信号は「0」である。
B信号が立ち上がったとき、A信号は「0」である。
B信号が立ち下がったとき、A信号は「1」である。
ここで、図6のように、A,B両信号それぞれに、クロック約1周期幅遅れた同形の信号A1,B1を生成する。すると、A信号の立ち上がりはAが「1」でA1が「0」のときであり、A信号の立ち下りはAが「0」でA1が「1」のときである。B信号の立ち上がりはBが「1」でB1が「0」のときであり、B信号の立ち下りはBが「0」でB1が「1」のときである。すなわち、A,A1,B,B1各信号の状態で回転方向を判定することができる。正転をdir=0、反転をdir=1で示すと、表1の関係となり、回転方向を検出することができる。シミュレーション結果を図6に示す。
次に、図7のように、A,B両信号の立ち上がり時および立ち下がり時にクロック1周期幅の信号dを生成する。この信号dを4逓倍信号という。4逓倍信号dを生成するには、図7のように、A,B両信号の立ち上がりより遅れて立ち上がる次のクロック信号と同時に立ち上がる同形の信号A1,B1を生成し、さらに、A1,B1両信号の立ち上がりより遅れて立ち上がる次のクロック信号と同時に立ち上がる同形の信号A2,B2を生成する。そして、A1が1でA2が0、A1が0でA2が1、B1が1でB2が0、B1が0でB2が1、の各場合を1とするクロック1周期幅のパルスを4逓倍信号dとする。
この4逓倍信号によって、回転子の位置を検出することができる。また、4逓倍信号の周期と回転子1回転のパルス数から、回転速度を求めることができる。
この4逓倍信号によって、回転子の位置を検出することができる。また、4逓倍信号の周期と回転子1回転のパルス数から、回転速度を求めることができる。
図5に例示するアルゴリズムによってノイズ除去を行う場合、回転が正転か反転かをあらかじめ設定した上で行う。そのため、回転方向が転換する場合は、このアルゴリズムによるノイズ除去を行うことができないので、回転速度を検出し、回転方向転換可能な限界速度以下の低速域にあるときは、このノイズ除去アルゴリズムを使用せず、該限界速度を超えた高速域にあるとき、ノイズ除去アルゴリズムを使用してノイズ除去を行う。
本発明法による回転子の位置検出は、図8に示すような本発明装置により行うことができる。まず、A,B,Z各信号からラインレシーバによりコモンノイズを除去する。そして、コモンノイズを除去したA,B信号をノイズ除去機構に入力し、コモンノイズ以外のノイズ除去を行って信号セレクタに入力する。また、ノイズ除去機構を経ない信号を信号セレクタに入力する。
信号セレクタでは、図9に示すように、回転速度が方向転換可能な低速域であればノイズ除去を行わない信号を出力し、低速域でなければノイズ除去を行った信号を出力する。回転速度は、信号セレクタから出力された信号について、図8のように4逓倍信号生成機構と回転速度検出機構を経て演算される。演算された回転速度を用いて回転速度判定機構で判定した結果を信号セレクタに入力する。
また信号セレクタから出力されたノイズ除去を行わない信号を、図8のように、回転方向検出機構を経てノイズ除去機構に導入し、回転方向に応じたノイズ除去を行う。
また信号セレクタから出力されたノイズ除去を行わない信号を、図8のように、回転方向検出機構を経てノイズ除去機構に導入し、回転方向に応じたノイズ除去を行う。
そして、信号セレクタから出力されるノイズ除去を行った信号または行わない信号を、図8のように4逓倍信号生成機構に入力して4逓倍信号のパルスをカウントし、回転子位置検出機構に入力して位置検出を行う。このとき、回転方向検出機構からの入力によって、図10に示すように、回転方向が反転であれば4逓倍信号のパルスをカウントダウンし、正転であればカウントアップする。また、除去できなかったノイズの影響によってカウント値に誤りが出る可能性もあるので、Z信号を用いて補正を行う。Z信号による補正は、1回転毎に、カウント値を強制的に零または2πに相当するカウント値にリセットすることで行われる。
こうして得られたカウント値出力によって、回転子の位置がわかる。
こうして得られたカウント値出力によって、回転子の位置がわかる。
本発明のノイズ除去において使用するA,B両信号の生成規則は回転子の回転方向によって異なるので、モータの回転方向が転換する場合の制御用には、上記のように、回転方向および回転速度を検出し、両検出結果に応じて位置検出を行う(請求項3,6)。
しかし、モータの回転方向は変わらず、回転速度を変化させるような制御用には、回転速度の検出は不要である。その場合、回転方向が常に不変であれば、回転方向の検出も不要であり(請求項1,4)、また回転方向を転換した後に再転換しない間は、その回転方向の検出結果によってノイズ除去を行う(請求項2,5)。
しかし、モータの回転方向は変わらず、回転速度を変化させるような制御用には、回転速度の検出は不要である。その場合、回転方向が常に不変であれば、回転方向の検出も不要であり(請求項1,4)、また回転方向を転換した後に再転換しない間は、その回転方向の検出結果によってノイズ除去を行う(請求項2,5)。
本発明の一実施例として、VHDLによるSRモータの制御プログラムを以下に示す。しかし、本発明はこのプログラムのコーディングに限定されるものではない。このほか、対象機器に応じ、本発明による種々のプログラムを実現することができる。
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY SR_control IS
PORT (clk: IN std_logic;
a, b, z: IN std_logic;
s1, s2, s3: IN std_logic;
nl_on, a_nl, b_nl, a1, a2, a3, a4, b1, b2,
b3, b4, c1, c2, c3, c4, d, dir,
z1, z2, z3, z0,
s3_1, s3_2, s3_3, s3_0,
s1_p, s2_p, s3_p: OUT std_logic;
cr_ap: OUT std_logic_vector ( 1 DOWNTO 0 );
p_ct: OUT std_logic_vector (15 DOWNTO 0);
n_ct: OUT std_logic_vector (19 DOWNTO 0);
ps_ct: OUT std_logic_vector (15 DOWNTO 0);
mi_on, u, v, w: OUT std_logic;
clk_q, dadt0, da_clk, csld: OUT std_logic;
clk_4: OUT std_logic_vector (1 DOWNTO 0);
clk_q_ct: OUT std_logic_vector (4 DOWNTO 0);
out1, out2, out3, out4: OUT std_logic);
END SR_control;
ARCHITECTURE rtl OF SR_controlIS
TYPE STATE IS (st00, st01, st10, st11);
SIGNAL cr_st_s: STATE;
SIGNAL nl_on_s, a_nl_s, b_nl_s, a1_s, a2_s, a3_s, a4_s, b1_s, b2_s,
b3_s, b4_s, c1_s, c2_s, c3_s, c4_s, d_s, dir_s,
z1_s, z2_s, z3_s, z0_s,
s3_1_s, s3_2_s, s3_3_s, s3_0_s,
s1_p_s, s2_p_s, s3_p_s: std_logic;
SIGNAL cr_ap_s: std_logic_vector( 1 DOWNTO 0 );
SIGNAL p_ct_s: std_logic_vector(15 DOWNTO 0);
SIGNAL n_ct_s: std_logic_vector(19 DOWNTO 0);
SIGNAL ps_ct_s: std_logic_vector(15 DOWNTO 0);
SIGNAL mi_on_s, u_s, v_s, w_s: std_logic;
SIGNAL clk_q_s, dadt0_s, da_clk_s, csld_s: std_logic;
SIGNAL dadt0_h_s: std_logic_vector (31 DOWNTO 0);
SIGNAL clk_4_s: std_logic_vector (1 DOWNTO 0);
SIGNAL clk_q_ct_s : std_logic_vector(4 DOWNTO 0);
BEGIN
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY SR_control IS
PORT (clk: IN std_logic;
a, b, z: IN std_logic;
s1, s2, s3: IN std_logic;
nl_on, a_nl, b_nl, a1, a2, a3, a4, b1, b2,
b3, b4, c1, c2, c3, c4, d, dir,
z1, z2, z3, z0,
s3_1, s3_2, s3_3, s3_0,
s1_p, s2_p, s3_p: OUT std_logic;
cr_ap: OUT std_logic_vector ( 1 DOWNTO 0 );
p_ct: OUT std_logic_vector (15 DOWNTO 0);
n_ct: OUT std_logic_vector (19 DOWNTO 0);
ps_ct: OUT std_logic_vector (15 DOWNTO 0);
mi_on, u, v, w: OUT std_logic;
clk_q, dadt0, da_clk, csld: OUT std_logic;
clk_4: OUT std_logic_vector (1 DOWNTO 0);
clk_q_ct: OUT std_logic_vector (4 DOWNTO 0);
out1, out2, out3, out4: OUT std_logic);
END SR_control;
ARCHITECTURE rtl OF SR_controlIS
TYPE STATE IS (st00, st01, st10, st11);
SIGNAL cr_st_s: STATE;
SIGNAL nl_on_s, a_nl_s, b_nl_s, a1_s, a2_s, a3_s, a4_s, b1_s, b2_s,
b3_s, b4_s, c1_s, c2_s, c3_s, c4_s, d_s, dir_s,
z1_s, z2_s, z3_s, z0_s,
s3_1_s, s3_2_s, s3_3_s, s3_0_s,
s1_p_s, s2_p_s, s3_p_s: std_logic;
SIGNAL cr_ap_s: std_logic_vector( 1 DOWNTO 0 );
SIGNAL p_ct_s: std_logic_vector(15 DOWNTO 0);
SIGNAL n_ct_s: std_logic_vector(19 DOWNTO 0);
SIGNAL ps_ct_s: std_logic_vector(15 DOWNTO 0);
SIGNAL mi_on_s, u_s, v_s, w_s: std_logic;
SIGNAL clk_q_s, dadt0_s, da_clk_s, csld_s: std_logic;
SIGNAL dadt0_h_s: std_logic_vector (31 DOWNTO 0);
SIGNAL clk_4_s: std_logic_vector (1 DOWNTO 0);
SIGNAL clk_q_ct_s : std_logic_vector(4 DOWNTO 0);
BEGIN
--to observe--
out1 <= u_s;
out2 <= v_s;
out3 <= w_s;
PROCESS (clk, cr_st_s, a, b, dir_s, a_nl_s, b_nl_s, nl_on_s, cr_ap_s)
BEGIN
--suppression of noise 2--
IF (clk'eventAND clk = '1') THEN
CASE cr_st_s IS
WHEN st00 =>
IF (dir_s = '1' AND a = '0' AND b = '1') THEN
cr_st_s <= st01;
ELSIF (dir_s = '0' AND a = '1' AND b = '0') THEN
cr_st_s <= st10;
ELSE
cr_st_s <= st00;
END IF;
WHEN st01 =>
IF (dir_s = '1' AND a = '1' AND b = '1') THEN
cr_st_s <= st11;
ELSIF (dir_s = '0' AND a = '0' AND b = '0') THEN
cr_st_s <= st00;
ELSE
cr_st_s <= st01;
END IF;
WHEN st10 =>
IF (dir_s = '1' AND a = '0' AND b = '0') THEN
cr_st_s <= st00;
ELSIF (dir_s = '0' AND a = '1' AND b = '1') THEN
cr_st_s <= st11;
ELSE
cr_st_s <= st10;
END IF;
WHEN st11 =>
IF (dir_s = '1' AND a = '1' AND b = '0') THEN
cr_st_s <= st10;
ELSIF (dir_s = '0' AND a = '0' AND b = '1') THEN
cr_st_s <= st01;
ELSE
cr_st_s <= st11;
END IF;
END CASE;
END IF;
IF (nl_on_s= '0') THEN
IF (a = '0' AND b = '0') THEN
cr_st_s <= st00;
ELSIF (a = '0' AND b = '1') THEN
cr_st_s <= st01;
ELSIF (a = '1' AND b = '0') THEN
cr_st_s <= st10;
ELSIF (a = '1' AND b = '1') THEN
cr_st_s <= st11;
END IF;
END IF;
IF (cr_st_s= st00) THEN
a_nl_s <= '0';
b_nl_s <= '0';
ELSIF (cr_st_s = st01) THEN
a_nl_s <= '0';
b_nl_s <= '1';
ELSIF (cr_st_s = st10) THEN
a_nl_s <= '1';
b_nl_s <= '0';
ELSIF (cr_st_s = st11) THEN
a_nl_s <= '1';
b_nl_s <= '1';
END IF;
IF (cr_st_s= st00) THEN
cr_ap_s <= "00";
ELSIF (cr_st_s = st01) THEN
cr_ap_s <= "01";
ELSIF (cr_st_s = st10) THEN
cr_ap_s <= "10";
ELSIF (cr_st_s = st11) THEN
cr_ap_s <= "11";
END IF;
END PROCESS;
a_nl <= a_nl_s;
b_nl <= b_nl_s;
cr_ap <= cr_ap_s;
out1 <= u_s;
out2 <= v_s;
out3 <= w_s;
PROCESS (clk, cr_st_s, a, b, dir_s, a_nl_s, b_nl_s, nl_on_s, cr_ap_s)
BEGIN
--suppression of noise 2--
IF (clk'eventAND clk = '1') THEN
CASE cr_st_s IS
WHEN st00 =>
IF (dir_s = '1' AND a = '0' AND b = '1') THEN
cr_st_s <= st01;
ELSIF (dir_s = '0' AND a = '1' AND b = '0') THEN
cr_st_s <= st10;
ELSE
cr_st_s <= st00;
END IF;
WHEN st01 =>
IF (dir_s = '1' AND a = '1' AND b = '1') THEN
cr_st_s <= st11;
ELSIF (dir_s = '0' AND a = '0' AND b = '0') THEN
cr_st_s <= st00;
ELSE
cr_st_s <= st01;
END IF;
WHEN st10 =>
IF (dir_s = '1' AND a = '0' AND b = '0') THEN
cr_st_s <= st00;
ELSIF (dir_s = '0' AND a = '1' AND b = '1') THEN
cr_st_s <= st11;
ELSE
cr_st_s <= st10;
END IF;
WHEN st11 =>
IF (dir_s = '1' AND a = '1' AND b = '0') THEN
cr_st_s <= st10;
ELSIF (dir_s = '0' AND a = '0' AND b = '1') THEN
cr_st_s <= st01;
ELSE
cr_st_s <= st11;
END IF;
END CASE;
END IF;
IF (nl_on_s= '0') THEN
IF (a = '0' AND b = '0') THEN
cr_st_s <= st00;
ELSIF (a = '0' AND b = '1') THEN
cr_st_s <= st01;
ELSIF (a = '1' AND b = '0') THEN
cr_st_s <= st10;
ELSIF (a = '1' AND b = '1') THEN
cr_st_s <= st11;
END IF;
END IF;
IF (cr_st_s= st00) THEN
a_nl_s <= '0';
b_nl_s <= '0';
ELSIF (cr_st_s = st01) THEN
a_nl_s <= '0';
b_nl_s <= '1';
ELSIF (cr_st_s = st10) THEN
a_nl_s <= '1';
b_nl_s <= '0';
ELSIF (cr_st_s = st11) THEN
a_nl_s <= '1';
b_nl_s <= '1';
END IF;
IF (cr_st_s= st00) THEN
cr_ap_s <= "00";
ELSIF (cr_st_s = st01) THEN
cr_ap_s <= "01";
ELSIF (cr_st_s = st10) THEN
cr_ap_s <= "10";
ELSIF (cr_st_s = st11) THEN
cr_ap_s <= "11";
END IF;
END PROCESS;
a_nl <= a_nl_s;
b_nl <= b_nl_s;
cr_ap <= cr_ap_s;
--position--
PROCESS (clk, a, b, z, nl_on_s, a_nl_s, b_nl_s, cr_st_s, a1_s, b1_s, a2_s, b2_s,
a3_s, b3_s, a4_s, b4_s, c1_s, c2_s, c3_s, c4_s, d_s, dir_s,
z1_s, z2_s, z3_s, z0_s, p_ct_s, n_ct_s, s1_p_s, s2_p_s, s3_p_s,
s3, s3_1_s, s3_2_s, s3_3_s, s3_0_s, ps_ct_s)
BEGIN
IF (d_s'eventAND d_s = '1') THEN
IF (n_ct_s >= "00000000001111101000") THEN
nl_on_s <= '0';
ELSE
nl_on_s <= '1';
END IF;
END IF;
--4teibai--
IF (clk'eventAND clk = '1') THEN
a1_s <= a;
b1_s <= b;
END IF;
IF (clk'eventAND clk = '1') THEN
IF (nl_on_s = '1') THEN
a2_s <= a_nl_s;
b2_s <= b_nl_s;
ELSIF (nl_on_s = '0') THEN
a2_s <= a1_s;
b2_s <= b1_s;
END IF;
END IF;
IF (clk'eventAND clk = '1') THEN
a3_s <= a2_s;
b3_s <= b2_s;
END IF;
IF (clk'eventAND clk = '1') THEN
a4_s <= a3_s;
b4_s <= b3_s;
END IF;
IF (a1_s = '1' AND (NOT a3_s = '1')) THEN
c1_s <= '1';
ELSE
c1_s <= '0';
END IF;
IF (NOT a1_s = '1' AND a3_s = '1') THEN
c2_s <= '1';
ELSE
c2_s <= '0';
END IF;
IF (b1_s = '1' AND (NOT b3_s = '1')) THEN
c3_s <= '1';
ELSE
c3_s <= '0';
END IF;
IF (NOT b1_s = '1' AND b3_s = '1') THEN
c4_s <= '1';
ELSE
c4_s <= '0';
END IF;
IF (c1_s = '1' OR c2_s = '1' OR c3_s = '1' OR c4_s = '1') THEN
d_s <= '1';
ELSE
d_s <= '0';
END IF;
PROCESS (clk, a, b, z, nl_on_s, a_nl_s, b_nl_s, cr_st_s, a1_s, b1_s, a2_s, b2_s,
a3_s, b3_s, a4_s, b4_s, c1_s, c2_s, c3_s, c4_s, d_s, dir_s,
z1_s, z2_s, z3_s, z0_s, p_ct_s, n_ct_s, s1_p_s, s2_p_s, s3_p_s,
s3, s3_1_s, s3_2_s, s3_3_s, s3_0_s, ps_ct_s)
BEGIN
IF (d_s'eventAND d_s = '1') THEN
IF (n_ct_s >= "00000000001111101000") THEN
nl_on_s <= '0';
ELSE
nl_on_s <= '1';
END IF;
END IF;
--4teibai--
IF (clk'eventAND clk = '1') THEN
a1_s <= a;
b1_s <= b;
END IF;
IF (clk'eventAND clk = '1') THEN
IF (nl_on_s = '1') THEN
a2_s <= a_nl_s;
b2_s <= b_nl_s;
ELSIF (nl_on_s = '0') THEN
a2_s <= a1_s;
b2_s <= b1_s;
END IF;
END IF;
IF (clk'eventAND clk = '1') THEN
a3_s <= a2_s;
b3_s <= b2_s;
END IF;
IF (clk'eventAND clk = '1') THEN
a4_s <= a3_s;
b4_s <= b3_s;
END IF;
IF (a1_s = '1' AND (NOT a3_s = '1')) THEN
c1_s <= '1';
ELSE
c1_s <= '0';
END IF;
IF (NOT a1_s = '1' AND a3_s = '1') THEN
c2_s <= '1';
ELSE
c2_s <= '0';
END IF;
IF (b1_s = '1' AND (NOT b3_s = '1')) THEN
c3_s <= '1';
ELSE
c3_s <= '0';
END IF;
IF (NOT b1_s = '1' AND b3_s = '1') THEN
c4_s <= '1';
ELSE
c4_s <= '0';
END IF;
IF (c1_s = '1' OR c2_s = '1' OR c3_s = '1' OR c4_s = '1') THEN
d_s <= '1';
ELSE
d_s <= '0';
END IF;
--direction--
IF (d_s'eventAND d_s = '0') THEN
IF ((a1_s = '1' AND a4_s = '0' AND b1_s = '0' AND b4_s = '0') OR
(a1_s = '1' AND a4_s = '1' AND b1_s = '1' AND b4_s = '0') OR
(a1_s = '0' AND a4_s = '1' AND b1_s = '1' AND b4_s = '1') OR
(a1_s = '0' AND a4_s = '0' AND b1_s = '0' AND b4_s = '1')) THEN
dir_s <= '0';
END IF;
IF ((a1_s = '0' AND a4_s = '0' AND b1_s = '1' AND b4_s = '0') OR
(a1_s = '1' AND a4_s = '0' AND b1_s = '1' AND b4_s = '1') OR
(a1_s = '1' AND a4_s = '1' AND b1_s = '0' AND b4_s = '1') OR
(a1_s = '0' AND a4_s = '1' AND b1_s = '0' AND b4_s = '0')) THEN
dir_s <= '1';
END IF;
END IF;
IF (d_s'eventAND d_s = '1') THEN
z1_s <= z;
END IF;
IF (d_s'eventAND d_s = '1') THEN
z2_s <= z1_s;
END IF;
IF (d_s'eventAND d_s = '1') THEN
z3_s <= z2_s;
END IF;
IF (z1_s = '1' AND z3_s = '0') THEN
z0_s <= '1';
ELSE
z0_s <= '0';
END IF;
IF (d_s'eventAND d_s = '0') THEN
IF ((a1_s = '1' AND a4_s = '0' AND b1_s = '0' AND b4_s = '0') OR
(a1_s = '1' AND a4_s = '1' AND b1_s = '1' AND b4_s = '0') OR
(a1_s = '0' AND a4_s = '1' AND b1_s = '1' AND b4_s = '1') OR
(a1_s = '0' AND a4_s = '0' AND b1_s = '0' AND b4_s = '1')) THEN
dir_s <= '0';
END IF;
IF ((a1_s = '0' AND a4_s = '0' AND b1_s = '1' AND b4_s = '0') OR
(a1_s = '1' AND a4_s = '0' AND b1_s = '1' AND b4_s = '1') OR
(a1_s = '1' AND a4_s = '1' AND b1_s = '0' AND b4_s = '1') OR
(a1_s = '0' AND a4_s = '1' AND b1_s = '0' AND b4_s = '0')) THEN
dir_s <= '1';
END IF;
END IF;
IF (d_s'eventAND d_s = '1') THEN
z1_s <= z;
END IF;
IF (d_s'eventAND d_s = '1') THEN
z2_s <= z1_s;
END IF;
IF (d_s'eventAND d_s = '1') THEN
z3_s <= z2_s;
END IF;
IF (z1_s = '1' AND z3_s = '0') THEN
z0_s <= '1';
ELSE
z0_s <= '0';
END IF;
--count using R.E. signal and z--
IF (dir_s= '1' AND z0_s = '1') THEN
p_ct_s <= "0000000000000000";
ELSIF (dir_s = '0' AND z0_s = '1') THEN
p_ct_s <= "0000010110100000";
ELSIF (d_s'event AND d_s = '1') THEN
IF (dir_s = '1' AND p_ct_s >= "0000010110100000") THEN
p_ct_s <= "0000000000000000";
ELSIF (dir_s = '1') THEN
p_ct_s <= p_ct_s+ '1';
END IF;
IF (dir_s = '0' AND p_ct_s <= "0000000000000000") THEN
p_ct_s <= "0000010110100000";
ELSIF (dir_s= '0') THEN
p_ct_s <= p_ct_s- '1';
END IF;
END IF;
IF (clk'eventAND clk = '1') THEN
n_ct_s <= n_ct_s+ '1';
IF (d_s = '1') THEN
n_ct_s <= "00000000000000000000";
END IF;
END IF;
--count using R.E. signal and s3--
IF (d_s'eventAND d_s = '1') THEN
s3_1_s <= s3;
END IF;
IF (d_s'eventAND d_s = '1') THEN
s3_2_s <= s3_1_s;
END IF;
IF (d_s'eventAND d_s = '1') THEN
s3_3_s <= s3_2_s;
END IF;
IF (s3 = '0' AND s3_3_s = '1') THEN
s3_0_s <= '1';
ELSE
s3_0_s <= '0';
END IF;
IF (dir_s= '1' AND s3_0_s = '1') THEN
ps_ct_s <= "0000000000000000";
ELSIF (dir_s = '0' AND s3_0_s = '1') THEN
ps_ct_s <= "0000000101101000";
ELSIF (d_s'event AND d_s = '1') THEN
IF (dir_s = '1' AND ps_ct_s >= "0000000101101000") THEN
ps_ct_s <= "0000000000000000";
ELSIF (dir_s = '1') THEN
ps_ct_s <= ps_ct_s+ '1';
END IF;
IF (dir_s = '0' AND ps_ct_s <= "0000000000000000") THEN
ps_ct_s <= "0000000101101000";
ELSIF (dir_s = '0') THEN
ps_ct_s <= ps_ct_s- '1';
END IF;
END IF;
--estimated s1,s2,s3 using R.E. signal and Z--
-- IF (p_ct_s >= "0000000000000000" AND p_ct_s < "0000000000111100") THEN -- 0 to 15 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000000111100" AND p_ct_s < "0000000001111000") THEN -- 15 to 30 --
-- s1_p_s <= '1';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000001111000" AND p_ct_s < "0000000010110100") THEN -- 30 to 45 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000010110100" AND p_ct_s < "0000000011110000") THEN -- 45 to 60 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000000011110000" AND p_ct_s < "0000000100101100") THEN -- 60 to 75 --
-- s1_p_s <= '0';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000000100101100" AND p_ct_s < "0000000101101000") THEN -- 75 to 90 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000000101101000" AND p_ct_s < "0000000110100100") THEN -- 90 to 105 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000110100100" AND p_ct_s < "0000000111100000") THEN -- 105 to 120 --
-- s1_p_s <= '1';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000111100000" AND p_ct_s < "0000001000011100") THEN -- 120 to 135 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000001000011100" AND p_ct_s < "0000001001011000") THEN -- 135 to 150 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001001011000" AND p_ct_s < "0000001010010100") THEN -- 150 to 165 --
-- s1_p_s <= '0';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001010010100" AND p_ct_s < "0000001011010000") THEN -- 165 to 180 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001011010000" AND p_ct_s < "0000001100001100") THEN -- 180 to 195 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000001100001100" AND p_ct_s < "0000001101001000") THEN -- 195 to 210 --
-- s1_p_s <= '1';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000001101001000" AND p_ct_s < "0000001110000100") THEN -- 210 to 225 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000001110000100" AND p_ct_s < "0000001111000000") THEN -- 225 to 240 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001111000000" AND p_ct_s < "0000001111111100") THEN -- 240 to 255 --
-- s1_p_s <= '0';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001111111100" AND p_ct_s < "0000010000111000") THEN -- 255 to 270 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000010000111000" AND p_ct_s < "0000010001110100") THEN -- 270 to 285 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000010001110100" AND p_ct_s < "0000010010110000") THEN -- 285 to 300 --
-- s1_p_s <= '1';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000010010110000" AND p_ct_s < "0000010011101100") THEN -- 300 to 315 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000010011101100" AND p_ct_s < "0000010100101000") THEN -- 315 to 330 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000010100101000" AND p_ct_s < "0000010101100100") THEN -- 330 to 345 --
-- s1_p_s <= '0';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000010101100100" AND p_ct_s < "0000010110100000") THEN -- 345 to 360 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- END IF;
--estimated s1,s2,s3 using R.E. signal and s3--
IF (ps_ct_s>= "0000000000000000" AND ps_ct_s < "0000000000111100") THEN -- 0 to 15 --
s1_p_s <= '1';
s2_p_s <= '0';
s3_p_s <= '0';
ELSIF (ps_ct_s >= "0000000000111100" AND ps_ct_s < "0000000001111000") THEN -- 15 to 30 --
s1_p_s <= '1';
s2_p_s <= '1';
s3_p_s <= '0';
ELSIF (ps_ct_s >= "0000000001111000" AND ps_ct_s < "0000000010110100") THEN -- 30 to 45 --
s1_p_s <= '0';
s2_p_s <= '1';
s3_p_s <= '0';
ELSIF (ps_ct_s >= "0000000010110100" AND ps_ct_s < "0000000011110000") THEN -- 45 to 60 --
s1_p_s <= '0';
s2_p_s <= '1';
s3_p_s <= '1';
ELSIF (ps_ct_s >= "0000000011110000" AND ps_ct_s < "0000000100101100") THEN -- 60 to 75 --
s1_p_s <= '0';
s2_p_s <= '0';
s3_p_s <= '1';
ELSIF (ps_ct_s >= "0000000100101100" AND ps_ct_s < "0000000101101000") THEN -- 75 to 90 --
s1_p_s <= '1';
s2_p_s <= '0';
s3_p_s <= '1';
END IF;
END PROCESS;
nl_on <= nl_on_s;
a1 <= a1_s;
b1 <= b1_s;
a2 <= a2_s;
b2 <= b2_s;
a3 <= a3_s;
b3 <= b3_s;
a4 <= a4_s;
b4 <= b4_s;
z1 <= z1_s;
z2 <= z2_s;
z3 <= z3_s;
z0 <= Z0_s;
c1 <= c1_s;
c2 <= c2_s;
c3 <= c3_s;
c4 <= c4_s;
d <= d_s;
dir <= dir_s;
p_ct <= p_ct_s;
n_ct <= n_ct_s;
s3_1 <= s3_1_s;
s3_2 <= s3_2_s;
s3_3 <= s3_3_s;
s3_0 <= s3_0_s;
ps_ct <= ps_ct_s;
s1_p <= s1_p_s;
s2_p <= s2_p_s;
s3_p <= s3_p_s;
IF (dir_s= '1' AND z0_s = '1') THEN
p_ct_s <= "0000000000000000";
ELSIF (dir_s = '0' AND z0_s = '1') THEN
p_ct_s <= "0000010110100000";
ELSIF (d_s'event AND d_s = '1') THEN
IF (dir_s = '1' AND p_ct_s >= "0000010110100000") THEN
p_ct_s <= "0000000000000000";
ELSIF (dir_s = '1') THEN
p_ct_s <= p_ct_s+ '1';
END IF;
IF (dir_s = '0' AND p_ct_s <= "0000000000000000") THEN
p_ct_s <= "0000010110100000";
ELSIF (dir_s= '0') THEN
p_ct_s <= p_ct_s- '1';
END IF;
END IF;
IF (clk'eventAND clk = '1') THEN
n_ct_s <= n_ct_s+ '1';
IF (d_s = '1') THEN
n_ct_s <= "00000000000000000000";
END IF;
END IF;
--count using R.E. signal and s3--
IF (d_s'eventAND d_s = '1') THEN
s3_1_s <= s3;
END IF;
IF (d_s'eventAND d_s = '1') THEN
s3_2_s <= s3_1_s;
END IF;
IF (d_s'eventAND d_s = '1') THEN
s3_3_s <= s3_2_s;
END IF;
IF (s3 = '0' AND s3_3_s = '1') THEN
s3_0_s <= '1';
ELSE
s3_0_s <= '0';
END IF;
IF (dir_s= '1' AND s3_0_s = '1') THEN
ps_ct_s <= "0000000000000000";
ELSIF (dir_s = '0' AND s3_0_s = '1') THEN
ps_ct_s <= "0000000101101000";
ELSIF (d_s'event AND d_s = '1') THEN
IF (dir_s = '1' AND ps_ct_s >= "0000000101101000") THEN
ps_ct_s <= "0000000000000000";
ELSIF (dir_s = '1') THEN
ps_ct_s <= ps_ct_s+ '1';
END IF;
IF (dir_s = '0' AND ps_ct_s <= "0000000000000000") THEN
ps_ct_s <= "0000000101101000";
ELSIF (dir_s = '0') THEN
ps_ct_s <= ps_ct_s- '1';
END IF;
END IF;
--estimated s1,s2,s3 using R.E. signal and Z--
-- IF (p_ct_s >= "0000000000000000" AND p_ct_s < "0000000000111100") THEN -- 0 to 15 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000000111100" AND p_ct_s < "0000000001111000") THEN -- 15 to 30 --
-- s1_p_s <= '1';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000001111000" AND p_ct_s < "0000000010110100") THEN -- 30 to 45 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000010110100" AND p_ct_s < "0000000011110000") THEN -- 45 to 60 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000000011110000" AND p_ct_s < "0000000100101100") THEN -- 60 to 75 --
-- s1_p_s <= '0';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000000100101100" AND p_ct_s < "0000000101101000") THEN -- 75 to 90 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000000101101000" AND p_ct_s < "0000000110100100") THEN -- 90 to 105 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000110100100" AND p_ct_s < "0000000111100000") THEN -- 105 to 120 --
-- s1_p_s <= '1';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000000111100000" AND p_ct_s < "0000001000011100") THEN -- 120 to 135 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000001000011100" AND p_ct_s < "0000001001011000") THEN -- 135 to 150 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001001011000" AND p_ct_s < "0000001010010100") THEN -- 150 to 165 --
-- s1_p_s <= '0';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001010010100" AND p_ct_s < "0000001011010000") THEN -- 165 to 180 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001011010000" AND p_ct_s < "0000001100001100") THEN -- 180 to 195 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000001100001100" AND p_ct_s < "0000001101001000") THEN -- 195 to 210 --
-- s1_p_s <= '1';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000001101001000" AND p_ct_s < "0000001110000100") THEN -- 210 to 225 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000001110000100" AND p_ct_s < "0000001111000000") THEN -- 225 to 240 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001111000000" AND p_ct_s < "0000001111111100") THEN -- 240 to 255 --
-- s1_p_s <= '0';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000001111111100" AND p_ct_s < "0000010000111000") THEN -- 255 to 270 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000010000111000" AND p_ct_s < "0000010001110100") THEN -- 270 to 285 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000010001110100" AND p_ct_s < "0000010010110000") THEN -- 285 to 300 --
-- s1_p_s <= '1';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000010010110000" AND p_ct_s < "0000010011101100") THEN -- 300 to 315 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '0';
-- ELSIF (p_ct_s >= "0000010011101100" AND p_ct_s < "0000010100101000") THEN -- 315 to 330 --
-- s1_p_s <= '0';
-- s2_p_s <= '1';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000010100101000" AND p_ct_s < "0000010101100100") THEN -- 330 to 345 --
-- s1_p_s <= '0';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- ELSIF (p_ct_s >= "0000010101100100" AND p_ct_s < "0000010110100000") THEN -- 345 to 360 --
-- s1_p_s <= '1';
-- s2_p_s <= '0';
-- s3_p_s <= '1';
-- END IF;
--estimated s1,s2,s3 using R.E. signal and s3--
IF (ps_ct_s>= "0000000000000000" AND ps_ct_s < "0000000000111100") THEN -- 0 to 15 --
s1_p_s <= '1';
s2_p_s <= '0';
s3_p_s <= '0';
ELSIF (ps_ct_s >= "0000000000111100" AND ps_ct_s < "0000000001111000") THEN -- 15 to 30 --
s1_p_s <= '1';
s2_p_s <= '1';
s3_p_s <= '0';
ELSIF (ps_ct_s >= "0000000001111000" AND ps_ct_s < "0000000010110100") THEN -- 30 to 45 --
s1_p_s <= '0';
s2_p_s <= '1';
s3_p_s <= '0';
ELSIF (ps_ct_s >= "0000000010110100" AND ps_ct_s < "0000000011110000") THEN -- 45 to 60 --
s1_p_s <= '0';
s2_p_s <= '1';
s3_p_s <= '1';
ELSIF (ps_ct_s >= "0000000011110000" AND ps_ct_s < "0000000100101100") THEN -- 60 to 75 --
s1_p_s <= '0';
s2_p_s <= '0';
s3_p_s <= '1';
ELSIF (ps_ct_s >= "0000000100101100" AND ps_ct_s < "0000000101101000") THEN -- 75 to 90 --
s1_p_s <= '1';
s2_p_s <= '0';
s3_p_s <= '1';
END IF;
END PROCESS;
nl_on <= nl_on_s;
a1 <= a1_s;
b1 <= b1_s;
a2 <= a2_s;
b2 <= b2_s;
a3 <= a3_s;
b3 <= b3_s;
a4 <= a4_s;
b4 <= b4_s;
z1 <= z1_s;
z2 <= z2_s;
z3 <= z3_s;
z0 <= Z0_s;
c1 <= c1_s;
c2 <= c2_s;
c3 <= c3_s;
c4 <= c4_s;
d <= d_s;
dir <= dir_s;
p_ct <= p_ct_s;
n_ct <= n_ct_s;
s3_1 <= s3_1_s;
s3_2 <= s3_2_s;
s3_3 <= s3_3_s;
s3_0 <= s3_0_s;
ps_ct <= ps_ct_s;
s1_p <= s1_p_s;
s2_p <= s2_p_s;
s3_p <= s3_p_s;
--switching--
PROCESS (clk, d_s, n_ct_s, mi_on_s, s1, s2, s3, s1_p_s, s2_p_s, s3_p_s, u_s, v_s, w_s)
BEGIN
IF (d_s'event AND d_s= '1') THEN
IF (n_ct_s>= "00000000001111101000") THEN
mi_on_s <= '0';
ELSE
mi_on_s <= '1';
END IF;
END IF;
PROCESS (clk, d_s, n_ct_s, mi_on_s, s1, s2, s3, s1_p_s, s2_p_s, s3_p_s, u_s, v_s, w_s)
BEGIN
IF (d_s'event AND d_s= '1') THEN
IF (n_ct_s>= "00000000001111101000") THEN
mi_on_s <= '0';
ELSE
mi_on_s <= '1';
END IF;
END IF;
--LoMi using s1,s2,s3--
--IF (s1 = '1' AND s2 = '0' AND s3 = '0') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
--ELSIF (s1 = '1' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '1';
--ELSIF (s1 = '0' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
--ELSIF (s1 = '0' AND s2 = '1' AND s3 = '1') THEN
-- u_s <= '1';
-- v_s <= '1';
-- w_s <= '0';
--ELSIF (s1 = '0' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
--ELSIF (s1 = '1' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '1';
--END IF;
--LoMi using estimated s1,s2,s3--
--IF (s1_p_s = '1' AND s2_p_s= '0' AND s3_p_s = '0') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
--ELSIF (s1_p_s = '1' AND s2_p_s = '1' AND s3_p_s = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '1';
--ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
--ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '1') THEN
-- u_s <= '1';
-- v_s <= '1';
-- w_s <= '0';
--ELSIF (s1_p_s = '0' AND s2_p_s = '0' AND s3_p_s = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
--ELSIF (s1_p_s = '1' AND s2_p_s = '0' AND s3_p_s = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '1';
--END IF;
--LoMi, MI using s1,s2,s3--
--IF (mi_on_s = '0') THEN --LoMi--
-- IF (s1 = '1' AND s2 = '0' AND s3 = '0') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
-- ELSIF (s1 = '1' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '1';
-- ELSIF (s1 = '0' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '1' AND s3 = '1') THEN
-- u_s <= '1';
-- v_s <= '1';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
-- ELSIF (s1 = '1' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '1';
-- END IF;
--ELSIF (mi_on_s = '1') THEN --Mi--
-- IF (s1 = '1' AND s2 = '0' AND s3 = '0') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
-- ELSIF (s1 = '1' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '1' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
-- ELSIF (s1 = '1' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
-- END IF;
--END IF;
--LoMi, MI using estimated s1,s2,s3--
IF (mi_on_s = '0') THEN --LoMi--
IF (s1_p_s = '1' AND s2_p_s = '0' AND s3_P_s = '0') THEN
u_s <= '0';
v_s <= '0';
w_s <= '1';
ELSIF (s1_p_s = '1' AND s2_p_s = '1' AND s3_p_s = '0') THEN
u_s <= '1';
v_s <= '0';
w_s <= '1';
ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '0') THEN
u_s <= '1';
v_s <= '0';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '1') THEN
u_s <= '1';
v_s <= '1';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '0' AND s3_p_s = '1') THEN
u_s <= '0';
v_s <= '1';
w_s <= '0';
ELSIF (s1_p_s = '1' AND s2_p_s = '0' AND s3_p_s = '1') THEN
u_s <= '0';
v_s <= '1';
w_s <= '1';
END IF;
ELSIF (mi_on_s = '1') THEN --Mi--
IF (s1_p_s = '1' AND s2_p_s = '0' AND s3_p_s = '0') THEN
u_s <= '0';
v_s <= '0';
w_s <= '1';
ELSIF (s1_p_s = '1' AND s2_p_s = '1' AND s3_p_s = '0') THEN
u_s <= '1';
v_s <= '0';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '0') THEN
u_s <= '1';
v_s <= '0';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '1') THEN
u_s <= '0';
v_s <= '1';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '0' AND s3_p_s = '1') THEN
u_s <= '0';
v_s <= '1';
w_s <= '0';
ELSIF (s1_p_s = '1' AND s2_p_s = '0' AND s3_p_s = '1') THEN
u_s<= '0';
v_s <= '0';
w_s <= '1';
END IF;
END IF;
END PROCESS;
mi_on <= mi_on_s;
u <= u_s;
v <= v_s;
w <= w_s;
--IF (s1 = '1' AND s2 = '0' AND s3 = '0') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
--ELSIF (s1 = '1' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '1';
--ELSIF (s1 = '0' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
--ELSIF (s1 = '0' AND s2 = '1' AND s3 = '1') THEN
-- u_s <= '1';
-- v_s <= '1';
-- w_s <= '0';
--ELSIF (s1 = '0' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
--ELSIF (s1 = '1' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '1';
--END IF;
--LoMi using estimated s1,s2,s3--
--IF (s1_p_s = '1' AND s2_p_s= '0' AND s3_p_s = '0') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
--ELSIF (s1_p_s = '1' AND s2_p_s = '1' AND s3_p_s = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '1';
--ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
--ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '1') THEN
-- u_s <= '1';
-- v_s <= '1';
-- w_s <= '0';
--ELSIF (s1_p_s = '0' AND s2_p_s = '0' AND s3_p_s = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
--ELSIF (s1_p_s = '1' AND s2_p_s = '0' AND s3_p_s = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '1';
--END IF;
--LoMi, MI using s1,s2,s3--
--IF (mi_on_s = '0') THEN --LoMi--
-- IF (s1 = '1' AND s2 = '0' AND s3 = '0') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
-- ELSIF (s1 = '1' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '1';
-- ELSIF (s1 = '0' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '1' AND s3 = '1') THEN
-- u_s <= '1';
-- v_s <= '1';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
-- ELSIF (s1 = '1' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '1';
-- END IF;
--ELSIF (mi_on_s = '1') THEN --Mi--
-- IF (s1 = '1' AND s2 = '0' AND s3 = '0') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
-- ELSIF (s1 = '1' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '1' AND s3 = '0') THEN
-- u_s <= '1';
-- v_s <= '0';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '1' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
-- ELSIF (s1 = '0' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '1';
-- w_s <= '0';
-- ELSIF (s1 = '1' AND s2 = '0' AND s3 = '1') THEN
-- u_s <= '0';
-- v_s <= '0';
-- w_s <= '1';
-- END IF;
--END IF;
--LoMi, MI using estimated s1,s2,s3--
IF (mi_on_s = '0') THEN --LoMi--
IF (s1_p_s = '1' AND s2_p_s = '0' AND s3_P_s = '0') THEN
u_s <= '0';
v_s <= '0';
w_s <= '1';
ELSIF (s1_p_s = '1' AND s2_p_s = '1' AND s3_p_s = '0') THEN
u_s <= '1';
v_s <= '0';
w_s <= '1';
ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '0') THEN
u_s <= '1';
v_s <= '0';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '1') THEN
u_s <= '1';
v_s <= '1';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '0' AND s3_p_s = '1') THEN
u_s <= '0';
v_s <= '1';
w_s <= '0';
ELSIF (s1_p_s = '1' AND s2_p_s = '0' AND s3_p_s = '1') THEN
u_s <= '0';
v_s <= '1';
w_s <= '1';
END IF;
ELSIF (mi_on_s = '1') THEN --Mi--
IF (s1_p_s = '1' AND s2_p_s = '0' AND s3_p_s = '0') THEN
u_s <= '0';
v_s <= '0';
w_s <= '1';
ELSIF (s1_p_s = '1' AND s2_p_s = '1' AND s3_p_s = '0') THEN
u_s <= '1';
v_s <= '0';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '0') THEN
u_s <= '1';
v_s <= '0';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '1' AND s3_p_s = '1') THEN
u_s <= '0';
v_s <= '1';
w_s <= '0';
ELSIF (s1_p_s = '0' AND s2_p_s = '0' AND s3_p_s = '1') THEN
u_s <= '0';
v_s <= '1';
w_s <= '0';
ELSIF (s1_p_s = '1' AND s2_p_s = '0' AND s3_p_s = '1') THEN
u_s<= '0';
v_s <= '0';
w_s <= '1';
END IF;
END IF;
END PROCESS;
mi_on <= mi_on_s;
u <= u_s;
v <= v_s;
w <= w_s;
--da interface--
PROCESS (clk, clk_4_s, clk_q_s, clk_q_ct_s, clk_q_s, p_ct_s, ps_ct_s, dadt0_h_s, dadt0_s, da_clk_s, csld_s)
BEGIN
dadt0_h_s <= p_ct_s * "0000000000101101";
-- dadt0_h_s <= ps_ct_s * "0000000000101101";
-- dadt0_h_s <= "00000000000000001111111111111111";
IF (clk_4_s = "11") THEN
clk_4_s <= "00";
ELSIF (clk'event AND clk = '1') THEN
clk_4_s <= clk_4_s + '1';
END IF;
IF (clk_q_ct_s= "10010") THEN
clk_q_ct_s <= "00000";
ELSIF (clk_q_s'event AND clk_q_s = '1') THEN
clk_q_ct_s <= clk_q_ct_s+ '1';
IF (clk_q_ct_s = "00001") THEN
dadt0_s <= dadt0_h_s(15);
ELSIF (clk_q_ct_s = "00010") THEN
dadt0_s <= dadt0_h_s(14);
ELSIF (clk_q_ct_s = "00011") THEN
dadt0_s <= dadt0_h_s(13);
ELSIF (clk_q_ct_s = "00100") THEN
dadt0_s <= dadt0_h_s(12);
ELSIF (clk_q_ct_s = "00101") THEN
dadt0_s <= dadt0_h_s(11);
ELSIF (clk_q_ct_s = "00110") THEN
dadt0_s <= dadt0_h_s(10);
ELSIF (clk_q_ct_s = "00111") THEN
dadt0_s <= dadt0_h_s(9);
ELSIF (clk_q_ct_s = "01000") THEN
dadt0_s <= dadt0_h_s(8);
ELSIF (clk_q_ct_s = "01001") THEN
dadt0_s <= dadt0_h_s(7);
ELSIF (clk_q_ct_s = "01010") THEN
dadt0_s <= dadt0_h_s(6);
ELSIF (clk_q_ct_s = "01011") THEN
dadt0_s <= dadt0_h_s(5);
ELSIF (clk_q_ct_s = "01100") THEN
dadt0_s <= dadt0_h_s(4);
ELSIF (clk_q_ct_s = "01101") THEN
dadt0_s <= dadt0_h_s(3);
ELSIF (clk_q_ct_s = "01110") THEN
dadt0_s <= dadt0_h_s(2);
ELSIF (clk_q_ct_s = "01111") THEN
dadt0_s <= dadt0_h_s(1);
ELSIF (clk_q_ct_s = "10000") THEN
dadt0_s <= dadt0_h_s(0);
ELSE
dadt0_s <= '0';
END IF;
END IF;
IF(clk'eventAND clk = '1' ) THEN
da_clk_s <= clk_q_s;
IF(clk_q_ct_s = "00000" ) THEN
csld_s <= '1';
ELSE
csld_s <= '0';
END IF;
END IF;
END PROCESS;
clk_q_s <= clk_4_s(1);
clk_4 <= clk_4_s;
clk_q_ct <= clk_q_ct_s;
csld <= csld_s;
dadt0 <= dadt0_s;
da_clk <= da_clk_s;
END rtl;
PROCESS (clk, clk_4_s, clk_q_s, clk_q_ct_s, clk_q_s, p_ct_s, ps_ct_s, dadt0_h_s, dadt0_s, da_clk_s, csld_s)
BEGIN
dadt0_h_s <= p_ct_s * "0000000000101101";
-- dadt0_h_s <= ps_ct_s * "0000000000101101";
-- dadt0_h_s <= "00000000000000001111111111111111";
IF (clk_4_s = "11") THEN
clk_4_s <= "00";
ELSIF (clk'event AND clk = '1') THEN
clk_4_s <= clk_4_s + '1';
END IF;
IF (clk_q_ct_s= "10010") THEN
clk_q_ct_s <= "00000";
ELSIF (clk_q_s'event AND clk_q_s = '1') THEN
clk_q_ct_s <= clk_q_ct_s+ '1';
IF (clk_q_ct_s = "00001") THEN
dadt0_s <= dadt0_h_s(15);
ELSIF (clk_q_ct_s = "00010") THEN
dadt0_s <= dadt0_h_s(14);
ELSIF (clk_q_ct_s = "00011") THEN
dadt0_s <= dadt0_h_s(13);
ELSIF (clk_q_ct_s = "00100") THEN
dadt0_s <= dadt0_h_s(12);
ELSIF (clk_q_ct_s = "00101") THEN
dadt0_s <= dadt0_h_s(11);
ELSIF (clk_q_ct_s = "00110") THEN
dadt0_s <= dadt0_h_s(10);
ELSIF (clk_q_ct_s = "00111") THEN
dadt0_s <= dadt0_h_s(9);
ELSIF (clk_q_ct_s = "01000") THEN
dadt0_s <= dadt0_h_s(8);
ELSIF (clk_q_ct_s = "01001") THEN
dadt0_s <= dadt0_h_s(7);
ELSIF (clk_q_ct_s = "01010") THEN
dadt0_s <= dadt0_h_s(6);
ELSIF (clk_q_ct_s = "01011") THEN
dadt0_s <= dadt0_h_s(5);
ELSIF (clk_q_ct_s = "01100") THEN
dadt0_s <= dadt0_h_s(4);
ELSIF (clk_q_ct_s = "01101") THEN
dadt0_s <= dadt0_h_s(3);
ELSIF (clk_q_ct_s = "01110") THEN
dadt0_s <= dadt0_h_s(2);
ELSIF (clk_q_ct_s = "01111") THEN
dadt0_s <= dadt0_h_s(1);
ELSIF (clk_q_ct_s = "10000") THEN
dadt0_s <= dadt0_h_s(0);
ELSE
dadt0_s <= '0';
END IF;
END IF;
IF(clk'eventAND clk = '1' ) THEN
da_clk_s <= clk_q_s;
IF(clk_q_ct_s = "00000" ) THEN
csld_s <= '1';
ELSE
csld_s <= '0';
END IF;
END IF;
END PROCESS;
clk_q_s <= clk_4_s(1);
clk_4 <= clk_4_s;
clk_q_ct <= clk_q_ct_s;
csld <= csld_s;
dadt0 <= dadt0_s;
da_clk <= da_clk_s;
END rtl;
1:コモンノイズ
2,3,4:ノイズ
2,3,4:ノイズ
Claims (6)
- ロータリエンコーダから、同一波長で位相が互いにπ/2 radずれたA信号およびB信号と、回転子の1回転毎に生成するZ信号とを発信させ、ラインレシーバにより各信号に重畳するコモンノイズを除去した後、A,B両信号の生成規則に反して推移したものをノイズとみなすことでA,B両信号それぞれに重畳するコモンノイズ以外のノイズ除去を行い、位置検出を行うことを特徴とするロータリエンコーダによる回転子の位置検出方法。
- A,B両信号の立ち上がりおよび立ち下がりの関係から回転子の回転方向を検出し、回転方向に応じたノイズ除去を行うことを特徴とする請求項1記載のロータリエンコーダによる回転子の位置検出方法。
- 回転子の回転速度が回転方向転換可能な限界速度を超えているか否かを判定し、限界速度を超えているときにコモンノイズ以外のノイズ除去を行うことを特徴とする請求項2記載のロータリエンコーダによる回転子の位置検出方法。
- ロータリエンコーダが発信する請求項1記載のA,B,Z各信号から各信号に重畳するコモンノイズを除去するラインレシーバと、A,B両信号の生成規則に反して推移したものをノイズとみなすことでA,B両信号それぞれに重畳するコモンノイズ以外のノイズ除去を行うノイズ除去機構と、ノイズ除去を行った信号に基づいて回転子の位置を検出する位置検出機構とからなることを特徴とするロータリエンコーダによる回転子の位置検出装置。
- A,B両信号の立ち上がりおよび立ち下がりの関係から回転子の回転方向を検出する回転方向検出機構を有し、前記ノイズ除去機構が回転方向に応じた機構である請求項4記載のロータリエンコーダによる回転子の位置検出装置。
- 回転子の回転速度が回転方向転換可能な限界速度を超えているか否かを判定する回転速度判定機構を有し、限界速度を超えているときはノイズ除去を行った信号を出力し、限界速度以下のときはノイズ除去を行わない信号を出力する信号セレクタを有し、前記位置検出機構が信号セレクタの出力により検出する機構である請求項5記載のロータリエンコーダによる回転子の位置検出装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004002508A JP2005198428A (ja) | 2004-01-07 | 2004-01-07 | ロータリエンコーダによる回転子の位置検出方法および装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004002508A JP2005198428A (ja) | 2004-01-07 | 2004-01-07 | ロータリエンコーダによる回転子の位置検出方法および装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005198428A true JP2005198428A (ja) | 2005-07-21 |
Family
ID=34817685
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004002508A Pending JP2005198428A (ja) | 2004-01-07 | 2004-01-07 | ロータリエンコーダによる回転子の位置検出方法および装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2005198428A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019092975A1 (ja) * | 2017-11-07 | 2019-05-16 | 株式会社東海理化電機製作所 | 回転操作装置 |
WO2019092977A1 (ja) * | 2017-11-07 | 2019-05-16 | 株式会社東海理化電機製作所 | 回転操作装置 |
-
2004
- 2004-01-07 JP JP2004002508A patent/JP2005198428A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019092975A1 (ja) * | 2017-11-07 | 2019-05-16 | 株式会社東海理化電機製作所 | 回転操作装置 |
WO2019092977A1 (ja) * | 2017-11-07 | 2019-05-16 | 株式会社東海理化電機製作所 | 回転操作装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7253614B2 (en) | Proximity detector having a sequential flow state machine | |
JP2720642B2 (ja) | 多回転絶対値エンコーダ | |
JP2005198428A (ja) | ロータリエンコーダによる回転子の位置検出方法および装置 | |
JP2010043981A (ja) | 回転体の角度位置検出装置及び回転数検出装置 | |
JP6825260B2 (ja) | 速度検出装置および速度制御システム | |
JP6714929B2 (ja) | モータ回転速度検出装置 | |
US6999006B2 (en) | Rotation position detecting device | |
JP4289983B2 (ja) | 位相速度検出装置 | |
US20080117086A1 (en) | High speed quadrature counter | |
US10648836B2 (en) | Device for determining the movement of a rotary element, particularly for readings of water and/or gas meters | |
JP2010074637A (ja) | アップダウンカウンタ装置 | |
JPH08334526A (ja) | 速度検出装置 | |
JP3283188B2 (ja) | パルスカウント回路 | |
JPH061279B2 (ja) | デイジタル式速度検出装置 | |
CN107563253B (zh) | 基于互采样的信号抗干扰处理方法 | |
JP4519183B2 (ja) | Ab相信号発生器、rdコンバータ及び角度検出装置 | |
JP3067729B2 (ja) | エンコーダの信号処理方法及び装置 | |
JP3135633B2 (ja) | 速度検出器 | |
JP2893181B1 (ja) | デジタルデータ相関方法 | |
JPH0466288B2 (ja) | ||
JP2725463B2 (ja) | サーボモータの速度検出装置 | |
JPH0560571A (ja) | エンコーダの異常検出方法 | |
JP2006177733A (ja) | 回転速度検出器の故障検出装置 | |
JP2001201367A (ja) | ジッタ除去回路のパルスヒステレシス補償方法とその装置ならびにその操作手順を記録した媒体 | |
JPS6220413A (ja) | デイジタル回路における積分方式 |