(57)【要約】【課題】外部クロックを用いることなく、簡易な回路構成で確実なアップダウンカウントを実現する。【解決手段】アップダウンカウンタ装置１０は、ＵＰ／ＤＯＷＮデコーダ１２に入力された２相パルス信号（Ａ），（Ｂ）からＵＰ／ＤＯＷＮステート信号（Ｃ）を出力するとともに、２相パルス信号の各変化点に同期したデコーダパルス信号（Ｄ）を発生させる。デコーダパルス信号はＥＸＯＲゲート１４で２逓倍され、さらに２倍パルス信号（Ｅ）はＡＮＤゲート１８，２０にてＵＰ／ＤＯＷＮステート信号と論理和されてＵＰパルス信号（Ｆ）とＤＯＷＮパルス信号（Ｇ）となる。これらをＣＰＵ２２の内蔵ハードカウンタ２２ａ，２２ｂでそれぞれカウントしておき、一定周期ごとにソフトウェア処理部２２ｃで演算処理を行う。【選択図】図１
2010074637.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも２方向に変位可能な可動体の位置変化に応じて生成される２相パルス信号に基づいて位置変化の方向を判別し、その結果を正負のいずれかで表した方向判別信号を出力する方向判別部と、
前記２相パルス信号の各変化点に同期して基準パルス信号を発生する基準パルス発生部と、
前記方向判別信号が正方向を表す場合、前記基準パルス信号に基づいて正方向パルス信号を発生する正方向パルス発生部と、
前記方向判別信号が正方向とは論理が反転した負方向を表す場合、前記基準パルス信号に基づいて負方向パルス信号を発生する負方向パルス発生部と、
前記正方向パルス信号の発生回数を正方向カウント値としてカウントする正方向カウンタと、
前記負方向パルス信号の発生回数を負方向カウント値としてカウントする負方向カウンタと、
前記正方向カウント値と前記負方向カウント値との差分を前記可動体の位置変化量として算出する演算処理部と
を備えたアップダウンカウンタ装置。
【請求項２】
請求項１に記載のアップダウンカウンタ装置において、
前記演算処理部は、
所定の演算周期ごとに前記正方向カウンタ及び前記負方向カウンタから前記正方向カウント値及び前記負方向カウント値をそれぞれ取得し、今回の演算周期で取得した前記正方向カウント値と前回の演算周期で取得した前記正方向カウント値との差から、今回の演算周期で取得した前記負方向カウント値と前回の演算周期で取得した前記負方向カウント値との差を減算した結果を前記位置変化量として算出することを特徴とするアップダウンカウンタ装置。
【請求項３】
請求項１又は２に記載のアップダウンカウンタ装置において、
前記演算処理部は、
前記可動体の現在位置を表す現在位置カウント値に前記位置変化量を加算することで前記現在位置カウント値を更新する処理を行うことを特徴とするアップダウンカウンタ装置。
【請求項４】
請求項１から３のいずれかに記載のアップダウンカウンタ装置において、
不規則なタイミングで変位方向が切り替わり得る前記可動体の位置変化に応じて前記２相パルス信号を方向別の位相順序で出力するエンコーダと、
前記演算処理部としての機能を有したプロセッサとを備え、
前記プロセッサが前記可動体の位置変化量を算出する演算周期は、前記可動体の一方向への位置変化に応じて前記エンコーダにより前記２相パルス信号が最後に出力された後、前記可動体の変位方向が他方向へ切り替わることで位相順序が逆転した状態の前記２相パルス信号が前記エンコーダから最初に出力されるまでの最短時間に比較して長く設定されていることを特徴とするアップダウンカウンタ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、可動体の位置変化に応じて生成されるパルス信号を用いてカウント処理を行うアップダウンカウンタ装置に関するものである。
【背景技術】
【０００２】
この種のアップダウンカウンタ装置に関する先行技術として、回転軸等の位置変化に応じて発生するパルスをカウンタにより計数し、その回転角や位置を検出するディジタルカウンタ装置が知られている（例えば、特許文献１参照。）。この先行技術は、可動体の位置変化に応じて生成される直交２相パルス信号の位相順序に応じてカウントアップ又はカウントダウンのいずれであるかを判別し、その判別直後のクロックパルスの立ち上がりに同期して一定時間内に立ち上がるカウントパルスを発生させておき、この間にカウントアップ状態であればカウント値をアップカウントし、カウントダウン状態であればカウント値をダウンカウントするアップダウンカウンタを備えたものである。特にこの先行技術は、カウントアップ又はカウントダウンを行うタイミングをクロック回路によって調整し、グリッジによる誤カウントが生じ得る期間を回避した上でアップダウンカウンタを動作させている点に特徴がある。
【０００３】
またその他の先行技術として、パルスエンコーダの２相出力から可動体の位置変化の方向を判別（弁別）し、方向別のカウントパルスを出力する方向弁別回路が知られている（例えば、特許文献２参照。）。この先行技術は、２相パルス信号を２つのフリップフロップに振り分けて入力し、そのうち一方のフリップフロップを２段に構成してそれぞれから論理信号を出力することで、プロセッサに合計３ビットの方向弁別信号を認識させてカウントアップパルス又はカウントダウンパルスを発生させるものである。
【特許文献１】特許第３１９５８０１号公報
【特許文献２】特公平２−５２８０８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した先行技術（特許文献１，２）はいずれも、外部クロックを利用した同期式カウンタであるため、それだけ回路構成が複雑化するし、なによりカウントアップ又はカウントダウンのタイミングがクロック周期に制約されてしまうという問題がある。また前者の先行技術（特許文献１）は、カウントアップの場合もカウントダウンの場合も共通のカウントパルス（許可信号）を使用しているため、位置変化の方向別に独立したパルスを使用する場合に比べて信頼性に問題がある。
【０００５】
そこで本発明は、外部クロックを用いることなく、簡易な回路構成で位置変化の方向別に独立したカウントパルスを生成することにより、確実なアップダウンカウントを実現できる技術の提供を課題としたものである。
【課題を解決するための手段】
【０００６】
本発明のアップダウンカウンタ装置は、方向判別部及び基準パルス発生部を備える。このうち方向判別部は、少なくとも２方向に変位可能な可動体の位置変化に応じて生成される２相パルス信号に基づいて位置変化の方向を判別し、その結果を正負のいずれかで表した方向判別信号を出力するものである。また基準パルス発生部は、２相パルス信号の各変化点に同期して基準パルス信号を発生する。
【０００７】
また本発明のアップダウンカウンタ装置は、正方向パルス発生部及び負方向パルス発生部を備えている。このうち正方向パルス発生部は、方向判別信号が正方向を表す場合、基準パルス信号に基づいて正方向パルス信号を発生する。負方向パルス発生部は、方向判別信号が正方向とは論理が反転した負方向を表す場合、基準パルス信号に基づいて負方向パルス信号を発生するものである。
【０００８】
そして本発明のアップダウンカウンタ装置は、正方向カウンタ、負方向カウンタ及び演算処理部を備えている。正方向カウンタは、正方向パルス信号の発生回数を正方向カウント値としてカウントする。また負方向カウンタは、負方向パルス信号の発生回数を負方向カウント値としてカウントする。そして演算処理部は、正方向カウント値と負方向カウント値との差分を可動体の位置変化量として算出する。
【０００９】
本発明のアップダウンカウンタ装置によれば、基準パルス信号とは別に方向別の正方向パルス信号及び負方向パルス信号をそれぞれ独立に発生させているので、これらを正方向カウンタ及び負方向カウンタでそれぞれカウントすることにより、方向別の位置変化量をより正確に演算することができる。
【００１０】
また正方向パルス信号及び負方向パルス信号は、いずれも基準パルス信号に基づいて発生するものであり、基準パルス信号は、２相パルス信号の波形パターン（各変化点）に同期してリアルタイムに発生するものであるから、これらの波形が外部クロック信号に拘束されることはない。このように本発明では、特に外部クロックを用いなくても、常に正方向カウンタ及び負方向カウンタの各カウント値がリアルタイムに更新されるため、これら方向別のカウント値を用いて演算処理を行うことにより、可動体の位置変化の方向を反映した位置変化量を正確に算出することができる。
【００１１】
本発明のアップダウンカウンタ装置において、上記の演算処理部は以下の演算手法を採用する。すなわち演算処理部は、所定の演算周期ごとに正方向カウンタ及び負方向カウンタから正方向カウント値及び負方向カウント値をそれぞれ取得し、今回の演算周期で取得した正方向カウント値と前回の演算周期で取得した正方向カウント値との差から、今回の演算周期で取得した負方向カウント値と前回の演算周期で取得した負方向カウント値との差を減算した結果を位置変化量として算出する。
【００１２】
上記の演算手法を採用した場合、減算結果が正の値であれば、それは正方向への位置変化量であることを意味し、逆に減算結果が負の値であれば、それは負方向への位置変化量であることを意味するものとなる。したがって、得られた位置変化量には可動体の位置変化の方向が正確に反映されているので、演算処理部においてわざわざ方向判別信号を参照する必要がなく、それだけ演算処理の負担が軽減される。
【００１３】
また演算処理部は、可動体の現在位置を表す現在位置カウント値に位置変化量を加算することで現在位置カウント値を更新する処理を行ってもよい。
【００１４】
上記のように位置変化量には方向が反映されているので、それまでの現在位置カウント値に位置変化量を単純加算するだけで最新の現在位置カウント値を得ることができる。したがって、ここでも演算処理部においてわざわざ方向判別信号を参照し、正方向であれば加算し、逆に負方向であれば減算するといった条件判断を行う必要がないことから、それだけ処理速度を向上することができる。
【００１５】
本発明のアップダウンカウンタ装置は、不規則なタイミングで変位方向が切り替わり得る可動体の位置変化に応じて２相パルス信号を方向別の位相順序で出力するエンコーダと、演算処理部としての機能を有したプロセッサとを備えていてもよい。そしてこの場合、プロセッサが可動体の位置変化量を算出する演算周期は、可動体の一方向への位置変化に応じてエンコーダにより２相パルス信号が最後に出力された後、可動体の変位方向が他方向へ切り替わることで位相順序が逆転した状態の２相パルス信号がエンコーダから最初に出力されるまでの最短時間に比較して長く設定されているものとする。
【００１６】
この場合、プロセッサが前回の演算処理を行ってから次の演算処理を行うまでの間に、２相パルス信号の位相順序が逆転していることがあるが、本発明では上記のように方向別のパルス信号をリアルタイムに発生させてそれぞれをカウントしているので、たとえ可動体の位置変化の方向が切り替わったとしても、これを正確に反映して位置変化量を算出することができる。これにより、エンコーダの性能とプロセッサによる演算処理の頻度とのバランスを適正化し、プロセッサのリソースを効率よく利用することができる。
【発明の効果】
【００１７】
本発明のアップダウンカウンタ装置は、可動体の位置変化の方向を正確に反映した位置変化量を算出することができる。また、各種パルス信号の波形はもとの２相パルス信号の波形に依存するため、外部クロックに依存することなく簡易な回路構成を採用することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施形態について図面を参照しながら説明する。
【００１９】
〔アップダウンカウンタ装置の構成〕
図１は、一実施形態のアップダウンカウンタ装置１０の構成を概略的に示す図である。このアップダウンカウンタ装置１０は、例えば図示しないパルスエンコーダ（ロータリ式、リニア式等）に接続されている。パルスエンコーダは、例えば図示しないモータの回転軸、プリンタの印字ヘッド、回転式又は直動式の操作部材等の可動体に取り付けられており、これら可動体の位置変化（回転式の場合は回転角変化）に応じて位相差が９０°の２相（Ａ相，Ｂ相）パルス信号を出力する。なおパルスエンコーダは、必要に応じて原点位置を表すＺ相パルス信号を出力するものであってもよい。
【００２０】
〔方向判別部〕
アップダウンカウンタ装置１０はＵＰ／ＤＯＷＮデコーダ１２を備えており、このＵＰ／ＤＯＷＮデコーダ１２にはパルスエンコーダから２相パルス信号が入力される。ＵＰ／ＤＯＷＮデコーダ１２は、入力されたＡ相パルス信号（図中（Ａ））とＢ相パルス信号（図中（Ｂ））の位相順序から可動体の位置変化の方向を判別し、その結果を表す方向判別信号としてＵＰ／ＤＯＷＮステート信号（図中（Ｃ））を出力する。すなわちＵＰ／ＤＯＷＮステート信号は、例えばＢ相パルス信号の立ち下がり時にＡ相パルス信号がローレベルであればハイレベルとなり、逆にＡ相パルス信号がハイレベルであればローレベルとなる。
【００２１】
このようなＵＰ／ＤＯＷＮステート信号は、ハイレベルのときに可動体の位置変化が正方向であることを表し、逆にローレベルのときは負方向であることを表すものとなる。なお、ここでいう位置変化の方向は、例えば軸の回転や部材の往復直動のように対向する２方向への位置変化が生じる場合、そのいずれか一方を「正方向」とし、他方の「負方向」とすることができる。
【００２２】
またＵＰ／ＤＯＷＮデコーダ１２は、入力されたＡ相パルス信号及びＢ相パルス信号の各変化点（立ち上がり時と立ち下がり時）に同期してレベルが変化するデコーダパルス信号を出力する（図中（Ｄ））。
【００２３】
〔基準パルス発生部〕
アップダウンカウンタ装置１０は、ＵＰ／ＤＯＷＮデコーダ１２の後段位置にＥＸＯＲゲート１４を備えており、このＥＸＯＲゲート１４にはＵＰ／ＤＯＷＮデコーダ１２からデコーダパルス信号が入力されるものとなっている。このときＥＸＯＲゲート１４には、その一方の入力端子に対してデコーダパルス信号がそのまま入力され、他方の入力端子に対しては遅延回路１６を介してデコーダパルス信号が入力されている。遅延回路１６はデコーダパルス信号をわずかな時間（２相パルス信号の最短周期より短い時間）だけ遅延させて出力する。これによりＥＸＯＲゲート１４には、遅延時間分の位相差をもった２相のデコーダパルス信号が入力される。その結果、ＥＸＯＲゲート１４からは、デコーダパルス信号の周波数を２逓倍した２倍パルス信号（図中（Ｅ））が出力される。
【００２４】
またアップダウンカウンタ装置１０は、ＥＸＯＲゲート１４の後段位置に２つのＡＮＤゲート１８，２０を備えており、これらＡＮＤゲート１８，２０には、それぞれ上記のＵＰ／ＤＯＷＮステート信号及び２倍パルス信号が分配して入力されている。このうち一方のＡＮＤゲート１８には、各信号がそのまま入力されているが、他方のＡＮＤゲート２０には、ＵＰ／ＤＯＷＮステート信号が論理反転した状態で入力されている。
【００２５】
〔正方向パルス発生部，負方向パルス発生部〕
このような回路構成により、一方のＡＮＤゲート１８は、ＵＰ／ＤＯＷＮステート信号がハイレベル（正方向を表す）の場合、２倍パルス信号に同期してＵＰパルス信号（図中（Ｆ））を出力することができる。また他方のＡＮＤゲート２０は、ＵＰ／ＤＯＷＮステート信号がローレベル（負方向を表す）の場合、２倍パルス信号に同期してＤＯＷＮパルス信号（図中（Ｇ））を出力することができる。
【００２６】
〔正方向カウンタ，負方向カウンタ〕
アップダウンカウンタ装置１０は、演算処理機能を有したプロセッサとしてＣＰＵ２２を備えている。このＣＰＵ２２は、図示しないＣＰＵコアをはじめとして、各種レジスタやメインメモリ、ＥＥＰＲＯＭ等のリソースが集積された半導体ＬＳＩである。またＣＰＵ２２は、各入力ポートに対応した内蔵ハードカウンタ２２ａ，２２ｂを有している。上記のＡＮＤゲート１８，２０からそれぞれ出力されたＵＰパルス信号及びＤＯＷＮパルス信号は、それぞれ図示しない入力ポートを通じてＣＰＵ２２に入力され、その内部で内蔵ハードカウンタ２２ａ，２２ｂに取り込まれる。
【００２７】
これら内蔵ハードカウンタ２２ａ，２２ｂはＮビットのバイナリカウンタ（例えば０ｈ〜ＦＦＦＦｈ）で構成されており、各内蔵ハードカウンタ２２ａ，２２ｂは、ＣＰＵ２２に対するＵＰパルス信号又はＤＯＷＮパルス信号の各入力回数（発生回数）に応じて内部カウント値をインクリメントする。したがって一方の内蔵ハードカウンタ２２ａは、ＵＰパルス信号の発生回数を正方向カウント値としてカウントする正方向カウンタ（ＵＰカウンタ）として機能し、他方の内蔵ハードカウンタ２２ｂは、ＤＯＷＮパルス信号の発生回数を負方向カウント値としてカウントする負方向カウンタ（ＤＯＷＮカウンタ）として機能する。
【００２８】
〔演算処理部〕
またＣＰＵ２２は、上記のリソースで構成されるソフトウェア処理部２２ｃを有している。ソフトウェア処理部２２ｃは、例えばＣＰＵ２２に内蔵のＲＯＭに記憶されたプログラム（例えばメイン処理及び各種割込処理）を実行し、その過程で内蔵ハードカウンタ２２ａ，２２ｂから各カウント値（図中（Ｈ），（Ｊ））をロードする。そしてソフトウェア処理部２２ｃは、ロードした各カウント値を用いて演算処理を行い、可動体の位置変化量やその現在位置情報を算出する。なおソフトウェア処理部２２ｃは、必要に応じて各内蔵ハードカウンタ２２ａ，２２ｂのカウント値をリセットすることもできる。
【００２９】
〔動作例〕
図２は、可動体の位置変化に伴う各種信号の出力波形の変化例とＣＰＵ２２内部でのカウント値の変化例を示したタイミングチャートである。
【００３０】
〔正転時の変化例〕
例えば、回転変位する可動体の位置変化の方向が初期において正方向（正転）であった場合、各信号波形は以下の変化となる。
【００３１】
〔２相パルス信号〕
図２中（Ａ），（Ｂ）：可動体の位置変化に応じて先にＡ相パルス信号が出力され、これに対して９０°の位相差をもってＢ相パルス信号が出力される。
【００３２】
〔ＵＰ／ＤＯＷＮステート信号〕
図２中（Ｃ）：また可動体の正転中（正方向への移動中）、上記のようにＵＰ／ＤＯＷＮステート信号はハイレベルとなっている。
【００３３】
〔デコーダパルス信号〕
図２中（Ｄ）：可動体の正転中、デコーダパルス信号はＡ相パルス信号の立ち上がりに同期して立ち上がり、次にＢ相パルス信号の立ち上がりが生じると、これに同期してローレベルに変化する。そして、この後にＡ相パルス信号が立ち下がりを生じると、これに同期してデコーダパルス信号は再びハイレベルに変化し、次にＢ相パルス信号が立ち下がると、これに同期してデコーダパルス信号はローレベルに変化する。
【００３４】
〔２倍パルス信号〕
図２中（Ｅ）：２倍パルス信号は、特に可動体の回転方向に依存することなく、単にデコーダパルス信号の２逓倍波形として出力される。このような２倍パルス信号は、次のＵＰパルス信号及びＤＯＷＮパルス信号をそれぞれ生成する際の基となる基準パルス信号として利用することができる。
【００３５】
〔ＵＰパルス信号〕
図２中（Ｆ）：可動体の正転中はＵＰ／ＤＯＷＮステート信号がハイレベルとなっているので、一方のＡＮＤゲート１８からは２倍パルス信号に基づいてＵＰパルス信号が出力される。
【００３６】
〔ＤＯＷＮパルス信号〕
図２中（Ｇ）：これに対し、可動体の正転中は他方のＡＮＤゲート２０で論理積が成立しないため、ＤＯＷＮパルス信号が発生することはない。
【００３７】
〔ＵＰカウント値〕
図２中（Ｈ）：内蔵ハードカウンタ２２ａのＵＰカウント値は、例えばその初期値を「０」とすると、ＵＰパルス信号が発生するごとにインクリメント（＋１）されていく。
【００３８】
〔ＤＯＷＮカウント値〕
図２中（Ｉ）：これに対し、もう１つの内蔵ハードカウンタ２２ｂのカウント値は、ＤＯＷＮパルス信号が入力されないことら、可動体の正転中はその初期値「０」のまま変化しないことがわかる。
【００３９】
〔反転時の変化例〕
これに対し、回転変位する可動体の位置変化の方向が正方向（正転）から負方向（逆転）に切り替わった場合、各信号波形は以下の変化となる。
【００４０】
〔２相パルス信号〕
図２中（Ａ），（Ｂ）：図中に正転から逆転への切り替わり時が太い破線で示されているように、可動体が逆転すると、その位置変化に応じて今度はＢ相パルス信号が先に出力され、これに対して９０°の位相差をもってＡ相パルス信号が出力されるため、正転時とは位相順序が入れ替わった状態となる。
【００４１】
〔ＵＰ／ＤＯＷＮステート信号〕
図２中（Ｃ）：可動体の位置変化が逆転に切り替わると（正方向→負方向）、Ａ相パルス信号が立ち下がる前にＢ相パルス信号が立ち上がる。このとき図中に矢印付の破線で示すように、ＵＰ／ＤＯＷＮステート信号はハイレベルからローレベルに切り替わる。
【００４２】
〔デコーダパルス信号〕
図２中（Ｄ）：可動体の逆転中、デコーダパルス信号はＢ相パルス信号の立ち上がりに同期して立ち上がり、次にＡ相パルス信号の立ち上がりが生じると、これに同期してローレベルに変化する。そして、この後にＢ相パルス信号が立ち下がりを生じると、これに同期してデコーダパルス信号は再びハイレベルに変化し、次にＡ相パルス信号が立ち下がると、これに同期してデコーダパルス信号はローレベルに変化する波形パターンを示す。
【００４３】
〔２倍パルス信号〕
図２中（Ｅ）：可動体が逆転に切り替わっても、２倍パルス信号はデコーダパルス信号の２逓倍波形として出力される。
【００４４】
〔ＵＰパルス信号〕
図２中（Ｆ）：可動体の逆転中はＵＰ／ＤＯＷＮステート信号がローレベルとなっているので、ＵＰパルス信号は発生しなくなる。
【００４５】
〔ＤＯＷＮパルス信号〕
図２中（Ｇ）：これに対して可動体の逆転中は、他方のＡＮＤゲート２０からＤＯＷＮパルス信号が出力される。
【００４６】
〔ＵＰカウント値〕
図２中（Ｈ）：可動体の逆転中、内蔵ハードカウンタ２２ａのＵＰカウント値は、例えば正転中に「１０」までインクリメントされていたとすると、そのまま変化しなくなる。
【００４７】
〔ＤＯＷＮカウント値〕
図２中（Ｉ）：これに対し、もう１つの内蔵ハードカウンタ２２ｂのカウント値は、その初期値「０」からＤＯＷＮパルス信号が入力されるごとにインクリメント（＋１）されていくことがわかる。
【００４８】
〔ソフトカウント値〕
図２中（Ｊ）：ＣＰＵ２２は、ソフトウェア処理部２２ｃにおいて演算処理を実行する。この演算処理では、ソフトウェア処理部２２ｃはその時点でのＵＰカウント値及びＤＯＷＮカウント値をそれぞれ内蔵ハードカウンタ２２ａ，２２ｂから取得（ロード）して、可動体の位置変化量を算出する。そしてソフトウェア処理部２２ｃは、算出した位置変化量を前回のソフトカウント値に加算し、今回のソフトカウント値を更新する。
【００４９】
〔タイマ割込処理〕
図３は、ソフトウェア処理部２２ｃにおいて実行される演算処理の手順例を示すフローチャートである。ソフトウェア処理部２２ｃは、メインプログラムの実行中に例えば１ｍｓ周期でタイマ割り込みを発生させ、図３の演算処理を実行する。以下、演算処理の各手順について説明する。
【００５０】
ステップＳ１０：ソフトウェア処理部２２ｃは、一方の内蔵ハードカウンタ２２ａからＵＰカウント値をロードする。
ステップＳ１２：またソフトウェア処理部２２ｃは、他方の内蔵ハードカウンタ２２ｂからＤＯＷＮカウント値をロードする。
【００５１】
ステップＳ１４：ソフトウェア処理部２２ｃは、以下の演算を行う。すなわち、今回ロードしたＵＰカウント値（Ｃｐ１）とレジスタに保存されている前回のＵＰカウント値（Ｃｐ０）との差（Ｃｐ１−Ｃｐ０）から、今回ロードしたＤＯＷＮカウント値（Ｃｎ１）とレジスタに保存されている前回のＤＯＷＮカウント値（Ｃｎ０）との差（Ｃｎ１−Ｃｎ０）を減算し、その結果を位置変化量とする。このとき位置変化量（ΔＰｓ）は、例えば以下の式で表される。
ΔＰｓ＝｛＋（Ｃｐ１−Ｃｐ０）−（Ｃｎ１−Ｃｎ０）｝
【００５２】
ステップＳ１４：そしてソフトウェア処理部２２ｃは、算出した位置変化量（ΔＰｓ）を前回のソフトカウント値（Ｐｓ０）に加算して今回のソフトカウント値（Ｐｓ１）を更新する。このとき今回のソフトカウント値（Ｐｓ１）は、例えば以下の式で表される。
Ｐｓ１＝Ｐｓ０＋ΔＰｓ
【００５３】
〔演算例〕
ここで、以下に演算例を挙げて説明する。
先ず、全てのカウント値の初期値を「０」として、可動体が正転を開始した場合を想定する（図２中（Ｈ），（Ｉ），（Ｊ））。
【００５４】
〔図２中時刻ｔ０〕
正転開始直後（Ａ相パルス信号の発生前）のタイミングで割り込みが発生したとすると、未だＵＰカウント値及びＤＯＷＮカウント値は「０」のままであるため、今回のソフトカウント値は「０」となる（図２中（Ｊ）の初期値参照）。
【００５５】
〔図２中時刻ｔ０〜ｔ１〕
この後、可動体の位置変化に応じて２相パルス信号が生成されると、ＵＰカウント値が増加（０→１→２→３）していく。なお、ＤＯＷＮカウント値は初期値「０」のままである。２相パルス信号が生成される周期は可動体の回転速度に依存するが、パルスエンコーダの分解能は最短周期で数十μｓ程度である。したがって、ＣＰＵ２２のタイマ割込周期に比較すると２相パルス信号の発生周期の方が短いことから、次のタイマ割込が発生するまでの間に数回分のＵＰパルス信号が発生する。
【００５６】
〔図２中時刻ｔ１〕
そして次のタイマ割り込みが発生して演算処理が実行されると、今回のＵＰカウント値「３」、今回のＤＯＷＮカウント「０」がそれぞれロードされる。これらカウント値を用いて上記の演算処理を実行すると、今回の位置変化量として「＋３」が算出される（ステップＳ１４）。これにより、今回のソフトカウント値は「３」に更新される（ステップＳ１６）。なお、位置変化量の「＋３」は、今回の変化量が「正方向に３」であることを意味する。以下の説明で「正方向」は正転方向を意味し、「負方向」は逆転方向を意味するものとなる。
【００５７】
〔図２中時刻ｔ３〕
正転中に行われる最後の演算処理のタイミングにおいて、今回のＵＰカウント値は「９」であり、また今回のＤＯＷＮカウント値は「０」である（図２中（Ｈ），（Ｊ））。そして前回の演算処理におけるＵＰカウント値は「６」であり、また前回のＤＯＷＮカウント値が「０」であるから、今回の位置変化量は「＋３」として算出される。これを前回のソフトカウント値「６」に加算すると、更新された今回のソフトカウント値は「９」となる（図２中（Ｊ））。
【００５８】
〔図２中時刻ｔ３〜ｔ４〕
次に、可動体が正転から逆転に切り替わった場合を想定する。正転中の最後の演算処理を実行後、ＵＰパルス信号が発生しなくなる代わりにＤＯＷＮパルス信号が発生する（図２中（Ｆ），（Ｇ））。その結果、ＵＰカウント値は最後にインクリメントされた値である「１０」のまま変化しなくなり、今度はＤＯＷＮカウント値が初期値「０」から１ずつインクリメントされていく（図２中（Ｈ），（Ｉ））。またこの間に、Ａ相パルス信号とＢ相パルス信号との位相順序の入れ替わりが発生しており、その最短時間（図２中参照符号τ）は割込周期よりも短い。
【００５９】
〔図２中時刻ｔ４〕
逆転開始後に行われる最初の演算処理のタイミングにおいて、今回のＵＰカウント値は「１０」であるが、今回のＤＯＷＮカウント値は「１」に増加している（図２中（Ｈ），（Ｊ））。このとき、前回（正転中の最後）の演算処理におけるＵＰカウント値は「９」であり、そして前回のＤＯＷＮカウント値は「０」であるから、今回の位置変化量は「±０（＝＋１−１）」として算出される。これを前回のソフトカウント値「９」に加算すると、今回のソフトカウント値は変わらず「９」として更新される（図２中（Ｊ））。なお、位置変化量の「±０」は、今回の変化量が「正方向にも負方向にも０（変化なし）」であることを意味している。
【００６０】
〔図２中時刻ｔ５〕
これ以降は同様にして、逆転中の次の演算処理タイミングにおいて今回のＵＰカウント値は「１０」のままであり、また今回のＤＯＷＮカウント値は「４」である（図２中（Ｈ），（Ｊ））。そして前回の演算処理におけるＵＰカウント値は「１０」であり、また前回のＤＯＷＮカウント値が「１」であるから、今回の位置変化量は「−３」として算出される。これを前回のソフトカウント値「９」に加算すると、更新された今回のソフトカウント値は「６」となる（図２中（Ｊ））。このとき位置変化量の「−３」は、今回の変化量が「負方向に３」であることを意味している。
【００６１】
〔図２中時刻ｔ６〕
また同様に、その次の演算処理タイミングにおいても今回のＵＰカウント値は「１０」であるが、逆転が進むにつれて今回のＤＯＷＮカウント値は「７」に増加している（図２中（Ｈ），（Ｊ））。そして前回の演算処理におけるＵＰカウント値は「１０」であり、また前回のＤＯＷＮカウント値が「４」であるから、今回の位置変化量は「−３」として算出される。これを前回のソフトカウント値「６」に加算すると、更新された今回のソフトカウント値は「３」となる（図２中（Ｊ））。
【００６２】
これにより、ＣＰＵ２２のソフトウェア処理部２２ｃは、このように１ｍｓ周期で更新したソフトカウント値を可動体の現在位置を表す情報として利用することができる。このような現在位置を表す情報は、例えばメインプログラム上で回転軸の回転速度や角加速度を求めたり、ユーザによる操作部材の操作量（操作角度）を検出したりする用途に当てることができる。
【００６３】
〔他の演算手法〕
その他の演算手法として、以下の例を用いてもよい。
ソフトウェア処理部２２ｃは、演算処理のタイミングにおいて今回のＵＰカウント値と今回のＤＯＷＮカウント値とをそれぞれロードし、これらの差分を位置変化量として算出してもよい。ただしこの場合、算出された位置変化量は初期値からの変化量として扱うことができる。
【００６４】
具体的には、初期の演算処理タイミング（図２中時刻ｔ０）において、ＵＰカウント値が「０」であり、またＤＯＷＮカウント値も「０」であるから、これらの差分「０」が初期値からの変化量となる。したがって、今回のソフトカウント値は「０」として算出することができる。
【００６５】
同様に、次の演算処理タイミング（図２中時刻ｔ１）では、ＵＰカウント値が「３」に増えているが、ＤＯＷＮカウント値は「０」のままであるから、これらの差分「３」が初期値からの変化量となる。したがって、今回のソフトカウント値は「３」として算出することができる。
【００６６】
また正転中の最後の演算処理タイミング（図２中時刻ｔ３）では、ＵＰカウント値が「９」であるが、ＤＯＷＮカウント値は「０」のままであるから、これらの差分「９」が初期値からの変化量となる。したがって、今回のソフトカウント値は「９」として算出することができる。
【００６７】
次に、可動体が正転から逆転に変化した後の最初の演算処理タイミング（図２中時刻ｔ４）では、ＵＰカウント値が「１０」であり、ＤＯＷＮカウント値は「１」に増えているから、これらの差分「９」が初期値からの変化量となる。したがって、今回のソフトカウント値は「９」として算出することができる。これにより、上記の演算手法と同様に正確なソフトカウント値を算出することができる。
【００６８】
以上が本実施形態のアップダウンカウンタ装置１０による演算例であるが、以下に比較例となるアップダウンカウンタ装置を挙げ、その演算手法との対比をもって本実施形態の優位性を検証するものとする。
【００６９】
〔比較例〕
図４は、比較例となるアップダウンカウンタ装置１００の構成を概略的に示した図である。比較例のアップダウンカウンタ装置１００は、一実施形態で挙げたＵＰ／ＤＯＷＮデコーダ１２及びＣＰＵ２２だけを用いたシンプルな構成である。これらハードウェアは、いずれも一実施形態と同様であるため、ここでは重複した説明を省略する。このような構成であっても、例えば以下のようにアップダウンカウンタとしての基本的な機能を実現することができる。
【００７０】
先ずＵＰ／ＤＯＷＮデコーダ１２には、図示しないパルスエンコーダから２相パルス信号（図中（Ａ），（Ｂ））がそれぞれ入力される。そしてＵＰ／ＤＯＷＮデコーダ１２は、これら２相パルス信号に基づいて可動体の回転方向を判別し、その判別結果信号としてＵＰ／ＤＯＷＮステート信号（図中（Ｃ））を出力する。またＵＰ／ＤＯＷＮデコーダ１２は、Ａ相パルス信号及びＢ相パルス信号の各変化点に同期してデコーダパルス信号（図中（Ｄ））を発生させる。
【００７１】
比較例のハード構成では、ＵＰ／ＤＯＷＮデコーダ１２から出力されるＵＰ／ＤＯＷＮステート信号はＣＰＵ２２のソフトウェア処理部２２ｃに入力されている。またデコーダパルス信号は、特に論理ゲートを通ることなく、そのまま内蔵ハードカウンタ２２ａに入力される。
【００７２】
〔動作例〕
図５は、比較例のアップダウンカウンタ装置１００による各種信号の出力波形の変化例とＣＰＵ２２内部でのカウント値の変化例を示したタイミングチャートである。
【００７３】
〔正転時の変化例〕
比較例において、回転変位する可動体の位置変化の方向が初期において正方向（正転）であった場合、各信号波形は以下の変化となる。
【００７４】
〔２相パルス信号〕
図５中（Ａ），（Ｂ）：可動体の位置変化に応じて先にＡ相パルス信号が出力され、これに対して９０°の位相差をもってＢ相パルス信号が出力される点は上述した一実施形態と同様である。
【００７５】
〔ＵＰ／ＤＯＷＮステート信号〕
図５中（Ｃ）：ここでも同様に、可動体の正転中（正方向への移動中）、ＵＰ／ＤＯＷＮステート信号はハイレベルとなっている。
【００７６】
〔デコーダパルス信号〕
図５中（Ｄ）：デコーダパル信号の波形も一実施形態と同様である。すなわち可動体の正転中、デコーダパルス信号はＡ相パルス信号の立ち上がりに同期して立ち上がり、次にＢ相パルス信号の立ち上がりが生じると、これに同期してローレベルに変化する。そして、この後にＡ相パルス信号が立ち下がりを生じると、これに同期してデコーダパルス信号は再びハイレベルに変化し、次にＢ相パルス信号が立ち下がると、これに同期してデコーダパルス信号はローレベルに変化する。
【００７７】
〔ハードカウント値〕
図５中（Ｅ）：比較例では、デコーダパルス信号の各変化点（立ち上がりエッジ及び立ち下がりエッジ）に同期してハードカウント値がカウントされていく。すなわち内蔵ハードカウンタ２２ａは、例えば初期カウント値を「０」とすると、デコーダパルス信号のレベルが変化（ローレベル→ハイレベル／ハイレベル→ローレベル）するごとにハードカウント値をインクリメント（＋１）する。
【００７８】
〔反転時の変化例〕
比較例において、回転変位する可動体の位置変化の方向が正方向（正転）から負方向（逆転）に切り替わった場合、各信号波形は以下の変化となる。
【００７９】
〔２相パルス信号〕
図５中（Ａ），（Ｂ）：比較例においても一実施形態と同様に、可動体が逆転すると、その位置変化に応じて今度はＢ相パルス信号が先に出力され、これに対して９０°の位相差をもってＡ相パルス信号が出力されるため、正転時とは位相順序が入れ替わった状態となる。
【００８０】
〔ＵＰ／ＤＯＷＮステート信号〕
図５中（Ｃ）：ここでも同様に、可動体の位置変化が逆転に切り替わり（正方向→負方向）、Ａ相パルス信号が立ち下がる前にＢ相パルス信号が立ち上がることで、ＵＰ／ＤＯＷＮステート信号はハイレベルからローレベルに切り替わる。
【００８１】
〔デコーダパルス信号〕
図５中（Ｄ）：また、デコーダパルス信号についても一実施形態と同様の波形を示す（説明は省略）。
【００８２】
〔ハードカウント値〕
図２中（Ｅ）：比較例では、可動体が正転から逆転に切り替わったとしても、引き続きデコーダパルス信号の各変化点に同期してハードカウント値が単純にインクリメント（＋１）されていく。
【００８３】
〔正転中のソフトカウント値〕
比較例において、ソフトウェア処理部２２ｃの演算周期（タイマ割込周期）内にハードカウント値が変化していたとしても、その可動体の位置変化の方向が一定であれば、今回のハードカウント値と前回のハードカウント値との差を位置変化量とし、これを前回のソフトカウント値に加算することで、今回のソフトカウント値を正しく更新することができる。
【００８４】
〔実際のソフトカウント値〕
図５中（Ｇ）：すなわちソフトウェア処理部２２ｃは、演算処理のタイミングにおいてＵＰ／ＤＯＷＮステート信号がハイレベルであることを確認すると、今回のハードカウント値と前回のハードカウント値との差を演算し、その結果を前回のソフトカウント値に加算する。これにより、実際のソフトカウント値は以下の演算例で示されるものとなる。
【００８５】
〔図５中時刻ｔ０〕
正転開始直後（Ａ相パルス信号の発生前）のタイミングで割り込みが発生したとすると、未だハードカウント値は「０」のままであるため、今回のソフトカウント値は「０」となる（図５中（Ｇ）の初期値参照）。
【００８６】
〔図５中時刻ｔ０〜ｔ１〕
この後、可動体の位置変化に応じて２相パルス信号が生成されると、デコーダパルス信号の変化点（ローレベル→ハイレベル→ローレベル→ハイレベル）ごとにハードカウント値が増加（０→１→２→３）していく。
【００８７】
〔図５中時刻ｔ１〕
そして次のタイマ割り込みが発生して演算処理が実行されると、今回のハードカウント値として「３」がソフトウェア処理部２２ｃにロードされる。一方、ソフトウェア処理部２２ｃには前回のハードカウント値として「０」が保存されているので、これらの差「３（＝３−０）」を前回のソフトカウント値「０」に加算すると、今回のソフトカウント値は「３」となる。
【００８８】
〔図５中時刻ｔ３〕
正転中に行われる最後の演算処理のタイミングにおいて、今回のハードカウント値は「９」である（図５中（Ｅ））。そして前回の演算処理（図５中時刻ｔ２）におけるハードカウント値は「６」であるから、これらの差「３（＝９−６）」を前回のソフトカウント値「６」に加算すると、実際に求められる今回のソフトカウント値は「９」となる（図５中（Ｇ））。
【００８９】
〔図２中時刻ｔ３〜ｔ４〕
次に、可動体が正転から逆転に切り替わった場合を想定する。正転中の最後の演算処理を実行後、デコーダパルス信号の変化が２回発生している（図５中（Ｄ））。その結果、ハードカウント値は２回インクリメントされて「１１」となっている（図５中（Ｅ））。
【００９０】
〔図５中時刻ｔ４〕
したがって、逆転開始後に行われる最初の演算処理のタイミングにおいて、今回のＵＰカウント値は「１１」である（図５中（Ｅ））。このとき、前回（正転中の最後）の演算処理におけるハードカウント値は「９」であり、これらの差として「２（＝１１−９）」が求められる。ただし、今回は可動体の逆転によってＵＰ／ＤＯＷＮステート信号がローレベルに切り替わっているので、ハードカウント値の差「２」を前回のソフトカウント値「９」から減算した結果が実際に得られる今回のソフトカウント値「７（＝９−２）」となってしまう（図５中（Ｇ））。
【００９１】
〔図５中時刻ｔ５〕
これ以降も同様にして、逆転中の次の演算処理タイミングにおいて今回のハードカウント値が「１４」であり（図５中（Ｅ））、前回の演算処理におけるハードカウント値は「１１」であるから、これらの差「３」を前回のソフトカウント値「７」から減算すると、実際に得られる今回のソフトカウント値は「４」になってしまう（図５中（Ｇ））。
【００９２】
〔図５中時刻ｔ６〕
また同様に、その次の演算処理タイミングにおいて、逆転が進むにつれて今回のハードカウント値が「１７」に増加している（図５中（Ｅ））。そして前回の演算処理におけるハードカウント値が「１４」であったから、これらの差「３」を前回のソフトカウント値「４」から減算すると、実際に得られる今回のソフトカウント値は「１」になってしまう（図５中（Ｇ））。
【００９３】
以上の結果を正しいソフトカウント値（図５中（Ｆ））と比較すると、そこには常にカウント誤差「２」が存在しており、これは演算処理において誤カウントが発生したことを意味している。このようなカウント誤差は、演算周期内にデコーダパルス信号の変化が多く発生するほど顕著となり、その後のＣＰＵ２２によるプログラム処理に望ましくないインパクト（例えば、ユーザの操作に対する応答遅れ等）を与える結果となる。
【００９４】
これに対し本実施形態では、位置変化の方向別にＵＰパルス信号とＤＯＷＮパルス信号とを独立に発生させているので、演算周期内に位置変化の方向が切り替わった場合であっても、その間のＵＰカウント値とＤＯＷＮカウント値の差分から正しい位置変化量を求めることができる。これにより、常に正確なソフトカウント値を得ることができるので、その後のＣＰＵ２２によるプログラム処理の円滑な進行に大きく寄与する。
【００９５】
〔その他の実施形態〕
図６は、他の実施形態のアップダウンカウンタ装置２００の構成を概略的に示す図である。上述した一実施形態では、可動体の位置変化が１次元で行われることを想定しているが、位置変化が多次元で行われる場合、図６に示されるアップダウンカウンタ装置２００の構成により対応が可能である。
【００９６】
すなわち、多次元に対応したアップダウンカウンタ装置２００は、複数の波形生成部５０を備えており、個々の波形生成部５０は、上述した一実施形態と同様の回路構成（ＣＰＵ２２を除く）を有している。ＣＰＵ２２には、多数ある入力ポートに各波形生成部５０からＵＰパルス信号及びＤＯＷＮパルス信号が入力されており、各波形生成部５０に対応して内蔵ハードカウンタ２２ａ，２２ｂの組が割り当てられている。
【００９７】
このようなアップダウンカウンタ装置２００によれば、ソフトウェア処理部２２ｃにおいて波形生成部５０ごとにソフトカウント値を演算し、これらを用いて２次元座標上での可動体の位置を検出したり、あるいは３次元空間内での可動体の位置を検出したりすることができる。
【００９８】
本発明は上述した実施形態に制約されることはない。実施形態で挙げた各種のパルス波形は、実際の可動体（例えばユーザにより操作される部材）の変位速度によってパルス幅やその間隔は不規則となるため、その都度、カウント用の信号波形の周期も不規則に変化する。
【００９９】
また一実施形態では、１ｍｓ周期でソフトカウント値の演算処理を行っているが、演算処理を行うタイミングは適宜に変更可能である。ただし、一般に演算処理の周期（割込周期）を長くすると、その後のプログラム処理における繊細さが低下する傾向にあり、逆に周期を短くすると、ソフトカウント値の演算処理だけにリソースが割かれてしまい、その他のプログラム処理が滞る傾向にある。このため、実用的な周期を設定して演算処理を行うと、使用するパルスエンコーダの性能との関係から、ほとんどの場合は１周期以内に２相パルスエッジが複数回立ち上がる状況が生じることになる。したがって、一実施形態のように２相パルス信号からＵＰ／ＤＯＷＮステート信号を生成するだけでなく、方向別のＵＰパルス信号とＤＯＷＮパルス信号を発生させ、これらを独立にカウントしてソフトカウント値を求める演算手法であれば、外部クロックを用いることなく正確な演算が可能となるため、極めて実用性の高いアップダウンカウンタ装置が得られる。
【０１００】
また本発明のアップダウンカウンタ装置は、回転軸やプリンタ印字ヘッド、回転式のつまみ、スイング式のレバー等の位置検出用だけでなく、ジョイスティックやトラックボール等の操作部材の位置を検出する用途にも好適であり、その産業上の利用価値は極めて高い。
【図面の簡単な説明】
【０１０１】
【図１】一実施形態のアップダウンカウンタ装置の構成を概略的に示す図である。
【図２】各種信号の出力波形の変化例とカウント値の変化例を示したタイミングチャートである。
【図３】演算処理の手順例を示すフローチャートである。
【図４】比較例となるアップダウンカウンタ装置の構成を概略的に示した図である。
【図５】比較例のアップダウンカウンタ装置による各種信号の出力波形の変化例とカウント値の変化例を示したタイミングチャートである。
【図６】他の実施形態のアップダウンカウンタ装置の構成を概略的に示す図である。
【符号の説明】
【０１０２】
１０    アップダウンカウンタ装置
１２    ＵＰ／ＤＯＷＮデコーダ
１４    ＥＸＯＲゲート
１６    遅延回路
１８，２０  ＡＮＤゲート
２２    ＣＰＵ
２２ａ  内蔵ハードカウンタ
２２ｂ  内蔵ハードカウンタ
２２ｃ  ソフトウェア処理部
【図１】
2010074637.tif 000003
【図２】
2010074637.tif 000004
【図３】
2010074637.tif 000005
【図４】
2010074637.tif 000006
【図５】
2010074637.tif 000007
【図６】
2010074637.tif 000008