(57)【要約】【課題】小規模な演算回路で運動体の角度または位置を高精度に検出することができる位置検出回路を提供する。【解決手段】位置検出装置は、正弦波信号を用いて運動体の位置を検出する位置検出装置であって、仮の角度および該仮の角度の三角関数の値を記憶するメモリと、運動体の現実の座標のｘ１またはｙ１の一方と、三角関数の値に基いてその他方の桁をシフトした結果値との加減算によって表された第１の計算座標を第１の演算として実行し、該第１の計算座標を用いて第１の演算を繰り返す第１の演算部と、基準座標のｙ０またはｘ０の一方と、三角関数の値に基いてその他方の桁をシフトした結果値との加減算によって表された第２の計算座標を第２の演算として実行し、該第２の計算座標を用いて第２の演算を繰り返す第２の演算部とを備え、第１および第２の演算部は第１および第２の計算座標とを接近させるように演算する。【選択図】図１
2008185459.tif 000002
【特許請求の範囲】
【請求項１】
回転運動または往復運動を行う運動体の位置を示す正弦波信号を周期的にサンプリングし、前記正弦波信号を用いて前記運動体の位置を検出する位置検出装置であって、
予め設定された複数の仮の角度、および、該複数の仮の角度のそれぞれに対する三角関数の値を記憶するメモリと、
前記サンプリングで得られた運動体の現実の座標（ｘ１、ｙ１）のｘ１またはｙ１の一方と、前記三角関数の値に基いてｘ１またはｙ１の他方の桁をシフトした結果値との加減算によって表された第１の計算座標を第１の演算として実行し、該第１の計算座標を前記（ｘ１、ｙ１）として前記第１の演算を繰り返す第１の演算部と、
前記現実の座標に対して基準となる基準座標（ｘ０、ｙ０）のｙ０またはｘ０の一方と、前記三角関数の値に基いてｙ０またはｘ０の他方の桁をシフトした結果値との加減算によって表された第２の計算座標を第２の演算として実行し、該第２の計算座標を前記（ｘ０、ｙ０）として前記第２の演算を繰り返す第２の演算部と、
前記第１の演算または前記第２の演算で用いられた複数の前記三角関数に対応する複数の前記仮の角度を積算する第３の演算部とを備え、
前記第１および前記第２の演算部は、前記現実の座標と前記基準座標とを互いに接近させるように演算し、かつ、前記第１の計算座標と前記第２の計算座標とを互いに接近させるように演算することを特徴とする位置検出装置。
【請求項２】
前記第１および前記第２の演算部は、前記仮の角度を小さくしつつ、前記第１および前記第２の計算座標を収束させるように前記演算Ａおよび前記演算Ｂをそれぞれ繰り返し、
前記第３の演算部は、前記第１および前記第２の計算座標が収束するまで、あるいは、次のサンプリングが実行されるまで、前記仮の角度を積算することを特徴とする請求項１に記載の位置検出装置。
【請求項３】
前記メモリは、前記仮の角度としてΦｉ（Φ０＞Φ１＞Φ２＞・・・＞Φｉ＞・・・Φｎ）（ｎは自然数）、前記三角関数の値としてｔａｎΦｉを記憶し、
前記第１または前記第２の計算座標を（ｘｘｃｉ，ｙｙｃｉ）とすると、
【数１】
2008185459.tif 000006
（但し、Φｉ＝ｔａｎ−１２−ｉ（ｉ＝０、１、２・・・ｎ）であり、ｉ＝０のとき、前記第１の演算部においては、ｘｘｃｉ−１＝ｘ１、ｙｙｃｉ−１＝ｙ１であり、前記第２の演算部においては、ｘｘｃｉ−１＝ｘ０、ｙｙｃｉ−１＝ｙ０である）
前記第１および前記第２の演算部は、ｉ＝０、１、２・・・ｎの順に式１または式２を演算し、
前記第３の演算部は、前記仮の角度をｉごとに積算することを特徴とする請求項１または請求項２に記載の位置検出装置。
【請求項４】
前記第１および前記第２の演算部は、ｉ＝０、１、２・・・ｎの順に式１および式２を交互または相補に演算し、かつ、前記第１の演算部が式１を演算するときには、前記第２の演算部は式２を演算し、前記第１の演算部が式２を演算するときには、前記第２の演算部は式１を演算することを特徴とする請求項３に記載の位置検出装置。
【請求項５】
前記第１の演算が実行されるごとに、前記第１の計算座標を格納する第１のレジスタと、
前記第２の演算が実行されるごとに、前記第２の計算座標を格納する第２のレジスタと、
前記第３の演算部が積算するごとに、その積算された前記仮の角度を格納する第３のレジスタと、
前記現実の座標をサンプリングするごとに、前記第３のレジスタに格納された角度を保持する第４のレジスタとを備えたことを特徴とする請求項１から請求項３のいずれかに記載の位置検出装置。
【請求項６】
前記現実の座標の符号に基づいて前記現実の座標が存在する象限を判別する象限判別部と、
前記現実の座標が第１象限にある場合、０（ｒａｄ）を、前記現実の座標が第２象限にある場合、π／２（ｒａｄ）を、前記現実の座標が第３象限にある場合、π（ｒａｄ）を、前記現実の座標が第４象限にある場合、（３／２）π（ｒａｄ）を、前記第４のレジスタに保持された角度またはこの角度の２倍に加算する第４の演算部とをさらに備えたことを特徴とする請求項５に記載の位置検出装置。
【請求項７】
前記現実の座標（ｘ１、ｙ１）のｘ１またはｙ１のいずれか一方の符号が一定である期間の間にサンプリングされた複数の前記現実の座標（ｘ１、ｙ１）のうちｘ１の最大値ｘｍａｘ、ｘ１の最小値ｘｍｉｎ、ｙ１の最大値ｙｍａｘおよびｙ１の最小値ｙｍｉｎを保持するピーク・ボトムレジスタをさらに備え、
前記象限判別部は、前記ｘｍａｘ、前記ｘｍｉｎ、前記ｙｍａｘまたは前記ｙｍｉｎのいずれかとゼロとを前記基準座標として選択することを特徴とする請求項６に記載の位置検出装置。
【請求項８】
前記ピーク・ボトムレジスタと前記象限判別部との間に設けられた低域通過フィルタをさらに備えたことを特徴とする請求項７に記載の位置検出装置。
【請求項９】
回転運動または往復運動を行う運動体の位置を示す正弦波信号を周期的にサンプリングし、前記正弦波信号を用いて前記運動体の位置を検出する位置検出装置であって、
予め設定された複数の仮の角度Φｉ（Φ０＞Φ１＞Φ２＞・・・＞Φｉ＞・・・Φｎ）（ｎは自然数）、および、該複数の仮の角度のそれぞれに対する三角関数の値ｔａｎΦｉを記憶するメモリと、
前記サンプリングで得られた運動体の現実の座標（ｘ１，ｙ１）と前記三角関数の値ｔａｎΦｉに基いて式１または式２を繰り返し演算する第１の演算部と、
前記現実の座標に対して基準となる基準座標（ｘ０、ｙ０）と前記三角関数の値ｔａｎΦｉに基いて式２または式１を繰り返し演算する第２の演算部と、
前記第１または前記第２の演算部における演算で用いられた前記仮の角度Φｉを積算する第３の演算部とを備え、
【数２】
2008185459.tif 000007
（但し、Φｉ＝ｔａｎ−１２−ｉ（ｉ＝０、１、２・・・ｎ）であり、ｉ＝０のとき、前記第１の演算部においては、ｘｘｃｉ−１＝ｘ１、ｙｙｃｉ−１＝ｙ１であり、前記第２の演算部においては、ｘｘｃｉ−１＝ｘ０、ｙｙｃｉ−１＝ｙ０である）
前記第１および前記第２の演算部は、ｉ＝０、１、２・・・ｎの順に式１または式２を演算し、
前記第３の演算部は、前記仮の角度をｉごとに積算することを特徴とする位置検出装置。
【請求項１０】
前記第１および前記第２の演算部は、ｉ＝０、１、２・・・ｎの順に式１および式２を交互または相補に演算し、かつ、前記第１の演算部が式１を演算するときには、前記第２の演算部は式２を演算し、前記第１の演算部が式２を演算するときには、前記第２の演算部は式１を演算することを特徴とする請求項９に記載の位置検出装置。
【請求項１１】
前記第１の演算が実行されるごとに、前記第１の計算座標を格納する第１のレジスタと、
前記第２の演算が実行されるごとに、前記第２の計算座標を格納する第２のレジスタと、
前記第３の演算部が積算するごとに、前記仮の角度を格納する第３のレジスタと、
前記現実の座標をサンプリングするごとに、前記第３のレジスタに格納された角度を保持する第４のレジスタとを備えたことを特徴とする請求項１０に記載の位置検出装置。
【請求項１２】
前記現実の座標の符号の変化に基づいて前記運動体が存在する象限を判別する象限判別部と、
前記現実の座標が第１象限にある場合、０（ｒａｄ）を、前記現実の座標が第２象限にある場合、π／２（ｒａｄ）を、前記現実の座標が第３象限にある場合、π（ｒａｄ）を、前記現実の座標が第４象限にある場合、（３／２）π（ｒａｄ）を、前記第４のレジスタに保持された角度の２倍に加算する第４の演算部とをさらに備えたことを特徴とする請求項１１に記載の位置検出装置。
【請求項１３】
前記現実の座標（ｘ１、ｙ１）のｘ１またはｙ１のいずれか一方の符号が一定である期間の間にサンプリングされた複数の前記現実の座標（ｘ１、ｙ１）のうちｘ１の最大値ｘｍａｘ、ｘ１の最小値ｘｍｉｎ、ｙ１の最大値ｙｍａｘおよびｙ１の最小値ｙｍｉｎを保持するピーク・ボトムレジスタをさらに備え、
前記象限判別部は、前記ｘｍａｘ、前記ｘｍｉｎ、前記ｙｍａｘまたは前記ｙｍｉｎのいずれかとゼロとを前記基準座標として選択することを特徴とする請求項１２に記載の位置検出装置。
【請求項１４】
前記ピーク・ボトムレジスタと前記象限判別部との間に設けられた低域通過フィルタをさらに備えたことを特徴とする請求項１３に記載の位置検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、位置検出装置に関する。
【背景技術】
【０００２】
一般に、機械の高精度な運動制御のために、ロータリエンコーダが回転運動を行う運動体（例えば、サーボモータ）の位置検出器として用いられ、リニアスケールが直線往復運動を行う運動体の位置検出器として用いられる。これらの位置検出器の方式として、角度あるいは位置に応じたアナログ正弦波信号から角度あるいは位置を演算している。一般に、アナログ正弦波信号は、互いに９０°位相のずれた２つの信号（ｃｏｓ信号、ｓｉｎ信号）である。
【０００３】
従来、正弦波信号から角度あるいは位置を得るために、ｓｉｎ信号をｃｏｓ信号で除算することでｔａｎ−１θの値を得て、ｔａｎ−１θの表を参照することで角度θ、あるいは、θに対応した位置を得ていた。この表は、通常、コンピュータシステムのメモリやハードウェアのＲＯＭ(Read Only Memory)に予め格納されている。
【非特許文献１】杉本  英彦等“ＡＣサーボシステムの理論と設計の実際”総合電子出版社  （Ｐ１４２〜Ｐ１４９）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
近年、位置検出のために、ＬＳＩ（Large-Scale Integrated circuit）等のデジタルロジック回路で演算を実現することが考えられている。
【０００５】
しかし、アークタンジェント（ｔａｎ−１）は、ｓｉｎ／ｃｏｓという割り算を必要とする。アークタンジェントの計算には次の２つの問題点がある。その１つの問題点は、単位円上のｃｏｓ信号が０に近づくと、タンジェント（ｓｉｎ÷ｃｏｓ）の値が絶対値が非常に大きくなることである。その結果、アークタンジェントの結果の誤差が非常に大きくなってしまう。
【０００６】
もう１つの問題点は、アークタンジェントを求めるために割り算（ｓｉｎ÷ｃｏｓ）が必要になることである。除算器は、デジタル回路で実現することが困難な回路であり、実現するためには加減算に比べてかなり大規模なデジタル回路を用いる必要がある。尚、乗算器も、デジタル回路で実現するためには加減算に比べてかなり大規模なデジタル回路を用いる必要がある。従って、除算および乗算をデジタルロジックで実現するためには、多くの回路素子を必要とするため、回路規模が大きくなり、コスト高となる。よって、除算や乗算を安価なＦＰＧＡ（Field Programmable Gate Array）等で実現することは困難であった。
【０００７】
さらに、ｔａｎ−１θから精度良く角度あるいは位置を得るためには、その精度に見合う分だけの詳細な変換表が必要である。よって、高精度に角度あるいは位置を検出しようとすると、大規模な変換表が必要であった。
【０００８】
そこで、本発明の目的は、小規模な演算回路で運動体の角度または位置を高精度に検出することができる位置検出回路を提供することである。
【課題を解決するための手段】
【０００９】
本発明に係る実施形態に従った位置検出装置は、回転運動または往復運動を行う運動体の位置を示す正弦波信号を周期的にサンプリングし、前記正弦波信号を用いて前記運動体の位置を検出する位置検出装置であって、
予め設定された複数の仮の角度、および、該複数の仮の角度のそれぞれに対する三角関数の値を記憶するメモリと、前記サンプリングで得られた運動体の現実の座標（ｘ１、ｙ１）のｘ１またはｙ１の一方と、前記三角関数の値に基いてｘ１またはｙ１の他方の桁をシフトした結果値との加減算によって表された第１の計算座標を第１の演算として実行し、該第１の計算座標を前記（ｘ１、ｙ１）として前記第１の演算を繰り返す第１の演算部と、前記現実の座標に対して基準となる基準座標（ｘ０、ｙ０）のｙ０またはｘ０の一方と、前記三角関数の値に基いてｙ０またはｘ０の他方の桁をシフトした結果値との加減算によって表された第２の計算座標を第２の演算として実行し、該第２の計算座標を前記（ｘ０、ｙ０）として前記第２の演算を繰り返す第２の演算部と、前記第１の演算または前記第２の演算で用いられた複数の前記三角関数に対応する複数の前記仮の角度を積算する第３の演算部とを備え、前記第１および前記第２の演算部は、前記現実の座標と前記基準座標とを互いに接近させるように演算し、かつ、前記第１の計算座標と前記第２の計算座標とを互いに接近させるように演算する。
【００１０】
前記第１および前記第２の演算部は、前記仮の角度を小さくしつつ、前記第１および前記第２の計算座標を収束させるように前記演算Ａおよび前記演算Ｂをそれぞれ繰り返し、
前記第３の演算部は、前記第１および前記第２の計算座標が収束するまで、あるいは、次のサンプリングが実行されるまで、前記仮の角度を積算する。
【００１１】
前記メモリは、前記仮の角度としてΦｉ（Φ０＞Φ１＞Φ２＞・・・＞Φｉ＞・・・Φｎ）（ｎは自然数）、前記三角関数の値としてｔａｎΦｉを記憶し、
前記第１または前記第２の計算座標を（ｘｘｃｉ，ｙｙｃｉ）とすると、
【数１】
2008185459.tif 000003
（但し、Φｉ＝ｔａｎ−１２−ｉ（ｉ＝０、１、２・・・ｎ）であり、ｉ＝０のとき、前記第１の演算部においては、ｘｘｃｉ−１＝ｘ１、ｙｙｃｉ−１＝ｙ１であり、前記第２の演算部においては、ｘｘｃｉ−１＝ｘ０、ｙｙｃｉ−１＝ｙ０である）
前記第１および前記第２の演算部は、ｉ＝０、１、２・・・ｎの順に式１または式２を演算し、
前記第３の演算部は、前記仮の角度をｉごとに積算する。
【００１２】
前記第１および前記第２の演算部は、ｉ＝０、１、２・・・ｎの順に式１および式２を交互または相補に演算し、かつ、前記第１の演算部が式１を演算するときには、前記第２の演算部は式２を演算し、前記第１の演算部が式２を演算するときには、前記第２の演算部は式１を演算する。
【００１３】
前記位置検出装置は、前記第１の演算が実行されるごとに、前記第１の計算座標を格納する第１のレジスタと、前記第２の演算が実行されるごとに、前記第２の計算座標を格納する第２のレジスタと、前記第３の演算部が積算するごとに、その積算された前記仮の角度を格納する第３のレジスタと、前記現実の座標をサンプリングするごとに、前記第３のレジスタに格納された角度を保持する第４のレジスタとをさらに備えている。
【００１４】
前記位置検出装置は、前記現実の座標の符号に基づいて前記現実の座標が存在する象限を判別する象限判別部と、前記現実の座標が第１象限にある場合、０（ｒａｄ）を、前記現実の座標が第２象限にある場合、π／２（ｒａｄ）を、前記現実の座標が第３象限にある場合、π（ｒａｄ）を、前記現実の座標が第４象限にある場合、（３／２）π（ｒａｄ）を、前記第４のレジスタに保持された角度またはこの角度の２倍に加算する第４の演算部とをさらに備えている。
【００１５】
前記位置検出装置は、前記現実の座標（ｘ１、ｙ１）のｘ１またはｙ１のいずれか一方の符号が一定である期間の間にサンプリングされた複数の前記現実の座標（ｘ１、ｙ１）のうちｘ１の最大値ｘｍａｘ、ｘ１の最小値ｘｍｉｎ、ｙ１の最大値ｙｍａｘおよびｙ１の最小値ｙｍｉｎを保持するピーク・ボトムレジスタをさらに備え、
前記象限判別部は、前記ｘｍａｘ、前記ｘｍｉｎ、前記ｙｍａｘまたは前記ｙｍｉｎのいずれかとゼロとを前記基準座標として選択する。
【００１６】
前記位置検出装置は、前記ピーク・ボトムレジスタと前記象限判別部との間に設けられ、カットオフ周波数が前記正弦波信号の周波数よりも低い低域通過フィルタをさらに備えている。
【００１７】
本発明に係る実施形態に従った位置検出装置は、回転運動または往復運動を行う運動体の位置を示す正弦波信号を周期的にサンプリングし、前記正弦波信号を用いて前記運動体の位置を検出する位置検出装置であって、
予め設定された複数の仮の角度Φｉ（Φ０＞Φ１＞Φ２＞・・・＞Φｉ＞・・・Φｎ）（ｎは自然数）、および、該複数の仮の角度のそれぞれに対する三角関数の値ｔａｎΦｉを記憶するメモリと、前記サンプリングで得られた運動体の現実の座標（ｘ１，ｙ１）と前記三角関数の値ｔａｎΦｉに基いて式１または式２を繰り返し演算する第１の演算部と、前記現実の座標に対して基準となる基準座標（ｘ０、ｙ０）と前記三角関数の値ｔａｎΦｉに基いて式２または式１を繰り返し演算する第２の演算部と、前記第１または前記第２の演算部における演算で用いられた前記仮の角度Φｉを積算する第３の演算部とを備え、
【数２】
2008185459.tif 000004
（但し、Φｉ＝ｔａｎ−１２−ｉ（ｉ＝０、１、２・・・ｎ）であり、ｉ＝０のとき、前記第１の演算部においては、ｘｘｃｉ−１＝ｘ１、ｙｙｃｉ−１＝ｙ１であり、前記第２の演算部においては、ｘｘｃｉ−１＝ｘ０、ｙｙｃｉ−１＝ｙ０である）
前記第１および前記第２の演算部は、ｉ＝０、１、２・・・ｎの順に式１または式２を演算し、前記第３の演算部は、前記仮の角度をｉごとに積算する。
【００１８】
前記第１および前記第２の演算部は、ｉ＝０、１、２・・・ｎの順に式１および式２を交互または相補に演算し、かつ、前記第１の演算部が式１を演算するときには、前記第２の演算部は式２を演算し、前記第１の演算部が式２を演算するときには、前記第２の演算部は式１を演算する。
【００１９】
前記位置検出装置は、前記第１の演算が実行されるごとに、前記第１の計算座標を格納する第１のレジスタと、前記第２の演算が実行されるごとに、前記第２の計算座標を格納する第２のレジスタと、前記第３の演算部が積算するごとに、前記仮の角度を格納する第３のレジスタと、前記現実の座標をサンプリングするごとに、前記第３のレジスタに格納された角度を保持する第４のレジスタとを備えている。
【００２０】
前記位置検出装置は、前記現実の座標の符号の変化に基づいて前記運動体が存在する象限を判別する象限判別部と、前記現実の座標が第１象限にある場合、０（ｒａｄ）を、前記現実の座標が第２象限にある場合、π／２（ｒａｄ）を、前記現実の座標が第３象限にある場合、π（ｒａｄ）を、前記現実の座標が第４象限にある場合、（３／２）π（ｒａｄ）を、前記第４のレジスタに保持された角度の２倍に加算する第４の演算部とをさらに備えている。
【００２１】
前記位置検出装置は、前記現実の座標（ｘ１、ｙ１）のｘ１またはｙ１のいずれか一方の符号が一定である期間の間にサンプリングされた複数の前記現実の座標（ｘ１、ｙ１）のうちｘ１の最大値ｘｍａｘ、ｘ１の最小値ｘｍｉｎ、ｙ１の最大値ｙｍａｘおよびｙ１の最小値ｙｍｉｎを保持するピーク・ボトムレジスタをさらに備え、
前記象限判別部は、前記ｘｍａｘ、前記ｘｍｉｎ、前記ｙｍａｘまたは前記ｙｍｉｎのいずれかとゼロとを前記基準座標として選択する。
【００２２】
前記位置検出装置は、前記ピーク・ボトムレジスタと前記象限判別部との間に設けられ、カットオフ周波数が前記正弦波信号の周波数よりも低い低域通過フィルタをさらに備えている。
【発明の効果】
【００２３】
本発明による位置検出回路は、小規模な演算回路で運動体の角度または位置を高精度に検出することができる。
【発明を実施するための最良の形態】
【００２４】
以下、図面を参照して本発明に係る実施形態を説明する。本実施形態は、本発明を限定するものではない。
【００２５】
図１は、本発明に係る実施形態に従った位置検出装置１００のブロック図である。位置検出装置１００は、ロータリエンコーダまたはリニアスケール１０と、Ａ／Ｄコンバータ４０と、ピーク・ボトム検出部６０と、ＭＯ−ＣＯＲＤＩＣ（Mutual Oncoming COordinate Rotation Digital Computer）演算部（以下、演算部）５０とを備えている。演算部５０は、汎用ＣＰＵまたはカスタムＬＳＩである。演算部５０は、例えば、ＦＰＧＡでよい。位置検出装置１００は、例えば、回転運動または往復運動を行う運動体を備えた機械に配設されてもよい。運動体は、例えば、工作機械に配備されたサーボモータのロータまたは往復運動するアーム等である。
【００２６】
ロータリエンコーダまたはリニアスケール１０は、回転運動または往復運動を行う運動体の位置を示すアナログ正弦波信号（ｃｏｓ波，ｓｉｎ波）を出力する。運動体は、等速運動を行うとは限らないので、ｓｉｎ波，ｃｏｓ波の周波数は変化する。ｓｉｎ波，ｃｏｓ波は、直交位相の正弦波の値である。Ａ／Ｄコンバータ４０は、ロータリエンコーダまたはリニアスケール１０からのｓｉｎ波およびｃｏｓ波を周期的にサンプリングし、これをデジタル信号へ変換する。これにより、デジタル化された座標（ｃｏｓ，ｓｉｎ）の信号が生成される。
【００２７】
演算部５０は、Ａ／Ｄコンバータ４０からのｓｉｎ信号およびｃｏｓ信号を受け、運動体の角度または位置を算出する。ピーク・ボトム検出部６０は、Ａ／Ｄコンバータ４０からのｓｉｎ信号およびｃｏｓ信号を受け、ｓｉｎ信号およびｃｏｓ信号のそれぞれの最大値および最小値を検出する。これらの最大値および最小値は、演算部５０において基準座標の一部として用いられる。
【００２８】
演算部５０およびピーク・ボトム検出部６０は、ＦＰＧＡでよいが、ＦＰＧＡに代えて、他の任意のＬＳＩを用いることができる。演算部５０およびピーク・ボトム検出部６０をカスタムＬＳＩ上でロジック回路として実現した場合、同じ処理を繰り返す反復処理を短時間で行うことができる。一方で、演算部５０およびピーク・ボトム検出部６０は、汎用ＣＰＵおよびソフトウェアで実現してもよい。演算部５０およびピーク・ボトム検出部６０を汎用ＣＰＵおよびソフトウェアで実現した場合、プログラムの変更で様々な処理を行うことができる。
【００２９】
図２は、現実の座標（ｘ１、ｙ１）および基準座標（ｘ０、ｙ０）の関係を示す概念図である。図２を参照して、本実施形態による位置検出装置１００の動作の概略を説明する。尚、本実施形態では、ｓｉｎ波およびｃｏｓ波の各振幅はほぼ等しいものとする。
【００３０】
現実の座標（ｘ１、ｙ１）は、Ａ／Ｄコンバータ４０においてサンプリングされた円周上の座標であり、運動体の現実の位置を示す。基準座標（ｘ０、ｙ０）は、ピーク・ボトム検出部６０で検出されたｓｉｎ信号およびｃｏｓ信号のそれぞれの最大値ｘｍａｘ、ｙｍａｘ、最小値ｘｍｉｎ、ｙｍｉｎのいずれかとゼロとによって示された座標である。即ち、基準座標（ｘ０、ｙ０）は、（ｘｍａｘ、０）、（０、ｙｍａｘ）、（ｘｍｉｎ、０）または（０、ｙｍｉｎ）のいずれかである。
【００３１】
ピーク・ボトム検出回路６０は、ｘｍａｘ、ｙｍａｘ、ｘｍｉｎおよびｙｍｉｎを検出し、これらを演算部５０に送信する。演算部５０は、現実の座標の符号に基づいて運動体が存在する象限（第１〜第４象限）を判別する。例えば、ｘ１およびｙ１がともに正数であれば、現実の座標は第１象限にある。ｘ１が負数であり、ｙ１が正数であれば、現実の座標は第２象限にある。ｘ１およびｙ１がともに負数であれば、現実の座標は第３象限にある。ｘ１が正数であり、ｙ１が負数であれば、現実の座標は第４象限にある。
【００３２】
演算部５０は、運動体が存在する象限に応じて基準座標を（ｘｍａｘ、０）、（０、ｙｍａｘ）、（ｘｍｉｎ、０）および（０、ｙｍｉｎ）の中から選択する。例えば、図２に示すように、現実の座標が第１象限にある場合、演算部５０は、（ｘｍａｘ、０）を基準座標として選択する。演算部５０は、基準座標（ｘｍａｘ、０）から現実の座標までの角度θを求める。現実の座標が第２象限にある場合、演算部５０は、（０、ｙｍａｘ）を基準座標として選択する。演算部５０は、基準座標（０、ｙｍａｘ）から現実の座標までの角度θを求める。現実の座標が第３象限にある場合、演算部５０は、（ｘｍｉｎ、０）を基準座標として選択する。演算部５０は、基準座標（ｘｍｉｎ、０）から現実の座標までの角度θを求める。現実の座標が第４象限にある場合、演算部５０は、（０、ｙｍｉｎ）を基準座標として選択する。演算部５０は、基準座標（０、ｙｍｉｎ）から現実の座標までの角度θを求める。角度θは、０≦θ≦π／２である。これにより、基準座標から現実の座標までの角度（偏角）θがＣＯＲＤＩＣアルゴリズムを用いて求めることができる。
【００３３】
さらに、演算部５０は、現実の座標が存在する象限に応じて、０（ｒａｄ）、π／２（ｒａｄ）または（３／２）π（ｒａｄ）を角度θに加算する。例えば、現実の座標が第１象限にある場合、演算部５０は、０（ｒａｄ）を角度θに加算する。現実の座標が第２象限にある場合、演算部５０は、π／２（ｒａｄ）を角度θに加算する。現実の座標が第３象限にある場合、演算部５０は、π（ｒａｄ）を角度θに加算する。現実の座標が第４象限にある場合、演算部５０は、（３／２）π（ｒａｄ）を角度θに加算する。これにより、基準座標（ｘｍａｘ、０）から現実の座標までの絶対角度ＡＡ（０≦ＡＡ≦２π）が求められる。角度ＡＡが運動体の位置を表す。
【００３４】
図３は、ピーク・ボトム検出部６０の構成を示すブロック図である。ピーク・ボトム検出部６０は、基準検出回路１０１と、符号変化レジスタ１０２〜１０４と、遷移検出回路１０５と、ピーク・ボトム検出回路ＰＤｙｍａｘ、ＰＤｙｍｉｎ、ＰＤｘｍａｘ、ＰＤｘｍｉｎとを備えている。
【００３５】
基準検出回路１０１は、現実の座標（ｘ１、ｙ１）＝（ｃｏｓ信号、ｓｉｎ信号）を受け取る。基準検出回路１０１は、運動体が４つの基準座標を通過したことを検出する。基準座標の通過は、ｓｉｎ信号およびｃｏｓ信号の符号の変化によって検出することができる。符号変化レジスタ１０２〜１０４は、運動体が基準座標を通過したときに変化する実際の座標（ｘ１、ｙ１）の符号の変化を保持する。３つの符号変化レジスタ１０２〜１０４は、実際の座標（ｘ１、ｙ１）の符号の過去３回の履歴を保持することができる。
【００３６】
遷移検出回路１０５は、符号変化レジスタ１０２〜１０４に保持された実際の座標（ｘ１、ｙ１）の符号の遷移に基づいて、ピーク・ボトム検出回路へ指令を送る。例えば、運動体の現実の座標が０、π／２、πの順に回転した場合、符号変化レジスタ１０２〜１０４は、（ｘ１の符号、ｙ１の符号）としてそれぞれ（＋、＋）、（−、＋）、（−、−）のデータを保持する。遷移検出回路１０５は、符号変化レジスタ１０２〜１０４のデータによって、現実の座標が第１象限、第２象限、第３象限へと移動していることを識別することができる。運動体の現実の座標がπ／２、π、（３／２）πの順に回転した場合、符号変化レジスタ１０２〜１０４は、それぞれ（−、＋）、（−、−）、（＋、−）のデータを保持する。遷移検出回路１０５は、符号変化レジスタ１０２〜１０４のデータによって、現実の座標が第２象限、第３象限、第４象限へと移動していることを識別することができる。運動体の現実の座標がπ、（３／２）π、０の順に回転した場合、符号変化レジスタ１０２〜１０４は、それぞれ（−、−）、（＋、−）、（＋、＋）のデータを保持する。遷移検出回路１０５は、符号変化レジスタ１０２〜１０４のデータによって、現実の座標が第３象限、第４象限、第１象限へと移動していることを識別することができる。運動体の現実の座標が（３／２）π、０、π／２の順に回転した場合、符号変化レジスタ１０２〜１０４は、それぞれ（＋、−）、（＋、＋）、（−、＋）のデータを保持する。遷移検出回路１０５は、符号変化レジスタ１０２〜１０４のデータによって、現実の座標が第４象限、第１象限、第２象限へと移動していることを識別することができる。尚、上記具体例は、運動体が反時計回りＣＣＷに回転している場合の具体例である。
【００３７】
運動体が時計回りＣＷに回転している場合も、遷移検出回路１０５は、運動体の現実の座標の遷移を検出することができる。即ち、運動体の現実の座標がπ、π／２、０の順に回転した場合、符号変化レジスタ１０２〜１０４は、それぞれ（−、＋）、（＋、＋）、（＋、−）のデータを保持する。遷移検出回路１０５は、符号変化レジスタ１０２〜１０４のデータによって、現実の座標が第２象限、第１象限、第４象限へと移動していることを識別することができる。運動体の現実の座標が（３／２）π、π、π／２の順に回転した場合、符号変化レジスタ１０２〜１０４は、それぞれ（−、−）、（−、＋）、（＋、＋）のデータを保持する。遷移検出回路１０５は、符号変化レジスタ１０２〜１０４のデータによって、現実の座標が第３象限、第２象限、第１象限へと移動していることを識別することができる。運動体の現実の座標が０、（３／２）π、πの順に回転した場合、符号変化レジスタ１０２〜１０４は、それぞれ（＋、−）、（−、−）（−、＋）のデータを保持する。遷移検出回路１０５は、符号変化レジスタ１０２〜１０４のデータによって、現実の座標が第４象限、第３象限、第２象限へと移動していることを識別することができる。運動体の現実の座標がπ／２、０、（３／２）πの順に回転した場合、符号変化レジスタ１０２〜１０４は、それぞれ（＋、＋）、（＋、−）（−、−）のデータを保持する。遷移検出回路１０５は、符号変化レジスタ１０２〜１０４のデータによって、現実の座標が第１象限、第４象限、第３象限へと移動していることを識別することができる。
【００３８】
ピーク・ボトム検出回路は、現実の座標（ｘ１、ｙ１）のｘ１またはｙ１のいずれか一方の符号が一定である期間の間にサンプリングされた複数の現実の座標（ｘ１、ｙ１）のうちｘ１の最大値ｘｍａｘ、ｘ１の最小値ｘｍｉｎ、ｙ１の最大値ｙｍａｘおよびｙ１の最小値ｙｍｉｎを保持するように構成されている。
【００３９】
例えば、ピーク・ボトム検出回路ＰＤｙｍａｘは、現実の座標（ｘ１、ｙ１）のｙ１の符号が正（＋）である期間にサンプリングされた複数の現実の座標のうちｙ１の最大値ｙｍａｘを保持するように構成されている。より詳細には、ピーク・ボトム検出回路ＰＤｙｍａｘは、ｙ１の仮の最大値を保持する仮レジスタＰＲ１と、仮レジスタのデータと現実のｙ座標ｙ１とを比較する比較器ＣＯＭＰ１と、最大値ｙｍａｘを保持するピーク・ボトムレジスタＰＫＲ１と、ピーク・ボトムレジスタＰＫＲ１と演算部５０の象限判別部（図５）との間に設けられた低域通過フィルタＬＰＦ１とを備えている。低域通過フィルタＬＰＦ１は、そのカットオフ周波数が正弦波信号の周波数よりも低く、ピーク・ボトムレジスタからの最大値ｙｍａｘを安定化させる。
【００４０】
仮レジスタＰＲ１は、最初にサンプリングされた現実の座標のｙ１を保持する。比較器ＣＯＭＰ１は、次にサンプリングされたｙ１と仮レジスタＰＲ１に格納されたｙ１とを比較し、より大きい値を仮レジスタＰＲ１へ戻す。これを繰り返すことによって、仮レジスタＰＲ１に格納された値は、サンプリングごとに更新され、最大値ｙｍａｘに次第に近づいてゆく。
【００４１】
ピーク・ボトムレジスタＰＫＲ１は、遷移検出回路１０５からの保持指令によって仮レジスタＰＲ１の値を保持する。この保持指令は、ｙ１の符号が正（＋）である期間の終了時に出力される。この時、運動体の１回転または１往復において、仮レジスタＰＲ１に格納された値が最大となっているからである。ピーク・ボトムレジスタＰＫＲ１に格納された値は、運動体が１回転または１往復するごとに更新される。サンプリングは或る一定期間を置いて周期的に実行されるため、ピーク・ボトムレジスタＰＫＲ１に格納された最大値ｙｍａｘは、ｓｉｎ波のほぼ頂点を示すが、必ずしも正確にその頂点の値を示すものではない。よって、ピーク・ボトムレジスタＰＫＲ１に格納された最大値ｙｍａｘは、運動体の回転または往復ごとに幾分変化する。そこで、ピーク・ボトムレジスタＰＫＲ１に格納された値を低域通過フィルタＬＰＦ１に通すことによって、ピーク・ボトム検出部６０から出力される最大値ｙｍａｘを安定化させる。
【００４２】
仮レジスタＰＲ１は、遷移検出回路１０５からのクリア指令によってクリア（リセット）される。クリア指令は、保持指令と同時、あるいは、その直後に出力される。これにより、ピーク・ボトムレジスタＰＫ１が仮レジスタＰＲ１の値を保持した後に、仮レジスタＰＲ１をクリアすることができる。
【００４３】
ピーク・ボトム検出回路ＰＤｘｍａｘは、ｘ１の符号が正（＋）である期間にサンプリングされた複数の現実の座標のうちｘ１の最大値ｘｍａｘを保持するように構成されている。より詳細には、ピーク・ボトム検出回路ＰＤｘｍａｘは、ｘ１の仮の最大値を保持する仮レジスタＰＲ４と、仮レジスタのデータと現実のｘ座標ｘ１とを比較する比較器ＣＯＭＰ４と、最大値ｘｍａｘを保持するピーク・ボトムレジスタＰＫＲ４と、ピーク・ボトムレジスタＰＫＲ４と演算部５０の象限判別部（図５）との間に設けられた低域通過フィルタＬＰＦ４とを備えている。低域通過フィルタＬＰＦ４は、そのカットオフ周波数が正弦波信号の周波数よりも低く、ピーク・ボトムレジスタからの最大値ｘｍａｘを安定化させる。ピーク・ボトム検出回路ＰＤｘｍａｘの動作は、ピーク・ボトム検出回路ＰＤｙｍａｘの動作から容易に推測できるので、ここでは省略する。ただし、ピーク・ボトム検出回路ＰＤｘｍａｘは、保持指令およびクリア指令のタイミングがピーク・ボトム検出回路ＰＤｙｍａｘのそれらと異なる。これについては、図４を参照して後述する。
【００４４】
ピーク・ボトム検出回路ＰＤｙｍｉｎは、ｙ１の符号が負（−）である期間にサンプリングされた複数の現実の座標のうちｙ１の最小値ｙｍｉｎを保持するように構成されている。より詳細には、ピーク・ボトム検出回路ＰＤｙｍｉｎは、ｙ１の仮の最小値を保持する仮レジスタＰＲ２と、仮レジスタのデータと現実のｙ座標ｙ１とを比較する比較器ＣＯＭＰ２と、最小値ｙｍｉｎを保持するピーク・ボトムレジスタＰＫＲ２と、ピーク・ボトムレジスタＰＫＲ２と演算部５０の象限判別部（図５）との間に設けられた低域通過フィルタＬＰＦ２とを備えている。低域通過フィルタＬＰＦ２は、そのカットオフ周波数が正弦波信号の周波数よりも低く、ピーク・ボトムレジスタからの最小値ｙｍｉｎを安定化させる。
【００４５】
仮レジスタＰＲ２は、最初にサンプリングされた現実の座標のｙ１を保持する。比較器ＣＯＭＰ２は、次にサンプリングされたｙ１と仮レジスタＰＲ２に格納されたｙ１とを比較し、より小さい値を仮レジスタＰＲ２へ戻す。これを繰り返すことによって、仮レジスタＰＲ２に格納された値は、サンプリングごとに更新され、最小値ｙｍｉｎに次第に近づいてゆく。
【００４６】
ピーク・ボトム検出回路ＰＤｙｍｉｎのその他の動作は、ピーク・ボトム検出回路ＰＤｙｍａｘの動作から容易に推測できるので、ここでは省略する。ただし、ピーク・ボトム検出回路ＰＤｙｍｉｎは、保持指令およびクリア指令のタイミングがピーク・ボトム検出回路ＰＤｙｍａｘのそれらと異なる。これについては、図４を参照して後述する。
【００４７】
ピーク・ボトム検出回路ＰＤｘｍｉｎは、ｘ１の符号が負（−）である期間にサンプリングされた複数の現実の座標のうちｘ１の最小値ｘｍｉｎを保持するように構成されている。より詳細には、ピーク・ボトム検出回路ＰＤｘｍｉｎは、ｘ１の仮の最小値を保持する仮レジスタＰＲ３と、仮レジスタのデータと現実のｘ座標ｘ１とを比較する比較器ＣＯＭＰ３と、最小値ｘｍｉｎを保持するピーク・ボトムレジスタＰＫＲ３と、ピーク・ボトムレジスタＰＫＲ３と演算部５０の象限判別部（図５）との間に設けられた低域通過フィルタＬＰＦ３とを備えている。低域通過フィルタＬＰＦ３は、そのカットオフ周波数が正弦波信号の周波数よりも低く、ピーク・ボトムレジスタからの最小値ｘｍｉｎを安定化させる。
【００４８】
ピーク・ボトム検出回路ＰＤｘｍｉｎのその他の動作は、ピーク・ボトム検出回路ＰＤｙｍｉｎの動作から容易に推測できるので、ここでは省略する。ただし、ピーク・ボトム検出回路ＰＤｘｍｉｎは、保持指令およびクリア指令のタイミングがピーク・ボトム検出回路ＰＤｙｍｉｎのそれらと異なる。これについては、図４を参照して後述する。
【００４９】
図４は、現実の座標（ｘ１、ｙ１）の遷移に関して、保持指令の対象レジスタおよびクリア指令の対象レジスタを示した表である。現実の座標が０、π／２、πの順に遷移する場合、あるいは、π、π／２、０の順に遷移する場合、ｙ１の符号は正（＋）である。よって、現実の座標が遷移した後、遷移検出回路１０５は、ピーク・ボトムレジスタＰＫＲ１へ保持指令を出力する。ピーク・ボトムレジスタＰＫＲ１は、保持指令を受けて、仮レジスタＰＲ１に格納された値をｙｍａｘとして保持する。この時、あるいは、この直後、遷移検出回路１０５は、仮レジスタＰＲ１へクリア指令を出力する。これにより、仮レジスタＰＲ１に格納された値はリセットされる。
【００５０】
現実の座標がπ／２、π、（３／２）πの順に遷移する場合、あるいは、（３／２）π、π、π／２の順に遷移する場合、ｘ１の符号が負（−）である。よって、現実の座標が遷移した後、遷移検出回路１０５は、ピーク・ボトムレジスタＰＫＲ３へ保持指令を出力する。ピーク・ボトムレジスタＰＫＲ３は、保持指令を受けて、仮レジスタＰＲ３に格納された値をｘｍｉｎとして保持する。また、この時、あるいは、この直後、遷移検出回路１０５は、仮レジスタＰＲ３へクリア指令を出力する。これにより、仮レジスタＰＲ３に格納された値はリセットされる。
【００５１】
現実の座標がπ、（３／２）π、０の順に遷移する場合、あるいは、０、（３／２）π、πの順に遷移する場合、ｙ１の符号が負（−）である。よって、現実の座標が遷移した後、遷移検出回路１０５は、ピーク・ボトムレジスタＰＫＲ２へ保持指令を出力する。ピーク・ボトムレジスタＰＫＲ２は、保持指令を受けて、仮レジスタＰＲ２に格納された値をｙｍｉｎとして保持する。この時、あるいは、この直後、遷移検出回路１０５は、仮レジスタＰＲ２へクリア指令を出力する。これにより、仮レジスタＰＲ２に格納された値はリセットされる。
【００５２】
現実の座標が（３／２）π、０、π／２の順に遷移する場合、あるいは、π／２、０、（３／２）πの順に遷移する場合、ｘ１の符号が正（＋）である。よって、現実の座標が遷移した後、遷移検出回路１０５は、ピーク・ボトムレジスタＰＫＲ４へ保持指令を出力する。ピーク・ボトムレジスタＰＫＲ４は、保持指令を受けて、仮レジスタＰＲ４に格納された値をｘｍａｘとして保持する。この時、あるいは、この直後、遷移検出回路１０５は、仮レジスタＰＲ４へクリア指令を出力する。これにより、仮レジスタＰＲ４に格納された値はリセットされる。
【００５３】
図５は、ＭＯ−ＣＯＲＤＩＣ演算部５０の構成を示すブロック図である。演算部５０は、第１の演算部としてのＣＯＲＤＩＣローテーション（以下、ローテータともいう）５１と、第２の演算部としてのＣＯＲＤＩＣローテーション５８と、メモリ５２、５９と、回転方向判別部５３と、エリア判別部５４、５５と、選択部５６、５７と、第１および第２のレジスタＲ１１、Ｒ２１と、第３のレジスタとしての回転角度レジスタＲ３１と、第４のレジスタとしての角度保持レジスタＲ４１と、第３の演算部としての加算器８０と、現象判別部９５と、第４の演算部としての角度加算器９０とを備えている。
【００５４】
図６は、基準座標（ｘ０、ｙ０）および現実の座標（ｘ１、ｙ１）の位置関係を示す図である。現実の座標は、図６に示すように基準座標（ｘ０、ｙ０）を基準としてθだけ運動体を移動させたときの現実の座標（ｃｏｓθ，ｓｉｎθ）である。図６の紙面において、運動体はＣＣＷ（Counter Clock Wise）方向に回転している。尚、θの単位は、ｒａｄ（ラジアン）である。
【００５５】
図５および図６を参照し、運動体が基準座標から現実の座標まで回転するときの角度θを、ｓｉｎ信号およびｃｏｓ信号から算出する過程を説明する。尚、往復運動を行う運動体の位置は、角度から簡単に算出することができるので、ここでは、角度の算出のみを説明する。
【００５６】
本実施形態では、角度を算出するためにＭＯ−ＣＯＲＤＩＣアルゴリズムが利用される。ＭＯ−ＣＯＲＤＩＣアルゴリズムには、ベクタリングモードおよびローテーションモードがある。本実施形態では、ローテーションモードを利用する。ＭＯ−ＣＯＲＤＩＣアルゴリズムは、演算部５０内に内蔵されており、本実施形態では、カスタムＬＳＩ等のロジック回路によって実現されている。
【００５７】
理解を容易にするために、運動体が１回転すると、ロータリエンコーダ１０が１サイクルのｓｉｎ波およびｃｏｓ波を出力するものとする。位置検出装置１００は、１サイクルの間に周期的に運動体の座標をサンプリングする。位置検出装置１００は、或るサンプリングでロータの２次元座標（ユークリッド座標）（ｘ１，ｙ１）を獲得する。ｘ１はｓｉｎ値であり、ｙ１はｃｏｓ値である。位置検出装置１００は、現実の座標（ｘ１，ｙ１）および基準座標（ｘ０，ｙ０）に基づいて角度θをＣＯＲＤＩＣアルゴリズムによって計算する。基準座標（ｘ０，ｙ０）は、絶対的な座標として判明しているので、角度θが判明することによって、運動体の位置が判明する。
【００５８】
まず、現象判別部９５が現実の座標（ｘ１，ｙ１）の符号に基づいて現実の座標が存在する象限を判別する。例えば、（ｘ１の符号、ｙ１の符号）が（＋、＋）である場合、現実の座標は第１象限にあることが分かる。（ｘ１の符号、ｙ１の符号）が（−、＋）である場合、現実の座標は第２象限にあることが分かる。（ｘ１の符号、ｙ１の符号）が（−、−）である場合、現実の座標は第３象限にあることが分かる。（ｘ１の符号、ｙ１の符号）が（＋、−）である場合、現実の座標は第４象限にあることが分かる。
【００５９】
現象判別部９５は、現実の座標が存在する象限に基づいて、ｘｍａｘ、ｘｍｉｎ、ｙｍａｘまたはｙｍｉｎのいずれかとゼロとを基準座標として選択する。例えば、現実の座標が第１象限にある場合、現象判別部９５は、（ｘｍａｘ、０）を基準座標として選択する。現実の座標が第２象限にある場合、現象判別部９５は、（０、ｙｍａｘ）を基準座標として選択する。現実の座標が第３象限にある場合、現象判別部９５は、（ｘｍｉｎ、０）を基準座標として選択する。現実の座標が第４象限にある場合、現象判別部９５は、（０、ｙｍｉｎ）を基準座標として選択する。これにより、角度θは、常にπ／２（ｒａｄ）以下となり、１つのｔａｎθの絶対値に対して１つの角度θが対応するので、ＣＯＲＤＩＣアルゴリズムの適用が容易となる。
【００６０】
本実施形態では、図６に示すように、現実の座標（ｘ１、ｙ１）が第１象限に存在するので、（ｘｍａｘ、０）が基準座標として選択されている。
【００６１】
メモリ５２は、予め設定された複数の仮の角度Φ０〜Φｎ（Φ０＞Φ１＞Φ２＞・・・Φｎ）（ｎは自然数）、および、該複数の仮の角度のそれぞれに対する三角関数の値ｔａｎΦ０〜ｔａｎΦｎを記憶している。位置検出装置１００の初期状態において、第１および第２のレジスタＲ１１、Ｒ２１は特定値を格納していない。第３のレジスタＲ３１は、ゼロである。尚、第３のレジスタＲ３１は、サンプリングごとにゼロにリセットされる。
【００６２】
選択部５６は、最初に現実の座標（ｘ１，ｙ１）を選択する。ローテータ５１は、現実の座標（ｘ１，ｙ１）＝（ｃｏｓθ，ｓｉｎθ）を受け取り、この現実の座標を演算して第１の計算座標を算出する。ローテータ５１は、現実の座標（ｃｏｓθ，ｓｉｎθ）、および、メモリ５２からの三角関数の値ｔａｎΦ０を用いて第１の計算座標（ｘｘｃ１，ｙｙｃ１）を計算する。一方、選択部５７は、最初に、象限判別部９５で選択された基準座標（ｘ０，ｙ０）を選択する。ローテータ５８は、基準座標（ｘ０，ｙ０）＝（ｘｍａｘ、０）を受け取り、基準座標（ｘｍａｘ、０）、および、メモリ５９からの三角関数の値ｔａｎΦ０を用いて第２の計算座標（ｘｘｃ１，ｙｙｃ１）を計算する。ローテータ５８は、この基準座標を演算して第２の計算座標を算出する。
【００６３】
ローテータ５１および５８の具体的な演算内容に関しては後述する。尚、ローテータ５１および５８は、ともに後述の式１および式２を演算するので、第１および第２の計算座標は、（ｘｘｃｉ，ｙｙｃｉ）で表現されている。しかし、第１の計算座標および第２の計算座標は、収束するまでは、互いに異なる座標である。ｉは、ローテータ５１、５８が既に実行した演算回数に等しい。
【００６４】
第１のレジスタＲ１１は、第１の計算座標（ｘｘｃ１，ｙｙｃ１）を格納する。第２のレジスタＲ２１は、第２の計算座標（ｘｘｃ１，ｙｙｃ１）を格納する。その後、選択部５６および５７は、次の周期のサンプリングが行われるまで、それぞれ第１および第２のレジスタＲ１１およびＲ２１を選択する。ローテータ５１および５８は、それぞれ第１および第２のレジスタＲ１１およびＲ２１に格納された座標と、三角関数の値ｔａｎΦ１とを用いて同様の計算を繰り返す。それらの計算結果は、第１の計算座標（ｘｘｃｉ，ｙｙｃｉ）および第２の計算座標（ｘｘｃｉ，ｙｙｃｉ）として、それぞれ第１および第２のレジスタＲ１１およびＲ２１に上書きされる。即ち、ローテータ５１および５８の演算が実行されるごとに、第１のレジスタＲ１１は第１の計算座標を格納し、第２のレジスタＲ２１は第２の計算座標を格納する。このように、ローテータ５１および５８は、三角関数の値ｔａｎΦ０、ｔａｎΦ１、ｔａｎΦ２、・・・ｔａｎΦｉを順に用いてそれぞれ第１の計算座標および第２の計算座標を繰り返し計算する。ｉ＝０、１、２・・・に対応する各演算において、ローテータ５１および５８は、第１の計算座標および第２の計算座標を互いに接近させるように演算する。これにより、第１の計算座標および第２の計算座標は、ローテータ５１および５８による計算ごとに、現実の座標と基準座標と間の中間座標（ｃｏｓ（θ／２），ｓｉｎ（θ／２））へ収束していく。尚、最初の演算では、ローテータ５１および５８は、現実の座標と基準座標とを互いに接近させるように演算する。
【００６５】
ローテータ５１の演算で用いられた三角関数の値ｔａｎΦｉに対応する仮の角度Φｉは、加算器８０へ送られ、回転角度レジスタＲ３１に格納されたデータに積算される。加算器８０は、ローテータ５１の演算ごとに、仮の角度ΦｉをレジスタＲ３１のデータに積算する。レジスタＲ３１は、加算器８０の積算ごとに、その積算の結果を保持する。より詳細には、加算器８０は、回転角度レジスタＲ３１に格納されている仮の角度＋Φｉ−１または−Φｉ−１に仮の角度−Φｉまたは＋Φｉを加算し、その加算結果を回転角度レジスタＲ３１へ戻す。このように、加算器８０は、ローテータ５１の演算ごとに仮の角度±Φ０、±Φ１、±Φ２、・・・±Φｉを積算し、回転角度レジスタＲ３１は、加算器８０の積算ごとに、その積算された仮の角度を保持する。ここで、積算とは、前回の演算結果に対して加算または減算をさらに繰り返して演算することである。例えば、積算された仮の角度は、Φ０−Φ１＋Φ２−Φ３＋・・・のように表すことができる。仮の角度Φｉが収束したときに、回転角度レジスタＲ３１に格納された角度は、基準座標と現実の座標との中間座標の角度θ／２となる。角度θ／２またはθは、角度保持レジスタＲ４１に格納される。角度θ／２またはθは、現実の座標のサンプリングごとに変化するので、角度保持レジスタＲ４１の角度データは、現実の座標のサンプリングごとに更新される。
【００６６】
実際の運動体の角度θは、角度データθ／２を２倍にすることによって求め得る。データを２倍にすることは、デジタル値を１ビットだけ左シフトすれば足りる。左シフトとは、或る数値がより大きい値になる方向へ桁をシフトさせることである。従って、このとき乗算器は不要である。この演算は、加算器８０、回転角度レジスタＲ３１、角度保持レジスタＲ４１または角度加算器９０のいずれが行ってもよい。
【００６７】
角度加算器９０は、現実の座標が存在する象限に基づいて、０、π／２、π、（３／２）πｒａｄを角度保持レジスタＲ４１に格納された角度θまたは角度（θ／２）＊２（＝θ）に加算する。より詳細には、現実の座標が第１象限にある場合、角度加算器９０は、０ｒａｄを角度θに加算する。現実の座標が第２象限にある場合、角度加算器９０は、π／２ｒａｄを角度θに加算する。現実の座標が第３象限にある場合、角度加算器９０は、πｒａｄを角度θに加算する。現実の座標が第４象限にある場合、角度加算器９０は、（３／２）πｒａｄを角度θに加算する。これにより、現実の座標の絶対角度ＡＡ（０≦ＡＡ≦２π）が判明する。尚、本実施形態では、絶対的な角度ＡＡの基準は、（ｘｍａｘ、０）としている。
【００６８】
尚、加算器８０は、ローテータ５８から中間座標（ｃｏｓ（θ／２），ｓｉｎ（θ／２））を獲得してもよい。第１の計算座標および第２の計算座標は、同一中間座標へ収束するからである。
【００６９】
エリア判別部５４は、現実の座標が属する領域または第１のレジスタＲ１１に格納された第１の計算座標が属する領域のいずれか一方を判別する。即ち、エリア判別部５４は、選択部５６により選択された座標が属する領域を判別する。エリア判別部５５は、基準座標が属する領域または第２のレジスタＲ２１に格納された第２の計算座標が属する領域のいずれか一方を判別する。即ち、エリア判別部５５は、選択部５７により選択された座標が属する領域を判別する。
【００７０】
回転方向判別部５３は、選択部５６により選択された座標が属する領域および選択部５７により選択された座標が属する領域に応じて、ローテータ５１および５８が実行する計算式（式１または式２）を選択する。これにより、ローテータ５１および５８は、現実の座標と基準座標とを互いに接近させるように演算し、あるいは、第１の計算座標と第２の計算座標とを互いに接近させるように演算することができる。
【００７１】
次に、ローテータ５１および５８の具体的演算内容を説明する。第１および第２の計算座標（ｘｘｃｉ，ｙｙｃｉ）は式１または式２のように表わすことができる。回転方向判別部５３は、判別部５４および５５の判別結果に基づいて式１または式２のいずれかを選択する。ローテータ５１および５８は、回転方向判別部５３の比較結果に基づいて式１または式２の演算を実行する。ローテータ５８は、インバータ６０によって回転方向判別部５３の比較結果の反転信号を受信する。従って、ローテータ５８は、基準座標または第２の計算座標を、現実の座標または第１の計算座標の移動方向と反対方向へ移動させるように演算を行う。
【数３】
2008185459.tif 000005
但し、ｔａｎΦｉ＝２−ｉ（ｉ＝０、１、２・・・ｎ）である。ｉ＝０のとき、ローテータ５１に与える初期値としての現実の座標は、ｘｘｃｉ−１＝ｘ１、ｙｙｃｉ−１＝ｙ１である。また、ローテータ５８に与える初期値としての現実座標は、ｘｘｃｉ−１＝ｘ０、ｙｙｃｉ−１＝ｙ０である。
【００７２】
式１および式２ついて説明する。まず、運動体が第１の座標（ｃｏｓα、ｓｉｎα）から第２の座標（ｃｏｓ（α＋Φ）、ｓｉｎ（α＋Φ））へ移動すると考える。一般的に、第１の座標は、式３および式４で表され、第２の座標は、式５および式６のように表わすことができる。
ｘ（ｉ−１）＝ｃｏｓα      （式３）
ｙ（ｉ−１）＝ｓｉｎα      （式４）
ｘ（ｉ）＝ｃｏｓ（α＋Φ）  （式５）
ｙ（ｉ）＝ｓｉｎ（α＋Φ）  （式６）
式５および式６を三角関数の加法定理を用いて変形すると、式７および式８となる。
ｘ（ｉ）＝ｃｏｓα・ｃｏｓΦ−ｓｉｎα・ｓｉｎΦ      （式７）
ｙ（ｉ）＝ｓｉｎα・ｃｏｓΦ＋ｃｏｓα・ｓｉｎΦ      （式８）
式７および式８に式３および式４を代入し、変形すると、式９〜式１２が得られる。
ｘ（ｉ）／ｃｏｓΦ＝ｘ（ｉ−１）−ｙ（ｉ−１）・ｔａｎΦ（式９）
ｙ（ｉ）／ｃｏｓΦ＝ｙ（ｉ−１）＋ｘ（ｉ−１）・ｔａｎΦ（式１０）
【００７３】
ｘ（ｉ）／ｃｏｓΦをｘｘｃ（ｉ）とし、ｙ（ｉ）／ｃｏｓΦをｙｙｃ（ｉ）とすると、式９および式１０はそれぞれ式１１および式１２のように表すことができる。
ｘｘｃ（ｉ）＝ｘ（ｉ−１）−ｙ（ｉ−１）・ｔａｎΦ     （式９）
ｙｙｃ（ｉ）＝ｙ（ｉ−１）＋ｘ（ｉ−１）・ｔａｎΦ     （式１０）
【００７４】
ここで、ＣＯＲＤＩＣアルゴリズムを利用する。より詳細には、ｔａｎΦの値を式１１のように±２−ｉに制限する。このように制限されたｔａｎΦをｔａｎΦｉとする。
ｔａｎΦｉ＝±２−ｉ＝±１，±２−１，±２−２，・・・    （ｉ＝０、１、２、・・・ｎ）  （式１１）
【００７５】
このとき、Φｉが取り得る値は、式１２のように制限される。この角度Φｉは離散的な数値をとり、このΦｉが“仮の角度”である。
Φｉ＝ｔａｎ−１（±２−ｉ）＝±０．７８ｒａｄ，±０．４６ｒａｄ，±０．２５ｒａｄ，±０．１２ｒａｄ・・・                （式１２）
【００７６】
式９および式１０に三角関数の値ｔａｎΦｉを代入すると計算座標が得られる。ここで、ローテータ５１および５８の各初期値（ｉ＝０）は、それぞれ図６に示す現実の座標（ｘ１、ｙ１）および基準座標（ｘ０、ｙ０）である。即ち、ローテータ５１において、（ｘｘｃ（０）、ｘｘｃ（０））＝（ｘ１、ｙ１）、ローテータ５８において、（ｘｘｃ（０）、ｘｘｃ（０））＝（ｘ０、ｙ０）である。
【００７７】
（最初の演算（ｉ＝０））
ローテータ５１は、初期値としての現実の座標（ｘ１、ｙ１）を式９および式１０に代入した演算を最初に実行する。即ち、ローテータ５１は、式１３および式１４を実行する。このとき、選択部５６は、現実の座標（ｘ１、ｙ１）を選択する。
ｘｘｃ１＝ｘ１＋ｙ１・ｔａｎΦ０  （式１３）
ｙｙｃ１＝ｙ１−ｘ１・ｔａｎΦ０  （式１４）
【００７８】
式１１に示したとおり、ｔａｎΦｉ＝±２−ｉである。従って、式１３および式１４に含まれる乗算項（ｙ１・ｔａｎΦ０）および（ｘ１・ｔａｎΦ０）は、三角関数の値ｔａｎΦ０＝±２−ｉに基いて、デジタル値（バイナリ値）として表されたｙ１およびｘ１の桁を単にシフトすれば足りる。つまり、ローテータ５１は、実際には乗算を演算する必要は無い。これにより、ローテータ５１には、乗算器が不要となる。ただし、式１３、式１４で示す最初の演算では、ｔａｎΦ０＝１であるので、ローテータ５１は、桁のシフトを行わない。その後、ローテータ５１は、ｘ１またはｙ１と乗算項の結果値とを加算または減算する。これにより、ローテータ５１は、乗算なしに、式１３および式１４を演算することができる。
【００７９】
一方、ローテータ５８は、初期値としての基準座標（ｘ０、ｙ０）を式９および式１０に代入した演算を最初に実行する。即ち、ローテータ５８は、式１５および式１６を実行する。このとき、選択部５７は、基準座標（ｘ０、ｙ０）を選択する。
ｘｘｃ１＝ｘ０−ｙ０・ｔａｎΦ０  （式１５）
ｙｙｃ１＝ｙ０＋ｘ０・ｔａｎΦ０  （式１６）
【００８０】
ローテータ５８も、式１５および式１６に含まれる乗算項（ｙ０・ｔａｎΦ０）および（ｘ０・ｔａｎΦ０）の演算をするために、実際には乗算を演算する必要は無く、デジタル値（バイナリ値）として表されたｙ０またはｘ０の桁を単にシフトすればよい。これにより、ローテータ５８には、乗算器が不要となる。ただし、式１５および式１６で示された最初の演算では、ｔａｎΦ０＝１であるので、ローテータ５８は、実際には桁のシフトを行わない。その後、ローテータ５８は、ｘ０またはｙ０と乗算項の結果値とを加算または減算する。これにより、ローテータ５８は、乗算なしに、式１５および式１６を演算することができる。
【００８１】
（２回目以降の演算（ｉ＝１・・・））
２回目以降の演算では、ローテータ５１および５８は、式１または式２を用いる。
【００８２】
ローテータ５１において演算された第１の計算座標（ｘｘｃ１、ｙｙｃ１）は、第１のレジスタＲ１１に格納される。その後、選択部５６は、第１のレジスタＲ１１を選択し、第１の計算座標（ｘｘｃ１、ｙｙｃ１）をローテータ５１に送る。ローテータ５１は、第１の計算座標（ｘｘｃ１、ｙｙｃ１）を、それぞれ式１または式２のｘｘｃｉ−１およびｙｙｃｉ−１に代入し、演算を繰り返す。これにより、第１の計算座標（ｘｘｃ２、ｙｙｃ２）が得られる。第１の計算座標（ｘｘｃ２、ｙｙｃ２）は、（ｘｘｃ１、ｙｙｃ１）に代わり、第１のレジスタＲ１１に上書きされる。つまり、ローテータ５１は、最初の１回目の演算では式１３および式１４を演算し、その後は、式１または式２の演算を繰り返す。
【００８３】
式１および式２に含まれる乗算項（ｙｙｃｉ−１・ｔａｎΦ０）および（ｘｘｃｉ−１・ｔａｎΦ０）は、三角関数の値ｔａｎΦｉ＝±２−ｉに基いて、デジタル値（バイナリ値）として表されたｙｙｃｉ−１およびｘｘｃｉ−１の桁を単にシフトすれば足りる。本実施形態では、ローテータ５１は、ｙｙｃｉ−１およびｘｘｃｉ−１をｉだけ右シフトさせる。右シフトとは、或る数値がより小さい値になる方向へ桁をシフトさせることである。つまり、式１および式２に関して、ローテータ５１は、実際には乗算を演算する必要は無い。その後、ローテータ５１は、ｘｘｃｉ−１またはｙｙｃｉ−１と乗算項の結果値とを加算または減算する。これにより、ローテータ５１は、乗算なしに、式１または式２を演算することができる。ｉの値は演算ごとに１つずつ大きくなるので、乗算項のシフト量は演算ごとに大きくなる。これにより、第１の計算座標（ｘｘｃｉ、ｙｙｃｉ）は、演算ごとに収束する。この演算で用いられた仮の角度Φｉは、演算ごとに回転角度レジスタＲ３１に積算される。
【００８４】
また、ローテータ５８で演算された第２の計算座標（ｘｘｃ１、ｙｙｃ１）は、第２のレジスタＲ２１に格納される。その後、選択部５７は第２のレジスタＲ２１を選択し、ｘｘ１およびｙｙ１をローテータ５８に送る。ローテータ５８は、ｘｘ１およびｙｙ１を、式１または式２のｘｘｉ−１およびｙｙｉ−１に代入し、演算を繰り返す。これにより、ｘｘ２およびｙｙ２が得られる。つまり、ローテータ５８は、最初の１回目の演算では式１５および式１６を演算し、その後、ローテータ５１と同様に式１または式２の演算を繰り返す。
【００８５】
ローテータ５８も、ローテータ５１と同様に、式１および式２に関して乗算を演算する必要は無い。その後、ローテータ５８は、ｘｘｃｉ−１またはｙｙｃｉ−１と乗算項の結果値とを加算または減算する。これにより、ローテータ５８も、乗算なしに、式１または式２を演算することができる。
【００８６】
式９および式１０において、ｘ（ｉ）／ｃｏｓΦをｘｘｃ（ｉ）と置換し、ｙ（ｉ）／ｃｏｓΦをｙｙｃ（ｉ）と置換した意味は、ｃｏｓΦの乗算を演算から除くためである。このように置換することで、ローテータが実質的に乗算を演算する必要が無くなる。尚、計算座標として得られる結果（ｘｘｃ１、ｙｙｃ２）は、座標にｃｏｓΦを割り算した値である。これは、あくまでも演算途中の計算上の結果であり、角度Φ／２が最終的に得られれば差し支えない。
【００８７】
上記ローテータ５１および５８の演算動作は、演算時間短縮のために各ｉについて同時に実行される。尚、ロータの回転方向によって、式１３〜式１６内の＋、−の符号は、逆符号になる場合もある。
【００８８】
式１１および式１２に示す各ｉに対する離散的な数値は、予め設定されており、メモリ５２および５９に記憶されている。即ち、メモリ５２および５９は、仮の角度Φｉ、仮の角度Φｉのそれぞれに対する三角関数の値ｔａｎΦｉを各ｉごとに記憶している。
【００８９】
ローテータ５１および５８は、それぞれメモリ５２および５９に記憶された式１１に示す数値を獲得する。ローテータ５１および５８は、式１または式２に示す第１および第２の計算座標（ｘｘｃｉ，ｙｙｃｉ）を各ｉに関してｉ＝０、１、２・・・の順番で計算する。
【００９０】
式１は、仮の角度が正である場合に成り立つ式であり、式２は、仮の角度が負である場合に成り立つ式である。式１および式２のΦｉは、絶対値で表示されている。即ち、式２は、式１のΦｉに−Φｉを代入して得られる式である。仮の角度が正（＋Φｉ）である場合、ローテータ５１および５８は、図７に示す反時計回り方向ＣＣＷへ計算座標を移動させる。仮の角度が負（−Φｉ）である場合、ローテータ５１および５８は、図７に示す時計回り方向ＣＷへ計算座標を移動させる。ローテータ５１および５８は、回転方向判断部５３からの信号に応じて式１または式２のいずれかを選択する。
【００９１】
ローテータ５１および５８は、第１および第２の計算座標を互いに接近させるために、ｉ＝０、１、２・・・ｎの順に式１および式２を交互または相補に演算する。つまり、ローテータ５１が式１を演算するときには、ローテータ５８は式２を演算し、ローテータ５１が式２を演算するときには、ローテータ５８は式１を演算する。第１の計算座標の移動方向および第２の計算座標の移動方向は、一方が決まれば、他方も決まるので、回転方向判別部５３は１つで足りる。
【００９２】
仮の角度Φｉは、式１２に示すようにｉが大きくなるにつれて小さくなる。従って、図７に示すように、第１の計算座標および第２の計算座標を、現実の座標（ｘ１，ｙ１）と基準座標（ｘ０，ｙ０）との中間座標へ収束させることができる。ローテータ５１および５８は、第１および第２の計算座標を互いに接近させるように演算するので、仮の角度Φｉは、収束の結果、実際の回転角度の２分の１（θ／２）となる。仮の角度±Φｉの積算は、レジスタＲ３１に格納されたローテータ５１の演算結果を、加算器８０がローテータ５１の演算ごとに積算することによって実行される。
【００９３】
仮の角度が収束する前に、次のサンプリングが実行された場合、ローテータ５１、５８は、第１および第２の計算座標の演算を中止し、回転角度レジスタＲ３１に保持された角度データを角度保持レジスタＲ４１へ出力する。この場合、加算器８０は、サンプリングが実行されるまで仮の角度を積算すれば足りる。
【００９４】
図７を参照して、演算部５０の動作を概念的に説明する。ローテータ５１は、まず、現実の座標（ｘ１，ｙ１）をＣＣＷ方向へΦ０だけ回転させる。実際には、ローテータ５１は、式１３および式１４を演算し、第１の計算座標を算出する。ＣＣＷは、現実の座標（ｘ１，ｙ１）を基準として基準座標（ｘ０，ｙ０）へ向かう方向である。
【００９５】
これと同時に、ローテータ５８は、基準座標（ｘ０，ｙ０）をＣＷ方向へΦ０だけ回転させる。実際には、ローテータ５８は、式１５および式１６を演算し、第２の計算座標（ｘｘｃ１，ｙｙｃ１）を算出する。ＣＷは、基準座標（ｘ０，ｙ０）を基準として現実の座標（ｘ１，ｙ１）へ向かう方向である。結果として、ローテータ５１および５８は、現実の座標と基準座標とを互いに接近させる方向（互いに向かい合う方向）へ回転させるように演算する。
【００９６】
次に、ローテータ５１は、第１の計算座標（ｘｘｃ１，ｙｙｃ１）をＣＷ方向へΦ１だけ回転させる。実際には、ローテータ５１は、式２（ｉ＝１）を演算し、第１の計算座標を再計算する。
【００９７】
これと同時に、ローテータ５８は、第２の計算座標（ｘｘｃ２，ｙｙｃ２）をＣＣＷ方向へΦ１だけ回転させる。実際には、ローテータ５８は、式１を演算し、第２の計算座標を再計算する。
【００９８】
次に、ローテータ５１は、第１の計算座標（ｘｘｃ１，ｙｙｃ１）をＣＷ方向へΦ１だけ回転させる。実際には、ローテータ５１は、式２（ｉ＝１）を演算し、第１の計算座標を再計算する。これと同時に、ローテータ５８は、第２の計算座標（ｘｘｃ２，ｙｙｃ２）をＣＣＷ方向へΦ１だけ回転させる。実際には、ローテータ５８は、式１を演算し、第２の計算座標を再計算する。
【００９９】
次に、ローテータ５１は、第１の計算座標をＣＣＷ方向へΦ２だけ回転させる。実際には、ローテータ５１は、式１（ｉ＝２）を演算し、第１の計算座標を再計算する。これと同時に、ローテータ５８は、第２の計算座標をＣＷ方向へΦ２だけ回転させる。実際には、ローテータ５８は、式２を演算し、第２の計算座標を再計算する。
【０１００】
式１２に示すようにｉが大きくなるにつれて、仮の角度Φｉの値は小さくなっていく。また、ローテータ５１および５８は、各演算において、第１の計算座標と第２の計算座標とを互いに接近させる方向（互いに向かい合う方向）へ回転させるように演算する。よって、ローテータ５１および５８が演算を繰り返すごとに、第１の計算座標および第２の計算座標は、中間座標（ｃｏｓ（θ２），ｓｉｎ（θ／２））へ収束する。第１の計算座標および第２の計算座標が中間座標に収束したとき、仮の角度Φｉの積算値は、ほぼθ／２に等しい。
【０１０１】
次に、回転方向判別部５３が方向ＣＷまたはＣＣＷ（式１または式２）を選択する方法を説明する。
【０１０２】
図８は、座標を分割した８つの領域を示す図である。図９は、或る座標（ｘ，ｙ）が図８に示す領域Ｉ〜VIIIのいずれに属するかを判別するためのフロー図である。判別部５４および５５は、現実の座標、基準座標、第１の計算座標および第２の計算座標が図８の領域Ｉ〜VIIIのいずれに属するかを判別する。尚、現実の座標および基準座標の象限は、象限判別部９５において既に判明している。よって、現実の座標および基準座標は判別部５４および５５に送る必要は本来無い。しかし、敢えて、現実の座標および基準座標を第１の計算座標および第２の計算座標と区別することは、回路を複雑化するので、本実施形態では、現実の座標および基準座標を第１の計算座標および第２の計算座標と同等に取り扱っている。
【０１０３】
現実の座標を判別する場合には、図９の（ｘ，ｙ）に（ｘ１，ｙ１）を代入すればよい。基準座標を判別する場合には、図９の（ｘ，ｙ）に（ｘ０，ｙ０）を代入すればよい。第１または第２の計算座標を判別する場合には、図９の（ｘ，ｙ）に（ｘｘｃｉ，ｙｙｃｉ）を代入すればよい。
【０１０４】
ステップＳ１１およびＳ１２において、ｘ＞０かつｙ＞０である場合、座標（ｘ，ｙ）は、図８の領域ＩまたはIIに属する。さらに、ステップＳ１３において、ｘ≧ｙである場合、座標（ｘ，ｙ）は領域Iに属し、ｘ＜ｙである場合、座標（ｘ，ｙ）は領域IIに属することがわかる。
【０１０５】
ステップＳ１１およびＳ１２において、ｘ＞０かつｙ≦０である場合、座標（ｘ，ｙ）は、図８の領域VIIまたはVIIIに属する。さらに、ステップＳ１４において、｜ｘ｜≧｜ｙ｜である場合、座標（ｘ，ｙ）は領域VIIIに属し、｜ｘ｜＜｜ｙ｜である場合、座標（ｘ，ｙ）は領域VIIに属することがわかる。
【０１０６】
ステップＳ１１およびＳ１５において、ｘ≦０かつｙ＞０である場合、座標（ｘ，ｙ）は、図８の領域IIIまたはIVに属する。さらに、ステップＳ１６において、｜ｘ｜≧｜ｙ｜である場合、座標（ｘ，ｙ）は領域IVに属し、｜ｘ｜＜｜ｙ｜である場合、座標（ｘ，ｙ）は領域IIIに属することがわかる。
【０１０７】
ステップＳ１１およびＳ１５において、ｘ≦０かつｙ≦０である場合、座標（ｘ，ｙ）は、図８の領域VまたはVIに属する。さらに、ステップＳ１７において、｜ｘ｜≧｜ｙ｜である場合、座標（ｘ，ｙ）は領域Vに属し、｜ｘ｜＜｜ｙ｜である場合、座標（ｘ，ｙ）は領域VIに属することがわかる。
【０１０８】
尚、基準座標（ｘｍａｘ、０）、（０、ｙｍａｘ）、（ｘｍｉｎ、０）、（０、ｙｍｉｎ）は、それぞれ、領域VIII、III、V、VIIに属する。
【０１０９】
エリア判別部５４および５５は、図９のフローをＡＳＩＣ（Application Specific Integrated Circuit）のようなカスタムＬＳＩで構成すればよい。
【０１１０】
図１０（Ａ）および図１０（Ｂ）は、現実の座標および基準座標、または、第１の計算座標および第２の計算座標が属する領域に基づいて、第１および第２の計算座標の回転方向（ＣＣＷまたはＣＷ）を規定した表である。回転方向判別部５３は、図１０（Ａ）および図１０（Ｂ）の表に従って、ローテータ５１および５８が用いる演算式（式１または式２）を選択する。
【０１１１】
図１０（Ａ）および図１０（Ｂ）の“目標”は、目標となる座標が属する領域を示す。現実の座標および基準座標は、その一方が他方を目標とする。第１の計算座標および第２の計算座標は、その一方が他方を目標とする。図１０（Ａ）および図１０（Ｂ）の“前回”は、前回の演算によって得られた計算座標（ｘｘｃｉ−１，ｙｙｃｉ−１）が属する領域を示す。あるいは、最初の演算では、現実の座標および基準座標を示す。例えば、現実の座標が領域Iに属する場合、基準座標は（ｘｍａｘ、０）である。よって、現実の座標にとって、目標は領域VIIIとなる。従って、回転方向判別部５３は、“目標”の領域がVIIIであり、かつ、“前回”の領域がＩである回転方向ＣＷを選択する。つまり、回転方向判別部５３は、ローテータ５１が式１を選択するように信号を送る。このとき、ローテータ５８は式２を選択する。
【０１１２】
同様に、ｉ＝１における第１の計算座標が領域IIに属し、第２の計算座標が領域Iに属する場合、第１の計算座標にとって、目標は領域Iとなる。従って、回転方向判別部５３は、“目標”の領域がI であり、かつ、“前回”の領域がIIである回転方向ＣＷを選択する。つまり、回転方向判別部５３は、ローテータ５１が式２を選択するように信号を送る。このとき、ローテータ５８は式１を選択する。
【０１１３】
第１の計算座標と第２の計算座標とが同一の領域に属する場合、第１の計算座標のｘｘｃｉと第２の計算座標のｘｘｃｉとを比較する。あるいは、第１の計算座標のｙｙｃｉと第２の計算座標のｙｙｃｉとを比較する。例えば、ｉ＝１において第１の計算座標と第２の計算座標とがともに領域Ｉに属する場合、第１の計算座標のｘｘｃ１と第２の計算座標のｘｘｃ１とを比較する。第１の計算座標のｘｘｃ１が第２の計算座標のｘｘｃ１より大きい場合には、第１の計算座標をＣＣＷ方向へ回転させ、第２の計算座標をＣＷ方向へ回転させる。
【０１１４】
このように、第１の計算座標と第２の計算座標とが同一の領域に属する場合であっても、回転方向判別部５３は、式１または式２を正確に選択することができる。
【０１１５】
回転方向判別部５３は、図１０（Ａ）および図１０（Ｂ）の選択条件をＡＳＩＣのようなカスタムＬＳＩで構成すればよい。
【０１１６】
本実施形態において、位置検出装置１００は、運動体の角度を算出する。しかし、位置検出装置１００は、往復運動をする運動体にも適用することができる。この場合、位置検出装置１００は、ＦＰＧＡ５０で得られた角度を運動体の位置に変換すればよい。
【０１１７】
本実施形態によれば、位置検出装置１００は、位置検出の精度を悪化させていた除算や乗算を用いることなく、ｓｉｎ信号およびｃｏｓ信号の加算および減算のみを用いて回転角度を検出することができるので高精度である。ここで、式１および式２には、ｔａｎΦｉを乗算する項が存在する。しかし、ｔａｎΦｉは、＝２−ｉであるので、ｔａｎΦｉの乗算は、ｘｘｃｉ−１またはｙｙｃｉ−１のデジタル値をｉビットだけ右シフトすることと等価である。従って、ローテータ５１および５８は、実際には、乗算器を含まず、単に、デジタル値の桁を右シフトする回路を含むだけである。
【０１１８】
一般に、演算器をロジック回路で実現しようとすると、除算器および乗算器は、加算器および減算器に比べ、非常に回路規模が大きくなる。本実施形態では、ＦＰＧＡ５０は、２つのローテータを含むが、これらのローテータから除算器および乗算器を省くことによって、全体の回路規模は、非常に小さいものとなる。また、除算器および乗算器がないので、本実施形態によるＦＰＧＡ５０は、カスタムロジックＬＳＩで実現しやすい。本実施形態のローテータ５１、５８は、上述のように簡単な式を繰り返し演算する。カスタムロジックＬＳＩは、このように簡単な演算を高速に演算することに適している。従って、本実施形態によるＦＰＧＡ５０は、カスタムロジックＬＳＩを用いて演算速度を高速化することができる。即ち、本実施形態によるＦＰＧＡ５０は、ロジックＬＳＩで実現した場合に特に有利であるということができる。
【図面の簡単な説明】
【０１１９】
【図１】本発明に係る実施形態に従った位置検出装置１００のブロック図。
【図２】現実の座標（ｘ１、ｙ１）および基準座標（ｘ０、ｙ０）の関係を示す概念図。
【図３】ピーク・ボトム検出部６０の構成を示すブロック図。
【図４】現実の座標（ｘ１、ｙ１）の遷移に関して、保持指令の対象レジスタおよびクリア指令の対象レジスタを示した表。
【図５】ＭＯ−ＣＯＲＤＩＣ演算部５０の構成を示すブロック図。
【図６】基準座標（ｘ０、ｙ０）および現実の座標（ｘ１、ｙ１）の位置関係を示す図。
【図７】演算部５０の動作を概念的に示す説明図。
【図８】座標を分割した８つの領域を示す図。
【図９】或る座標（ｘ，ｙ）が図８に示す領域Ｉ〜VIIIのいずれに属するかを判別するためのフロー図。
【図１０】第１および第２の計算座標の回転方向（ＣＣＷまたはＣＷ）を規定した表。
【符号の説明】
【０１２０】
位置検出装置１００
１０…ロータリエンコーダまたはリニアスケール
４０…Ａ／Ｄコンバータ
５０…ＭＯ−ＣＯＲＤＩＣ演算部
６０…ピーク・ボトム検出部
５１、５８…ＣＯＲＤＩＣローテーション
５２、５９…メモリ
５３…回転方向判別部
５４、５５…エリア判別部
５６、５７…選択部
Ｒ１１…第１のレジスタ
Ｒ２１…第２のレジスタ
Ｒ３１…回転角度レジスタ
Ｒ４１…角度保持レジスタ
８０…加算器
９５…現象判別部
９０…角度加算器
６０…ピーク・ボトム検出部
１０１…基準検出回路
１０２〜１０４…符号変化レジスタ
１０５…遷移検出回路
ＰＤｙｍａｘ、ＰＤｙｍｉｎ、ＰＤｘｍａｘ、ＰＤｘｍｉｎ…ピーク・ボトム検出回路
【図１】
2008185459.tif 000008
【図２】
2008185459.tif 000009
【図３】
2008185459.tif 000010
【図４】
2008185459.tif 000011
【図５】
2008185459.tif 000012
【図６】
2008185459.tif 000013
【図７】
2008185459.tif 000014
【図８】
2008185459.tif 000015
【図９】
2008185459.tif 000016
【図１０】
2008185459.tif 000017