AN 1005:将倾斜角度转换为度数

说明

This Application Note explains how to convert the raw output from an electrolytic tilt sensor into degrees.

倾斜传感器的线性范围和工作范围

电解倾斜传感器的测量范围可以用两种方式描述:线性范围和工作范围。工作范围是指传感器将给出单调输出,但在其他方面没有确定的特性(它是非线性的)的范围。线性范围是指在工作范围内,输出在一定百分比内是线性的那部分。图1显示了这两个范围的区别。

 

 

 

 

 

 

 

 

图1线性范围(左)和工作范围(右)。

线性近似

为了找到线性范围内的倾斜角,需要找到一个与传感器输出相匹配的线性函数。这将是图1中左图中线的函数。这个函数在下面给出。

本公式中的原始传感器输出是传感器的输出。这通常是以计数为单位,但根据传感器输出的读取方式,也可以使用其他单位。

其他两个值需要以一定的角度对传感器进行取样。这些角度可以使用另一个传感器、数字量角器或任何其他确定角度的方法来确定。0°时的原始传感器输出只是传感器处于水平状态时的输出。

每度的计数(即线的斜率)用以下公式计算。

线性范围可从传感器的数据表中获得。原始输出将是线性范围边缘的传感器输出。例如,对于线性范围为±25°的传感器,原始输出将在+25°和-25°处进行采样。请注意,创建函数时只需采集一次这些样本;然后可使用采样值进行倾斜度转换。

假设我们有一个0717-4319-99传感器,其输出为16位(0至65535),我们想将其转换为度数。这是一个线性范围为±20°的双轴传感器。由于它是一个双轴传感器,我们将需要两个公式:一个用于X轴,一个用于Y轴。首先,我们将找到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个样本,一般也能提供比线性近似更好的结果。

样本分布是达到准确转换的最重要因素之一。靠近样品的转换会更准确。正因为如此,取样距离较近的样品将导致更精确的转换。这些样品应在传感器的整个范围内采集。根据不同的应用,它们可以均匀地分散在整个范围内,或者集中在一个需要精确的区域。

要将一个原始值转换为度数,请确定两个参考样本。这是两个在每个方向上最接近测量值的样本。然后,在两个样本之间找到一个线性近似值,并将原始输出映射到这个近似值上。这条线上的点将给出传感器的倾斜度。图2中的图形显示了这一概念的可视化。

图2显示样品、参考样品和测量的图表。

这个换算公式如下所示。

假设我们有一个工作范围为±60°的倾斜传感器的56412的原始测量值。另外,假设我们已经以5°的间隔采集了样本用于转换。通过比较56412和样本,我们确定我们的两个参考点将在50°(54213)和55°(57878)。然后,我们可以使用公式来计算角度。

因此,我们最终的测量结果是53°。

此方法可用于将传感器工作范围内任何地方的测量值转换为度数。它也将实现比线性近似更好的精度。然而,它需要大量准确的样本才能达到最佳效果。

多项式插值

多项式插值可用于实现精确的测量,而无需采集许多样本。这种方法将使用样本找到一个多项式方程,该方程将在传感器的工作范围内提供准确的转换。

采集的样本将用于开发一个描述传感器输出的多项式方程。至少,您将需要 N-1 个样本来导出 N 度多项式。例如,7 个样本将创建一个 6 度多项式。您也可以使用更多的样本来创建一个低度多项式,但这通常会比用相同的点创建一个高度多项式的精度低。

可以使用任何数量的样本,但我们建议至少取3个样本。使用2个样本也可以,但会导致线性近似。需要注意的是,7级或更高的多项式对精度的提高不大。

虽然多项式可以手动确定,但使用软件计算要容易得多。一个简单的方法是使用Microsoft Excel的最佳拟合线;然而,这对于一个可用的转换来说可能不够精确。Wolfram Alpha是一个更精确的选择,但方程仍然需要手动解决。最好的选择是使用编程库。例如,可以使用 NumPy Python 库中的 Polynomial.fit() 方法。下面的代码显示了如何从7点生成一个6阶多项式。

导入numpy.polynomial.polynomial。
coefficients = numpy.polynomial.polynomial.Polynomial.fit(
[56668, 46553, 36140, 32845, 31207, 21913, 9586], # 原始值
[60,42,12,0,-6,-36,-60],#对应的角度值为原始值。
6)#多项式的阶数
print(coefficients)
# 产出。 # [-7.88427627e+01 2.57631617e-03
# [-7.88427627e+01 2.57631617e-03 -7.71958174e-08 -1.75354175e-13
# 2.17551410e-16 -5.89635260e-21 4.45379575e-26]

请注意,当使用这样的函数时,正确指定顺序是很重要的。例如,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°。正因为如此,在用这种方法计算角度时,重要的是不要将任何值四舍五入。