説明

演算装置、相対移動量測定装置、および、演算方法

【課題】位相の異なる1対の入力信号から出力を得る演算においては、arctan等の複雑な演算が必要となり、演算回路の負荷が大きくなってしまう。また、演算回路の負荷を軽減するためにルックアップテーブルを参照して出力を得る場合、必要なメモリが大きくなってしまう。
【解決手段】位相の異なる1対の入力信号IN1、入力信号IN2に対して、関数Fを用いて、入力値XをX=F(IN1、IN2)と定義する。入力値Xと出力値Yの関係を慨ね線形となるように関数Fを定義することにより、複雑な演算を使用することなく入力信号から予想される出力値を得ることが可能となる。ルックアップテーブルを参照する場合は、出力値と予想される出力値との差分のみをテーブル化しておくことにより、メモリを削減可能となる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、位相の異なる1対の信号から出力を求める演算装置、演算方法に関する。
【背景技術】
【0002】
位相の異なる1対の信号から出力を求める演算は、位置センサをはじめとする各種センサ等で使用されている。例えば、sin、cosのような信号からtan演算を行い、さらにarctan演算を行うことにより位相を求める方法等があげられる。
【0003】
arctan演算を用いないでかつ精度を向上させる方法として、例えば、特許文献1に記載の方法では、信号の演算結果と位相の関係を予めテーブル化しておき、そのテーブルを参照する方法が提案されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特許第4343585号(NTN株式会社)
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、arctan演算は、ソフトウェアで実現する場合には演算回路の負荷が大きいという問題があり、ハードウェアで実現する場合には回路規模が大きくなるという問題がある。また、特許第4343585号に記載の方法ではarctan演算は必要ないが、テーブルを作成するために多くのメモリを必要とするという問題がある。
【0006】
本発明は、上記に鑑みてなされたものであって、演算回路の負荷を軽減、または必要メモリの削減を実現するものである。
【課題を解決するための手段】
【0007】
上述した課題を解決し、目的を達成するために、本発明は、所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように第1の入力信号に第1の演算を行い定義された第1の入力値を受け、第1の入力値を引数とした一次関数に基づいて、第1の入力値に対応する一次関数上の第2の出力値を第1の出力値として出力する演算手段を有する演算装置であることを特徴とする。
【0008】
この演算装置は、複雑な関数を使用することなく出力を求められるという作用がある。その結果、この演算装置は、演算回路の負荷を軽減するという効果が得られる。
【0009】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように第1の入力信号に第1の演算を行い定義された第1の入力値を引数とした一次関数に基づいた第1の入力値に対応する一次関数上の第2の出力値と、第1の出力値と、の差分を、第1の入力値と対応付けるアドレス関数により定義されたアドレスを引数とする配列要素に格納した第1のテーブルを有する記憶部から第1のテーブルを読み出すとともに、第1の入力値を受け、第1の入力値に対応する第2の出力値と、第1の入力値に対応する配列要素に格納された値と、に基づいて第1の出力値を出力する演算手段を有する演算装置であることが好ましい。
【0010】
この演算装置は、入力値と出力値の関係を模擬する直線を定義し、この直線と出力値との差のみをテーブル化するという作用がある。その結果、出力値を直接テーブルに収納するタイプの信号処理方法と比較するとメモリを削減できるという効果が得られる。
【0011】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように第1の入力信号に第1の演算を行い定義された第1の入力値を引数とした一次関数上の第1の出力値に対応する第2の入力値と、第1の入力値と、の差分を、第1の入力値と対応付けるアドレス関数により定義されたアドレスを引数とする配列要素に格納した第2のテーブルを有する記憶部から第2のテーブルを読み出すとともに、第1の入力値を受け、第1の入力値と、第1の入力値に対応する配列要素に格納された値と、に基づいて第2の入力値に対応する第1の出力値を出力する演算手段を有する演算装置であることが好ましい。
【0012】
この演算装置は、入力値と出力値の関係を模擬する直線を定義し、この直線と入力値との差のみをテーブル化するという作用がある。その結果、出力値を直接テーブルに収納するタイプの信号処理方法と比較するとメモリを削減できるという効果が得られる。
【0013】
本発明の望ましい態様としては、第1の演算は、第1の出力値に応じた、一対の第1の入力信号の中間値を0とした絶対値が小さい一方の入力信号を絶対値の大きい他方の入力信号で除する演算を有する演算装置であることが好ましい。
【0014】
この演算装置は、入力値と出力値に慨ね直線の相関を持たせるという作用がある。また、除算部分の演算結果が所定の範囲となり信号処理上便利であるという作用もある。その結果、出力値の誤差が減少する、あるいは、テーブル作成に必要なメモリを削減できるという効果が得られる。
【0015】
本発明の望ましい態様としては、第1の演算は、一対の第1の入力信号の最大値と最小値との差を同一の値とする演算を有する演算装置であることが好ましい。
【0016】
この演算装置では、一対の入力信号の最大値と最小値の差を同一の値とすることにより、一対の入力信号より演算される入力値の対称性が増すという作用がある。その結果、入力値と出力値の関係が直線に近付くという効果が得られる。
【0017】
本発明の望ましい態様としては、一次関数が少なくとも2つの異なる複数の一次関数を有し、複数の一次関数は第1の入力値と、第2の出力値と、が一対一に対応し、第1の入力値と、第2の出力値のそれぞれが異なる演算装置であることが好ましい。
【0018】
この演算装置は、入力値の全範囲に対して入力値と出力値を一対一に対応させるという作用がある。その結果、この演算装置は、入力値の全範囲に対して一意に出力値を求められるという効果が得られる。
【0019】
本発明の望ましい態様としては、一次関数が少なくとも2つの異なる複数の一次関数を有し、複数の一次関数は第1の入力値と、第1の出力値と、が一対一に対応し、第1の入力値と、第1の出力値のそれぞれが異なる演算装置であることが好ましい。
【0020】
この演算装置は、入力値の全範囲に対して入力値と出力値を一対一に対応させるという作用がある。その結果、この演算装置は、入力値の全範囲に対して一意に出力値を求められるという効果が得られる。
【0021】
本発明の望ましい態様としては、一次関数が第1の入力値の全入力範囲において、同一の関数である演算装置であることが好ましい。
【0022】
この演算装置は、複数の一次関数を記憶・参照する必要がなくなるという作用がある。その結果、この演算装置は、メモリの削減、簡潔な処理用プログラムの実現という効果が得られる。
【0023】
本発明の望ましい態様としては、演算手段は、第1の入力信号の一周期中の電気角位相を示す第1の位相信号と、所定の電気角位相差を有する一対の第2の入力信号の一周期中の電気角位相を示す第2の位相信号と、を受け、第1の位相信号と第2の位相信号との差分である第1の入力信号に応じて変化する第1の位相差信号と、第1または第2の位相信号と、に基づいて、第1の位相差信号の基準値と第1の位相差信号との差分である第2の電気角位相差に対応したそれぞれ第1の入力信号または第2の入力信号の一周期分が入力された回数を示す第1の周期数または第2の周期数を演算する演算装置であることが好ましい。
【0024】
この演算装置は、入力信号の周期数を求められるという作用がある。その結果、この演算装置は、複数周期の入力信号範囲に対して一意に出力を求められるという効果が得られる。
【0025】
本発明の望ましい態様としては、対象物と、一対の入力信号を出力する出力手段と、の相対的移動に応じて、出力手段が所定の電気角位相差を有する一対の入力信号を出力することにより、出力手段と、対象物と、の相対移動量を出力する演算手段を有する相対移動量測定装置であることが好ましい。
【0026】
この相対移動量測定装置においては、出力手段と対象物との相対移動量を測定することが可能となる。
【0027】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように第1の入力信号に第1の演算を行い定義された第1の入力値を求めるステップと、第1の入力値を引数とした一次関数を求めるステップと、第1の入力値に対応する一次関数上の第2の出力値を第1の出力値として出力するステップと、を有する演算方法であることが好ましい。
【0028】
この演算方法は、複雑な関数を使用することなく出力を求められるという作用がある。その結果、この演算方法は、演算回路の負荷を軽減するという効果が得られる。
【0029】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように第1の入力信号に第1の演算を行い第1の入力値を定義するステップと、第1の入力値を引数とした一次関数を求めるステップと、第1の入力値に対応する一次関数上の第2の出力値を求めるステップと、第2の出力値と、第1の出力値と、の差分を求めるステップと、第1の入力値と対応付けるアドレス関数によりアドレスを定義するステップと、アドレスを引数とした配列要素に差分を格納した第1のテーブルを求め記憶するステップと、差分を配列要素に格納した第1のテーブルを求めるステップと、第1の入力値を受け、第1のテーブルを読み出すとともに、第1の入力値に対応する第2の出力値と、第1の入力値に対応する配列要素に格納された値と、に基づいて第1の出力値を出力するステップと、を有する演算方法であることが好ましい。
【0030】
この演算方法は、入力値と出力値の関係を模擬する直線を定義し、この直線と出力値との差のみをテーブル化するという作用がある。その結果、出力値を直接テーブルに収納するタイプの信号処理方法と比較するとメモリを削減できるという効果が得られる。
【0031】
本発明の望ましい態様としては、所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように第1の入力信号に第1の演算を行い第1の入力値を定義するステップと、第1の入力値を引数とした一次関数を求めるステップと、第1の出力値に対応する一次関数上の第2の入力値を求めるステップと、第1の入力値と、第2の入力値と、の差分を求めるステップと、第1の入力値と対応付けるアドレス関数によりアドレスを定義するステップと、アドレスを引数とした配列要素に差分を格納した第2のテーブルを求め記憶するステップと、差分を配列要素に格納した第2のテーブルを求めるステップと、第1の入力値を受け、第2のテーブルを読み出すとともに、第1の入力値と、第1の入力値に対応する配列要素に格納された値と、に基づいて第2の入力値に対応する第1の出力値を出力するステップと、を有する演算方法であることが好ましい。
【0032】
この演算方法は、入力値と出力値の関係を模擬する直線を定義し、この直線と入力値との差のみをテーブル化するという作用がある。その結果、出力値を直接テーブルに収納するタイプの信号処理方法と比較するとメモリを削減できるという効果が得られる。
【発明の効果】
【0033】
以上のように、本発明は、演算回路の負荷を軽減、または必要なメモリ量を削減するという効果を奏する。
【図面の簡単な説明】
【0034】
【図1】本発明の実施形態に係わる概要を示すフローチャートである。
【図2】本発明の実施形態に係わる直線の定義手順を示すフローチャートである。
【図3】本発明の実施形態に係わるルックアップテーブル作成方法を示すフローチャートである。
【図4】本発明の実施形態に係わる演算装置による出力演算の手順を示すフローチャートである。
【図5】本発明の実施形態に係わるルックアップテーブル作成方法の別案を示すフローチャートである。
【図6】本発明の実施形態に係わる直線補間についての説明図である。
【図7】本発明の実施形態に係わる演算装置による出力演算の別案の手順を示すフローチャートである。
【図8】本実施例1に係わる角度センサの構成図である。
【図9】本実施例1に係わる磁気抵抗効果素子の断面構造を示す模式図である。
【図10】本実施例1に係わる入力信号IN1、入力信号IN2を示した図である。
【図11】本実施例1に係わる入力信号IN1、入力信号IN2より演算される演算値を示した図である。
【図12】本実施例1に係わる出力値Yと入力値Xの関係を示した図である。
【図13】本実施例1に係わる入力値Xと出力値Yの関係および直線Z(X)を示した図である。
【図14】本実施例1に係わる出力値Yと直線Z(X)の差を示した図である。
【図15】本実施例2に係わる角度センサの構成図である。
【図16】本実施例2に係わる入力信号IN1、入力信号IN2を示した図である。
【図17】本実施例2に係わる出力値Yと入力値Xの関係を示した図である。
【図18】本実施例2に係わる入力値Xと出力値Yの関係を示した図である。
【図19】本実施例2に係わる入力信号IN1(i)、入力信号IN2(i)を示した図である。
【図20】本実施例2に係わる出力値Y(i)と入力値X(i)の関係を示した図である。
【図21】本実施例2に係わる入力値X(i)と出力値Y(i)の関係を示した図である。
【図22】本実施例2に係わるアドレスADR(i)と配列要素a[ADR(i)]の関係を示した図である。
【図23】本実施例2に係わるテーブル作成時直線補間を説明した図である。
【図24】本実施例2に係わるテーブル参照時直線補間を説明した図である。
【図25】本実施例2に係わる周期数の求め方を示した図である。
【図26】本実施例3に係わる角度センサの構成図である。
【図27】本実施例3に係わる入力信号IN1、入力信号IN2を示した図である。
【図28】本実施例3に係わる出力値Yと入力値Xの関係を示した図である。
【図29】本実施例3に係わる入力値Xと出力値Yの関係を示した図である。
【図30】本実施例3に係わる入力信号IN1(i)、入力信号IN2(i)を示した図である。
【図31】本実施例3に係わる出力値Y(i)と入力値X(i)の関係を示した図である。
【図32】本実施例3に係わる入力値X(i)と出力値Y(i)の関係を示した図である。
【図33】本実施例3に係わるアドレスADR(i)と配列要素a[ADR(i)]の関係を示した図である。
【図34】本実施例3に係わるテーブル作成時直線補間を説明した図である。
【図35】本実施例3に係わるテーブル参照時直線補間を説明した図である。
【発明を実施するための形態】
【0035】
以下、図面を参照しながら本発明の実施形態について説明する。図1は本実施形態の概要を表すフローチャートである。本発明は、直線の定義(ステップ101)、ルックアップテーブル作成(ステップ102)、演算装置による出力演算(ステップ103)という手順で実現される。
【0036】
図2は、直線の定義(ステップ101)の手順を示したフローチャートである。直線定義の目的は、理想的、あるいは実測から求められた出力値Yに対して、予想される出力値Zを、入力値Xを引数とした1次関数Z(X)で定義することである。入力値Xは、所定の位相差を有する1対の入力信号IN1、入力信号IN2より演算により求められる。本実施形態に係わる直線の定義の手順では、IN1、IN2とXの関係を定義する(ステップ111)。以下、説明のために、IN1、IN2とXの関係を関数Fを用いてX=F(IN1、IN2)と表記する。この関数Fが、入力信号IN1、入力信号IN2のうち入力信号の中間値を0とした絶対値が小さい方の入力信号を絶対値の大きい方の入力信号で除する演算を含むことが好ましいが、これを限定するものではない。ただし、入力信号IN1、入力信号IN2のそれぞれと多対一の関係を有する出力値Yと、入力値X(=F(IN1、IN2))とが、一対一に対応する。例えば、IN1をsin(X)とし、IN2をcos(X)とした場合、|sin(X)|と|cos(X)|の大小関係を比較して、|sin(X)|と|cos(X)|の内、値の大きいIN1、IN2の一方を分母とし、値の小さい他方を分子とした値に、所定の値を加算または減算することにより、出力値Yと一対一に対応付けられた入力値Xを得ることが可能となっている。ここで、|A|はAの絶対値を表す。あるいは、IN1をsin(X)とし、IN2をcos(X)とした場合、|sin(X)|と|cos(X)|の大小関係を比較して、|sin(X)|と|cos(X)|の内、値の大きいIN1、IN2の一方を分母とし、値の小さい他方を分子とした値の傾きが全て同じ傾きになるように所定の値を積算し、所定の値を加算または減算しても良い。次に、分割範囲の決定を行う(ステップ112)。出力値を予想する関数Zは入力値Xの全入力範囲を単一の一次関数で表わす必要は必ずしもなく、入力値Xの範囲を分割し、分割された入力範囲毎にZ(X)を定義してもよい。分割は、少なくとも、関数Fの傾きの符号が変更される点と、入力値Xと出力値Yを一対一に対応させるために関数Fが不連続となる点において行われる。最後に、分割範囲それぞれに対して、入力値Xと予想される出力値Zの関係を一次関数Z(X)で定義する(ステップ113)。ステップ113は、解析的な演算により、または、実測のデータを基にして演算回路により、または、外部に用意された専用の演算装置を用いて行われることが好適であるが、その他、どのような手段で行って定義してもよい。また、例えば、一次関数Z(X)は、最小2乗法により決定してもよいし、出力値Yの最大値と最小値を結ぶ直線であってもよいし、その他、出力値Yの最大値と最小値を結ぶ直線と傾きの符号が同一の直線であればどのような直線であってもよい。この時、ステップ112で分割された複数の領域の一次関数Z(X)が同一の関数で与えられても構わない。この場合、入力値に対して、同一の関数で与えられるので、後述する演算処理において、出力値Y(i)を求める演算が容易となり、記憶する関数を低減できるので、使用するメモリー量を減らすことが可能となる。
【0037】
図3は、ルックアップテーブル作成(ステップ102)の手順を示したフローチャートである。ステップ102は、演算回路により行ってもよいし、外部に用意された専用の演算装置を用いて行ってもよいし、その他どのような手段で行ってもよい。ルックアップテーブルは、例えば、配列要素a[ADR(i)]を一次元に配列して得られるデータ構造を有している。説明の便宜上、一次元配列からなるルックアップテーブルを例示するが、本実施形態は、多次元配列からなるルックアップテーブルにも適用できる。配列要素a[ADR(i)]は、一次関数Z(X)を介して入力値X(i)と出力値Y(i)との対応関係を保持するための値であり、アドレスADR(i)を有する。言い換えれば、入力値X(i)から一次関数Z(X(i))によって、Zを導出し、入力値X(i)に対応するアドレスADR(i)を有する配列要素a[ADR(i)]とZとに基づいて出力値Y(i)を導出することが可能となっている。なお、出力値Y(i)の導出については、後述する。ここで、入力値X(i)は実測により得られた入力値であり、出力値Y(i)は実測により得られた出力値である。引数iが同一であれば、出力値Y(i)は入力値X(i)に対応する値であることを示している。まず、配列要素a[ADR(i)]のアドレスADR(i)と入力値X(i)の対応関係を定義する(ステップ121)。言い換えると、ステップ121では、入力値Xを引数としてアドレスADRを返す関数を定義する。入力値XとアドレスADRは一対一に対応する必要があり、関数Gを用いて、ADR=G(X)と表記するものとする。なお、演算負荷を低減するために、ADR=Xとし、入力値XそのものをアドレスADRに対応付けてもよい。入力値Xの特定の範囲のみ細かいテーブルを作成したい場合、例えば、入力値Xの最大値をXmaxとし、G(X)=X×sin(X/Xmax)で与えることが考えられる。このようにG(X)を定義すると、X=0付近は細かく、X=Xmax付近は粗くルックアップテーブルを作成することが可能となる。もちろん、G(X)はこれらに限定するものではなく、入力値XとアドレスADRが一対一に対応すればどのような関数であってもよい。なお、引数iに対しては、アドレスADR(i)は、ADR(i)=G(X(i))で与えられることになる。次に、入力信号IN1(i)、入力信号IN2(i)より入力値X(i)を求める(ステップ122)。入力値X(i)は、前述の関数Fを用いて、X(i)=F(IN1(i)、IN2(i))という関係を有する。最後に、入力値X(i)に対応付けられるアドレスADR(i)を有する配列要素a[ADR(i)]に出力値Y(i)とZ(X(i))との差を格納し、記憶部に記憶する(ステップ123)。このように、入力値X(i)と出力値Y(i)との対応関係を予想する直線Z(X)を予め定義し、Z(X)との差分、つまり、配列要素a[ADR(i)]をテーブルとすることにより、ルックアップテーブルに使用するメモリを減少させることができる。
【0038】
ここで、a[ADR(i)]は配列要素であり、要素数は有限である。従って、アドレスADR(i)を有する配列要素a[ADR(i)]が存在せず、出力値Y(i)とZ(X(i))との差をそのまま格納できない場合がある。そのような場合は、仮に、アドレスADR(i)を有する配列要素a[ADR(i)]が存在したと考え、他の配列要素との間で補間を行うことにより、対応する配列要素a[ADR(i)]が存在するアドレスADR(i)を有する配列要素a[ADR(i)]の値を求め格納すればよい。これらテーブル作成処理は外部に接続された計算機を用いて行ってもよい。
【0039】
図4は、演算装置による出力演算(ステップ103)の手順を示したフローチャートである。まず、入力信号IN1、入力信号IN2より入力値Xを求める(ステップ131)。つまり、入力信号IN1、入力信号IN2のそれぞれと多対一の関係を有する出力値Yと、入力値X(=F(IN1、IN2))とが、一対一に対応するように入力値Xを求める。入力値Xは前述の関数Fを用いて、X=F(IN1、IN2)により求められる。次に、入力値XよりアドレスADRを求める(ステップ132)。アドレスADRは前述の関数Gを用いて、ADR=G(X)より求められる。続いて、前述の一次関数Zを用いて、入力値Xより予想される出力Z(X)を求める(ステップ133)。最後に、予想される出力Z(X)に補正を加え、出力値Yの値を求め出力する(ステップ134)。補正は、予想される出力Z(X)と、アドレスADRを有する配列要素a[ADR(i)]とを基にした演算により与えられる。
【0040】
ここで、a[ADR(i)]は配列要素であり、要素数は有限である。従って、アドレスADRを有する配列要素a[ADR(i)]が存在しない場合がある。そのような場合は、アドレスADRを有する配列要素a[ADR(i)]が存在するアドレスADRのうち、アドレスADRより値が小さいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]と、アドレスADRより値が大きいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]とを結んだ直線が、アドレスADRを示す直線と交わる点を求め、アドレスADRを有する配列要素a[ADR(i)]であるとすればよい。
【0041】
なお、これらステップ111乃至ステップ134の順序は特に限定されるものではなく、例えば、ステップ133を132よりも先に実行してもよいし、ステップ122をステップ121より先に実行してもよい。また、一部処理を省略することも可能である。例えば、テーブルを使用しない場合は、ステップ102およびステップ132、ステップ134が省略可能となり、Y=Z(X)を出力とすればよい。
【0042】
さらに、これらステップの前後またはステップ間に他の処理を追加してもよい。例えば、一次関数Z(X)を、実測の入力値X(i), 出力値Y(i)を用いて修正するステップをステップ122とステップ123の間に加えてもよいし、例えば、回転角センサやリニアセンサ等のように、移動方向等によりヒステリシスが生じる可能性がある場合は、複数のテーブルを作成・参照してもよい。ヒステリシスが生じるということは、移動方向により、入力値Xに対応する出力値Yが異なるということである。そのような例として、移動方向1と移動方向2を有する場合、移動方向1に対応するルックアップテーブルを配列a1[]、移動方向2に対応するルックアップテーブルを配列a2[]を作成し、参照時は移動方向に応じて、a1[]を参照するかa2[]を参照するかを決定すればよい。この時、それら複数のテーブル要素の差は小さいことが多く、差分のみをテーブル化することも有効である。すなわち、a3[ADR(i)]=a2[ADR(i)]−a1[ADR(i)]となる配列a3[]を定義し、配列a2[]ではなく、配列a3[]を記憶しておけばよい。参照時は、a1[ADR(i)]+a3[ADR(i)]とすれば、a2[ADR(i)]を参照した場合と同様の効果が得られる。他にも、例えば、入力信号IN1、入力信号IN2が複数周期繰り返される範囲に対して出力値Yを一意に対応させたい場合には、ステップ131の手前に入力信号IN1、または、入力信号IN2の周期数を求めるステップを加えてもよい。なお、周期数とは、入力信号IN1、または、入力信号IN2の一周期分が入力された回数を指すものとする。
【0043】
一部の処理を変更しても同様の効果が得られる。例えば、ルックアップテーブル作成(ステップ102)手順の変更が考えられる。ルックアップテーブル作成手順は、図3に示されているが、これを図5のように変更することが可能である。つまり、ステップ123の処理を、ステップ143のように変更すればよい。つまり、一次関数Y=Z(X)の逆関数をX=Z−1(Y)とすると、入力値X(i)に対応付けられるアドレスADR(i)を有する配列要素a[ADR(i)]に、出力値X(i)とZ−1(Y(i))との差を格納する。言い換えると、Z−1(Y(i))が示す値は、一次関数Zにより出力を求める場合の理想的な入力値Xrev(i)であり、配列要素a[ADR(i)]には、理想的な入力値Xrev(i)と、関数Fにより、X(i)=F(IN1(i)、IN2(i))より求められる入力値X(i)との差が格納されている。なお、本処理においては、Z(X)は出力値Yの最大値と最小値を含む直線であることが好ましい。配列要素a[ADR(i)]には、理想的な入力値Xrev(i)と、X(i)=F(IN1(i)、IN2(i))より求められる入力値X(i)との差が格納されているので、Z(X)が出力値Yの最大値と最小値を含む直線であれば、容易に配列要素a[ADR(i)]を求めることが可能である。ここで、a[ADR(i)]は配列要素であり、要素数は有限である。従って、アドレスADR(i)を有する配列要素a[ADR(i)]が存在せず、出力値Y(i)とZ(X(i))との差をそのまま格納できない場合がある。そのような場合は、仮に、アドレスADR(i)を有する配列要素a[ADR(i)]が存在したと考え、他の配列要素との間で補間を行うことにより、対応する配列要素a[ADR(i)]が存在するアドレスADR(i)を有する配列要素a[ADR(i)]の値を求め格納すればよい。図6は、ステップ123とステップ143に示したルックアップテーブル作成の概念図を示したものである。ステップ123では、ΔY(i)をアドレスADRに対応する配列要素a[ADR(i)]に格納する。X(i)=F(IN1,IN2)により求められた入力値X(i)を用いて、Z(X(i))を求める。ルックアップテーブルを参照することにより、求めたい出力値Y(i)とZ(X(i))との差ΔY(i)がわかり、出力値Y(i)を求めることができる。一方、ステップ143では、ΔX(i)をアドレスADRに対応する配列要素a[ADR(i)]に格納する。このようにすれば、ルックアップテーブルを参照することにより、X(i)=F(IN1,IN2)により求められた入力値X(i)から理想的な入力値Xrev(i)を求めることができる。理想的な入力値Xrev(i)を求めることが出来れば、Y(i)=Z(Xrev(i))より、出力値Y(i)を求めることができる。このようにすれば、前述の方法と同様、ルックアップテーブルに使用するメモリを減少させることができる。このような方法でルックアップテーブルの作成を行った場合、すでに説明したように、演算装置による出力演算(ステップ103)手順も変更する必要があり、図4のように処理していたものを図7のように変更する。変更点は、ステップ133乃至ステップ134がステップ153乃至ステップ154のように変更されている。ステップ132においてアドレスADRを求めるまでは同じである。ステップ131で求められた入力値XをアドレスADR(i)を有する配列要素a[ADR(i)]で補正し、理想的な入力値Xrevを求める(ステップ153)。次に、一次関数Zに理想的な入力値Xrevを入力し得られる出力Z(Xrev)を出力する。このようにすれば、図5に示された方法で作成されたルックアップテーブルを用いて精度よく出力を求めることが可能となる。ここで、a[ADR(i)]は配列要素であり、要素数は有限である。従って、アドレスADRを有する配列要素a[ADR(i)]が存在しない場合がある。そのような場合は、アドレスADRを有する配列要素a[ADR(i)]が存在するアドレスADRのうち、アドレスADRより値が小さいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]と、アドレスADRより値が大きいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]とを結んだ直線が、アドレスADRを示す直線と交わる点を求め、アドレスADRを有する配列要素a[ADR(i)]であるとすればよい。
【0044】
このように、入力値X(i)と出力値Y(i)との対応関係を予想する一次関数Z(X)を予め定義することにより、複雑な関数(arctan等)を用いないで入力と出力を関連付けることが可能となる。つまり、出力値Y(i)を求める演算が容易となる。また、メモリ参照方式を用いる場合は、入力値X(i)と一次関数Z−1(Y(i))との差分、または、出力値Y(i)と一次関数Z(X)の差分を配列要素a[ADR(i)]としてルックアップテーブルとすることにより、精度を維持したままルックアップテーブルに使用するメモリを減少させることができる。
(実施例1)
【0045】
次に、図8を参照しながら本実施例に関わる角度センサ201の構成について説明する。角度センサ201は、回転軸202の所定の基準位置からの回転角(0deg〜360deg)を検出するための角度検出装置である。但し、本実施形態は回転軸202に噛合するギア等を設けることにより、360deg以上の角度(多回転絶対角)を検出可能な角度センサにも適用可能である。回転軸202として、例えば、モーターの回転軸やステアリングシャフトを挙げることができるが、これに限定されるものではない。角度センサ201は、回転軸202の軸芯回りの回転に連動して回転する磁石203と、回転軸202の軸の周辺部に、回転軸202の軸とは独立に固定され、回転軸202の回転角の情報を担う検出信号(入力信号IN1)を出力する磁気センサ205と、磁気センサ205から出力される検出信号を増幅する増幅器(AMP)208と、増幅器208によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器209と、回転軸202の軸の周辺部に、回転軸202の軸とは独立に固定され、回転軸202の回転角の情報を担う検出信号(入力信号IN2)を出力する磁気センサ212と、磁気センサ212から出力される検出信号を増幅する増幅器(AMP)215と、増幅器215によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器216と、A/D変換器209、および、A/D変換器216からの出力信号の組み合わせから回転軸202の回転角を求める演算回路(MPU)210とを備える。磁気センサ205から出力される入力信号IN1、および、磁気センサ212から出力される入力信号IN2は、その電気角の位相差が90degである信号となっているが、磁気センサ205、および、磁気センサ212を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置であるが、検出される磁界の方向が異なるように配置してもよいし、その他、所望の電気角の位相差が得られればどのような方法であってもよい。演算回路210は、例えば、汎用のマイクロコンピュータでもよく或いは専用の信号処理LSIでもよい。磁石203は、回転部材であり、その平面形状(回転軸202に垂直な平面で切断した断面形状)は、例えば、長方形や、円形が好適であるが、特定の形状に限定されるものではなく、角度検出に適した形状であればよい。磁石203は、回転軸202に固定されてもよく、或いはセレーション結合されてもよい。回転軸202の軸芯方向をZ方向とすると、回転軸202の回転に伴い、磁石203はXY平面内で回転する。
【0046】
磁気センサ205は、磁石203の回転に伴い周期的に変化する外部磁界204の変化を出力電圧変化として検出する磁気抵抗効果素子207と、磁気抵抗効果素子207にセンス電流を供給するプリント配線基板206とを備える。磁気センサ212は、磁石203の回転に伴い周期的に変化する外部磁界211の変化を出力電圧変化として検出する磁気抵抗効果素子214と、磁気抵抗効果素子214にセンス電流を供給するプリント配線基板213とを備える。磁気抵抗効果素子207および磁気抵抗効果素子214として、例えば、巨大磁気抵抗(GMR)型、トンネル磁気抵抗(TMR)型、弾道磁気抵抗(BMR)型、異方性磁気抵抗(AMR)型等の公知の磁気抵抗効果素子を用いることができる。なお、センス電流に変えて、センス電圧を供給してもよく、磁気抵抗効果素子207、および、磁気抵抗効果素子214の出力電圧変化を電流変化に変更してもよい。
【0047】
図9は磁気抵抗効果素子207の断面構造を示す。磁気抵抗効果素子214も全く同じ構造であるので、ここでは記載を省略する。磁気抵抗効果素子207は下地層220、反強磁性層221、磁化固定層222、非磁性導電層223、磁化自由層224、および保護層225を積層してなる素子構造を有している。磁化固定層222の磁化方向222Aは、反磁性層221の磁化方向221Aと強固にカップリングしているため、外部磁界204の影響を殆ど受けない。一方、磁化自由層224の磁化方向224Aは、外部磁界204の磁化方向に追随するように変化する。磁気抵抗効果素子207の電気抵抗は(以下、電気抵抗は抵抗と記載)、磁気抵抗効果素子207が検出する外部磁界204の磁界強度とその磁界方向に依存して変化することが知られている。仮に外部磁界204の磁界強度が一定である場合には、磁気抵抗効果素子207の抵抗は、磁化固定層222の磁化方向222Aと磁化自由層224の磁化方向224Aとの角度差(ξ)に依存して変化する。より詳細には、磁気抵抗効果素子207の抵抗は、(1−cosξ)に比例して変化する特性を有しており、磁化固定層222の磁化方向222Aと磁化自由層224の磁化方向224Aとが同一方向かつ平行である時に抵抗は最小となり、磁化固定層222の磁化方向222Aと磁化自由層224の磁化方向224Aとが逆方向かつ平行である時に抵抗は最大になる。上述の如く、磁気抵抗効果素子207には、プリント配線基板207からセンス電流が供給されており、磁気抵抗効果素子207の抵抗の変化は、出力電圧変化として検出される。磁気抵抗効果素子207の出力電圧は、回転軸202の回転角度の情報を担う検出信号として出力される。
【0048】
次に、図3を参照しながら演算手段について説明する。本実施例ではルックアップテーブルの作成は行わないので、演算手段は、図1に示すステップ101、103の手順に基づいて行う。ここでは、磁気センサ205の出力電圧を入力信号IN1、磁気センサ212の出力電圧を入力信号IN2とし、回転軸202の回転角を出力値Yとすればよい。
【0049】
まず、図2に従い、直線の定義(ステップ101)について説明する。本実施例では、前述のように、磁気抵抗効果素子207の抵抗が(1−cosξ)に比例して変化するため、磁気センサ205の出力電圧は正弦波状の信号が予想される。磁気抵抗効果素子214も同様であり、演算回路210には、位相が90deg異なる正弦波状の1対の入力信号IN1、入力信号IN2が与えられる。図10に入力信号IN1、入力信号IN2を図示する。ここで、入力軸は回転軸202の回転角度(出力値Y)に相当し、出力軸は磁気抵抗効果素子207の想定される出力電圧(IN1)、および、磁気抵抗効果素子214の想定される出力電圧(IN2)に相当する。関数Fには、入力信号IN1、入力信号IN2のうち入力信号の中間値を0とした絶対値が小さい方の入力信号を絶対値の大きい方の入力信号で除する演算が含まれることが好ましい。この演算を行うと、図11に示すような演算結果が得られる。ここで、入力軸は回転軸202の回転角度に相当し、出力軸は入力信号の中間値を0とした絶対値の小さい方の入力信号の値を絶対値の大きい方の入力信号の値で除した演算値を示している。さらに、関数Fにより得られる入力値Xは、入力値Xと出力値Yが一対一に対応する。この条件を満たすために、ここでは、演算値にオフセット値を加える。以上のように関数Fを定義する。なお、F(IN1、IN2)は入力信号IN1、入力信号IN2の中間値を0とする演算を含むものとする。また、本実施例では、説明のため、入力信号IN1と入力信号IN2の最大値と最小値の差を同一の値として説明する。入力信号IN1と入力信号IN2の最大値と最小値の差を同一の値とすることにより、より直線に近い入力値Xと出力値Yの関係が得られている。関数F(IN1、IN2)を整理すると以下となる(ステップ111)。
F(IN1、IN2)=IN1/IN2+1 (1)
(但し、|IN2|≧|IN1|かつIN2≧0)
F(IN1、IN2)=IN2/IN1+7 (2)
(但し、|IN1|>|IN2|かつIN1≧0)
F(IN1、IN2)=IN1/IN2+5 (3)
(但し、|IN2|≧|IN1|かつIN2<0)
F(IN1、IN2) =IN2/IN1+3 (4)
(但し、|IN1|>|IN2|かつIN1<0)
図12に関数Fによる演算結果を示す。ここで、入力軸は回転軸202の回転角度に相当し、出力軸はF(IN1,IN2)、すなわち、入力値Xに相当する。図12から明らかなように、回転角度(出力値Y)と入力値Xとのそれぞれが一対一に対応し、かつ、上記式(1)〜式(4)のそれぞれを満たすように、離散的な関係を有している。関数Fはこの演算に限られるものではなく、例えば、図11に示された演算値に−1を乗じたものにオフセットを加えてもよい。本実施例では、入力値Xから出力値Yを求める必要があるので、図12において回転角度(出力値Y)を示している入力軸と入力値Xを示している出力軸を入れ替える必要がある。つまり、入力値Xを入力軸とし、回転角度(出力値Y)を出力軸とする必要がある。図13に入力値と出力値を入れ替えた結果を示す。ここで、入力軸は入力値Xに相当し、出力軸は回転軸202の回転角度(出力値Y)に相当する。併せて記載されている一次関数Z(X)については後述する。ここで、直線の分割範囲は、範囲1:0≦X≦2、範囲2:2<X<4、範囲3:4≦X≦6、範囲4:6<X<8のように分割される(ステップ112)。ここで、Yの最小値と最大値を結ぶ直線Z(X)を考えると、範囲1に与えられる直線と範囲3に与えられる直線Z(X)が一致し、同様に、範囲2に与えられる直線と範囲4に与えられる直線Z(X)が一致し、Z(X)は以下の式で与えられる(ステップ113)。
Z(X)=45×X (5)
(但し、0≦X≦2、4≦X≦6)
Z(X)=−45×X+450 (6)
(但し、2<X<4、6<X<8)
図13から明らかなように、入力値Xと回転角度(出力値Y)とのそれぞれが一対一に対応し、かつ、上記式(1)〜式(4)のそれぞれを満たすように、離散的な関係を有している。また、式(5)、式(6)を満たす入力値XとZ(X)とは離散的な関係を有している。以上により、直線の定義(ステップ101)は終了となる。ここで、入力軸は入力値Xに相当し、出力軸は回転軸202の回転角度に相当する。対応する入力値Xの範囲に対しては出力値YとZ(X)がよく一致していることが分かる。本実施例では、ステップ113を解析的な演算により行ったが、これに限定するものではなく、実測のデータを基にして演算回路210により行ってもよいし、外部に用意された専用の演算装置を用いて行ってもよいし、その他どのような手段を用いて定義してもよい。
【0050】
次に、図4に従い演算装置による出力演算(ステップ103)について説明する。前述のように、実施例1ではルックアップテーブルを使用しないので、ステップ132、ステップ134は省略される。まず、A/D変換器209より入力信号IN1を、A/D変換器216より入力信号IN2を取り込み、取り込んだ値より入力値Xを求める(ステップ131)。例として、図10に示した理想波形において回転角(出力値Y)が 230degの値であるIN1=−0.087(プロットO1)、IN2=−0.996(プロットO2)を用いて説明する。ここで、|IN2|≧|IN1|かつIN2<0であるので、関数Fの定義より、式(3)が適用され、X=IN1/IN2+5を用いて計算すると、X=5.09となる。続いて、Z(X)を演算し、演算結果を出力とする(ステップ133)。入力値Xの値より、式(5)が適用され、Z(X)=45×Xとなる。従って、出力はZ(X)=229.1(deg)となり、ほぼ正確な出力が得られることがわかる。
【0051】
本実施例のように入力が正弦波状である場合には、上記で定義した関数Fの代わりに、関数Fに基本波の1/10程度の振幅を有する正弦波の値を加算した、あるいは、減算した関数Frevを用いるとより正確な出力が得られる。加法定理を用いると、sin(4θ)=4×sin(θ)×cos(θ)×(1−2×sin(θ))となるので、Frev(IN1、IN2)は以下のように定義される。
Frev(IN1、IN2)=IN1/IN2+1
+0.4×IN1×IN2×(1−2×IN1(θ))(7)
(但し、|IN2|≧|IN1|かつIN1≧0)
Frev(IN1、IN2)=IN2/IN1+7
−0.4×IN1×IN2×(1−2×IN1(θ)) (8)
(但し、|IN1|>|IN2|かつIN1≧0)
Frev(IN1、IN2)=IN1/IN2+5
+0.4×IN1×IN2×(1−2×IN1(θ) (9)
(但し、|IN2|≧|IN1|かつIN1<0)
Frev(IN1、IN2)=IN2/IN1+3
−0.4×IN1×IN2×(1−2×IN1(θ))(10)
(但し、|IN1|>|IN2|かつIN1<0)
図13に示されている出力値Yと一次関数Z(X)との差を図14に示す。ここで、入力軸は入力値Xに相当し、出力軸は出力値Yと一次関数Z(X)との差、すなわち、本実施例を行った時に発生する角度誤差に相当する。関数Fの代わりに関数Frevを用いた場合についても図14に示されている。関数Fを用いた場合は、±4deg程度の値を示すのに対して、関数Frevを用いた場合は±1deg程度となっていることが分かる。このように、関数Frevを用いると角度精度の改善が期待できる。また、後述のルックアップテーブル方式においては、関数Frevを用いることによりテーブルに格納される最大値が1/4程度となり、関数Fを使用した場合と比較して、メモリをさらに2バイト程度削減することが期待できる。
(実施例2)
【0052】
次に、図15を参照しながら本実施例に関わる角度センサ401の構成について説明する。角度センサ401は、回転軸402の所定の基準位置からの回転角(0deg〜360deg)を検出するための角度検出装置である。回転軸402として、例えば、ステアリングシャフトを挙げることができるが、これに限定されるものではない。角度センサ401は、回転軸402の軸芯回りの回転に連動して回転し円周方向に12極(6組)の磁極を有するリング状の多極磁石403と、多極磁石403と回転軸方向に離れた位置に設置され、回転軸402の軸芯回りの回転に連動して回転し円周方向に10極(5組)の磁極を有するリング状の多極磁石404と、回転軸402の軸の周辺部に、回転軸402の軸とは独立に固定され、回転軸402の回転角の情報を担う検出信号入力信号IN1を出力する磁気センサ406と、磁気センサ406から出力される検出信号を増幅する増幅器(AMP)409と、増幅器409によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器410と、回転軸402の軸の周辺部に、回転軸402の軸とは独立に固定され、回転軸402の回転角の情報を担う検出信号入力信号IN2を出力する磁気センサ412と、磁気センサ412から出力される検出信号を増幅する増幅器(AMP)415と、増幅器415によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器416と、回転軸402の軸の周辺部に、回転軸402の軸とは独立に固定され、回転軸402の回転角の情報を担う検出信号(入力信号IN3)を出力する磁気センサ418と、磁気センサ418から出力される検出信号を増幅する増幅器(AMP)421と、増幅器421によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器422と、回転軸402の軸の周辺部に、回転軸402の軸とは独立に固定され、回転軸402の回転角の情報を担う検出信号(入力信号IN4)を出力する磁気センサ424と、磁気センサ424から出力される検出信号を増幅する増幅器(AMP)427と、増幅器427によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器428と、記憶部に記憶されているルックアップテーブル(LUT)430と、ルックアップテーブル430を参照して、A/D変換器410、および、A/D変換器416、および、A/D変換器422、および、A/D変換器428からの出力信号の組み合わせから回転軸402の回転角を求める演算回路(MPU)429とを備える。磁気センサ406から出力される入力信号IN1、および、磁気センサ412から出力される入力信号IN2は、その電気角の位相差が90degである信号となっているが、これは、磁気センサ406、および、磁気センサ412を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置であるが、検出される磁界の方向が異なるように配置してもよいし、その他、所望の位相差が得られればどのような方法であってもよい。同様に、磁気センサ418から出力される入力信号IN3、および、磁気センサ424から出力される入力信号IN4は、その電気角の位相差が90degである信号となっているが、磁気センサ418、および、磁気センサ424を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置で、検出される磁界の方向が異なるように配置してもよいし、その他、所望の位相差が得られればどのような方法であってもよい。演算回路429は、例えば、汎用のマイクロコンピュータでもよく或いは専用の信号処理LSIでもよい。多極磁石403および多極磁石404は、回転部材であり、その平面形状(回転軸402に垂直な平面で切断した断面形状)は、例えば、中空円筒形が好適であるが、特定の形状に限定されるものではなく、角度検出に適した形状であればよい。磁石403は、回転軸402に固定されてもよく、或いはセレーション結合されてもよい。磁石404は、回転軸402に固定されてもよく、或いはセレーション結合されてもよい。回転軸402の軸芯方向をZ方向とすると、回転軸402の回転に伴い、多極磁石403および多極磁石404はXY平面内で回転する。
【0053】
磁気センサ406は、磁石403の回転に伴い周期的に変化する外部磁界405の変化を電圧変化として検出する磁気抵抗効果素子408と、磁気抵抗効果素子408にセンス電流を供給するプリント配線基板407とを備える。磁気センサ412は、磁石403の回転に伴い周期的に変化する外部磁界411の変化を電圧変化として検出する磁気抵抗効果素子414と、磁気抵抗効果素子414にセンス電流を供給するプリント配線基板413とを備える。磁気センサ418は、磁石404の回転に伴い周期的に変化する外部磁界417の変化を電圧変化として検出する磁気抵抗効果素子420と、磁気抵抗効果素子420にセンス電流を供給するプリント配線基板419とを備える。磁気センサ424は、磁石404の回転に伴い周期的に変化する外部磁界423の変化を電圧変化として検出する磁気抵抗効果素子426と、磁気抵抗効果素子426にセンス電流を供給するプリント配線基板425とを備える。磁気抵抗効果素子408および磁気抵抗効果素子414、磁気抵抗効果素子420、磁気抵抗効果素子426として、例えば、巨大磁気抵抗(GMR)型、トンネル磁気抵抗(TMR)型、弾道磁気抵抗(BMR)型、異方性磁気抵抗(AMR)型等の公知の磁気抵抗効果素子を用いることができる。なお、実施例1と同様、センス電流に変えて、センス電圧を供給してもよく、磁気抵抗効果素子408、および、磁気抵抗効果素子414、および、磁気抵抗効果素子420、および、磁気抵抗効果素子426の出力電圧変化を電流変化に変更してもよい。磁気抵抗効果素子408および磁気抵抗効果素子414、磁気抵抗効果素子420、磁気抵抗効果素子426の断面構造は、実施例1で示した磁気抵抗効果素子207と同じであるためここでは割愛する。
【0054】
次に、図5を参照しながら演算手段について説明する。本実施例における演算手段は、図1に示すステップ101、102、103の手順に基づいて行う。ステップ102は図3に、ステップ103は図4に従う。ここでは、磁気センサ406の出力電圧を入力信号IN1、磁気センサ412の出力電圧を入力信号IN2とし、回転軸402の回転角を出力値Yとすればよい。
【0055】
まず、図2に従い、直線の定義(ステップ101)について説明する。本実施例では、磁気抵抗効果素子408の抵抗が(1−cosξ)に比例して変化するため、磁気センサ406の出力は正弦波状の信号が予想される。磁気抵抗効果素子414も同様であり、演算回路429には、位相が90deg異なる正弦波状の1対の入力信号IN1、入力信号IN2が与えられる。多極磁石403は円周方向に12極(6組)の磁極を有するため、回転軸402が60deg回転する毎にIN1、IN2に正弦波状の信号1周期が得られる。一方、同様に、多極磁石404は周方向に10極(5組)の磁極を有するため、回転軸402が72deg回転する毎にIN3、IN4に正弦波状の信号1周期が得られる。図16に入力信号IN1、入力信号IN2を図示する。ここで、入力軸は回転軸402の回転角度(出力値Y)に相当し、出力軸は磁気抵抗効果素子408の想定される出力電圧(IN1)、および、磁気抵抗効果素子414の想定される出力電圧(IN2)に相当する。ここで、出力値Yが0となる基準位置は、IN1/IN2=−1、かつ、IN1<0となる点に取っている。IN1、IN2は実測の信号を用いてもよいが、ここでは理想的な信号を用いている。実測の信号を用いても直線定義の手順は全く同じである。関数Fは、入力信号IN1、入力信号IN2のうち入力信号の中間値を0とした絶対値が小さい方の入力信号を絶対値の大きい方の入力信号で除する演算を含むことが好ましい。さらに、入力値Xと出力値Yとを一対一に対応させる。この条件を満たすよう、関数F(IN1、IN2)を以下のように定義する。なお、F(IN1、IN2)は入力信号IN1、入力信号IN2の中間値を0とする演算を含むものとする。(ステップ111)。また、本実施例では、説明のため、入力信号IN1と入力信号IN2の最大値と最小値の差を同一の値として説明する。入力信号IN1と入力信号IN2の最大値と最小値の差を同一の値とすることにより、より直線に近い入力値Xと出力値Yの関係が得られている。ここで、Cは周期数であり、基準位置(この場合は出力値Y=0とした)から入力信号IN1、または、入力信号IN2が繰り返された回数を表す値で、本実施例では、正弦波状の信号が6回繰り返されるので、1≦C≦6を満たす。
F(IN1、IN2)=1+IN1/IN2+8×(C−1) (11)
(但し、|IN2|≧|IN1|かつIN2≧0)
F(IN1、IN2)=3−IN2/IN1+8×(C−1) (12)
(但し、|IN1|>|IN2|かつIN1≧0)
F(IN1、IN2)=5+IN1/IN2+8×(C−1) (13)
(但し、|IN2|≧|IN1|かつIN2<0)
F(IN1、IN2)=7−IN2/IN1+8×(C−1) (14)
(但し、|IN1|>|IN2|かつIN1<0)
図17に、関数Fによる演算結果を示す。ここで、入力軸は回転軸402の回転角度(出力値Y)に相当し、出力軸はF(IN1,IN2)、すなわち、入力値Xに相当する。このように、入力値Xに対して出力値Yが連続で与えられるよう関数Fを定義することが好適であるが、関数Fはそのように限られるものではない。本実施例では、入力値Xから出力値Yを求める必要があるので、図17において回転角度(出力値Y)を示している入力軸と入力値Xを示している出力軸を入れ替えて表示する必要がある。つまり、入力値Xを入力軸とし、回転角度(出力値Y)を出力軸とする必要がある。図18は横軸に入力値X、縦軸に出力値Y(回転軸402の回転角度)を示した図である。ここでは、直線を分割する必要はなく、全範囲に対して同一のZ(X)を定義する。(ステップ112)。Yの最小値と最大値を結ぶ直線Z(X)を考えると、
Z(X)=7.5×X (15)
(但し、0≦X<48)
で与えられる(ステップ113)。このように、Z(X)をひとつの一次関数で定義するので、一次関数を記憶するメモリー量が少なくなり、また、後述する演算処理が容易となる。本実施例では、ステップ113を解析的な演算により行ったが、これに限定するものではなく、実測のデータを基にして演算回路429により行ってもよいし、外部に用意された専用の演算装置を用いて行ってもよいし、その他どのような手段を用いて定義してもよい。例えば、後述のように、入力信号IN1(i)、入力信号IN2(i)を基にルックアップテーブルを作成するが、入力信号IN1(i)、入力信号IN2(i)を流用し、演算回路429または外部に用意した専用の演算装置が最小2乗法により直線を定義するという方法が考えられる。以上により、直線の定義(ステップ101)は終了となる。
【0056】
次に、図3に従いルックアップテーブル作成(ステップ102)の手順について説明する。まず、ADR(i)とX(i)の対応関係を定義する(ステップ121)。ADR(i)=G(X(i))で表わされる関数Gを定義すればよい。本実施例では、ルックアップテーブルの要素数は1008とする。入力値Xの最大値は、関数Fの定義より48となる。特に精度を向上させたい部分がなければ単純に定数倍してアドレスを割り振ればよく、1008/48=21を用いて、
G(X(i))=21×X(i) (16)
(但し、0≦X<48)
とすればよい。続いて、入力信号IN1(i)、入力信号IN2(i)より入力値X(i)を求める(ステップ122)。入力信号IN1(i)は磁気センサ406から得られた信号をA/D変換器410を通して取り込まれたものであり、入力信号IN2(i)は磁気センサ412より得られた信号をA/D変換器416を通して取り込まれたものである。入力信号IN1(i)、入力信号IN2(i)は、理想的な信号を用いても差し支えないし、実測の信号を用いてもよい。一般的には、実測の信号を用いた方が、精度が向上する。ここでは、実測の信号を用いてテーブルを作成する。入力信号IN1(i)、入力信号IN2(i)の実測値を図19に示す。ここで、入力軸は回転軸402の回転角度(出力値Y(i))に相当し、出力軸は磁気抵抗効果素子408の出力電圧(IN1(i))、および、磁気抵抗効果素子414の出力電圧(IN2(i))に相当する。入力値X(i)は、ステップ111にて定義した関数Fを用いて、X(i)=F(IN1(i)、IN2(i))より求めればよい。この演算結果は図20となる。ここで、入力軸は回転軸402の回転角度(出力値Y(i))に相当し、出力軸はF(IN1,IN2)、すなわち、入力値X(i)に相当する。ここで、図19に示されているプロットP1、プロットP2(Y(i)=149.443、IN1(i)=0.759、IN2(i)=−0.666、C=3)について演算を行うと、|IN1(i)|>|IN2(i)|かつIN1(i)≧0の条件を満たすので、式(12)を用いて、F(IN1(i)、IN2(i))=3−IN2(i)/IN1(i)+8×(C−1)となる。値を代入して計算すると、X(i)=19.877となり、図20に示すプロットQ1となる。図19にあるすべてのプロットに対して同様の演算を行った結果が図20である。入力値X(i)を入力軸とし、回転角度(出力値Y(i))を出力軸とするとルックアップテーブルの作成が容易であるため、図21に入力軸に入力値X(i)、出力軸に出力値Y(i)(回転軸402の回転角度)を示した図を示す。プロットQ1について、入力値X(i)と出力値Y(i)を入れ替えると、プロットR1(X(i)=19.877、Y(i)=149.443)となる。最後に、X(i)に対応付けられるADR(i)を有するa[ADR(i)]に Z(X(i))とY(i)との差 を格納し、記憶部に記憶する(ステップ123)。プロットR1に対する演算を用いて説明を行う。関数Gを用いて、ADR(i)=G(X(i))を計算する。21×X(i)となり、アドレスADR(i)は417.417となる。また、式(15)に示される関数Zを用いて、Z(X(i))=7.5×X(i)となり、Z(X(i))=149.078である。Z(X(i))とY(i)との差をもとめると、Y(i)−Z(X(i))=0.365となる。つまり、配列要素a[417.417]に0.365を格納すればよい。これをプロットS1とする。この操作を図21にあるプロットすべてに対して行った結果が図22である。ここで、入力軸はアドレスADR(i)に相当し、出力軸は配列要素a[ADR(i)]に相当する。ところが、上記のような計算を行うと、例えば、配列要素a[417.417]に0.365が格納されることになるが、a[ADR(i)]は配列要素であるため、アドレスADR(i)が整数でなければ実際には格納できない。最も簡単な方法では、417.417の小数点未満を切り捨て、あるいは切り上げ、あるいは四捨五入し、そのアドレスに0.365を格納すればよい。ただし、この方法では、明らかに誤差が大きくなる。そこで、本実施例では、直線補間を行うことによりルックアップテーブルを作成する。直線補間の方法については図23を用いて説明する。図23は、図22のプロットS1付近を拡大したものである。入力軸および出力軸は図22と同様である。図23に示されているプロットT1(416.088、0.489)およびプロットT2(418.767、0.235)は、プロットS1と同様にして求められたプロットである。このプロットT1,プロットT2とプロットS1を用いてa[417]およびa[418]に格納する値を決定する。具体的には、プロットT1およびプロットS1を通る直線を求め、ADR(i)=417と交わる点を求めると、プロットU1(417、0.406)となる。これにより、a[417]=0.406とすればよいことが分かる。同様に、プロットT2およびプロットS1を通る直線がADR(i)=418と交わる点を求めると、プロットU2(418、0.311)が求められ、a[418]=0.311とすればよいことが分かる。すなわち、アドレスADRより値が小さいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]と、アドレスADRより値が大きいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]とを結んだ直線が、アドレスADRを示す直線と交わる点を求め、アドレスADRを有する配列要素a[ADR(i)]であるとすればよい。すべてのa[ADR(i)](0≦ADR(i)≦1007)に対してこのように求めることにより、ルックアップテーブルが作成される。
【0057】
入力値Xに対応する角度を直接ルックアップテーブルに格納した場合、0〜360degをテーブルに格納する必要がある。一方、本実施例では、図22より、ルックアップテーブルに格納される値は−0.8〜+0.8degの範囲となり、ルックアップテーブル1要素につき、log2(360/1.6)=7.8bit削減することが可能となる。例えば、0.01deg分解能でルックアップテーブルを作成したい場合、角度を直接格納する方式では、格納される値は0〜36000となり、16bitの領域(0〜65535)が必要である。一方、本実施例では、−80〜80を格納すればよく、8bitの領域(−128〜127)があれば十分である。本実施例では、ルックアップテーブルの要素数は1008となっているので、ルックアップテーブル作成に必要なメモリ量は、直接角度を格納するタイプでは、16×1008=16128bitとなり、約2Kバイトである。一方、本実施例では、8×1008bitとなるので、約1Kバイトのメモリで同等の効果を得ることが可能となる。削減されるメモリの割合は、ルックアップテーブルに求められる分解能により異なり、例えば、0.1degの分解能であればメモリは3分の1に削減される。なお、本実施例では、入力信号IN1、入力信号IN2は、回転軸402が一回転する間に6周期の信号を出力する。そのため、図22に示したルックアップテーブルにおいても、アドレス168毎によく似た信号が繰り返されている(実測の値より求めているため厳密に同一ではない)。そこで、求められる精度が、例えば、0.1deg程度であれば、アドレス0〜167を記憶しておき、それ以降のアドレスが指定された場合は、アドレス0〜167の繰り返しであるとして演算を行うと、ルックアップテーブルに使用するメモリをさらに削減することが可能である。その場合は、
ADR=21×X/6 (17)
(但し、0≦X<48)
と定義すればよい。なお、本実施例では、ステップ102は、演算回路429により行っているが、外部に用意された専用の演算装置等を用いて行うことが考えられ、演算が可能であれば、その他どのような手段で行ってもよい。
【0058】
次に、図4に従い演算装置による出力演算(ステップ103)について説明する。まず、A/D変換器410より入力信号IN1を、A/D変換器416より入力信号IN2を取り込み、取り込んだ値より入力値Xを求める(ステップ131)。入力値Xを求める関数Fには、周期数Cが含まれる。前述のように、周期数とは、基準位置(この場合は出力値Y=0とした)から入力信号IN1、または、入力信号IN2が繰り返された回数を表す値である。周期数Cについては、入力信号IN1、入力信号IN2の変化から増減を検出でき、本実施例の場合は、前述のように、出力値Yが0となる基準位置を、IN1/IN2=−1、かつ、IN1<0となる点としているので、図19を見れば分かるように、周期数Cは、IN1/IN2=−1、かつ、IN1<0となる点で切り替わることとなり、現在の周期数を記憶しておき、切り替え点に達する毎に加算または減算していけば周期数を正しく検出することが可能である。ただし、電源切断後に回転軸402が回転した場合には周期数Cが正しく検出できない。そのため、電源切断後に回転軸402が回転する可能性がある場合は、電源投入時に周期数Cを検出する必要がある。電源投入時の周期数Cの求め方については後述する。周期数Cが分かれば、関数Fを用いて、X=F(IN1、IN2)により入力値Xを求めることができる。例として、図19に示した実測波形におけるプロットP1、プロットP2の値を用いて説明する。IN1=0.759、IN2=−0.666、S=3であり、関数Fに従って計算すると、X=19.877となる。次に、入力値Xより参照するアドレスADRを求める(ステップ132)。関数Gを用いて、ADR=G(X)により求めればよく、ADR=417.417となる。
【0059】
続いて、予想される出力値Z(X)の演算を行う(ステップ133)。関数Zを用いて演算を行うと、Z(X)= 7.5×Xであるから、Z(X)= 7.5×19.877=149.078となる。
【0060】
最後に、ルックアップテーブルを記憶部より読み出し、アドレスADRを有する配列要素a[ADR(i)]を参照して、予想される出力値Z(X) を補正して出力する(ステップ134)。ここで、a[417.417]を参照する必要があるが、前述のように、ルックアップテーブルはアドレスが整数でなければ存在しない。ルックアップテーブル作成時と同様、最も簡単な方法では、417.417の小数点未満を切り捨て、あるいは切り上げ、あるいは四捨五入したアドレスを参照することである。ただし、この方法では、明らかに誤差が大きくなる。そこで、本実施例では、直線補間を行い、ルックアップテーブルを参照する。直線補間は図24のように行われる。図24はルックアップテーブルの一部を拡大して示しており、入力軸・出力軸は図22と同様である。参照するアドレスが整数でない場合は、その前後のテーブル値を直線で結び、所望のアドレスと重なる点を参照する。ここで、a[ADR(i)]は配列要素であり、要素数は有限である。従って、アドレスADRを有する配列要素a[ADR(i)]が存在しない場合がある。そのような場合は、アドレスADRを有する配列要素a[ADR(i)]が存在するアドレスADRのうち、アドレスADRより値が小さいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]と、アドレスADRより値が大きいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]とを結んだ直線が、アドレスADRを示す直線と交わる点を求め、アドレスADRを有する配列要素a[ADR(i)]であるとすればよい。例えば、アドレス417.417を参照したいならば、小数点以下を切り捨てたアドレス417(テーブル値0.406)と小数点以下を切り上げたアドレス418(テーブル値0.311)を直線で結び、アドレス417.417と重なる点(プロットV1)を参照すればよい。プロットV1のテーブル値に相当する値は0.366となる。出力値Yは、Y=Z(X)+a[ADR]で与えられ、この場合はY=149.078+0.366=149.444[deg]が得られる。
【0061】
ここからは、電源投入時の周期数Cの求め方について説明する。まず、入力信号IN1、入力信号IN2より、電気角位相を求める。この電気角位相をANG1とする。電気角位相は、例えば、arctan関数を用いて求めることが可能である。arctan関数は演算回路429に負荷がかかるが、前述のように電源投入時のみ行う動作であれば問題とならない。リング磁石403が12極(6組)の磁極を有することから、ANG1は、回転軸402の回転角の増加に伴い単調に増加し、60deg周期で繰り返す信号となる。同様にして、入力信号IN3、入力信号IN4からも電気角位相を求める。この電気角位相をANG2とする。リング磁石404が10極(5組)の磁極を有することから、ANG2は、回転軸402の回転角の増加に伴い単調に増加し、72deg周期で繰り返す信号となる。電気角位相差ΔANGを以下のように定義すると、電気角位相差ΔANGより周期数Cを求めることが可能となる。ここで、入力信号IN1、入力信号IN2から得られる第1の電気角位相と、入力信号IN3、入力信号IN4から得られる第2の電気角位相とは、異なる電気角位相である必要があり、それぞれの周期数は互いに素の関係を有する、または、整数倍の関係にならないことが好ましい。周期数が整数倍であると、以下の周期数を求める演算Cにおいて、周期数が決定できないからである。
ΔANG=ANG1−ANG2 (18)
(但し、ANG1≧ANG2)
ΔANG=360+ANG1−ANG2 (19)
(但し、ANG1<ANG2)
入力軸を回転軸402の回転角として、出力軸にANG1、ANG2、ΔANGを示すと、図25となる。ここで、回転軸402の回転角と電気角位相差ΔANGは一対一に対応するので、(電気角)周期数Cを求めることが可能となる。本実施例では、周期数Cは、1≦S≦6で、60deg毎に切り替わるので、C=ΔANG/6+1として小数点以下を切り捨てれば周期数を求めることができる。ここではANG1、ANG2がともに0となる点をC=1の基準位置としているが、基準位置はどこにとってもよい。つまり、電気角位相差ΔANGを第1の電気角位相差とした場合の基準位置を基準とした第1の電気角位相差である第2の電気角位相差に基づいて、周期数を求めている。すでに述べたように、電源投入時のみ、このように周期数Cを演算により求め、通常動作中は入力信号の変化から周期数Cを求めてもよいし、常に周期数Cを演算により求めてもよい。ただし、常に演算により周期数Cを求める場合、arctan演算を行うと演算回路429にかかる負荷が大きくなってしまうので注意が必要である。また、電源切断後に回転軸402が動かないことが分かっているのであれば、このような演算は省略可能で、入力信号変化のみから周期数Cを求めることができる。すなわち、入力信号IN3、入力信号IN4を求めるための構成は省略可能となる。
(実施例3)
【0062】
次に、図26を参照しながら本実施例に関わる角度センサ601の構成について説明する。角度センサ601は、回転軸602の所定の基準位置からの多回転回転角(0deg〜1080deg)を検出するための角度検出装置である。回転軸602として、例えば、ステアリングシャフトを挙げることができるが、これに限定されるものではない。角度センサ601は、回転軸602の軸芯回りの回転に連動して回転し、その外周に30歯を有する歯車603と、回転軸604の軸芯回りの回転に連動して回転し、その外周に15歯を有し、歯車603と噛合する歯車605と、回転軸604の軸芯回りの回転に連動して回転する磁石606と、回転軸607の軸芯回りの回転に連動して回転し、その外周に18歯を有し、歯車603と噛合する歯車608と、回転軸607の軸芯回りの回転に連動して回転する磁石609と、回転軸604の軸の周辺部に、回転軸604の軸とは独立に固定され、回転軸604の回転角の情報を担う検出信号(入力信号IN1)を出力する磁気センサ611と、磁気センサ611から出力される検出信号を増幅する増幅器(AMP)614と、増幅器614によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器615と、回転軸604の軸の周辺部に、回転軸604の軸とは独立に固定され、回転軸604の回転角の情報を担う検出信号(入力信号IN2)を出力する磁気センサ617と、磁気センサ617から出力される検出信号を増幅する増幅器(AMP)620と、増幅器620によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器621と、回転軸607の軸の周辺部に、回転軸607の軸とは独立に固定され、回転軸607の回転角の情報を担う検出信号(入力信号IN3)を出力する磁気センサ623と、磁気センサ623から出力される検出信号を増幅する増幅器(AMP)626と、増幅器626によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器627と、回転軸607の軸の周辺部に、回転軸607の軸とは独立に固定され、回転軸607の回転角の情報を担う検出信号(入力信号IN4)を出力する磁気センサ629と、磁気センサ629から出力される検出信号を増幅する増幅器(AMP)632と、増幅器632によって増幅されたアナログ信号としての検出信号をデジタル信号に変換するA/D変換器633と、記憶部に記憶されているルックアップテーブル(LUT)635と、ルックアップテーブル635を参照して、A/D変換器615、および、A/D変換器621、および、A/D変換器627、および、A/D変換器633からの出力信号の組み合わせから回転軸602の回転角を求める演算回路(MPU)634とを備える。磁気センサ611から出力される入力信号IN1、および、磁気センサ617から出力される入力信号IN2は、その電気角の位相差が90degである信号となっているが、これは、磁気センサ611、および、磁気センサ617を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置であるが、検出される磁界の方向が異なるように配置してもよいし、その他、所望の位相差が得られればどのような方法であってもよい。例えば、磁気センサ611と磁気センサ617がGMR素子を用いた磁気センサであり、磁石606と対向する位置に、磁気センサ611と磁気センサ617を磁化固定層が90deg異なるように並べるような配置が考えられる。同様に、磁気センサ623から出力される入力信号IN3、および、磁気センサ629から出力される入力信号IN4は、その電気角の位相差が90degである信号となっているが、磁気センサ623、および、磁気センサ629を磁界に対して空間的に異なった位置に配置してもよいし、空間的には同じ位置で、検出される磁界の方向が異なるように配置してもよいし、その他、所望の位相差が得られればどのような方法であってもよい。例えば、磁気センサ623と磁気センサ629がGMR素子を用いた磁気センサであり、磁石609と対向する位置に、磁気センサ623と磁気センサ629を磁化固定層が90deg異なるように並べるような配置が考えられる。演算回路634は、例えば、汎用のマイクロコンピュータでもよく或いは専用の信号処理LSIでもよい。磁石606および磁石609は、回転部材であり、その平面形状(回転軸604または回転軸607に垂直な平面で切断した断面形状)は、例えば、長方形や、円形が好適であるが、特定の形状に限定されるものではなく、角度検出に適した形状であればよい。歯車603は、回転軸602に固定されてもよく、或いはセレーション結合されてもよい。歯車605および磁石606は、回転軸604に固定されてもよく、或いはセレーション結合されてもよい。歯車608および磁石609は、回転軸607に固定されてもよく、或いはセレーション結合されてもよい。回転軸602の軸芯方向をZ方向とすると、回転軸602の回転に伴い、歯車603はXY平面内で回転し、回転軸604の軸芯方向をZ方向とすると、回転軸604の回転に伴い、歯車605および磁石606はXY平面内で回転し、回転軸607の軸芯方向をZ方向とすると、回転軸607の回転に伴い、歯車608および磁石609はXY平面内で回転する。
【0063】
磁気センサ611は、磁石606の回転に伴い周期的に変化する外部磁界610の変化を電圧変化として検出する磁気抵抗効果素子613と、磁気抵抗効果素子613にセンス電流を供給するプリント配線基板612とを備える。磁気センサ617は、磁石606の回転に伴い周期的に変化する外部磁界616の変化を電圧変化として検出する磁気抵抗効果素子619と、磁気抵抗効果素子619にセンス電流を供給するプリント配線基板618とを備える。磁気センサ623は、磁石609の回転に伴い周期的に変化する外部磁界622の変化を電圧変化として検出する磁気抵抗効果素子625と、磁気抵抗効果素子625にセンス電流を供給するプリント配線基板624とを備える。磁気センサ629は、磁石609の回転に伴い周期的に変化する外部磁界628の変化を電圧変化として検出する磁気抵抗効果素子631と、磁気抵抗効果素子631にセンス電流を供給するプリント配線基板630とを備える。磁気抵抗効果素子613および磁気抵抗効果素子619、磁気抵抗効果素子625、磁気抵抗効果素子631として、例えば、巨大磁気抵抗(GMR)型、トンネル磁気抵抗(TMR)型、弾道磁気抵抗(BMR)型、異方性磁気抵抗(AMR)型等の公知の磁気抵抗効果素子を用いることができる。なお、実施例1、2と同様、センス電流に変えて、センス電圧を供給してもよく、磁気抵抗効果素子613、および、磁気抵抗効果素子619、および、磁気抵抗効果素子625、および、磁気抵抗効果素子631の出力電圧変化を電流変化に変更してもよい。磁気抵抗効果素子613および磁気抵抗効果素子619、磁気抵抗効果素子625、磁気抵抗効果素子631の断面構造は、実施例1で示した磁気抵抗効果素子207と同じであるためここでは割愛する。
【0064】
次に、図7を参照しながら演算手段について説明する。本実施例における演算手段は、図1に示すステップ101、102、103の手順に基づいて行う。ステップ102は図5に、ステップ103は図7に従う。ここでは、磁気センサ611の出力電圧を入力信号IN1、磁気センサ617の出力電圧を入力信号IN2とし、回転軸602の回転角を出力値Yとすればよい。
【0065】
まず、図2に従い、直線の定義(ステップ101)について説明する。本実施例では、磁気抵抗効果素子613の抵抗が(1−cosξ)に比例して変化するため、磁気センサ611の出力は正弦波状の信号が予想される。磁気抵抗効果素子619も同様であり、演算回路634には、位相が90deg異なる正弦波状の1対の入力信号IN1、入力信号IN2が与えられる。磁石606が回転軸604のまわりを360deg回転する毎にIN1、IN2に正弦波状の信号1周期が得られる。歯車603の歯数が30歯、歯車605の歯数が15歯であることから、回転軸602が180deg回転する間に回転軸604は360deg回転する。すなわち、回転軸602が180deg回転する毎にIN1、IN2に正弦波状の信号1周期が得られる。一方、同様に、磁石609が回転軸607のまわりを360deg回転する毎にIN3、IN4に正弦波状の信号1周期が得られる。歯車603の歯数が30歯、歯車608の歯数が18歯であることから、回転軸602が216deg回転する間に回転軸607は360deg回転する。すなわち、回転軸602が216deg回転する毎にIN3、IN4に正弦波状の信号1周期が得られる。図27に入力信号IN1、入力信号IN2を図示する。ここで、入力軸は回転軸602の多回転を含む回転角度(出力値Y)に相当し、出力軸は磁気抵抗効果素子613の想定される出力電圧(IN1)、および、磁気抵抗効果素子619の想定される出力電圧(IN2)に相当する。IN1、IN2は実測の信号を用いてもよいが、ここでは理想的な信号を用いている。実測の信号を用いても直線定義の手順は全く同じである。関数Fには、入力信号IN1、入力信号IN2のうち入力信号の中間値を0とした絶対値が小さい方の入力信号を絶対値の大きい方の入力信号で除する演算が含まれることが好ましく、また、入力値Xと出力値Yが一対一に対応することが好ましい。この条件を満たすよう、関数Fを以下のように定義する。(ステップ111)。なお、F(IN1、IN2)は入力信号IN1、入力信号IN2の中間値を0とする演算を含むものとする。また、本実施例では、説明のため、入力信号IN1と入力信号IN2の最大値と最小値の差を同一の値として説明する。入力信号IN1と入力信号IN2の最大値と最小値の差を同一の値とすることにより、より直線に近い入力値Xと出力値Yの関係が得られている。ここで、Cは周期数であり、基準位置(この場合は出力値Y=0とした)から入力信号IN1、または、入力信号IN2が繰り返された回数を表す値で、本実施例では、正弦波状の信号が6回繰り返されるので、1≦C≦6を満たす。
F(IN1、IN2)=21×(1+IN1/IN2+8×(C−1)) (20)
(但し、|IN2|≧|IN1|かつIN2≧0)
F(IN1、IN2)=21×(3−IN2/IN1+8×(C−1)) (21)
(但し、|IN1|>|IN2|かつIN1≧0)
F(IN1、IN2)=21×(5+IN1/IN2+8×(C−1)) (22)
(但し、|IN2|≧|IN1|かつIN2<0)
F(IN1、IN2)=21×(7−IN2/IN1+8×(C−1)) (23)
(但し、|IN1|>|IN2|かつIN1<0)
図28に、関数Fによる演算結果を示す。ここで、入力軸は回転軸602の多回転を含む回転角度(出力値Y)に相当し、出力軸はF(IN1,IN2)、すなわち、入力値Xに相当する。このように、入力値Xに対して出力値Yが連続で与えられるよう関数Fを定義することが好適であるが、関数Fはそのように限られるものではない。本実施例では、入力値Xから出力値Yを求める必要があるので、図28において回転角度(出力値Y)を示している入力軸と入力値Xを示している出力軸を入れ替えて表示する必要がある。つまり、入力値Xを入力軸とし、回転角度(出力値Y)を出力軸とする必要がある。図29は入力軸に入力値X、出力軸に出力値Y(回転軸602の回転角度)を示した図である。ここでは、直線を分割する必要はなく、全範囲に対して同一のZ(X)を定義する。(ステップ112)。Yの最小値と最大値を結ぶ直線Z(X)を考えると、Z(X)=1080/1008 ×Xで与えられる(ステップ113)。このように、Z(X)をひとつの一次関数で定義するので、一次関数を記憶するメモリー量が少なくなり、また、後述する演算処理が容易となる。本実施例では、ステップ113を解析的な演算により行ったが、これに限定するものではなく、実測のデータを基にして演算回路634により行ってもよいし、外部に用意された専用の演算装置を用いて行ってもよいし、その他どのような手段を用いて定義してもよい。例えば、後述のように、入力信号IN1(i)、入力信号IN2(i)を基にルックアップテーブルを作成するが、入力信号IN1(i)、入力信号IN2(i)を流用し、演算回路634または外部に用意した専用の演算装置が最小2乗法により直線を定義するという方法が考えられる。以上により、直線の定義(ステップ101)は終了となる。
【0066】
次に、図5に従いルックアップテーブル作成(ステップ102)の手順について説明する。まず、ADR(i)とX(i)の対応関係を定義する(ステップ121)。ADR(i)=G(X(i))で表わされる関数Gを定義すればよい。本実施例では、ルックアップテーブルの要素数は1008とする。入力値Xの最大値は、関数Fの定義より1008となる。本実施例では、
G(X(i))=X(i) (24)
(但し、0≦X<1008)
とする。続いて、入力信号IN1(i)、入力信号IN2(i)より入力値X(i)を求める(ステップ122)。入力信号IN1(i)は磁気センサ611から得られた信号をA/D変換器615を通して取り込まれた実測の値であり、入力信号IN2(i)は磁気センサ617より得られた信号をA/D変換器621を通して取り込まれた実測の値である。入力信号IN1(i)、入力信号IN2(i)の実測値を図30に示す。ここで、入力軸は回転軸602の回転角度(出力値Y(i))に相当し、出力軸は磁気抵抗効果素子613の出力電圧(IN1(i))、および、磁気抵抗効果素子619の出力電圧(IN2(i))に相当する。ここで、出力値Yが0となる基準位置は、IN1(i)/IN2(i)=−1、かつ、IN1<0となる点に取っている。入力値X(i)は、ステップ111にて定義した関数Fを用いて、X(i)=F(IN1(i)、IN2(i))より求めればよい。この演算結果は図31となる。ここで、入力軸は回転軸602の回転角度(出力値Y(i))に相当し、出力軸はF(IN1,IN2)、すなわち、入力値X(i)に相当する。ここで、図30に示されているプロットP3、プロットP4(Y(i)=448.979、IN1(i)=0.768、IN2(i)=−0.708、C=3)について演算を行うと、|IN1(i)|>|IN2(i)|かつIN1(i)≧0の条件を満たすので、F(IN1(i)、IN2(i))=21×(3−IN2(i)/IN1(i)+8×(C−1))となる。値を代入して計算すると、X(i)=418.368となり、図31に示すプロットQ2となる。図30にあるすべてのプロットに対して同様の演算を行った結果が図31である。入力値X(i)を入力軸とし、回転角度(出力値Y(i))を出力軸とするとルックアップテーブルの作成が容易であるため、図32に横軸を入力値X(i)、縦軸を出力値Y(i)(回転軸602の回転角度)とした図を示す。プロットQ2について、入力値X(i)と出力値Y(i)を入れ替えると、プロットR2(X(i)=418.368、Y(i)=448.979)となる。最後に、入力値X(i)に対応付けられるアドレスADR(i)を有するa[ADR(i)]にZ−1(Y(i))とX(i)との差 を格納し記憶部に記憶する(ステップ143)。プロットR2に対する演算を用いて説明を行う。関数Gを用いて、ADR(i)=G(X(i))を計算する。ADR(i)=X(i)となり、アドレスADR(i)は418.368となる。また、関数Zを用いて、Z−1(Y(i))=Y(i)×1008/1080となり、Z−1(Y(i))=419.047である。Z−1(Y(i))とX(i)との差をもとめると、Z−1(Y(i))−X(i)=0.679となる。つまり、配列要素a[418.368]に0.679を格納すればよい。これをプロットS2とする。この操作を図32にあるプロットすべてに対して行った結果が図33である。ここで、入力軸はアドレスADR(i)に相当し、出力軸は配列要素a[ADR(i)]に相当する。実施例2と同様に、ADR(i)が整数の場合について配列要素a[ADR(i)]を求める必要があり、直線補間を行うことによりルックアップテーブルを作成する。直線補間の方法は実施例2と同様であり、図34を用いて説明する。図34は、図33のプロットS2付近を拡大したものである。入力軸および出力軸は図33と同様である。プロットS2と同様にしてプロットT3(417.140、0.923)、T4(419.708、0.324)を求める。プロットS2とプロットT3を結んだ直線とADR(i)=418とが交わる点がプロットU3(418、0.777)である。従って、a[418]=0.777となる。同様にプロットS2とプロットT4を結んだ直線とADR(i)=419とが交わる点がプロットU4(419、0.512)である。従って、a[419]=0.512となる。すべてのa[ADR(i)](0≦ADR(i)≦1007)に対してこのように求めることにより、ルックアップテーブルが作成される。
【0067】
本実施例では、ルックアップテーブルに格納される値は図33より、−1.6〜+1.6の範囲となる。これは、Z(X)= 1080×X/1008であるから、−1.8〜+1.8degを格納することに相当する。ルックアップテーブルに直接角度を格納した場合、格納される最大値は1080となるのに対して、本実施例では、−1.8〜+1.8degに相当する値を格納すればよく、格納される最大値が3.6degである場合に等しい。従って、ルックアップテーブル1要素につき、log2(1080/3.6)=8.2bit削減することが可能となる。具体的な例を挙げると、0.1deg分解能でルックアップテーブルを作成したい場合、角度を直接格納する方式では0〜1080degを格納する必要があり、格納される値は0〜10800となり、14bit(0〜16383)の領域が必要である。一方、本実施例では、0.1deg分解能を得るためには、0.1×1008/1080分解能のテーブルを作成する必要がある。3.2/(0.1×1008/1080)=34.3となり、6bit(0〜63)の領域が必要となる。本実施例では、ルックアップテーブルの要素数は1008となっているので、ルックアップテーブル作成に必要なメモリ量は、直接角度を格納するタイプでは、14×1008=14112bitとなり、約1.8Kバイトである。一方、本実施例では、6×1008bitとなるので、約0.8Kバイトのメモリで同等の効果を得ることが可能となる。本実施例では、ステップ102は、演算回路634により行っているが、外部に用意された専用の演算装置等を用いて行うことが考えられ、演算が可能であれば、その他どのような手段で行ってもよい。
【0068】
次に、図7に従い演算装置による出力演算(ステップ103)について説明する。まず、A/D変換器615より入力信号IN1を、A/D変換器621より入力信号IN2を取り込み、取り込んだ値より入力値Xを求める(ステップ131)。入力値Xを求める関数Fには、周期数Cが含まれる。前述のように、周期数とは、基準位置(この場合は出力値Y=0とした)から入力信号IN1、または、入力信号IN2が繰り返された回数を表す値である。周期数Cの求め方は実施例2と同様で、図30を見れば分かるように、電源投入時は入力信号IN1、入力信号IN2と入力信号IN3、入力信号IN4の電気角位相差から求め、通常動作時はIN1/IN2=−1、かつ、IN1<0となる点で周期数Cを切り替えていけばよい。まず、関数Fを用いて、X=F(IN1、IN2)により入力値Xを求めることができる。例として、図30に示した実測波形におけるプロットP3、プロットP4の値を用いて説明する。IN1=0.768、IN2=−0.708、C=3であり、関数Fに従って計算すると、X=418.368となる。次に、入力値Xより参照するアドレスADRを求める(ステップ132)。関数Gを用いて、ADR=G(X)により求めればよく、ADR=418.368となる。続いて、ルックアップテーブルを記憶部より読み出し、アドレスADRを有する配列要素a[ADR(i)]を参照して入力値Xを補正し、理想的な入力値Xrevを求める(ステップ153)。a[ADR(i)]は配列要素であり、要素数は有限である。従って、アドレスADRを有する配列要素a[ADR(i)]が存在しない場合がある。そのような場合は、アドレスADRを有する配列要素a[ADR(i)]が存在するアドレスADRのうち、アドレスADRより値が小さいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]と、アドレスADRより値が大きいアドレスのうち、最もアドレスADRに近い値となるアドレスを有する配列要素a[ADR(i)]とを結んだ直線が、アドレスADRを示す直線と交わる点を求め、アドレスADRを有する配列要素a[ADR(i)]であるとすればよい。ここで、a[418.368]を参照する必要があるので、直線補間を用いてルックアップテーブルを参照する。直線補間は図35のように行われる。図35はルックアップテーブルの一部を拡大して示したものであり、入力軸・出力軸は図33と同様である。参照するアドレスが整数でない場合は、小数点以下を切り上げたアドレスに対応する点と、小数点以下を切り上げたアドレスに対応する点を直線で結び、所望のアドレスと重なる点を参照する。ここでは、アドレス418.368を参照したいならば、小数点以下を切り捨てたアドレス418(テーブル値0.777)と小数点以下を切り上げたアドレス419(テーブル値0.512)を直線で結び、アドレス418.368と重なる点(プロットV2)を参照すればよい。プロットV2のテーブル値に相当する値は0.713となる。補正された入力値Xrevは、Xrev=X+a[ADR]で与えられ、Xrev=418.368+0.713=419.081となる。最後に、出力値Z(Xrev)を出力する(ステップ154)。関数Zを用いて演算を行うと、Z(Xrev)=1080/1008×Xrevであるから、Z(X)=1080/1008×419.081=449.015となり、これを出力する。
【0069】
本実施例1〜3では、入力信号が正弦波である場合について説明したが、三角波や台形波等、他の形状でも同様の手順で実現可能である。
【0070】
本実施例2、3では、演算回路と記憶部を個別に説明したが、これに限られるものではなく、演算回路内部に記憶部を有していても良い。
【0071】
本実施例1〜3では、角度センサについて説明したが、様々な形態が可能である。例えば、リニアセンサのように、固定された磁石を直線上に周期的に配置し、磁気センサが磁石近傍を直線的に移動することにより、出力手段である磁気センサの出力から、磁気センサの移動量を求めることも可能である。従って、出力手段である磁気センサと、対象物である磁石、または、回転軸の周囲に固定された磁石などの相対移動量である移動距離、または、回転角が測定可能である。つまり、対象物と、出力手段と、との相対移動に応じて、出力手段が所定の電気角位相差を有する一対の信号を出力することにより、出力手段と、対象物と、の相対移動量を出力する相対移動量測定装置を得ることが可能である。
【産業上の利用可能性】
【0072】
本発明は、コンピュータ技術分野全般や、自動車技術分野、センサ技術分野等の各種工業分野に利用できる。
【符号の説明】
【0073】
201 角度センサ
202 回転軸
203 磁石
204、211 磁界
205、212 磁気センサ
206、213 プリント配線基板
207、214 磁気抵抗効果素子
208、215 増幅器
209、216 A/Dコンバータ
210 演算回路
220 下地層
221 反強磁性層
222 磁化固定層
223 非磁性導電層
224 磁化自由層
225 保護層
221A 反強磁性層221の磁化方向
222A 磁化固定層222の磁化方向
224A 磁化自由層224の磁化方向
401 角度センサ
402 回転軸
403 多極磁石(12極)
404 多極磁石(10極)
405、411、417、423 磁界
406、412、418、424 磁気センサ
407、413、419、425 プリント配線基板
408、414、420、426 磁気抵抗効果素子
409、415、421、427 増幅器
410、416、422、428 A/Dコンバータ
429 演算回路
430 ルックアップテーブル
601 角度センサ
602、604、607 回転軸
603 歯車(30歯)
605 歯車(15歯)
606、609 磁石
608 歯車(18歯)
610、616、622、628 磁界
611、617、623、629 磁気センサ
612、618、624、630 プリント配線基板
613、619、625、631 磁気抵抗効果素子
614、620、626、632 増幅器
615、621、627、633 A/Dコンバータ
634 演算回路
635 ルックアップテーブル

【特許請求の範囲】
【請求項1】
所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように前記第1の入力信号に第1の演算を行い定義された第1の入力値を受け、前記第1の入力値を引数とした一次関数に基づいて、前記第1の入力値に対応する前記一次関数上の第2の出力値を前記第1の出力値として出力する演算手段を有する演算装置。
【請求項2】
所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように前記第1の入力信号に第1の演算を行い定義された第1の入力値を引数とした一次関数に基づいた前記第1の入力値に対応する前記一次関数上の第2の出力値と、前記第1の出力値と、の差分を、前記第1の入力値と対応付けるアドレス関数により定義されたアドレスを引数とする配列要素に格納した第1のテーブルを有する記憶部から前記第1のテーブルを読み出すとともに、前記第1の入力値を受け、前記第1の入力値に対応する前記第2の出力値と、前記第1の入力値に対応する前記配列要素に格納された値と、に基づいて前記第1の出力値を出力する演算手段を有する演算装置。
【請求項3】
所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように前記第1の入力信号に第1の演算を行い定義された第1の入力値を引数とした一次関数上の前記第1の出力値に対応する第2の入力値と、前記第1の入力値と、の差分を、前記第1の入力値と対応付けるアドレス関数により定義されたアドレスを引数とする配列要素に格納した第2のテーブルを有する記憶部から前記第2のテーブルを読み出すとともに、前記第1の入力値を受け、前記第1の入力値と、前記第1の入力値に対応する前記配列要素に格納された値と、に基づいて前記第2の入力値に対応する前記第1の出力値を出力する演算手段を有する演算装置。
【請求項4】
前記第1の演算は、前記第1の出力値に応じた、前記一対の第1の入力信号の中間値を0とした絶対値が小さい一方の入力信号を絶対値の大きい他方の入力信号で除する演算を有する請求項1乃至請求項3に記載の演算装置。
【請求項5】
前記第1の演算は、前記一対の第1の入力信号の最大値と最小値との差を同一の値とする演算を有する請求項1乃至請求項4に記載の演算装置。
【請求項6】
前記一次関数が少なくとも2つの異なる複数の一次関数を有し、前記複数の一次関数は前記第1の入力値と、前記第2の出力値と、が一対一に対応し、前記第1の入力値と、前記第2の出力値のそれぞれが異なる請求項1、2、4、5に記載の演算装置。
【請求項7】
前記一次関数が少なくとも2つの異なる複数の一次関数を有し、前記複数の一次関数は前記第1の入力値と、前記第1の出力値と、が一対一に対応し、前記第1の入力値と、前記第1の出力値のそれぞれが異なる請求項3乃至5に記載の演算装置。
【請求項8】
前記一次関数が前記第1の入力値の全入力範囲において、同一の関数である請求項1乃至請求項5に記載の演算装置。
【請求項9】
前記演算手段は、前記第1の入力信号の一周期中の電気角位相を示す第1の位相信号と、所定の電気角位相差を有する一対の第2の入力信号の一周期中の電気角位相を示す第2の位相信号と、を受け、前記第1の位相信号と前記第2の位相信号との差分である前記第1の入力信号に応じて変化する第1の位相差信号と、前記第1または第2の位相信号と、に基づいて、前記第1の位相差信号の基準値と前記第1の位相差信号との差分である第2の電気角位相差に対応したそれぞれ前記第1の入力信号または前記第2の入力信号の一周期分が入力された回数を示す第1の周期数または第2の周期数を演算する請求項1乃至8に記載の演算装置。
【請求項10】
対象物と、前記一対の入力信号を出力する出力手段と、の相対移動に応じて、前記出力手段が所定の電気角位相差を有する前記一対の入力信号を出力することにより、前記出力手段と、前記対象物と、の相対移動量を出力する請求項1乃至9に記載の演算手段を有する相対移動量測定装置。
【請求項11】
所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように前記第1の入力信号に第1の演算を行い定義された第1の入力値を求めるステップと、前記第1の入力値を引数とした一次関数を求めるステップと、前記第1の入力値に対応する前記一次関数上の第2の出力値を前記第1の出力値として出力するステップと、を有する演算方法。
【請求項12】
所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように前記第1の入力信号に第1の演算を行い第1の入力値を定義するステップと、前記第1の入力値を引数とした一次関数を求めるステップと、前記第1の入力値に対応する前記一次関数上の第2の出力値を求めるステップと、前記第2の出力値と、前記第1の出力値と、の差分を求めるステップと、前記第1の入力値と対応付けるアドレス関数によりアドレスを定義するステップと、前記アドレスを引数とした配列要素に前記差分を格納した第1のテーブルを求め記憶するステップと、前記第1の入力値を受け、前記第1のテーブルを読み出すとともに、前記第1の入力値に対応する前記第2の出力値と、前記第1の入力値に対応する前記配列要素に格納された値と、に基づいて前記第1の出力値を出力するステップと、を有する演算方法。
【請求項13】
所定の電気角位相差を有する一対の第1の入力信号のそれぞれと多対一の関係を有する第1の出力値とを対応付けるように前記第1の入力信号に第1の演算を行い第1の入力値を定義するステップと、前記第1の入力値を引数とした一次関数を求めるステップと、前記第1の出力値に対応する前記一次関数上の第2の入力値を求めるステップと、前記第1の入力値と、前記第2の入力値と、の差分を求めるステップと、前記第1の入力値と対応付けるアドレス関数によりアドレスを定義するステップと、前記アドレスを引数とした配列要素に前記差分を格納した第2のテーブルを求め記憶するステップと、前記第1の入力値を受け、前記第2のテーブルを読み出すとともに、前記第1の入力値と、前記第1の入力値に対応する前記配列要素に格納された値と、に基づいて前記第2の入力値に対応する前記第1の出力値を出力するステップと、を有する演算方法。

【図4】
image rotate

【図6】
image rotate

【図7】
image rotate

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図5】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate


【公開番号】特開2013−11456(P2013−11456A)
【公開日】平成25年1月17日(2013.1.17)
【国際特許分類】
【出願番号】特願2011−142907(P2011−142907)
【出願日】平成23年6月28日(2011.6.28)
【出願人】(000003067)TDK株式会社 (7,238)
【Fターム(参考)】