AN 1005.傾斜角度を度数に変換

説明

本アプリケーションノートでは、電解式傾斜センサーの生出力を度数に変換する方法について説明します。

チルトセンサのリニアレンジと動作範囲

電解傾斜センサの測定範囲は、リニアレンジと動作範囲の2つの方法で記述することができます。動作範囲とは、センサが単調な出力を与えるが、それ以外には定義された特性を持たない(非線形である)範囲のことです。リニアレンジとは、動作範囲のうち、出力が一定の割合で直線的になる部分のことです。図1に2つのレンジの違いを示します。

 

 

 

 

 

 

 

 

図1リニアレンジ(左)と動作範囲(右)。

線形近似

直線範囲内の傾斜角を求めるためには、センサの出力と一致する線形関数を求める必要がある。これが図1の左のグラフの線の関数になります。この関数は以下のように与えられます。

この式における生のセンサ出力は、センサの出力です。これは通常はカウント数ですが、センサー出力の読み方によっては他の単位を使用することができます。

他の2つの値は、特定の角度でセンサーのサンプルを取る必要があります。これらの角度は、別のセンサー、デジタル分度器、または角度を決定する他の方法を使用して決定することができます。0°での生のセンサー出力は、センサーが水平になったときの出力です。

度あたりのカウント数(これは線の傾きである)は、次の式で計算されます。

リニアレンジはセンサーのデータシートから取得します。生の出力は、リニアレンジの端のセンサ出力になります。例えば、リニアレンジが±25°のセンサの場合、生の出力は+25°と-25°でサンプリングされます。これらのサンプルは、関数を作成するために一度だけ取得する必要があることに注意してください。

例えば、度数に変換したい 16 ビット(0 ~ 65535)の出力を持つ 0717-4319-99 センサがあるとします。これは、±20°のリニアレンジを持つ二軸センサです。2軸センサなので、X軸とY軸の2つの式が必要になります。まず、X軸の式を求めます。0°と±20°でサンプルを採取し、以下の測定値を求めます。

X軸傾斜(-20°時)=26055

X軸の傾き(0°時)=33234

X軸チルト(±20°時)=40379

これで、これらのサンプルを使って度数を計算できるようになりました。

度あたりのカウントとゼロサンプルは、その後、以下の変換を与えるために式に差し込むことができます。

Y軸測定が必要な場合は、Y軸からのサンプルを使用して、これらのステップに再度従ってください。

これで、このセンサーからの測定値を度数に変換したい場合はいつでも、この新しい式を使うことができるようになりました。例えば、X の出力が 29655 であれば、この式を使って傾斜角を求めることができます。

学位あたりの概算数

製造工程に起因する若干のばらつきがあるため、変換関数は特定のセンサごとに計算する必要があります。しかし、これは常に実行可能とは限りません。以下の表は、計算に使用できる度数と0°あたりの平均カウント値を示しています。これらの値を使用すると、特定のセンサ用の関数を作成するよりも精度の低い測定になることに注意してください。すべての値は 16 ビット (0-65535) 出力の場合の値です。表にないセンサの場合は、上記の手順で変換を見つける必要があります。

センサー 学位ごとのカウント数 ゼロ度
0703-1602-99, 0729-1765-99 976 32768
0703-0711-99 17582 32768
0717-4303-99 736 32768
0717-4304-99 268 32768
0717-4305-99 188 32768
0717-4306-99 188 32768
0717-4311-99 268 32768
0717-4313-99 342 32768
0717-4314-99 335 32768
0717-4316-99 756 32768
0717-4317-99 569 32768
0717-4318-99, 0729-1751-99,
0729-1752-99, 0729-1753-99,
0729-1754-99, 0729-1755-99,
0729-1759-99, 0729-1760-99
284 32768
0717-4319-99 363 32768
0717-4321-99 758 32768
0717-4322-99 594 32768
0737-0101-99 2887 32768
0737-1203-99 12765 32768

多点補間

多点補間法は、事前に採取したサンプルを使用して度数単位の測定値を導き出します。この方法の精度はサンプルの数と分布に依存しますが、一般的には3つのサンプルを取っても線形近似よりも良い結果が得られます。

サンプル分布は、正確な変換を達成するための最も重要な要因の一つです。サンプルに近い変換はより正確になります。このため、近くで採取されたサンプルは、より正確な変換になります。これらのサンプルは、センサーの全範囲にわたって採取する必要があります。アプリケーションに応じて、全範囲に均等に分散させたり、精度が必要な1つの領域に集中させたりすることができます。

生の値を度数に変換するには、2 つの基準サンプルを識別します。これらは、各方向の測定に最も近い 2 つのサンプルです。次に、2 つのサンプル間の線形近似を見つけ、生の出力をこの近似にマッピングします。この線上の点がセンサの傾きを度単位で表します。図2のグラフは、この概念を可視化したものです。

図2試料、基準試料、測定結果を表示したグラフ。

この換算式は以下の通りです。

動作範囲が±60°の傾斜センサーから56412の生の測定値があるとします。また、変換に使用するために 5°間隔ですでにサンプルを採取したとします。56412 とサンプルを比較することで、2 つの基準点が 50°(54213)と 55°(57878)になることがわかります。次に、角度を計算するための公式を使用することができます。

したがって、最終的な測定は53°となります。

この方法は、センサの動作範囲内の任意の場所からの測定値を度数に変換するために使用することができます。また、線形近似よりも優れた精度が得られます。ただし、最良の結果を得るためには、多くの正確なサンプルが必要です。

多項式補間

多項式補間は、多くのサンプルを取らずに正確な測定を実現するために使用することができます。この方法では、サンプルを使用して、センサーの動作範囲にわたって正確な変換を提供する多項式を見つけます。

採取したサンプルは、センサー出力を記述する多項式を開発するために使用されます。次数 N の多項式を導出するには、最低でも N-1 のサンプルが必要です。例えば、7 サンプルで次数 6 の多項式を作成します。より多くのサンプルを使用して次数の低い多項式を作成することもできますが、一般的には同じポイントで次数の高い多項式を作成するよりも精度が低くなります。

サンプルの数は問いませんが、少なくとも3つのサンプルを取ることをお勧めします。2つのサンプルを使用しても問題ありませんが、線形近似になります。次数7以上の多項式からは精度の向上はほとんどないことに注意してください。

多項式は手動で決定することができますが、ソフトウェアを使用して計算する方がはるかに簡単です。簡単な方法としては,Microsoft Excelの最適適合線を使う方法がありますが,これでは使用可能な変換には十分な精度が得られないかもしれません.Wolfram Alphaはより正確なオプションですが,方程式を手動で解く必要があります.最良の方法は,プログラミングライブラリを使うことです.例えば,NumPy PythonライブラリのPolynomial.fit()メソッドを使うことができます.以下のコードは、7点から6次の多項式を生成する方法を示しています。

インポート numpy.polynomial.polynomial
係数 = numpy.polynomial.polynomial.Polynomial.fit(
[56668, 46553, 36140, 32845, 31207, 21913, 9586], # 生の値
60, 42, 12, 0, -6, -36, -60], # 生の値に対応する角度の値
6)# 多項式の次数
print(係数)
# # 出力。
# [-7.88427627e+01 2.57631617e-03 -7.711958174e-08 -1.75354175e-13
2.17551410e-16 -5.89635260e-21 4.45379575e-26] #2.17551410e-16

このような関数を使用する場合、次数を適切に指定することが重要であることに注意してください。例えば、4サンプルでは3次の多項式が生成されます。しかし、次数として4を指定すると、ライブラリはランダムに推測して式を作成します。その結果、正確な変換ができなくなってしまいます。

Polynomial.fit() が返す配列は、多項式の係数です。上の出力を基にすると、式は次のようになります。

角度= (4.45e-26)x6- (5.89e-21)x5+ (2.17e-16)x4- (1.75e-13)x3- (7.72e-8)x2+ (2.57e-3)x1- 78.84

この関数を使って、xの生の値を差し込むことで未知の角度を解くことができます。例えば、上記の関数を使って、生の測定値が41643だとします。次のような計算で角度を求めることができます。

角度= (4.45e-26)(41643)6- (5.89e-21)(41643)5+ (2.17e-16)(41643)4- (1.75e-13)(41643)3- (7.72e-8)(41643)2+ (2.57e-3)(41643)1- 78.84

角度= 232.264 - 738.402 + 654.227 - 12.663 - 133.868 + 107.285 - 78.842 = 30.002°。

上記のNumPyライブラリを使用している場合は、polyval()メソッドを使用して行うことができます。

print(numpy.polynomial.polynomial.polyval(41643, coefficients.convert(.coef))
# Output: 30.001695321007

この計算結果は、入力の変化に非常に敏感であることに注意してください。例えば、上記の係数を有効数字3桁に丸めた場合(書かれている通り)、式の結果は31°となります。このため、この方法で角度を計算する際には、値を丸めないようにすることが重要です。