(57)【要約】【課題】位相の異なる１対の入力信号から出力を得る演算においては、ａｒｃｔａｎ等の複雑な演算が必要となり、演算回路の負荷が大きくなってしまう。また、演算回路の負荷を軽減するためにルックアップテーブルを参照して出力を得る場合、必要なメモリが大きくなってしまう。【解決手段】位相の異なる１対の入力信号ＩＮ１、入力信号ＩＮ２に対して、関数Ｆを用いて、入力値ＸをＸ＝Ｆ（ＩＮ１、ＩＮ２）と定義する。入力値Ｘと出力値Ｙの関係を慨ね線形となるように関数Ｆを定義することにより、複雑な演算を使用することなく入力信号から予想される出力値を得ることが可能となる。ルックアップテーブルを参照する場合は、出力値と予想される出力値との差分のみをテーブル化しておくことにより、メモリを削減可能となる。【選択図】図１
2013011456.tif 000002
【特許請求の範囲】
【請求項１】
所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように前記第１の入力信号に第１の演算を行い定義された第１の入力値を受け、前記第１の入力値を引数とした一次関数に基づいて、前記第１の入力値に対応する前記一次関数上の第２の出力値を前記第１の出力値として出力する演算手段を有する演算装置。
【請求項２】
所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように前記第１の入力信号に第１の演算を行い定義された第１の入力値を引数とした一次関数に基づいた前記第１の入力値に対応する前記一次関数上の第２の出力値と、前記第１の出力値と、の差分を、前記第１の入力値と対応付けるアドレス関数により定義されたアドレスを引数とする配列要素に格納した第１のテーブルを有する記憶部から前記第１のテーブルを読み出すとともに、前記第１の入力値を受け、前記第１の入力値に対応する前記第２の出力値と、前記第１の入力値に対応する前記配列要素に格納された値と、に基づいて前記第１の出力値を出力する演算手段を有する演算装置。
【請求項３】
所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように前記第１の入力信号に第１の演算を行い定義された第１の入力値を引数とした一次関数上の前記第１の出力値に対応する第２の入力値と、前記第１の入力値と、の差分を、前記第１の入力値と対応付けるアドレス関数により定義されたアドレスを引数とする配列要素に格納した第２のテーブルを有する記憶部から前記第２のテーブルを読み出すとともに、前記第１の入力値を受け、前記第１の入力値と、前記第１の入力値に対応する前記配列要素に格納された値と、に基づいて前記第２の入力値に対応する前記第１の出力値を出力する演算手段を有する演算装置。
【請求項４】
前記第１の演算は、前記第１の出力値に応じた、前記一対の第１の入力信号の中間値を０とした絶対値が小さい一方の入力信号を絶対値の大きい他方の入力信号で除する演算を有する請求項１乃至請求項３に記載の演算装置。
【請求項５】
前記第１の演算は、前記一対の第１の入力信号の最大値と最小値との差を同一の値とする演算を有する請求項１乃至請求項４に記載の演算装置。
【請求項６】
前記一次関数が少なくとも２つの異なる複数の一次関数を有し、前記複数の一次関数は前記第１の入力値と、前記第２の出力値と、が一対一に対応し、前記第１の入力値と、前記第２の出力値のそれぞれが異なる請求項１、２、４、５に記載の演算装置。
【請求項７】
前記一次関数が少なくとも２つの異なる複数の一次関数を有し、前記複数の一次関数は前記第１の入力値と、前記第１の出力値と、が一対一に対応し、前記第１の入力値と、前記第１の出力値のそれぞれが異なる請求項３乃至５に記載の演算装置。
【請求項８】
前記一次関数が前記第１の入力値の全入力範囲において、同一の関数である請求項１乃至請求項５に記載の演算装置。
【請求項９】
前記演算手段は、前記第１の入力信号の一周期中の電気角位相を示す第１の位相信号と、所定の電気角位相差を有する一対の第２の入力信号の一周期中の電気角位相を示す第２の位相信号と、を受け、前記第１の位相信号と前記第２の位相信号との差分である前記第１の入力信号に応じて変化する第１の位相差信号と、前記第１または第２の位相信号と、に基づいて、前記第１の位相差信号の基準値と前記第１の位相差信号との差分である第２の電気角位相差に対応したそれぞれ前記第１の入力信号または前記第２の入力信号の一周期分が入力された回数を示す第１の周期数または第２の周期数を演算する請求項１乃至８に記載の演算装置。
【請求項１０】
対象物と、前記一対の入力信号を出力する出力手段と、の相対移動に応じて、前記出力手段が所定の電気角位相差を有する前記一対の入力信号を出力することにより、前記出力手段と、前記対象物と、の相対移動量を出力する請求項１乃至９に記載の演算手段を有する相対移動量測定装置。
【請求項１１】
所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように前記第１の入力信号に第１の演算を行い定義された第１の入力値を求めるステップと、前記第１の入力値を引数とした一次関数を求めるステップと、前記第１の入力値に対応する前記一次関数上の第２の出力値を前記第１の出力値として出力するステップと、を有する演算方法。
【請求項１２】
所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように前記第１の入力信号に第１の演算を行い第１の入力値を定義するステップと、前記第１の入力値を引数とした一次関数を求めるステップと、前記第１の入力値に対応する前記一次関数上の第２の出力値を求めるステップと、前記第２の出力値と、前記第１の出力値と、の差分を求めるステップと、前記第１の入力値と対応付けるアドレス関数によりアドレスを定義するステップと、前記アドレスを引数とした配列要素に前記差分を格納した第１のテーブルを求め記憶するステップと、前記第１の入力値を受け、前記第１のテーブルを読み出すとともに、前記第１の入力値に対応する前記第２の出力値と、前記第１の入力値に対応する前記配列要素に格納された値と、に基づいて前記第１の出力値を出力するステップと、を有する演算方法。
【請求項１３】
所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように前記第１の入力信号に第１の演算を行い第１の入力値を定義するステップと、前記第１の入力値を引数とした一次関数を求めるステップと、前記第１の出力値に対応する前記一次関数上の第２の入力値を求めるステップと、前記第１の入力値と、前記第２の入力値と、の差分を求めるステップと、前記第１の入力値と対応付けるアドレス関数によりアドレスを定義するステップと、前記アドレスを引数とした配列要素に前記差分を格納した第２のテーブルを求め記憶するステップと、前記第１の入力値を受け、前記第２のテーブルを読み出すとともに、前記第１の入力値と、前記第１の入力値に対応する前記配列要素に格納された値と、に基づいて前記第２の入力値に対応する前記第１の出力値を出力するステップと、を有する演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、位相の異なる１対の信号から出力を求める演算装置、演算方法に関する。
【背景技術】
【０００２】
位相の異なる１対の信号から出力を求める演算は、位置センサをはじめとする各種センサ等で使用されている。例えば、ｓｉｎ、ｃｏｓのような信号からｔａｎ演算を行い、さらにａｒｃｔａｎ演算を行うことにより位相を求める方法等があげられる。
【０００３】
ａｒｃｔａｎ演算を用いないでかつ精度を向上させる方法として、例えば、特許文献１に記載の方法では、信号の演算結果と位相の関係を予めテーブル化しておき、そのテーブルを参照する方法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４３４３５８５号（ＮＴＮ株式会社）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ａｒｃｔａｎ演算は、ソフトウェアで実現する場合には演算回路の負荷が大きいという問題があり、ハードウェアで実現する場合には回路規模が大きくなるという問題がある。また、特許第４３４３５８５号に記載の方法ではａｒｃｔａｎ演算は必要ないが、テーブルを作成するために多くのメモリを必要とするという問題がある。
【０００６】
本発明は、上記に鑑みてなされたものであって、演算回路の負荷を軽減、または必要メモリの削減を実現するものである。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明は、所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように第１の入力信号に第１の演算を行い定義された第１の入力値を受け、第１の入力値を引数とした一次関数に基づいて、第１の入力値に対応する一次関数上の第２の出力値を第１の出力値として出力する演算手段を有する演算装置であることを特徴とする。
【０００８】
この演算装置は、複雑な関数を使用することなく出力を求められるという作用がある。その結果、この演算装置は、演算回路の負荷を軽減するという効果が得られる。
【０００９】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように第１の入力信号に第１の演算を行い定義された第１の入力値を引数とした一次関数に基づいた第１の入力値に対応する一次関数上の第２の出力値と、第１の出力値と、の差分を、第１の入力値と対応付けるアドレス関数により定義されたアドレスを引数とする配列要素に格納した第１のテーブルを有する記憶部から第１のテーブルを読み出すとともに、第１の入力値を受け、第１の入力値に対応する第２の出力値と、第１の入力値に対応する配列要素に格納された値と、に基づいて第１の出力値を出力する演算手段を有する演算装置であることが好ましい。
【００１０】
この演算装置は、入力値と出力値の関係を模擬する直線を定義し、この直線と出力値との差のみをテーブル化するという作用がある。その結果、出力値を直接テーブルに収納するタイプの信号処理方法と比較するとメモリを削減できるという効果が得られる。
【００１１】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように第１の入力信号に第１の演算を行い定義された第１の入力値を引数とした一次関数上の第１の出力値に対応する第２の入力値と、第１の入力値と、の差分を、第１の入力値と対応付けるアドレス関数により定義されたアドレスを引数とする配列要素に格納した第２のテーブルを有する記憶部から第２のテーブルを読み出すとともに、第１の入力値を受け、第１の入力値と、第１の入力値に対応する配列要素に格納された値と、に基づいて第２の入力値に対応する第１の出力値を出力する演算手段を有する演算装置であることが好ましい。
【００１２】
この演算装置は、入力値と出力値の関係を模擬する直線を定義し、この直線と入力値との差のみをテーブル化するという作用がある。その結果、出力値を直接テーブルに収納するタイプの信号処理方法と比較するとメモリを削減できるという効果が得られる。
【００１３】
本発明の望ましい態様としては、第１の演算は、第１の出力値に応じた、一対の第１の入力信号の中間値を０とした絶対値が小さい一方の入力信号を絶対値の大きい他方の入力信号で除する演算を有する演算装置であることが好ましい。
【００１４】
この演算装置は、入力値と出力値に慨ね直線の相関を持たせるという作用がある。また、除算部分の演算結果が所定の範囲となり信号処理上便利であるという作用もある。その結果、出力値の誤差が減少する、あるいは、テーブル作成に必要なメモリを削減できるという効果が得られる。
【００１５】
本発明の望ましい態様としては、第１の演算は、一対の第１の入力信号の最大値と最小値との差を同一の値とする演算を有する演算装置であることが好ましい。
【００１６】
この演算装置では、一対の入力信号の最大値と最小値の差を同一の値とすることにより、一対の入力信号より演算される入力値の対称性が増すという作用がある。その結果、入力値と出力値の関係が直線に近付くという効果が得られる。
【００１７】
本発明の望ましい態様としては、一次関数が少なくとも２つの異なる複数の一次関数を有し、複数の一次関数は第１の入力値と、第２の出力値と、が一対一に対応し、第１の入力値と、第２の出力値のそれぞれが異なる演算装置であることが好ましい。
【００１８】
この演算装置は、入力値の全範囲に対して入力値と出力値を一対一に対応させるという作用がある。その結果、この演算装置は、入力値の全範囲に対して一意に出力値を求められるという効果が得られる。
【００１９】
本発明の望ましい態様としては、一次関数が少なくとも２つの異なる複数の一次関数を有し、複数の一次関数は第１の入力値と、第１の出力値と、が一対一に対応し、第１の入力値と、第１の出力値のそれぞれが異なる演算装置であることが好ましい。
【００２０】
この演算装置は、入力値の全範囲に対して入力値と出力値を一対一に対応させるという作用がある。その結果、この演算装置は、入力値の全範囲に対して一意に出力値を求められるという効果が得られる。
【００２１】
本発明の望ましい態様としては、一次関数が第１の入力値の全入力範囲において、同一の関数である演算装置であることが好ましい。
【００２２】
この演算装置は、複数の一次関数を記憶・参照する必要がなくなるという作用がある。その結果、この演算装置は、メモリの削減、簡潔な処理用プログラムの実現という効果が得られる。
【００２３】
本発明の望ましい態様としては、演算手段は、第１の入力信号の一周期中の電気角位相を示す第１の位相信号と、所定の電気角位相差を有する一対の第２の入力信号の一周期中の電気角位相を示す第２の位相信号と、を受け、第１の位相信号と第２の位相信号との差分である第１の入力信号に応じて変化する第１の位相差信号と、第１または第２の位相信号と、に基づいて、第１の位相差信号の基準値と第１の位相差信号との差分である第２の電気角位相差に対応したそれぞれ第１の入力信号または第２の入力信号の一周期分が入力された回数を示す第１の周期数または第２の周期数を演算する演算装置であることが好ましい。
【００２４】
この演算装置は、入力信号の周期数を求められるという作用がある。その結果、この演算装置は、複数周期の入力信号範囲に対して一意に出力を求められるという効果が得られる。
【００２５】
本発明の望ましい態様としては、対象物と、一対の入力信号を出力する出力手段と、の相対的移動に応じて、出力手段が所定の電気角位相差を有する一対の入力信号を出力することにより、出力手段と、対象物と、の相対移動量を出力する演算手段を有する相対移動量測定装置であることが好ましい。
【００２６】
この相対移動量測定装置においては、出力手段と対象物との相対移動量を測定することが可能となる。
【００２７】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように第１の入力信号に第１の演算を行い定義された第１の入力値を求めるステップと、第１の入力値を引数とした一次関数を求めるステップと、第１の入力値に対応する一次関数上の第２の出力値を第１の出力値として出力するステップと、を有する演算方法であることが好ましい。
【００２８】
この演算方法は、複雑な関数を使用することなく出力を求められるという作用がある。その結果、この演算方法は、演算回路の負荷を軽減するという効果が得られる。
【００２９】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように第１の入力信号に第１の演算を行い第１の入力値を定義するステップと、第１の入力値を引数とした一次関数を求めるステップと、第１の入力値に対応する一次関数上の第２の出力値を求めるステップと、第２の出力値と、第１の出力値と、の差分を求めるステップと、第１の入力値と対応付けるアドレス関数によりアドレスを定義するステップと、アドレスを引数とした配列要素に差分を格納した第１のテーブルを求め記憶するステップと、差分を配列要素に格納した第１のテーブルを求めるステップと、第１の入力値を受け、第１のテーブルを読み出すとともに、第１の入力値に対応する第２の出力値と、第１の入力値に対応する配列要素に格納された値と、に基づいて第１の出力値を出力するステップと、を有する演算方法であることが好ましい。
【００３０】
この演算方法は、入力値と出力値の関係を模擬する直線を定義し、この直線と出力値との差のみをテーブル化するという作用がある。その結果、出力値を直接テーブルに収納するタイプの信号処理方法と比較するとメモリを削減できるという効果が得られる。
【００３１】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第１の入力信号のそれぞれと多対一の関係を有する第１の出力値とを対応付けるように第１の入力信号に第１の演算を行い第１の入力値を定義するステップと、第１の入力値を引数とした一次関数を求めるステップと、第１の出力値に対応する一次関数上の第２の入力値を求めるステップと、第１の入力値と、第２の入力値と、の差分を求めるステップと、第１の入力値と対応付けるアドレス関数によりアドレスを定義するステップと、アドレスを引数とした配列要素に差分を格納した第２のテーブルを求め記憶するステップと、差分を配列要素に格納した第２のテーブルを求めるステップと、第１の入力値を受け、第２のテーブルを読み出すとともに、第１の入力値と、第１の入力値に対応する配列要素に格納された値と、に基づいて第２の入力値に対応する第１の出力値を出力するステップと、を有する演算方法であることが好ましい。
【００３２】
この演算方法は、入力値と出力値の関係を模擬する直線を定義し、この直線と入力値との差のみをテーブル化するという作用がある。その結果、出力値を直接テーブルに収納するタイプの信号処理方法と比較するとメモリを削減できるという効果が得られる。
【発明の効果】
【００３３】
以上のように、本発明は、演算回路の負荷を軽減、または必要なメモリ量を削減するという効果を奏する。
【図面の簡単な説明】
【００３４】
【図１】本発明の実施形態に係わる概要を示すフローチャートである。
【図２】本発明の実施形態に係わる直線の定義手順を示すフローチャートである。
【図３】本発明の実施形態に係わるルックアップテーブル作成方法を示すフローチャートである。
【図４】本発明の実施形態に係わる演算装置による出力演算の手順を示すフローチャートである。
【図５】本発明の実施形態に係わるルックアップテーブル作成方法の別案を示すフローチャートである。
【図６】本発明の実施形態に係わる直線補間についての説明図である。
【図７】本発明の実施形態に係わる演算装置による出力演算の別案の手順を示すフローチャートである。
【図８】本実施例１に係わる角度センサの構成図である。
【図９】本実施例１に係わる磁気抵抗効果素子の断面構造を示す模式図である。
【図１０】本実施例１に係わる入力信号ＩＮ１、入力信号ＩＮ２を示した図である。
【図１１】本実施例１に係わる入力信号ＩＮ１、入力信号ＩＮ２より演算される演算値を示した図である。
【図１２】本実施例１に係わる出力値Ｙと入力値Ｘの関係を示した図である。
【図１３】本実施例１に係わる入力値Ｘと出力値Ｙの関係および直線Ｚ（Ｘ）を示した図である。
【図１４】本実施例１に係わる出力値Ｙと直線Ｚ（Ｘ）の差を示した図である。
【図１５】本実施例２に係わる角度センサの構成図である。
【図１６】本実施例２に係わる入力信号ＩＮ１、入力信号ＩＮ２を示した図である。
【図１７】本実施例２に係わる出力値Ｙと入力値Ｘの関係を示した図である。
【図１８】本実施例２に係わる入力値Ｘと出力値Ｙの関係を示した図である。
【図１９】本実施例２に係わる入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）を示した図である。
【図２０】本実施例２に係わる出力値Ｙ（ｉ）と入力値Ｘ（ｉ）の関係を示した図である。
【図２１】本実施例２に係わる入力値Ｘ（ｉ）と出力値Ｙ（ｉ）の関係を示した図である。
【図２２】本実施例２に係わるアドレスＡＤＲ（ｉ）と配列要素ａ［ＡＤＲ（ｉ）］の関係を示した図である。
【図２３】本実施例２に係わるテーブル作成時直線補間を説明した図である。
【図２４】本実施例２に係わるテーブル参照時直線補間を説明した図である。
【図２５】本実施例２に係わる周期数の求め方を示した図である。
【図２６】本実施例３に係わる角度センサの構成図である。
【図２７】本実施例３に係わる入力信号ＩＮ１、入力信号ＩＮ２を示した図である。
【図２８】本実施例３に係わる出力値Ｙと入力値Ｘの関係を示した図である。
【図２９】本実施例３に係わる入力値Ｘと出力値Ｙの関係を示した図である。
【図３０】本実施例３に係わる入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）を示した図である。
【図３１】本実施例３に係わる出力値Ｙ（ｉ）と入力値Ｘ（ｉ）の関係を示した図である。
【図３２】本実施例３に係わる入力値Ｘ（ｉ）と出力値Ｙ（ｉ）の関係を示した図である。
【図３３】本実施例３に係わるアドレスＡＤＲ（ｉ）と配列要素ａ［ＡＤＲ（ｉ）］の関係を示した図である。
【図３４】本実施例３に係わるテーブル作成時直線補間を説明した図である。
【図３５】本実施例３に係わるテーブル参照時直線補間を説明した図である。
【発明を実施するための形態】
【００３５】
以下、図面を参照しながら本発明の実施形態について説明する。図１は本実施形態の概要を表すフローチャートである。本発明は、直線の定義（ステップ１０１）、ルックアップテーブル作成（ステップ１０２）、演算装置による出力演算（ステップ１０３）という手順で実現される。
【００３６】
図２は、直線の定義（ステップ１０１）の手順を示したフローチャートである。直線定義の目的は、理想的、あるいは実測から求められた出力値Ｙに対して、予想される出力値Ｚを、入力値Ｘを引数とした１次関数Ｚ（Ｘ）で定義することである。入力値Ｘは、所定の位相差を有する１対の入力信号ＩＮ１、入力信号ＩＮ２より演算により求められる。本実施形態に係わる直線の定義の手順では、ＩＮ１、ＩＮ２とＸの関係を定義する（ステップ１１１）。以下、説明のために、ＩＮ１、ＩＮ２とＸの関係を関数Ｆを用いてＸ＝Ｆ（ＩＮ１、ＩＮ２）と表記する。この関数Ｆが、入力信号ＩＮ１、入力信号ＩＮ２のうち入力信号の中間値を０とした絶対値が小さい方の入力信号を絶対値の大きい方の入力信号で除する演算を含むことが好ましいが、これを限定するものではない。ただし、入力信号ＩＮ１、入力信号ＩＮ２のそれぞれと多対一の関係を有する出力値Ｙと、入力値Ｘ（＝Ｆ（ＩＮ１、ＩＮ２））とが、一対一に対応する。例えば、ＩＮ１をｓｉｎ（Ｘ）とし、ＩＮ２をｃｏｓ（Ｘ）とした場合、｜ｓｉｎ（Ｘ）｜と｜ｃｏｓ（Ｘ）｜の大小関係を比較して、｜ｓｉｎ（Ｘ）｜と｜ｃｏｓ（Ｘ）｜の内、値の大きいＩＮ１、ＩＮ２の一方を分母とし、値の小さい他方を分子とした値に、所定の値を加算または減算することにより、出力値Ｙと一対一に対応付けられた入力値Ｘを得ることが可能となっている。ここで、｜Ａ｜はＡの絶対値を表す。あるいは、ＩＮ１をｓｉｎ（Ｘ）とし、ＩＮ２をｃｏｓ（Ｘ）とした場合、｜ｓｉｎ（Ｘ）｜と｜ｃｏｓ（Ｘ）｜の大小関係を比較して、｜ｓｉｎ（Ｘ）｜と｜ｃｏｓ（Ｘ）｜の内、値の大きいＩＮ１、ＩＮ２の一方を分母とし、値の小さい他方を分子とした値の傾きが全て同じ傾きになるように所定の値を積算し、所定の値を加算または減算しても良い。次に、分割範囲の決定を行う（ステップ１１２）。出力値を予想する関数Ｚは入力値Ｘの全入力範囲を単一の一次関数で表わす必要は必ずしもなく、入力値Ｘの範囲を分割し、分割された入力範囲毎にＺ（Ｘ）を定義してもよい。分割は、少なくとも、関数Ｆの傾きの符号が変更される点と、入力値Ｘと出力値Ｙを一対一に対応させるために関数Ｆが不連続となる点において行われる。最後に、分割範囲それぞれに対して、入力値Ｘと予想される出力値Ｚの関係を一次関数Ｚ（Ｘ）で定義する（ステップ１１３）。ステップ１１３は、解析的な演算により、または、実測のデータを基にして演算回路により、または、外部に用意された専用の演算装置を用いて行われることが好適であるが、その他、どのような手段で行って定義してもよい。また、例えば、一次関数Ｚ（Ｘ）は、最小２乗法により決定してもよいし、出力値Ｙの最大値と最小値を結ぶ直線であってもよいし、その他、出力値Ｙの最大値と最小値を結ぶ直線と傾きの符号が同一の直線であればどのような直線であってもよい。この時、ステップ１１２で分割された複数の領域の一次関数Ｚ（Ｘ）が同一の関数で与えられても構わない。この場合、入力値に対して、同一の関数で与えられるので、後述する演算処理において、出力値Ｙ（ｉ）を求める演算が容易となり、記憶する関数を低減できるので、使用するメモリー量を減らすことが可能となる。
【００３７】
図３は、ルックアップテーブル作成（ステップ１０２）の手順を示したフローチャートである。ステップ１０２は、演算回路により行ってもよいし、外部に用意された専用の演算装置を用いて行ってもよいし、その他どのような手段で行ってもよい。ルックアップテーブルは、例えば、配列要素ａ［ＡＤＲ（ｉ）］を一次元に配列して得られるデータ構造を有している。説明の便宜上、一次元配列からなるルックアップテーブルを例示するが、本実施形態は、多次元配列からなるルックアップテーブルにも適用できる。配列要素ａ［ＡＤＲ（ｉ）］は、一次関数Ｚ（Ｘ）を介して入力値Ｘ（ｉ）と出力値Ｙ（ｉ）との対応関係を保持するための値であり、アドレスＡＤＲ（ｉ）を有する。言い換えれば、入力値Ｘ（ｉ）から一次関数Ｚ（Ｘ（ｉ））によって、Ｚを導出し、入力値Ｘ（ｉ）に対応するアドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］とＺとに基づいて出力値Ｙ（ｉ）を導出することが可能となっている。なお、出力値Ｙ（ｉ）の導出については、後述する。ここで、入力値Ｘ（ｉ）は実測により得られた入力値であり、出力値Ｙ（ｉ）は実測により得られた出力値である。引数ｉが同一であれば、出力値Ｙ（ｉ）は入力値Ｘ（ｉ）に対応する値であることを示している。まず、配列要素ａ［ＡＤＲ（ｉ）］のアドレスＡＤＲ（ｉ）と入力値Ｘ（ｉ）の対応関係を定義する（ステップ１２１）。言い換えると、ステップ１２１では、入力値Ｘを引数としてアドレスＡＤＲを返す関数を定義する。入力値ＸとアドレスＡＤＲは一対一に対応する必要があり、関数Ｇを用いて、ＡＤＲ＝Ｇ（Ｘ）と表記するものとする。なお、演算負荷を低減するために、ＡＤＲ＝Ｘとし、入力値ＸそのものをアドレスＡＤＲに対応付けてもよい。入力値Ｘの特定の範囲のみ細かいテーブルを作成したい場合、例えば、入力値Ｘの最大値をＸｍａｘとし、Ｇ（Ｘ）＝Ｘ×ｓｉｎ（Ｘ／Ｘｍａｘ）で与えることが考えられる。このようにＧ（Ｘ）を定義すると、Ｘ＝０付近は細かく、Ｘ＝Ｘｍａｘ付近は粗くルックアップテーブルを作成することが可能となる。もちろん、Ｇ（Ｘ）はこれらに限定するものではなく、入力値ＸとアドレスＡＤＲが一対一に対応すればどのような関数であってもよい。なお、引数ｉに対しては、アドレスＡＤＲ（ｉ）は、ＡＤＲ（ｉ）＝Ｇ（Ｘ（ｉ））で与えられることになる。次に、入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）より入力値Ｘ（ｉ）を求める（ステップ１２２）。入力値Ｘ（ｉ）は、前述の関数Ｆを用いて、Ｘ（ｉ）＝Ｆ（ＩＮ１（ｉ）、ＩＮ２（ｉ））という関係を有する。最後に、入力値Ｘ（ｉ）に対応付けられるアドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］に出力値Ｙ（ｉ）とＺ（Ｘ（ｉ））との差を格納し、記憶部に記憶する（ステップ１２３）。このように、入力値Ｘ（ｉ）と出力値Ｙ（ｉ）との対応関係を予想する直線Ｚ（Ｘ）を予め定義し、Ｚ（Ｘ）との差分、つまり、配列要素ａ［ＡＤＲ（ｉ）］をテーブルとすることにより、ルックアップテーブルに使用するメモリを減少させることができる。
【００３８】
ここで、ａ［ＡＤＲ（ｉ）］は配列要素であり、要素数は有限である。従って、アドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］が存在せず、出力値Ｙ（ｉ）とＺ（Ｘ（ｉ））との差をそのまま格納できない場合がある。そのような場合は、仮に、アドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］が存在したと考え、他の配列要素との間で補間を行うことにより、対応する配列要素ａ［ＡＤＲ（ｉ）］が存在するアドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］の値を求め格納すればよい。これらテーブル作成処理は外部に接続された計算機を用いて行ってもよい。
【００３９】
図４は、演算装置による出力演算（ステップ１０３）の手順を示したフローチャートである。まず、入力信号ＩＮ１、入力信号ＩＮ２より入力値Ｘを求める（ステップ１３１）。つまり、入力信号ＩＮ１、入力信号ＩＮ２のそれぞれと多対一の関係を有する出力値Ｙと、入力値Ｘ（＝Ｆ（ＩＮ１、ＩＮ２））とが、一対一に対応するように入力値Ｘを求める。入力値Ｘは前述の関数Ｆを用いて、Ｘ＝Ｆ（ＩＮ１、ＩＮ２）により求められる。次に、入力値ＸよりアドレスＡＤＲを求める（ステップ１３２）。アドレスＡＤＲは前述の関数Ｇを用いて、ＡＤＲ＝Ｇ（Ｘ）より求められる。続いて、前述の一次関数Ｚを用いて、入力値Ｘより予想される出力Ｚ（Ｘ）を求める（ステップ１３３）。最後に、予想される出力Ｚ（Ｘ）に補正を加え、出力値Ｙの値を求め出力する（ステップ１３４）。補正は、予想される出力Ｚ（Ｘ）と、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］とを基にした演算により与えられる。
【００４０】
ここで、ａ［ＡＤＲ（ｉ）］は配列要素であり、要素数は有限である。従って、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］が存在しない場合がある。そのような場合は、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］が存在するアドレスＡＤＲのうち、アドレスＡＤＲより値が小さいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］と、アドレスＡＤＲより値が大きいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］とを結んだ直線が、アドレスＡＤＲを示す直線と交わる点を求め、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］であるとすればよい。
【００４１】
なお、これらステップ１１１乃至ステップ１３４の順序は特に限定されるものではなく、例えば、ステップ１３３を１３２よりも先に実行してもよいし、ステップ１２２をステップ１２１より先に実行してもよい。また、一部処理を省略することも可能である。例えば、テーブルを使用しない場合は、ステップ１０２およびステップ１３２、ステップ１３４が省略可能となり、Ｙ＝Ｚ（Ｘ）を出力とすればよい。
【００４２】
さらに、これらステップの前後またはステップ間に他の処理を追加してもよい。例えば、一次関数Ｚ（Ｘ）を、実測の入力値Ｘ（ｉ）, 出力値Ｙ（ｉ）を用いて修正するステップをステップ１２２とステップ１２３の間に加えてもよいし、例えば、回転角センサやリニアセンサ等のように、移動方向等によりヒステリシスが生じる可能性がある場合は、複数のテーブルを作成・参照してもよい。ヒステリシスが生じるということは、移動方向により、入力値Ｘに対応する出力値Ｙが異なるということである。そのような例として、移動方向１と移動方向２を有する場合、移動方向１に対応するルックアップテーブルを配列ａ１［］、移動方向２に対応するルックアップテーブルを配列ａ２［］を作成し、参照時は移動方向に応じて、ａ１［］を参照するかａ２［］を参照するかを決定すればよい。この時、それら複数のテーブル要素の差は小さいことが多く、差分のみをテーブル化することも有効である。すなわち、ａ３［ＡＤＲ（ｉ）］＝ａ２［ＡＤＲ（ｉ）］−ａ１［ＡＤＲ（ｉ）］となる配列ａ３［］を定義し、配列ａ２［］ではなく、配列ａ３［］を記憶しておけばよい。参照時は、ａ１［ＡＤＲ（ｉ）］＋ａ３［ＡＤＲ（ｉ）］とすれば、ａ２［ＡＤＲ（ｉ）］を参照した場合と同様の効果が得られる。他にも、例えば、入力信号ＩＮ１、入力信号ＩＮ２が複数周期繰り返される範囲に対して出力値Ｙを一意に対応させたい場合には、ステップ１３１の手前に入力信号ＩＮ１、または、入力信号ＩＮ２の周期数を求めるステップを加えてもよい。なお、周期数とは、入力信号ＩＮ１、または、入力信号ＩＮ２の一周期分が入力された回数を指すものとする。
【００４３】
一部の処理を変更しても同様の効果が得られる。例えば、ルックアップテーブル作成（ステップ１０２）手順の変更が考えられる。ルックアップテーブル作成手順は、図３に示されているが、これを図５のように変更することが可能である。つまり、ステップ１２３の処理を、ステップ１４３のように変更すればよい。つまり、一次関数Ｙ＝Ｚ（Ｘ）の逆関数をＸ＝Ｚ−１（Ｙ）とすると、入力値Ｘ（ｉ）に対応付けられるアドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］に、出力値Ｘ（ｉ）とＺ−１（Ｙ（ｉ））との差を格納する。言い換えると、Ｚ−１（Ｙ（ｉ））が示す値は、一次関数Ｚにより出力を求める場合の理想的な入力値Ｘｒｅｖ（ｉ）であり、配列要素ａ［ＡＤＲ（ｉ）］には、理想的な入力値Ｘｒｅｖ（ｉ）と、関数Ｆにより、Ｘ（ｉ）＝Ｆ（ＩＮ１（ｉ）、ＩＮ２（ｉ））より求められる入力値Ｘ（ｉ）との差が格納されている。なお、本処理においては、Ｚ（Ｘ）は出力値Ｙの最大値と最小値を含む直線であることが好ましい。配列要素ａ［ＡＤＲ（ｉ）］には、理想的な入力値Ｘｒｅｖ（ｉ）と、Ｘ（ｉ）＝Ｆ（ＩＮ１（ｉ）、ＩＮ２（ｉ））より求められる入力値Ｘ（ｉ）との差が格納されているので、Ｚ（Ｘ）が出力値Ｙの最大値と最小値を含む直線であれば、容易に配列要素ａ［ＡＤＲ（ｉ）］を求めることが可能である。ここで、ａ［ＡＤＲ（ｉ）］は配列要素であり、要素数は有限である。従って、アドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］が存在せず、出力値Ｙ（ｉ）とＺ（Ｘ（ｉ））との差をそのまま格納できない場合がある。そのような場合は、仮に、アドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］が存在したと考え、他の配列要素との間で補間を行うことにより、対応する配列要素ａ［ＡＤＲ（ｉ）］が存在するアドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］の値を求め格納すればよい。図６は、ステップ１２３とステップ１４３に示したルックアップテーブル作成の概念図を示したものである。ステップ１２３では、ΔＹ（ｉ）をアドレスＡＤＲに対応する配列要素ａ［ＡＤＲ（ｉ）］に格納する。Ｘ（ｉ）＝Ｆ（ＩＮ１，ＩＮ２）により求められた入力値Ｘ（ｉ）を用いて、Ｚ（Ｘ（ｉ））を求める。ルックアップテーブルを参照することにより、求めたい出力値Ｙ（ｉ）とＺ（Ｘ（ｉ））との差ΔＹ（ｉ）がわかり、出力値Ｙ（ｉ）を求めることができる。一方、ステップ１４３では、ΔＸ（ｉ）をアドレスＡＤＲに対応する配列要素ａ［ＡＤＲ（ｉ）］に格納する。このようにすれば、ルックアップテーブルを参照することにより、Ｘ（ｉ）＝Ｆ（ＩＮ１，ＩＮ２）により求められた入力値Ｘ（ｉ）から理想的な入力値Ｘｒｅｖ（ｉ）を求めることができる。理想的な入力値Ｘｒｅｖ（ｉ）を求めることが出来れば、Ｙ（ｉ）＝Ｚ（Ｘｒｅｖ（ｉ））より、出力値Ｙ（ｉ）を求めることができる。このようにすれば、前述の方法と同様、ルックアップテーブルに使用するメモリを減少させることができる。このような方法でルックアップテーブルの作成を行った場合、すでに説明したように、演算装置による出力演算（ステップ１０３）手順も変更する必要があり、図４のように処理していたものを図７のように変更する。変更点は、ステップ１３３乃至ステップ１３４がステップ１５３乃至ステップ１５４のように変更されている。ステップ１３２においてアドレスＡＤＲを求めるまでは同じである。ステップ１３１で求められた入力値ＸをアドレスＡＤＲ（ｉ）を有する配列要素ａ［ＡＤＲ（ｉ）］で補正し、理想的な入力値Ｘｒｅｖを求める（ステップ１５３）。次に、一次関数Ｚに理想的な入力値Ｘｒｅｖを入力し得られる出力Ｚ（Ｘｒｅｖ）を出力する。このようにすれば、図５に示された方法で作成されたルックアップテーブルを用いて精度よく出力を求めることが可能となる。ここで、ａ［ＡＤＲ（ｉ）］は配列要素であり、要素数は有限である。従って、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］が存在しない場合がある。そのような場合は、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］が存在するアドレスＡＤＲのうち、アドレスＡＤＲより値が小さいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］と、アドレスＡＤＲより値が大きいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］とを結んだ直線が、アドレスＡＤＲを示す直線と交わる点を求め、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］であるとすればよい。
【００４４】
このように、入力値Ｘ（ｉ）と出力値Ｙ（ｉ）との対応関係を予想する一次関数Ｚ（Ｘ）を予め定義することにより、複雑な関数（ａｒｃｔａｎ等）を用いないで入力と出力を関連付けることが可能となる。つまり、出力値Ｙ（ｉ）を求める演算が容易となる。また、メモリ参照方式を用いる場合は、入力値Ｘ（ｉ）と一次関数Ｚ−１（Ｙ（ｉ））との差分、または、出力値Ｙ（ｉ）と一次関数Ｚ（Ｘ）の差分を配列要素ａ［ＡＤＲ（ｉ）］としてルックアップテーブルとすることにより、精度を維持したままルックアップテーブルに使用するメモリを減少させることができる。
（実施例１）
【００４５】
次に、図８を参照しながら本実施例に関わる角度センサ２０１の構成について説明する。角度センサ２０１は、回転軸２０２の所定の基準位置からの回転角（０ｄｅｇ〜３６０ｄｅｇ）を検出するための角度検出装置である。但し、本実施形態は回転軸２０２に噛合するギア等を設けることにより、３６０ｄｅｇ以上の角度（多回転絶対角）を検出可能な角度センサにも適用可能である。回転軸２０２として、例えば、モーターの回転軸やステアリングシャフトを挙げることができるが、これに限定されるものではない。角度センサ２０１は、回転軸２０２の軸芯回りの回転に連動して回転する磁石２０３と、回転軸２０２の軸の周辺部に、回転軸２０２の軸とは独立に固定され、回転軸２０２の回転角の情報を担う検出信号（入力信号ＩＮ１）を出力する磁気センサ２０５と、磁気センサ２０５から出力される検出信号を増幅する増幅器（ＡＭＰ）２０８と、増幅器２０８によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器２０９と、回転軸２０２の軸の周辺部に、回転軸２０２の軸とは独立に固定され、回転軸２０２の回転角の情報を担う検出信号（入力信号ＩＮ２）を出力する磁気センサ２１２と、磁気センサ２１２から出力される検出信号を増幅する増幅器（ＡＭＰ）２１５と、増幅器２１５によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器２１６と、Ａ／Ｄ変換器２０９、および、Ａ／Ｄ変換器２１６からの出力信号の組み合わせから回転軸２０２の回転角を求める演算回路（ＭＰＵ）２１０とを備える。磁気センサ２０５から出力される入力信号ＩＮ１、および、磁気センサ２１２から出力される入力信号ＩＮ２は、その電気角の位相差が９０ｄｅｇである信号となっているが、磁気センサ２０５、および、磁気センサ２１２を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置であるが、検出される磁界の方向が異なるように配置してもよいし、その他、所望の電気角の位相差が得られればどのような方法であってもよい。演算回路２１０は、例えば、汎用のマイクロコンピュータでもよく或いは専用の信号処理ＬＳＩでもよい。磁石２０３は、回転部材であり、その平面形状（回転軸２０２に垂直な平面で切断した断面形状）は、例えば、長方形や、円形が好適であるが、特定の形状に限定されるものではなく、角度検出に適した形状であればよい。磁石２０３は、回転軸２０２に固定されてもよく、或いはセレーション結合されてもよい。回転軸２０２の軸芯方向をＺ方向とすると、回転軸２０２の回転に伴い、磁石２０３はＸＹ平面内で回転する。
【００４６】
磁気センサ２０５は、磁石２０３の回転に伴い周期的に変化する外部磁界２０４の変化を出力電圧変化として検出する磁気抵抗効果素子２０７と、磁気抵抗効果素子２０７にセンス電流を供給するプリント配線基板２０６とを備える。磁気センサ２１２は、磁石２０３の回転に伴い周期的に変化する外部磁界２１１の変化を出力電圧変化として検出する磁気抵抗効果素子２１４と、磁気抵抗効果素子２１４にセンス電流を供給するプリント配線基板２１３とを備える。磁気抵抗効果素子２０７および磁気抵抗効果素子２１４として、例えば、巨大磁気抵抗（ＧＭＲ）型、トンネル磁気抵抗（ＴＭＲ）型、弾道磁気抵抗（ＢＭＲ）型、異方性磁気抵抗（ＡＭＲ）型等の公知の磁気抵抗効果素子を用いることができる。なお、センス電流に変えて、センス電圧を供給してもよく、磁気抵抗効果素子２０７、および、磁気抵抗効果素子２１４の出力電圧変化を電流変化に変更してもよい。
【００４７】
図９は磁気抵抗効果素子２０７の断面構造を示す。磁気抵抗効果素子２１４も全く同じ構造であるので、ここでは記載を省略する。磁気抵抗効果素子２０７は下地層２２０、反強磁性層２２１、磁化固定層２２２、非磁性導電層２２３、磁化自由層２２４、および保護層２２５を積層してなる素子構造を有している。磁化固定層２２２の磁化方向２２２Ａは、反磁性層２２１の磁化方向２２１Ａと強固にカップリングしているため、外部磁界２０４の影響を殆ど受けない。一方、磁化自由層２２４の磁化方向２２４Ａは、外部磁界２０４の磁化方向に追随するように変化する。磁気抵抗効果素子２０７の電気抵抗は（以下、電気抵抗は抵抗と記載）、磁気抵抗効果素子２０７が検出する外部磁界２０４の磁界強度とその磁界方向に依存して変化することが知られている。仮に外部磁界２０４の磁界強度が一定である場合には、磁気抵抗効果素子２０７の抵抗は、磁化固定層２２２の磁化方向２２２Ａと磁化自由層２２４の磁化方向２２４Ａとの角度差（ξ）に依存して変化する。より詳細には、磁気抵抗効果素子２０７の抵抗は、（１−cosξ）に比例して変化する特性を有しており、磁化固定層２２２の磁化方向２２２Ａと磁化自由層２２４の磁化方向２２４Ａとが同一方向かつ平行である時に抵抗は最小となり、磁化固定層２２２の磁化方向２２２Ａと磁化自由層２２４の磁化方向２２４Ａとが逆方向かつ平行である時に抵抗は最大になる。上述の如く、磁気抵抗効果素子２０７には、プリント配線基板２０７からセンス電流が供給されており、磁気抵抗効果素子２０７の抵抗の変化は、出力電圧変化として検出される。磁気抵抗効果素子２０７の出力電圧は、回転軸２０２の回転角度の情報を担う検出信号として出力される。
【００４８】
次に、図３を参照しながら演算手段について説明する。本実施例ではルックアップテーブルの作成は行わないので、演算手段は、図１に示すステップ１０１、１０３の手順に基づいて行う。ここでは、磁気センサ２０５の出力電圧を入力信号ＩＮ１、磁気センサ２１２の出力電圧を入力信号ＩＮ２とし、回転軸２０２の回転角を出力値Ｙとすればよい。
【００４９】
まず、図２に従い、直線の定義（ステップ１０１）について説明する。本実施例では、前述のように、磁気抵抗効果素子２０７の抵抗が（１−cosξ）に比例して変化するため、磁気センサ２０５の出力電圧は正弦波状の信号が予想される。磁気抵抗効果素子２１４も同様であり、演算回路２１０には、位相が９０ｄｅｇ異なる正弦波状の１対の入力信号ＩＮ１、入力信号ＩＮ２が与えられる。図１０に入力信号ＩＮ１、入力信号ＩＮ２を図示する。ここで、入力軸は回転軸２０２の回転角度（出力値Ｙ）に相当し、出力軸は磁気抵抗効果素子２０７の想定される出力電圧（ＩＮ１）、および、磁気抵抗効果素子２１４の想定される出力電圧（ＩＮ２）に相当する。関数Ｆには、入力信号ＩＮ１、入力信号ＩＮ２のうち入力信号の中間値を０とした絶対値が小さい方の入力信号を絶対値の大きい方の入力信号で除する演算が含まれることが好ましい。この演算を行うと、図１１に示すような演算結果が得られる。ここで、入力軸は回転軸２０２の回転角度に相当し、出力軸は入力信号の中間値を０とした絶対値の小さい方の入力信号の値を絶対値の大きい方の入力信号の値で除した演算値を示している。さらに、関数Ｆにより得られる入力値Ｘは、入力値Ｘと出力値Ｙが一対一に対応する。この条件を満たすために、ここでは、演算値にオフセット値を加える。以上のように関数Ｆを定義する。なお、Ｆ（ＩＮ１、ＩＮ２）は入力信号ＩＮ１、入力信号ＩＮ２の中間値を０とする演算を含むものとする。また、本実施例では、説明のため、入力信号ＩＮ１と入力信号ＩＮ２の最大値と最小値の差を同一の値として説明する。入力信号ＩＮ１と入力信号ＩＮ２の最大値と最小値の差を同一の値とすることにより、より直線に近い入力値Ｘと出力値Ｙの関係が得られている。関数Ｆ（ＩＮ１、ＩＮ２）を整理すると以下となる（ステップ１１１）。
Ｆ（ＩＮ１、ＩＮ２）＝ＩＮ１／ＩＮ２＋１                  （１）
（但し、｜ＩＮ２｜≧｜ＩＮ１｜かつＩＮ２≧０）    
Ｆ（ＩＮ１、ＩＮ２）＝ＩＮ２／ＩＮ１＋７                  （２）
（但し、｜ＩＮ１｜＞｜ＩＮ２｜かつＩＮ１≧０）    
Ｆ（ＩＮ１、ＩＮ２）＝ＩＮ１／ＩＮ２＋５                  （３）
（但し、｜ＩＮ２｜≧｜ＩＮ１｜かつＩＮ２＜０）    
Ｆ（ＩＮ１、ＩＮ２）  ＝ＩＮ２／ＩＮ１＋３                （４）
（但し、｜ＩＮ１｜＞｜ＩＮ２｜かつＩＮ１＜０）
図１２に関数Ｆによる演算結果を示す。ここで、入力軸は回転軸２０２の回転角度に相当し、出力軸はＦ（ＩＮ１，ＩＮ２）、すなわち、入力値Ｘに相当する。図１２から明らかなように、回転角度（出力値Ｙ）と入力値Ｘとのそれぞれが一対一に対応し、かつ、上記式（１）〜式（４）のそれぞれを満たすように、離散的な関係を有している。関数Ｆはこの演算に限られるものではなく、例えば、図１１に示された演算値に−１を乗じたものにオフセットを加えてもよい。本実施例では、入力値Ｘから出力値Ｙを求める必要があるので、図１２において回転角度（出力値Ｙ）を示している入力軸と入力値Ｘを示している出力軸を入れ替える必要がある。つまり、入力値Ｘを入力軸とし、回転角度（出力値Ｙ）を出力軸とする必要がある。図１３に入力値と出力値を入れ替えた結果を示す。ここで、入力軸は入力値Ｘに相当し、出力軸は回転軸２０２の回転角度（出力値Ｙ）に相当する。併せて記載されている一次関数Ｚ（Ｘ）については後述する。ここで、直線の分割範囲は、範囲１：０≦Ｘ≦２、範囲２：２＜Ｘ＜４、範囲３：４≦Ｘ≦６、範囲４：６＜Ｘ＜８のように分割される（ステップ１１２）。ここで、Ｙの最小値と最大値を結ぶ直線Ｚ（Ｘ）を考えると、範囲１に与えられる直線と範囲３に与えられる直線Ｚ（Ｘ）が一致し、同様に、範囲２に与えられる直線と範囲４に与えられる直線Ｚ（Ｘ）が一致し、Ｚ（Ｘ）は以下の式で与えられる（ステップ１１３）。
Ｚ（Ｘ）＝４５×Ｘ                      （５）
（但し、０≦Ｘ≦２、４≦Ｘ≦６）
Ｚ（Ｘ）＝−４５×Ｘ＋４５０            （６）
（但し、２＜Ｘ＜４、６＜Ｘ＜８）
図１３から明らかなように、入力値Ｘと回転角度（出力値Ｙ）とのそれぞれが一対一に対応し、かつ、上記式（１）〜式（４）のそれぞれを満たすように、離散的な関係を有している。また、式（５）、式（６）を満たす入力値ＸとＺ（Ｘ）とは離散的な関係を有している。以上により、直線の定義（ステップ１０１）は終了となる。ここで、入力軸は入力値Ｘに相当し、出力軸は回転軸２０２の回転角度に相当する。対応する入力値Ｘの範囲に対しては出力値ＹとＺ（Ｘ）がよく一致していることが分かる。本実施例では、ステップ１１３を解析的な演算により行ったが、これに限定するものではなく、実測のデータを基にして演算回路２１０により行ってもよいし、外部に用意された専用の演算装置を用いて行ってもよいし、その他どのような手段を用いて定義してもよい。
【００５０】
次に、図４に従い演算装置による出力演算（ステップ１０３）について説明する。前述のように、実施例１ではルックアップテーブルを使用しないので、ステップ１３２、ステップ１３４は省略される。まず、Ａ／Ｄ変換器２０９より入力信号ＩＮ１を、Ａ／Ｄ変換器２１６より入力信号ＩＮ２を取り込み、取り込んだ値より入力値Ｘを求める（ステップ１３１）。例として、図１０に示した理想波形において回転角（出力値Ｙ）が ２３０ｄｅｇの値であるＩＮ１＝−０．０８７（プロットＯ１）、ＩＮ２＝−０．９９６（プロットＯ２）を用いて説明する。ここで、｜ＩＮ２｜≧｜ＩＮ１｜かつＩＮ２＜０であるので、関数Ｆの定義より、式（３）が適用され、Ｘ＝ＩＮ１／ＩＮ２＋５を用いて計算すると、Ｘ＝５．０９となる。続いて、Ｚ（Ｘ）を演算し、演算結果を出力とする（ステップ１３３）。入力値Ｘの値より、式（５）が適用され、Ｚ（Ｘ）＝４５×Ｘとなる。従って、出力はＺ（Ｘ）＝２２９．１（ｄｅｇ）となり、ほぼ正確な出力が得られることがわかる。
【００５１】
本実施例のように入力が正弦波状である場合には、上記で定義した関数Ｆの代わりに、関数Ｆに基本波の１／１０程度の振幅を有する正弦波の値を加算した、あるいは、減算した関数Ｆｒｅｖを用いるとより正確な出力が得られる。加法定理を用いると、ｓｉｎ（４θ）＝４×ｓｉｎ（θ）×ｃｏｓ（θ）×（１−２×ｓｉｎ２（θ））となるので、Ｆｒｅｖ（ＩＮ１、ＩＮ２）は以下のように定義される。
Ｆｒｅｖ（ＩＮ１、ＩＮ２）＝ＩＮ１／ＩＮ２＋１
＋０．４×ＩＮ１×ＩＮ２×（１−２×ＩＮ１２（θ））（７）
（但し、｜ＩＮ２｜≧｜ＩＮ１｜かつＩＮ１≧０）     
Ｆｒｅｖ（ＩＮ１、ＩＮ２）＝ＩＮ２／ＩＮ１＋７
−０．４×ＩＮ１×ＩＮ２×（１−２×ＩＮ１２（θ））    （８）
（但し、｜ＩＮ１｜＞｜ＩＮ２｜かつＩＮ１≧０）     
Ｆｒｅｖ（ＩＮ１、ＩＮ２）＝ＩＮ１／ＩＮ２＋５ 
＋０．４×ＩＮ１×ＩＮ２×（１−２×ＩＮ１２（θ）    （９）
（但し、｜ＩＮ２｜≧｜ＩＮ１｜かつＩＮ１＜０）
Ｆｒｅｖ（ＩＮ１、ＩＮ２）＝ＩＮ２／ＩＮ１＋３
−０．４×ＩＮ１×ＩＮ２×（１−２×ＩＮ１２（θ））（１０）
（但し、｜ＩＮ１｜＞｜ＩＮ２｜かつＩＮ１＜０）
図１３に示されている出力値Ｙと一次関数Ｚ（Ｘ）との差を図１４に示す。ここで、入力軸は入力値Ｘに相当し、出力軸は出力値Ｙと一次関数Ｚ（Ｘ）との差、すなわち、本実施例を行った時に発生する角度誤差に相当する。関数Ｆの代わりに関数Ｆｒｅｖを用いた場合についても図１４に示されている。関数Ｆを用いた場合は、±４ｄｅｇ程度の値を示すのに対して、関数Ｆｒｅｖを用いた場合は±１ｄｅｇ程度となっていることが分かる。このように、関数Ｆｒｅｖを用いると角度精度の改善が期待できる。また、後述のルックアップテーブル方式においては、関数Ｆｒｅｖを用いることによりテーブルに格納される最大値が１／４程度となり、関数Ｆを使用した場合と比較して、メモリをさらに２バイト程度削減することが期待できる。
（実施例２）
【００５２】
次に、図１５を参照しながら本実施例に関わる角度センサ４０１の構成について説明する。角度センサ４０１は、回転軸４０２の所定の基準位置からの回転角（０ｄｅｇ〜３６０ｄｅｇ）を検出するための角度検出装置である。回転軸４０２として、例えば、ステアリングシャフトを挙げることができるが、これに限定されるものではない。角度センサ４０１は、回転軸４０２の軸芯回りの回転に連動して回転し円周方向に１２極（６組）の磁極を有するリング状の多極磁石４０３と、多極磁石４０３と回転軸方向に離れた位置に設置され、回転軸４０２の軸芯回りの回転に連動して回転し円周方向に１０極（５組）の磁極を有するリング状の多極磁石４０４と、回転軸４０２の軸の周辺部に、回転軸４０２の軸とは独立に固定され、回転軸４０２の回転角の情報を担う検出信号入力信号ＩＮ１を出力する磁気センサ４０６と、磁気センサ４０６から出力される検出信号を増幅する増幅器（ＡＭＰ）４０９と、増幅器４０９によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器４１０と、回転軸４０２の軸の周辺部に、回転軸４０２の軸とは独立に固定され、回転軸４０２の回転角の情報を担う検出信号入力信号ＩＮ２を出力する磁気センサ４１２と、磁気センサ４１２から出力される検出信号を増幅する増幅器（ＡＭＰ）４１５と、増幅器４１５によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器４１６と、回転軸４０２の軸の周辺部に、回転軸４０２の軸とは独立に固定され、回転軸４０２の回転角の情報を担う検出信号（入力信号ＩＮ３）を出力する磁気センサ４１８と、磁気センサ４１８から出力される検出信号を増幅する増幅器（ＡＭＰ）４２１と、増幅器４２１によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器４２２と、回転軸４０２の軸の周辺部に、回転軸４０２の軸とは独立に固定され、回転軸４０２の回転角の情報を担う検出信号（入力信号ＩＮ４）を出力する磁気センサ４２４と、磁気センサ４２４から出力される検出信号を増幅する増幅器（ＡＭＰ）４２７と、増幅器４２７によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器４２８と、記憶部に記憶されているルックアップテーブル（ＬＵＴ）４３０と、ルックアップテーブル４３０を参照して、Ａ／Ｄ変換器４１０、および、Ａ／Ｄ変換器４１６、および、Ａ／Ｄ変換器４２２、および、Ａ／Ｄ変換器４２８からの出力信号の組み合わせから回転軸４０２の回転角を求める演算回路（ＭＰＵ）４２９とを備える。磁気センサ４０６から出力される入力信号ＩＮ１、および、磁気センサ４１２から出力される入力信号ＩＮ２は、その電気角の位相差が９０ｄｅｇである信号となっているが、これは、磁気センサ４０６、および、磁気センサ４１２を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置であるが、検出される磁界の方向が異なるように配置してもよいし、その他、所望の位相差が得られればどのような方法であってもよい。同様に、磁気センサ４１８から出力される入力信号ＩＮ３、および、磁気センサ４２４から出力される入力信号ＩＮ４は、その電気角の位相差が９０ｄｅｇである信号となっているが、磁気センサ４１８、および、磁気センサ４２４を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置で、検出される磁界の方向が異なるように配置してもよいし、その他、所望の位相差が得られればどのような方法であってもよい。演算回路４２９は、例えば、汎用のマイクロコンピュータでもよく或いは専用の信号処理ＬＳＩでもよい。多極磁石４０３および多極磁石４０４は、回転部材であり、その平面形状（回転軸４０２に垂直な平面で切断した断面形状）は、例えば、中空円筒形が好適であるが、特定の形状に限定されるものではなく、角度検出に適した形状であればよい。磁石４０３は、回転軸４０２に固定されてもよく、或いはセレーション結合されてもよい。磁石４０４は、回転軸４０２に固定されてもよく、或いはセレーション結合されてもよい。回転軸４０２の軸芯方向をＺ方向とすると、回転軸４０２の回転に伴い、多極磁石４０３および多極磁石４０４はＸＹ平面内で回転する。
【００５３】
磁気センサ４０６は、磁石４０３の回転に伴い周期的に変化する外部磁界４０５の変化を電圧変化として検出する磁気抵抗効果素子４０８と、磁気抵抗効果素子４０８にセンス電流を供給するプリント配線基板４０７とを備える。磁気センサ４１２は、磁石４０３の回転に伴い周期的に変化する外部磁界４１１の変化を電圧変化として検出する磁気抵抗効果素子４１４と、磁気抵抗効果素子４１４にセンス電流を供給するプリント配線基板４１３とを備える。磁気センサ４１８は、磁石４０４の回転に伴い周期的に変化する外部磁界４１７の変化を電圧変化として検出する磁気抵抗効果素子４２０と、磁気抵抗効果素子４２０にセンス電流を供給するプリント配線基板４１９とを備える。磁気センサ４２４は、磁石４０４の回転に伴い周期的に変化する外部磁界４２３の変化を電圧変化として検出する磁気抵抗効果素子４２６と、磁気抵抗効果素子４２６にセンス電流を供給するプリント配線基板４２５とを備える。磁気抵抗効果素子４０８および磁気抵抗効果素子４１４、磁気抵抗効果素子４２０、磁気抵抗効果素子４２６として、例えば、巨大磁気抵抗（ＧＭＲ）型、トンネル磁気抵抗（ＴＭＲ）型、弾道磁気抵抗（ＢＭＲ）型、異方性磁気抵抗（ＡＭＲ）型等の公知の磁気抵抗効果素子を用いることができる。なお、実施例１と同様、センス電流に変えて、センス電圧を供給してもよく、磁気抵抗効果素子４０８、および、磁気抵抗効果素子４１４、および、磁気抵抗効果素子４２０、および、磁気抵抗効果素子４２６の出力電圧変化を電流変化に変更してもよい。磁気抵抗効果素子４０８および磁気抵抗効果素子４１４、磁気抵抗効果素子４２０、磁気抵抗効果素子４２６の断面構造は、実施例１で示した磁気抵抗効果素子２０７と同じであるためここでは割愛する。
【００５４】
次に、図５を参照しながら演算手段について説明する。本実施例における演算手段は、図１に示すステップ１０１、１０２、１０３の手順に基づいて行う。ステップ１０２は図３に、ステップ１０３は図４に従う。ここでは、磁気センサ４０６の出力電圧を入力信号ＩＮ１、磁気センサ４１２の出力電圧を入力信号ＩＮ２とし、回転軸４０２の回転角を出力値Ｙとすればよい。
【００５５】
まず、図２に従い、直線の定義（ステップ１０１）について説明する。本実施例では、磁気抵抗効果素子４０８の抵抗が（１−cosξ）に比例して変化するため、磁気センサ４０６の出力は正弦波状の信号が予想される。磁気抵抗効果素子４１４も同様であり、演算回路４２９には、位相が９０ｄｅｇ異なる正弦波状の１対の入力信号ＩＮ１、入力信号ＩＮ２が与えられる。多極磁石４０３は円周方向に１２極（６組）の磁極を有するため、回転軸４０２が６０ｄｅｇ回転する毎にＩＮ１、ＩＮ２に正弦波状の信号１周期が得られる。一方、同様に、多極磁石４０４は周方向に１０極（５組）の磁極を有するため、回転軸４０２が７２ｄｅｇ回転する毎にＩＮ３、ＩＮ４に正弦波状の信号１周期が得られる。図１６に入力信号ＩＮ１、入力信号ＩＮ２を図示する。ここで、入力軸は回転軸４０２の回転角度（出力値Ｙ）に相当し、出力軸は磁気抵抗効果素子４０８の想定される出力電圧（ＩＮ１）、および、磁気抵抗効果素子４１４の想定される出力電圧（ＩＮ２）に相当する。ここで、出力値Ｙが０となる基準位置は、ＩＮ１／ＩＮ２＝−１、かつ、ＩＮ１＜０となる点に取っている。ＩＮ１、ＩＮ２は実測の信号を用いてもよいが、ここでは理想的な信号を用いている。実測の信号を用いても直線定義の手順は全く同じである。関数Ｆは、入力信号ＩＮ１、入力信号ＩＮ２のうち入力信号の中間値を０とした絶対値が小さい方の入力信号を絶対値の大きい方の入力信号で除する演算を含むことが好ましい。さらに、入力値Ｘと出力値Ｙとを一対一に対応させる。この条件を満たすよう、関数Ｆ（ＩＮ１、ＩＮ２）を以下のように定義する。なお、Ｆ（ＩＮ１、ＩＮ２）は入力信号ＩＮ１、入力信号ＩＮ２の中間値を０とする演算を含むものとする。（ステップ１１１）。また、本実施例では、説明のため、入力信号ＩＮ１と入力信号ＩＮ２の最大値と最小値の差を同一の値として説明する。入力信号ＩＮ１と入力信号ＩＮ２の最大値と最小値の差を同一の値とすることにより、より直線に近い入力値Ｘと出力値Ｙの関係が得られている。ここで、Ｃは周期数であり、基準位置（この場合は出力値Ｙ＝０とした）から入力信号ＩＮ１、または、入力信号ＩＮ２が繰り返された回数を表す値で、本実施例では、正弦波状の信号が６回繰り返されるので、１≦Ｃ≦６を満たす。
Ｆ（ＩＮ１、ＩＮ２）＝１＋ＩＮ１／ＩＮ２＋８×（Ｃ−１）   （１１）
（但し、｜ＩＮ２｜≧｜ＩＮ１｜かつＩＮ２≧０）
Ｆ（ＩＮ１、ＩＮ２）＝３−ＩＮ２／ＩＮ１＋８×（Ｃ−１）   （１２）
（但し、｜ＩＮ１｜＞｜ＩＮ２｜かつＩＮ１≧０）
Ｆ（ＩＮ１、ＩＮ２）＝５＋ＩＮ１／ＩＮ２＋８×（Ｃ−１）   （１３）
（但し、｜ＩＮ２｜≧｜ＩＮ１｜かつＩＮ２＜０）
Ｆ（ＩＮ１、ＩＮ２）＝７−ＩＮ２／ＩＮ１＋８×（Ｃ−１）   （１４）
（但し、｜ＩＮ１｜＞｜ＩＮ２｜かつＩＮ１＜０）
図１７に、関数Ｆによる演算結果を示す。ここで、入力軸は回転軸４０２の回転角度（出力値Ｙ）に相当し、出力軸はＦ（ＩＮ１，ＩＮ２）、すなわち、入力値Ｘに相当する。このように、入力値Ｘに対して出力値Ｙが連続で与えられるよう関数Ｆを定義することが好適であるが、関数Ｆはそのように限られるものではない。本実施例では、入力値Ｘから出力値Ｙを求める必要があるので、図１７において回転角度（出力値Ｙ）を示している入力軸と入力値Ｘを示している出力軸を入れ替えて表示する必要がある。つまり、入力値Ｘを入力軸とし、回転角度（出力値Ｙ）を出力軸とする必要がある。図１８は横軸に入力値Ｘ、縦軸に出力値Ｙ（回転軸４０２の回転角度）を示した図である。ここでは、直線を分割する必要はなく、全範囲に対して同一のＺ（Ｘ）を定義する。（ステップ１１２）。Ｙの最小値と最大値を結ぶ直線Ｚ（Ｘ）を考えると、
Ｚ（Ｘ）＝７．５×Ｘ                        （１５）
（但し、０≦Ｘ＜４８）
で与えられる（ステップ１１３）。このように、Ｚ（Ｘ）をひとつの一次関数で定義するので、一次関数を記憶するメモリー量が少なくなり、また、後述する演算処理が容易となる。本実施例では、ステップ１１３を解析的な演算により行ったが、これに限定するものではなく、実測のデータを基にして演算回路４２９により行ってもよいし、外部に用意された専用の演算装置を用いて行ってもよいし、その他どのような手段を用いて定義してもよい。例えば、後述のように、入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）を基にルックアップテーブルを作成するが、入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）を流用し、演算回路４２９または外部に用意した専用の演算装置が最小２乗法により直線を定義するという方法が考えられる。以上により、直線の定義（ステップ１０１）は終了となる。
【００５６】
次に、図３に従いルックアップテーブル作成（ステップ１０２）の手順について説明する。まず、ＡＤＲ（ｉ）とＸ（ｉ）の対応関係を定義する（ステップ１２１）。ＡＤＲ（ｉ）＝Ｇ（Ｘ（ｉ））で表わされる関数Ｇを定義すればよい。本実施例では、ルックアップテーブルの要素数は１００８とする。入力値Ｘの最大値は、関数Ｆの定義より４８となる。特に精度を向上させたい部分がなければ単純に定数倍してアドレスを割り振ればよく、１００８／４８＝２１を用いて、
Ｇ（Ｘ（ｉ））＝２１×Ｘ（ｉ）                  （１６）
（但し、０≦Ｘ＜４８）
とすればよい。続いて、入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）より入力値Ｘ（ｉ）を求める（ステップ１２２）。入力信号ＩＮ１（ｉ）は磁気センサ４０６から得られた信号をＡ／Ｄ変換器４１０を通して取り込まれたものであり、入力信号ＩＮ２（ｉ）は磁気センサ４１２より得られた信号をＡ／Ｄ変換器４１６を通して取り込まれたものである。入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）は、理想的な信号を用いても差し支えないし、実測の信号を用いてもよい。一般的には、実測の信号を用いた方が、精度が向上する。ここでは、実測の信号を用いてテーブルを作成する。入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）の実測値を図１９に示す。ここで、入力軸は回転軸４０２の回転角度（出力値Ｙ（ｉ））に相当し、出力軸は磁気抵抗効果素子４０８の出力電圧（ＩＮ１（ｉ））、および、磁気抵抗効果素子４１４の出力電圧（ＩＮ２（ｉ））に相当する。入力値Ｘ（ｉ）は、ステップ１１１にて定義した関数Ｆを用いて、Ｘ（ｉ）＝Ｆ（ＩＮ１（ｉ）、ＩＮ２（ｉ））より求めればよい。この演算結果は図２０となる。ここで、入力軸は回転軸４０２の回転角度（出力値Ｙ（ｉ））に相当し、出力軸はＦ（ＩＮ１，ＩＮ２）、すなわち、入力値Ｘ（ｉ）に相当する。ここで、図１９に示されているプロットＰ１、プロットＰ２（Ｙ（ｉ）＝１４９．４４３、ＩＮ１（ｉ）＝０．７５９、ＩＮ２（ｉ）＝−０．６６６、Ｃ＝３）について演算を行うと、｜ＩＮ１（ｉ）｜＞｜ＩＮ２（ｉ）｜かつＩＮ１（ｉ）≧０の条件を満たすので、式（１２）を用いて、Ｆ（ＩＮ１（ｉ）、ＩＮ２（ｉ））＝３−ＩＮ２（ｉ）／ＩＮ１（ｉ）＋８×（Ｃ−１）となる。値を代入して計算すると、Ｘ（ｉ）＝１９．８７７となり、図２０に示すプロットＱ１となる。図１９にあるすべてのプロットに対して同様の演算を行った結果が図２０である。入力値Ｘ（ｉ）を入力軸とし、回転角度（出力値Ｙ（ｉ））を出力軸とするとルックアップテーブルの作成が容易であるため、図２１に入力軸に入力値Ｘ（ｉ）、出力軸に出力値Ｙ（ｉ）（回転軸４０２の回転角度）を示した図を示す。プロットＱ１について、入力値Ｘ（ｉ）と出力値Ｙ（ｉ）を入れ替えると、プロットＲ１（Ｘ（ｉ）＝１９．８７７、Ｙ（ｉ）＝１４９．４４３）となる。最後に、Ｘ（ｉ）に対応付けられるＡＤＲ（ｉ）を有するａ［ＡＤＲ（ｉ）］に Ｚ（Ｘ（ｉ））とＹ（ｉ）との差 を格納し、記憶部に記憶する（ステップ１２３）。プロットＲ１に対する演算を用いて説明を行う。関数Ｇを用いて、ＡＤＲ（ｉ）＝Ｇ（Ｘ（ｉ））を計算する。２１×Ｘ（ｉ）となり、アドレスＡＤＲ（ｉ）は４１７．４１７となる。また、式（１５）に示される関数Ｚを用いて、Ｚ（Ｘ（ｉ））＝７．５×Ｘ（ｉ）となり、Ｚ（Ｘ（ｉ））＝１４９．０７８である。Ｚ（Ｘ（ｉ））とＹ（ｉ）との差をもとめると、Ｙ（ｉ）−Ｚ（Ｘ（ｉ））＝０．３６５となる。つまり、配列要素ａ［４１７．４１７］に０．３６５を格納すればよい。これをプロットＳ１とする。この操作を図２１にあるプロットすべてに対して行った結果が図２２である。ここで、入力軸はアドレスＡＤＲ（ｉ）に相当し、出力軸は配列要素ａ［ＡＤＲ（ｉ）］に相当する。ところが、上記のような計���を行うと、例えば、配列要素ａ［４１７．４１７］に０．３６５が格納されることになるが、ａ［ＡＤＲ（ｉ）］は配列要素であるため、アドレスＡＤＲ（ｉ）が整数でなければ実際には格納できない。最も簡単な方法では、４１７．４１７の小数点未満を切り捨て、あるいは切り上げ、あるいは四捨五入し、そのアドレスに０．３６５を格納すればよい。ただし、この方法では、明らかに誤差が大きくなる。そこで、本実施例では、直線補間を行うことによりルックアップテーブルを作成する。直線補間の方法については図２３を用いて説明する。図２３は、図２２のプロットＳ１付近を拡大したものである。入力軸および出力軸は図２２と同様である。図２３に示されているプロットＴ１（４１６．０８８、０．４８９）およびプロットＴ２（４１８．７６７、０．２３５）は、プロットＳ１と同様にして求められたプロットである。このプロットＴ１，プロットＴ２とプロットＳ１を用いてａ［４１７］およびａ［４１８］に格納する値を決定する。具体的には、プロットＴ１およびプロットＳ１を通る直線を求め、ＡＤＲ（ｉ）＝４１７と交わる点を求めると、プロットＵ１（４１７、０．４０６）となる。これにより、ａ［４１７］＝０．４０６とすればよいことが分かる。同様に、プロットＴ２およびプロットＳ１を通る直線がＡＤＲ（ｉ）＝４１８と交わる点を求めると、プロットＵ２（４１８、０．３１１）が求められ、ａ［４１８］＝０．３１１とすればよいことが分かる。すなわち、アドレスＡＤＲより値が小さいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］と、アドレスＡＤＲより値が大きいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］とを結んだ直線が、アドレスＡＤＲを示す直線と交わる点を求め、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］であるとすればよい。すべてのａ［ＡＤＲ（ｉ）］（０≦ＡＤＲ（ｉ）≦１００７）に対してこのように求めることにより、ルックアップテーブルが作成される。
【００５７】
入力値Ｘに対応する角度を直接ルックアップテーブルに格納した場合、０〜３６０ｄｅｇをテーブルに格納する必要がある。一方、本実施例では、図２２より、ルックアップテーブルに格納される値は−０．８〜＋０．８ｄｅｇの範囲となり、ルックアップテーブル１要素につき、ｌｏｇ２（３６０／１．６）＝７．８ｂｉｔ削減することが可能となる。例えば、０．０１ｄｅｇ分解能でルックアップテーブルを作成したい場合、角度を直接格納する方式では、格納される値は０〜３６０００となり、１６ｂｉｔの領域（０〜６５５３５）が必要である。一方、本実施例では、−８０〜８０を格納すればよく、８ｂｉｔの領域（−１２８〜１２７）があれば十分である。本実施例では、ルックアップテーブルの要素数は１００８となっているので、ルックアップテーブル作成に必要なメモリ量は、直接角度を格納するタイプでは、１６×１００８＝１６１２８ｂｉｔとなり、約２Ｋバイトである。一方、本実施例では、８×１００８ｂｉｔとなるので、約１Ｋバイトのメモリで同等の効果を得ることが可能となる。削減されるメモリの割合は、ルックアップテーブルに求められる分解能により異なり、例えば、０．１ｄｅｇの分解能であればメモリは３分の１に削減される。なお、本実施例では、入力信号ＩＮ１、入力信号ＩＮ２は、回転軸４０２が一回転する間に６周期の信号を出力する。そのため、図２２に示したルックアップテーブルにおいても、アドレス１６８毎によく似た信号が繰り返されている（実測の値より求めているため厳密に同一ではない）。そこで、求められる精度が、例えば、０．１ｄｅｇ程度であれば、アドレス０〜１６７を記憶しておき、それ以降のアドレスが指定された場合は、アドレス０〜１６７の繰り返しであるとして演算を行うと、ルックアップテーブルに使用するメモリをさらに削減することが可能である。その場合は、
ＡＤＲ＝２１×Ｘ／６              （１７）
（但し、０≦Ｘ＜４８）
と定義すればよい。なお、本実施例では、ステップ１０２は、演算回路４２９により行っているが、外部に用意された専用の演算装置等を用いて行うことが考えられ、演算が可能であれば、その他どのような手段で行ってもよい。
【００５８】
次に、図４に従い演算装置による出力演算（ステップ１０３）について説明する。まず、Ａ／Ｄ変換器４１０より入力信号ＩＮ１を、Ａ／Ｄ変換器４１６より入力信号ＩＮ２を取り込み、取り込んだ値より入力値Ｘを求める（ステップ１３１）。入力値Ｘを求める関数Ｆには、周期数Ｃが含まれる。前述のように、周期数とは、基準位置（この場合は出力値Ｙ＝０とした）から入力信号ＩＮ１、または、入力信号ＩＮ２が繰り返された回数を表す値である。周期数Ｃについては、入力信号ＩＮ１、入力信号ＩＮ２の変化から増減を検出でき、本実施例の場合は、前述のように、出力値Ｙが０となる基準位置を、ＩＮ１／ＩＮ２＝−１、かつ、ＩＮ１＜０となる点としているので、図１９を見れば分かるように、周期数Ｃは、ＩＮ１／ＩＮ２＝−１、かつ、ＩＮ１＜０となる点で切り替わることとなり、現在の周期数を記憶しておき、切り替え点に達する毎に加算または減算していけば周期数を正しく検出することが可能である。ただし、電源切断後に回転軸４０２が回転した場合には周期数Ｃが正しく検出できない。そのため、電源切断後に回転軸４０２が回転する可能性がある場合は、電源投入時に周期数Ｃを検出する必要がある。電源投入時の周期数Ｃの求め方については後述する。周期数Ｃが分かれば、関数Ｆを用いて、Ｘ＝Ｆ（ＩＮ１、ＩＮ２）により入力値Ｘを求めることができる。例として、図１９に示した実測波形におけるプロットＰ１、プロットＰ２の値を用いて説明する。ＩＮ１＝０．７５９、ＩＮ２＝−０．６６６、Ｓ＝３であり、関数Ｆに従って計算すると、Ｘ＝１９．８７７となる。次に、入力値Ｘより参照するアドレスＡＤＲを求める（ステップ１３２）。関数Ｇを用いて、ＡＤＲ＝Ｇ（Ｘ）により求めればよく、ＡＤＲ＝４１７．４１７となる。
【００５９】
続いて、予想される出力値Ｚ（Ｘ）の演算を行う（ステップ１３３）。関数Ｚを用いて演算を行うと、Ｚ（Ｘ）＝ ７．５×Ｘであるから、Ｚ（Ｘ）＝ ７．５×１９．８７７＝１４９．０７８となる。
【００６０】
最後に、ルックアップテーブルを記憶部より読み出し、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］を参照して、予想される出力値Ｚ（Ｘ） を補正して出力する（ステップ１３４）。ここで、ａ［４１７．４１７］を参照する必要があるが、前述のように、ルックアップテーブルはアドレスが整数でなければ存在しない。ルックアップテーブル作成時と同様、最も簡単な方法では、４１７．４１７の小数点未満を切り捨て、あるいは切り上げ、あるいは四捨五入したアドレスを参照することである。ただし、この方法では、明らかに誤差が大きくなる。そこで、本実施例では、直線補間を行い、ルックアップテーブルを参照する。直線補間は図２４のように行われる。図２４はルックアップテーブルの一部を拡大して示しており、入力軸・出力軸は図２２と同様である。参照するアドレスが整数でない場合は、その前後のテーブル値を直線で結び、所望のアドレスと重なる点を参照する。ここで、ａ［ＡＤＲ（ｉ）］は配列要素であり、要素数は有限である。従って、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］が存在しない場合がある。そのような場合は、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］が存在するアドレスＡＤＲのうち、アドレスＡＤＲより値が小さいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］と、アドレスＡＤＲより値が大きいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］とを結んだ直線が、アドレスＡＤＲを示す直線と交わる点を求め、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］であるとすればよい。例えば、アドレス４１７．４１７を参照したいならば、小数点以下を切り捨てたアドレス４１７（テーブル値０．４０６）と小数点以下を切り上げたアドレス４１８（テーブル値０．３１１）を直線で結び、アドレス４１７．４１７と重なる点（プロットＶ１）を参照すればよい。プロットＶ１のテーブル値に相当する値は０．３６６となる。出力値Ｙは、Ｙ＝Ｚ（Ｘ）＋ａ［ＡＤＲ］で与えられ、この場合はＹ＝１４９．０７８＋０．３６６＝１４９．４４４［ｄｅｇ］が得られる。
【００６１】
ここからは、電源投入時の周期数Ｃの求め方について説明する。まず、入力信号ＩＮ１、入力信号ＩＮ２より、電気角位相を求める。この電気角位相をＡＮＧ1とする。電気角位相は、例えば、ａｒｃｔａｎ関数を用いて求めることが可能である。ａｒｃｔａｎ関数は演算回路４２９に負荷がかかるが、前述のように電源投入時のみ行う動作であれば問題とならない。リング磁石４０３が１２極（６組）の磁極を有することから、ＡＮＧ１は、回転軸４０２の回転角の増加に伴い単調に増加し、６０ｄｅｇ周期で繰り返す信号となる。同様にして、入力信号ＩＮ３、入力信号ＩＮ４からも電気角位相を求める。この電気角位相をＡＮＧ２とする。リング磁石４０４が１０極（５組）の磁極を有することから、ＡＮＧ２は、回転軸４０２の回転角の増加に伴い単調に増加し、７２ｄｅｇ周期で繰り返す信号となる。電気角位相差ΔＡＮＧを以下のように定義すると、電気角位相差ΔＡＮＧより周期数Ｃを求めることが可能となる。ここで、入力信号ＩＮ１、入力信号ＩＮ２から得られる第１の電気角位相と、入力信号ＩＮ３、入力信号ＩＮ４から得られる第２の電気角位相とは、異なる電気角位相である必要があり、それぞれの周期数は互いに素の関係を有する、または、整数倍の関係にならないことが好ましい。周期数が整数倍であると、以下の周期数を求める演算Ｃにおいて、周期数が決定できないからである。
ΔＡＮＧ＝ＡＮＧ１−ＡＮＧ２                  （１８）
（但し、ＡＮＧ１≧ＡＮＧ２）
ΔＡＮＧ＝３６０＋ＡＮＧ１−ＡＮＧ２          （１９）
（但し、ＡＮＧ１＜ＡＮＧ２）
入力軸を回転軸４０２の回転角として、出力軸にＡＮＧ１、ＡＮＧ２、ΔＡＮＧを示すと、図２５となる。ここで、回転軸４０２の回転角と電気角位相差ΔＡＮＧは一対一に対応するので、（電気角）周期数Ｃを求めることが可能となる。本実施例では、周期数Ｃは、１≦Ｓ≦６で、６０ｄｅｇ毎に切り替わるので、Ｃ＝ΔＡＮＧ／６＋１として小数点以下を切り捨てれば周期数を求めることができる。ここではＡＮＧ１、ＡＮＧ２がともに０となる点をＣ＝１の基準位置としているが、基準位置はどこにとってもよい。つまり、電気角位相差ΔＡＮＧを第１の電気角位相差とした場合の基準位置を基準とした第１の電気角位相差である第２の電気角位相差に基づいて、周期数を求めている。すでに述べたように、電源投入時のみ、このように周期数Ｃを演算により求め、通常動作中は入力信号の変化から周期数Ｃを求めてもよいし、常に周期数Ｃを演算により求めてもよい。ただし、常に演算により周期数Ｃを求める場合、ａｒｃｔａｎ演算を行うと演算回路４２９にかかる負荷が大きくなってしまうので注意が必要である。また、電源切断後に回転軸４０２が動かないことが分かっているのであれば、このような演算は省略可能で、入力信号変化のみから周期数Ｃを求めることができる。すなわち、入力信号ＩＮ３、入力信号ＩＮ４を求めるための構成は省略可能となる。
（実施例３）
【００６２】
次に、図２６を参照しながら本実施例に関わる角度センサ６０１の構成について説明する。角度センサ６０１は、回転軸６０２の所定の基準位置からの多回転回転角（０ｄｅｇ〜１０８０ｄｅｇ）を検出するための角度検出装置である。回転軸６０２として、例えば、ステアリングシャフトを挙げることができるが、これに限定されるものではない。角度センサ６０１は、回転軸６０２の軸芯回りの回転に連動して回転し、その外周に３０歯を有する歯車６０３と、回転軸６０４の軸芯回りの回転に連動して回転し、その外周に１５歯を有し、歯車６０３と噛合する歯車６０５と、回転軸６０４の軸芯回りの回転に連動して回転する磁石６０６と、回転軸６０７の軸芯回りの回転に連動して回転し、その外周に１８歯を有し、歯車６０３と噛合する歯車６０８と、回転軸６０７の軸芯回りの回転に連動して回転する磁石６０９と、回転軸６０４の軸の周辺部に、回転軸６０４の軸とは独立に固定され、回転軸６０４の回転角の情報を担う検出信号（入力信号ＩＮ１）を出力する磁気センサ６１１と、磁気センサ６１１から出力される検出信号を増幅する増幅器（ＡＭＰ）６１４と、増幅器６１４によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器６１５と、回転軸６０４の軸の周辺部に、回転軸６０４の軸とは独立に固定され、回転軸６０４の回転角の情報を担う検出信号（入力信号ＩＮ２）を出力する磁気センサ６１７と、磁気センサ６１７から出力される検出信号を増幅する増幅器（ＡＭＰ）６２０と、増幅器６２０によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器６２１と、回転軸６０７の軸の周辺部に、回転軸６０７の軸とは独立に固定され、回転軸６０７の回転角の情報を担う検出信号（入力信号ＩＮ３）を出力する磁気センサ６２３と、磁気センサ６２３から出力される検出信号を増幅する増幅器（ＡＭＰ）６２６と、増幅器６２６によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器６２７と、回転軸６０７の軸の周辺部に、回転軸６０７の軸とは独立に固定され、回転軸６０７の回転角の情報を担う検出信号（入力信号ＩＮ４）を出力する磁気センサ６２９と、磁気センサ６２９から出力される検出信号を増幅する増幅器（ＡＭＰ）６３２と、増幅器６３２によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するＡ／Ｄ変換器６３３と、記憶部に記憶されているルックアップテーブル（ＬＵＴ）６３５と、ルックアップテーブル６３５を参照して、Ａ／Ｄ変換器６１５、および、Ａ／Ｄ変換器６２１、および、Ａ／Ｄ変換器６２７、および、Ａ／Ｄ変換器６３３からの出力信号の組み合わせから回転軸６０２の回転角を求める演算回路（ＭＰＵ）６３４とを備える。磁気センサ６１１から出力される入力信号ＩＮ１、および、磁気センサ６１７から出力される入力信号ＩＮ２は、その電気角の位相差が９０ｄｅｇである信号となっているが、これは、磁気センサ６１１、および、磁気センサ６１７を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置であるが、検出される磁界の方向が異なるように配置してもよいし、その他、所望の位相差が得られればどのような方法であってもよい。例えば、磁気センサ６１１と磁気センサ６１７がＧＭＲ素子を用いた磁気センサであり、磁石６０６と対向する位置に、磁気センサ６１１と磁気センサ６１７を磁化固定層が９０ｄｅｇ異なるように並べるような配置が考えられる。同様に、磁気センサ６２３から出力される入力信号ＩＮ３、および、磁気センサ６２９から出力される入力信号ＩＮ４は、その電気角の位相差が９０ｄｅｇである信号となっているが、磁気センサ６２３、および、磁気センサ６２９を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置で、検出される磁界の方向が異なるように配置してもよいし、その他、所望の位相差が得られればどのような方法であってもよい。例えば、磁気センサ６２３と磁気センサ６２９がＧＭＲ素子を用いた磁気センサであり、磁石６０９と対向する位置に、磁気センサ６２３と磁気センサ６２９を磁化固定層が９０ｄｅｇ異なるように並べるような配置が考えられる。演算回路６３４は、例えば、汎用のマイクロコンピュータでもよく或いは専用の信号処理ＬＳＩでもよい。磁石６０６および磁石６０９は、回転部材であり、その平面形状（回転軸６０４または回転軸６０７に垂直な平面で切断した断面形状）は、例えば、長方形や、円形が好適であるが、特定の形状に限定されるものではなく、角度検出に適した形状であればよい。歯車６０３は、回転軸６０２に固定されてもよく、或いはセレーション結合されてもよい。歯車６０５および磁石６０６は、回転軸６０４に固定されてもよく、或いはセレーション結合されてもよい。歯車６０８および磁石６０９は、回転軸６０７に固定されてもよく、或いはセレーション結合されてもよい。回転軸６０２の軸芯方向をＺ方向とすると、回転軸６０２の回転に伴い、歯車６０３はＸＹ平面内で回転し、回転軸６０４の軸芯方向をＺ方向とすると、回転軸６０４の回転に伴い、歯車６０５および磁石６０６はＸＹ平面内で回転し、回転軸６０７の軸芯方向をＺ方向とすると、回転軸６０７の回転に伴い、歯車６０８および磁石６０９はＸＹ平面内で回転する。
【００６３】
磁気センサ６１１は、磁石６０６の回転に伴い周期的に変化する外部磁界６１０の変化を電圧変化として検出する磁気抵抗効果素子６１３と、磁気抵抗効果素子６１３にセンス電流を供給するプリント配線基板６１２とを備える。磁気センサ６１７は、磁石６０６の回転に伴い周期的に変化する外部磁界６１６の変化を電圧変化として検出する磁気抵抗効果素子６１９と、磁気抵抗効果素子６１９にセンス電流を供給するプリント配線基板６１８とを備える。磁気センサ６２３は、磁石６０９の回転に伴い周期的に変化する外部磁界６２２の変化を電圧変化として検出する磁気抵抗効果素子６２５と、磁気抵抗効果素子６２５にセンス電流を供給するプリント配線基板６２４とを備える。磁気センサ６２９は、磁石６０９の回転に伴い周期的に変化する外部磁界６２８の変化を電圧変化として検出する磁気抵抗効果素子６３１と、磁気抵抗効果素子６３１にセンス電流を供給するプリント配線基板６３０とを備える。磁気抵抗効果素子６１３および磁気抵抗効果素子６１９、磁気抵抗効果素子６２５、磁気抵抗効果素子６３１として、例えば、巨大磁気抵抗（ＧＭＲ）型、トンネル磁気抵抗（ＴＭＲ）型、弾道磁気抵抗（ＢＭＲ）型、異方性磁気抵抗（ＡＭＲ）型等の公知の磁気抵抗効果素子を用いることができる。なお、実施例１、２と同様、センス電流に変えて、センス電圧を供給してもよく、磁気抵抗効果素子６１３、および、磁気抵抗効果素子６１９、および、磁気抵抗効果素子６２５、および、磁気抵抗効果素子６３１の出力電圧変化を電流変化に変更してもよい。磁気抵抗効果素子６１３および磁気抵抗効果素子６１９、磁気抵抗効果素子６２５、磁気抵抗効果素子６３１の断面構造は、実施例１で示した磁気抵抗効果素子２０７と同じであるためここでは割愛する。
【００６４】
次に、図７を参照しながら演算手段について説明する。本実施例における演算手段は、図１に示すステップ１０１、１０２、１０３の手順に基づいて行う。ステップ１０２は図５に、ステップ１０３は図７に従う。ここでは、磁気センサ６１１の出力電圧を入力信号ＩＮ１、磁気センサ６１７の出力電圧を入力信号ＩＮ２とし、回転軸６０２の回転角を出力値Ｙとすればよい。
【００６５】
まず、図２に従い、直線の定義（ステップ１０１）について説明する。本実施例では、磁気抵抗効果素子６１３の抵抗が（１−cosξ）に比例して変化するため、磁気センサ６１１の出力は正弦波状の信号が予想される。磁気抵抗効果素子６１９も同様であり、演算回路６３４には、位相が９０ｄｅｇ異なる正弦波状の１対の入力信号ＩＮ１、入力信号ＩＮ２が与えられる。磁石６０６が回転軸６０４のまわりを３６０ｄｅｇ回転する毎にＩＮ１、ＩＮ２に正弦波状の信号１周期が得られる。歯車６０３の歯数が３０歯、歯車６０５の歯数が１５歯であることから、回転軸６０２が１８０ｄｅｇ回転する間に回転軸６０４は３６０ｄｅｇ回転する。すなわち、回転軸６０２が１８０ｄｅｇ回転する毎にＩＮ１、ＩＮ２に正弦波状の信号１周期が得られる。一方、同様に、磁石６０９が回転軸６０７のまわりを３６０ｄｅｇ回転する毎にＩＮ３、ＩＮ４に正弦波状の信号１周期が得られる。歯車６０３の歯数が３０歯、歯車６０８の歯数が１８歯であることから、回転軸６０２が２１６ｄｅｇ回転する間に回転軸６０７は３６０ｄｅｇ回転する。すなわち、回転軸６０２が２１６ｄｅｇ回転する毎にＩＮ３、ＩＮ４に正弦波状の信号１周期が得られる。図２７に入力信号ＩＮ１、入力信号ＩＮ２を図示する。ここで、入力軸は回転軸６０２の多回転を含む回転角度（出力値Ｙ）に相当し、出力軸は磁気抵抗効果素子６１３の想定される出力電圧（ＩＮ１）、および、磁気抵抗効果素子６１９の想定される出力電圧（ＩＮ２）に相当する。ＩＮ１、ＩＮ２は実測の信号を用いてもよいが、ここでは理想的な信号を用いている。実測の信号を用いても直線定義の手順は全く同じである。関数Ｆには、入力信号ＩＮ１、入力信号ＩＮ２のうち入力信号の中間値を０とした絶対値が小さい方の入力信号を絶対値の大きい方の入力信号で除する演算が含まれることが好ましく、また、入力値Ｘと出力値Ｙが一対一に対応することが好ましい。この条件を満たすよう、関数Ｆを以下のように定義する。（ステップ１１１）。なお、Ｆ（ＩＮ１、ＩＮ２）は入力信号ＩＮ１、入力信号ＩＮ２の中間値を０とする演算を含むものとする。また、本実施例では、説明のため、入力信号ＩＮ１と入力信号ＩＮ２の最大値と最小値の差を同一の値として説明する。入力信号ＩＮ１と入力信号ＩＮ２の最大値と最小値の差を同一の値とすることにより、より直線に近い入力値Ｘと出力値Ｙの関係が得られている。ここで、Ｃは周期数であり、基準位置（この場合は出力値Ｙ＝０とした）から入力信号ＩＮ１、または、入力信号ＩＮ２が繰り返された回数を表す値で、本実施例では、正弦波状の信号が６回繰り返されるので、1≦Ｃ≦６を満たす。
Ｆ（ＩＮ１、ＩＮ２）＝２１×（１＋ＩＮ１／ＩＮ２＋８×（Ｃ−１））  （２０）
（但し、｜ＩＮ２｜≧｜ＩＮ１｜かつＩＮ２≧０）  
Ｆ（ＩＮ１、ＩＮ２）＝２１×（３−ＩＮ２／ＩＮ１＋８×（Ｃ−１））  （２１）
（但し、｜ＩＮ１｜＞｜ＩＮ２｜かつＩＮ１≧０） 
Ｆ（ＩＮ１、ＩＮ２）＝２１×（５＋ＩＮ１／ＩＮ２＋８×（Ｃ−１））  （２２）
（但し、｜ＩＮ２｜≧｜ＩＮ１｜かつＩＮ２＜０） 
Ｆ（ＩＮ１、ＩＮ２）＝２１×（７−ＩＮ２／ＩＮ１＋８×（Ｃ−１））  （２３）
（但し、｜ＩＮ１｜＞｜ＩＮ２｜かつＩＮ１＜０） 
図２８に、関数Ｆによる演算結果を示す。ここで、入力軸は回転軸６０２の多回転を含む回転角度（出力値Ｙ）に相当し、出力軸はＦ（ＩＮ１，ＩＮ２）、すなわち、入力値Ｘに相当する。このように、入力値Ｘに対して出力値Ｙが連続で与えられるよう関数Ｆを定義することが好適であるが、関数Ｆはそのように限られるものではない。本実施例では、入力値Ｘから出力値Ｙを求める必要があるので、図２８において回転角度（出力値Ｙ）を示している入力軸と入力値Ｘを示している出力軸を入れ替えて表示する必要がある。つまり、入力値Ｘを入力軸とし、回転角度（出力値Ｙ）を出力軸とする必要がある。図２９は入力軸に入力値Ｘ、出力軸に出力値Ｙ（回転軸６０２の回転角度）を示した図である。ここでは、直線を分割する必要はなく、全範囲に対して同一のＺ（Ｘ）を定義する。（ステップ１１２）。Ｙの最小値と最大値を結ぶ直線Ｚ（Ｘ）を考えると、Ｚ（Ｘ）＝１０８０／１００８ ×Ｘで与えられる（ステップ１１３）。このように、Ｚ（Ｘ）をひとつの一次関数で定義するので、一次関数を記憶するメモリー量が少なくなり、また、後述する演算処理が容易となる。本実施例では、ステップ１１３を解析的な演算により行ったが、これに限定するものではなく、実測のデータを基にして演算回路６３４により行ってもよいし、外部に用意された専用の演算装置を用いて行ってもよいし、その他どのような手段を用いて定義してもよい。例えば、後述のように、入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）を基にルックアップテーブルを作成するが、入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）を流用し、演算回路６３４または外部に用意した専用の演算装置が最小２乗法により直線を定義するという方法が考えられる。以上により、直線の定義（ステップ１０１）は終了となる。
【００６６】
次に、図５に従いルックアップテーブル作成（ステップ１０２）の手順について説明する。まず、ＡＤＲ（ｉ）とＸ（ｉ）の対応関係を定義する（ステップ１２１）。ＡＤＲ（ｉ）＝Ｇ（Ｘ（ｉ））で表わされる関数Ｇを定義すればよい。本実施例では、ルックアップテーブルの要素数は１００８とする。入力値Ｘの最大値は、関数Ｆの定義より１００８となる。本実施例では、
Ｇ（Ｘ（ｉ））＝Ｘ（ｉ）                      （２４）
（但し、０≦Ｘ＜１００８）
とする。続いて、入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）より入力値Ｘ（ｉ）を求める（ステップ１２２）。入力信号ＩＮ１（ｉ）は磁気センサ６１１から得られた信号をＡ／Ｄ変換器６１５を通して取り込まれた実測の値であり、入力信号ＩＮ２（ｉ）は磁気センサ６１７より得られた信号をＡ／Ｄ変換器６２１を通して取り込まれた実測の値である。入力信号ＩＮ１（ｉ）、入力信号ＩＮ２（ｉ）の実測値を図３０に示す。ここで、入力軸は回転軸６０２の回転角度（出力値Ｙ（ｉ））に相当し、出力軸は磁気抵抗効果素子６１３の出力電圧（ＩＮ１（ｉ））、および、磁気抵抗効果素子６１９の出力電圧（ＩＮ２（ｉ））に相当する。ここで、出力値Ｙが０となる基準位置は、ＩＮ１（ｉ）／ＩＮ２（ｉ）＝−１、かつ、ＩＮ１＜０となる点に取っている。入力値Ｘ（ｉ）は、ステップ１１１にて定義した関数Ｆを用いて、Ｘ（ｉ）＝Ｆ（ＩＮ１（ｉ）、ＩＮ２（ｉ））より求めればよい。この演算結果は図３１となる。ここで、入力軸は回転軸６０２の回転角度（出力値Ｙ（ｉ））に相当し、出力軸はＦ（ＩＮ１，ＩＮ２）、すなわち、入力値Ｘ（ｉ）に相当する。ここで、図３０に示されているプロットＰ３、プロットＰ４（Ｙ（ｉ）＝４４８．９７９、ＩＮ１（ｉ）＝０．７６８、ＩＮ２（ｉ）＝−０．７０８、Ｃ＝３）について演算を行うと、｜ＩＮ１（ｉ）｜＞｜ＩＮ２（ｉ）｜かつＩＮ１（ｉ）≧０の条件を満たすので、Ｆ（ＩＮ１（ｉ）、ＩＮ２（ｉ））＝２１×（３−ＩＮ２（ｉ）／ＩＮ１（ｉ）＋８×（Ｃ−１））となる。値を代入して計算すると、Ｘ（ｉ）＝４１８．３６８となり、図３１に示すプロットＱ２となる。図３０にあるすべてのプロットに対して同様の演算を行った結果が図３１である。入力値Ｘ（ｉ）を入力軸とし、回転角度（出力値Ｙ（ｉ））を出力軸とするとルックアップテーブルの作成が容易であるため、図３２に横軸を入力値Ｘ（ｉ）、縦軸を出力値Ｙ（ｉ）（回転軸６０２の回転角度）とした図を示す。プロットＱ２について、入力値Ｘ（ｉ）と出力値Ｙ（ｉ）を入れ替えると、プロットＲ２（Ｘ（ｉ）＝４１８．３６８、Ｙ（ｉ）＝４４８．９７９）となる。最後に、入力値Ｘ（ｉ）に対応付けられるアドレスＡＤＲ（ｉ）を有するａ［ＡＤＲ（ｉ）］にＺ−１（Ｙ（ｉ））とＸ（ｉ）との差 を格納し記憶部に記憶する（ステップ１４３）。プロットＲ２に対する演算を用いて説明を行う。関数Ｇを用いて、ＡＤＲ（ｉ）＝Ｇ（Ｘ（ｉ））を計算する。ＡＤＲ（ｉ）＝Ｘ（ｉ）となり、アドレスＡＤＲ（ｉ）は４１８．３６８となる。また、関数Ｚを用いて、Ｚ−１（Ｙ（ｉ））＝Ｙ（ｉ）×１００８／１０８０となり、Ｚ−１（Ｙ（ｉ））＝４１９．０４７である。Ｚ−１（Ｙ（ｉ））とＸ（ｉ）との差をもとめると、Ｚ−１（Ｙ（ｉ））−Ｘ（ｉ）＝０．６７９となる。つまり、配列要素ａ［４１８．３６８］に０．６７９を格納すればよい。これをプロットＳ２とする。この操作を図３２にあるプロットすべてに対して行った結果が図３３である。ここで、入力軸はアドレスＡＤＲ（ｉ）に相当し、出力軸は配列要素ａ［ＡＤＲ（ｉ）］に相当する。実施例２と同様に、ＡＤＲ（ｉ）が整数の場合について配列要素ａ［ＡＤＲ（ｉ）］を求める必要があり、直線補��を行うことによりルックアップテーブルを作成する。直線補間の方法は実施例２と同様であり、図３４を用いて説明する。図３４は、図３３のプロットＳ２付近を拡大したものである。入力軸および出力軸は図３３と同様である。プロットＳ２と同様にしてプロットＴ３（４１７．１４０、０．９２３）、Ｔ４（４１９．７０８、０．３２４）を求める。プロットＳ２とプロットＴ３を結んだ直線とＡＤＲ（ｉ）＝４１８とが交わる点がプロットＵ３（４１８、０．７７７）である。従って、ａ［４１８］＝０．７７７となる。同様にプロットＳ２とプロットＴ４を結んだ直線とＡＤＲ（ｉ）＝４１９とが交わる点がプロットＵ４（４１９、０．５１２）である。従って、ａ［４１９］＝０．５１２となる。すべてのａ［ＡＤＲ（ｉ）］（０≦ＡＤＲ（ｉ）≦１００７）に対してこのように求めることにより、ルックアップテーブルが作成される。
【００６７】
本実施例では、ルックアップテーブルに格納される値は図３３より、−１．６〜＋１．６の範囲となる。これは、Ｚ（Ｘ）＝ １０８０×Ｘ／１００８であるから、−１．８〜＋１．８ｄｅｇを格納することに相当する。ルックアップテーブルに直接角度を格納した場合、格納される最大値は１０８０となるのに対して、本実施例では、−１．８〜＋１．８ｄｅｇに相当する値を格納すればよく、格納される最大値が３．６ｄｅｇである場合に等しい。従って、ルックアップテーブル１要素につき、ｌｏｇ２（１０８０／３．６）＝８．２ｂｉｔ削減することが可能となる。具体的な例を挙げると、０．１ｄｅｇ分解能でルックアップテーブルを作成したい場合、角度を直接格納する方式では０〜１０８０ｄｅｇを格納する必要があり、格納される値は０〜１０８００となり、１４ｂｉｔ（０〜１６３８３）の領域が必要である。一方、本実施例では、０．１ｄｅｇ分解能を得るためには、０．１×１００８／１０８０分解能のテーブルを作成する必要がある。３．２／（０．１×１００８／１０８０）＝３４．３となり、６ｂｉｔ（０〜６３）の領域が必要となる。本実施例では、ルックアップテーブルの要素数は１００８となっているので、ルックアップテーブル作成に必要なメモリ量は、直接角度を格納するタイプでは、１４×１００８＝１４１１２ｂｉｔとなり、約１．８Ｋバイトである。一方、本実施例では、６×１００８ｂｉｔとなるので、約０．８Ｋバイトのメモリで同等の効果を得ることが可能となる。本実施例では、ステップ１０２は、演算回路６３４により行っているが、外部に用意された専用の演算装置等を用いて行うことが考えられ、演算が可能であれば、その他どのような手段で行ってもよい。
【００６８】
次に、図７に従い演算装置による出力演算（ステップ１０３）について説明する。まず、Ａ／Ｄ変換器６１５より入力信号ＩＮ１を、Ａ／Ｄ変換器６２１より入力信号ＩＮ２を取り込み、取り込んだ値より入力値Ｘを求める（ステップ１３１）。入力値Ｘを求める関数Ｆには、周期数Ｃが含まれる。前述のように、周期数とは、基準位置（この場合は出力値Ｙ＝０とした）から入力信号ＩＮ１、または、入力信号ＩＮ２が繰り返された回数を表す値である。周期数Ｃの求め方は実施例２と同様で、図３０を見れば分かるように、電源投入時は入力信号ＩＮ１、入力信号ＩＮ２と入力信号ＩＮ３、入力信号ＩＮ４の電気角位相差から求め、通常動作時はＩＮ１／ＩＮ２＝−１、かつ、ＩＮ１＜０となる点で周期数Ｃを切り替えていけばよい。まず、関数Ｆを用いて、Ｘ＝Ｆ（ＩＮ１、ＩＮ２）により入力値Ｘを求めることができる。例として、図３０に示した実測波形におけるプロットＰ３、プロットＰ４の値を用いて説明する。ＩＮ１＝０．７６８、ＩＮ２＝−０．７０８、Ｃ＝３であり、関数Ｆに従って計算すると、Ｘ＝４１８．３６８となる。次に、入力値Ｘより参照するアドレスＡＤＲを求める（ステップ１３２）。関数Ｇを用いて、ＡＤＲ＝Ｇ（Ｘ）により求めればよく、ＡＤＲ＝４１８．３６８となる。続いて、ルックアップテーブルを記憶部より読み出し、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］を参照して入力値Ｘを補正し、理想的な入力値Ｘｒｅｖを求める（ステップ１５３）。ａ［ＡＤＲ（ｉ）］は配列要素であり、要素数は有限である。従って、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］が存在しない場合がある。そのような場合は、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］が存在するアドレスＡＤＲのうち、アドレスＡＤＲより値が小さいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］と、アドレスＡＤＲより値が大きいアドレスのうち、最もアドレスＡＤＲに近い値となるアドレスを有する配列要素ａ［ＡＤＲ（ｉ）］とを結んだ直線が、アドレスＡＤＲを示す直線と交わる点を求め、アドレスＡＤＲを有する配列要素ａ［ＡＤＲ（ｉ）］であるとすればよい。ここで、ａ［４１８．３６８］を参照する必要があるので、直線補間を用いてルックアップテーブルを参照する。直線補間は図３５のように行われる。図３５はルックアップテーブルの一部を拡大して示したものであり、入力軸・出力軸は図３３と同様である。参照するアドレスが整数でない場合は、小数点以下を切り上げたアドレスに対応する点と、小数点以下を切り上げたアドレスに対応する点を直線で結び、所望のアドレスと重なる点を参照する。ここでは、アドレス４１８．３６８を参照したいならば、小数点以下を切り捨てたアドレス４１８（テーブル値０．７７７）と小数点以下を切り上げたアドレス４１９（テーブル値０．５１２）を直線で結び、アドレス４１８．３６８と重なる点（プロットＶ２）を参照すればよい。プロットＶ２のテーブル値に相当する値は０．７１３となる。補正された入力値Ｘｒｅｖは、Ｘｒｅｖ＝Ｘ＋ａ［ＡＤＲ］で与えられ、Ｘｒｅｖ＝４１８．３６８＋０．７１３＝４１９．０８１となる。最後に、出力値Ｚ（Ｘｒｅｖ）を出力する（ステップ１５４）。関数Ｚを用いて演算を行うと、Ｚ（Ｘｒｅｖ）＝１０８０／１００８×Ｘｒｅｖであるから、Ｚ（Ｘ）＝１０８０／１００８×４１９．０８１＝４４９．０１５となり、これを出力する。
【００６９】
本実施例１〜３では、入力信号が正弦波である場合について説明したが、三角波や台形波等、他の形状でも同様の手順で実現可能である。
【００７０】
本実施例２、３では、演算回路と記憶部を個別に説明したが、これに限られるものではなく、演算回路内部に記憶部を有していても良い。
【００７１】
本実施例１〜３では、角度センサについて説明したが、様々な形態が可能である。例えば、リニアセンサのように、固定された磁石を直線上に周期的に配置し、磁気センサが磁石近傍を直線的に移動することにより、出力手段である磁気センサの出力から、磁気センサの移動量を求めることも可能である。従って、出力手段である磁気センサと、対象物である磁石、または、回転軸の周囲に固定された磁石などの相対移動量である移動距離、または、回転角が測定可能である。つまり、対象物と、出力手段と、との相対移動に応じて、出力手段が所定の電気角位相差を有する一対の信号を出力することにより、出力手段と、対象物と、の相対移動量を出力する相対移動量測定装置を得ることが可能である。
【産業上の利用可能性】
【００７２】
本発明は、コンピュータ技術分野全般や、自動車技術分野、センサ技術分野等の各種工業分野に利用できる。
【符号の説明】
【００７３】
２０１  角度センサ
２０２  回転軸
２０３  磁石
２０４、２１１  磁界
２０５、２１２  磁気センサ
２０６、２１３  プリント配線基板
２０７、２１４  磁気抵抗効果素子
２０８、２１５  増幅器
２０９、２１６  Ａ／Ｄコンバータ
２１０  演算回路
２２０  下地層
２２１  反強磁性層
２２２  磁化固定層
２２３  非磁性導電層
２２４  磁化自由層
２２５  保護層
２２１Ａ  反強磁性層２２１の磁化方向
２２２Ａ  磁化固定層２２２の磁化方向
２２４Ａ  磁化自由層２２４の磁化方向
４０１  角度センサ
４０２  回転軸
４０３  多極磁石（１２極）
４０４  多極磁石（１０極）
４０５、４１１、４１７、４２３  磁界
４０６、４１２、４１８、４２４  磁気センサ
４０７、４１３、４１９、４２５  プリント配線基板
４０８、４１４、４２０、４２６  磁気抵抗効果素子
４０９、４１５、４２１、４２７  増幅器
４１０、４１６、４２２、４２８  Ａ／Ｄコンバータ
４２９  演算回路
４３０  ルックアップテーブル
６０１  角度センサ
６０２、６０４、６０７  回転軸
６０３  歯車（３０歯）
６０５  歯車（１５歯）
６０６、６０９  磁石
６０８  歯車（１８歯）
６１０、６１６、６２２、６２８  磁界
６１１、６１７、６２３、６２９  磁気センサ
６１２、６１８、６２４、６３０  プリント配線基板
６１３、６１９、６２５、６３１  磁気抵抗効果素子
６１４、６２０、６２６、６３２  増幅器
６１５、６２１、６２７、６３３  Ａ／Ｄコンバータ
６３４  演算回路
６３５  ルックアップテーブル
【図４】
2013011456.tif 000003
【図６】
2013011456.tif 000004
【図７】
2013011456.tif 000005
【図１】
2013011456.tif 000006
【図２】
2013011456.tif 000007
【図３】
2013011456.tif 000008
【図５】
2013011456.tif 000009
【図８】
2013011456.tif 000010
【図９】
2013011456.tif 000011
【図１０】
2013011456.tif 000012
【図１１】
2013011456.tif 000013
【図１２】
2013011456.tif 000014
【図１３】
2013011456.tif 000015
【図１４】
2013011456.tif 000016
【図１５】
2013011456.tif 000017
【図１６】
2013011456.tif 000018
【図１７】
2013011456.tif 000019
【図１８】
2013011456.tif 000020
【図１９】
2013011456.tif 000021
【図２０】
2013011456.tif 000022
【図２１】
2013011456.tif 000023
【図２２】
2013011456.tif 000024
【図２３】
2013011456.tif 000025
【図２４】
2013011456.tif 000026
【図２５】
2013011456.tif 000027
【図２６】
2013011456.tif 000028
【図２７】
2013011456.tif 000029
【図２８】
2013011456.tif 000030
【図２９】
2013011456.tif 000031
【図３０】
2013011456.tif 000032
【図３１】
2013011456.tif 000033
【図３２】
2013011456.tif 000034
【図３３】
2013011456.tif 000035
【図３４】
2013011456.tif 000036
【図３５】
2013011456.tif 000037