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°. Поскольку это матрица с двумя осями, нам понадобятся 2 формулы: одна для оси 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 График, отображающий образцы, эталонные образцы и измерения.

Формула этого преобразования приведена ниже.

Допустим, у нас есть сырое измерение 56412 от датчика наклона с рабочим диапазоном ±60°. Также предположим, что мы уже взяли пробы с интервалом в 5° для использования в пересчёте. Сравнивая 56412 с образцами, мы определили, что наши две опорные точки будут находиться под углом 50° (54213) и 55° (57878). Затем мы можем использовать формулу для вычисления угла:

Таким образом, наше окончательное измерение составляет 53°.

Этот метод может быть использован для преобразования измерений из любого места в пределах рабочего диапазона датчика в градусы. Кроме того, он позволяет достичь более высокой точности, чем линейное приближение. Однако для достижения наилучших результатов требуется большое количество точных образцов.

полиномиальная интерполяция

Полиномиальная интерполяция может быть использована для достижения точных измерений без отбора большого количества образцов. Этот метод будет использовать образцы для нахождения уравнения полинома, которое обеспечит точное преобразование во всем рабочем диапазоне датчика.

Взятые пробы будут использованы для разработки уравнения полинома, которое будет описывать выход датчика. Как минимум, Вам понадобятся образцы N-1 для получения полинома степени N. Например, 7 образцов создадут многочлен 6-й степени. Вы также можете использовать больше отсчетов для создания многочлена с более низкой степенью, но это, как правило, будет иметь более низкую точность, чем создание многочлена с более высокой степенью с теми же самыми точками.

Можно использовать любое количество образцов, но мы рекомендуем взять как минимум 3 образца. Использование 2-х образцов сработает, но приведет к линейному приближению. Обратите внимание, что точность мало повышается по сравнению с полиномами 7-й степени и выше.

Хотя полиноминал можно определить вручную, гораздо проще вычислить его с помощью программного обеспечения. Одним из простых методов является использование наиболее подходящей линейки Microsoft Excel, однако она может быть недостаточно точной для удобного преобразования. Wolfram Alpha является более точным вариантом, но уравнение всё равно придётся решать вручную. Лучшим вариантом является использование библиотеки программирования. Например, можно использовать метод Polynomial.fit() из библиотеки NumPy Python. Нижеприведенный код показывает, как он может сгенерировать полином 6-го порядка из 7 пунктов:

импорт нумизмал.полиномал.полиномал
коэффициенты = numpy.polynomial.polynomial.fit(
[56668, 46553, 36140, 32845, 31207, 21913, 9586], # необработанные значения
[60, 42, 12, 0, -6, -36, -60], # соответствующие значения углов к исходным значениям
6) # порядок полинома
печать (коэффициенты)
# Выход:
# [-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°. Поэтому при вычислении угла этим методом важно не округлять никакие значения.