Ваш браузер устарел. Рекомендуем обновить его до последней версии.

 

Принцип работы

 

        В технике существует большое число способов измерения углов наклона. Наиболее известный из них – это измерение силы тяжести с помощью акселерометра с последующим пересчетом в угол наклона. Этот способ широко распространен, например в современных телефонах. С помощью встроенного акселерометра (иногда его называют g-сенсором) телефон определяет ориентацию экрана при повороте его пользователем. Помимо телефонов, для конструкторских разработок существуют достаточно много одноплатных дешевых акселерометров. Если акселерометр одноосевой, то им можно измерить угол только в пределах 10-15° без существенного уменьшения точности. Двухосевым акселерометром можно точно измерить угол при повороте в одной плоскости. Трехосевой позволяет определять свое положение при любом положении датчика. Почему это так – подробно расписано здесь, повторяться не имеет смысла.

        Возникает вопрос – а почему нельзя обойтись только акселерометром? Можно, если ваше устройство неподвижно и не подвержено механическим вибрациям. В таких случаях как раз и используются дешевые (встречаются дешевле 10$) одноплатные устройства. Но при движении, особенно при движении с ускорением, акселерометр применять нельзя – он начинает измерять само ускорение (он потому так и называется), а не направление силы тяжести. Даже если движение равномерное, все равно какое-то ускорение будет как в начале движения, так и в момент его завершения. Также акселерометр чувствителен к вибрациям, т.к. вибрация – это набор случайных ускорений.

        Ниже приводится график реальных измерений акселерометра, полученных из предлагаемого модуля с помощью компьютерной программы. Результаты этих измерений находятся в файле "demo1.txt", который включен в дистрибутив программы. Его можно открыть в программе и посмотреть графики самостоятельно.

        Модуль был прикреплен к поворотной платформе, собранной из двух сервоприводов AX-12A (фирмы Dynamixel). Они имеют полностью цифровое управление, позволяющее достаточно точно позиционировать их положение. Оси двигателей расположены перпендикулярно друг другу и в нулевом положении совпадают с осями модуля (ось верхнего двигателя совпадает с осью X, нижнего с осью Y).

Фото:

Испытательный стенд

        

        В данном случае поворот производился по оси X из нулевого положения сначала на 45°, затем на -45°. Одной из функций управляющей компьютерной программы является возможность вычисления угла наклона только по данным акселерометра или только по данным с гироскопа.  Ниже приведен график угла, вычисленного по данным с акселерометра. По оси X отложены отсчеты (оцифровка производилась с частотой 100Гц), по Y - угол.

 

        График:

Только акселерометр

 

        На графике видна сильная зашумленность во время движения, и умеренная зашумленность в состоянии покоя. Особенно сильный шум в начале и в конце поворота. Таким образом, измерение угла только с помощью акселерометра приемлимо в приложениях с невысокими требованиями к точности. Поэтому для измерения положения динамических объектов целесообразно применять гироскоп. Он, в отличие от акселерометра, измеряет не ускорение и не угол, а угловую скорость. Поэтому он значительно меньше подвержен шумам вибрации. Для получения угла из угловой скорости показания гироскопа необходимо проинтегрировать и добавить к ним начальный угол (т.е. угол покоя гироскопа). Интегрирование производится по алгоритму:

 

Angle = Angle + Gyro*Tick

 

       Где Angle – измеренный ранее угол (при первом вычислении он должен быть равен начальному углу), Gyro – угловая скорость с гироскопа, Tick - период измерения.

 

        График угла, вычисленный программой только по данным с гироскопа:

 

Угол только по гироскопу

 

 

 

        

        Как видно, шумы на графике практически отсутствуют, но при этом происходит накопление ошибки интегрирования, что приводит к изменению постоянной составляющей и уходу результата. Поэтому на длительном интервале времени измерять угол с помощь гироскопа нельзя.

        На следующем рисунке оба предыдущих графика совмещены и показаны в меньшем масштабе:

Гиро+аксел.

 

         На этом рисунке хорошо виден уход постоянной составляющей угла по гироскопу. Уменьшить этот эффект можно хорошей калибровкой гироскопа и точной оцифровкой. Однако полностью устранить его не удастся. Для того, что бы полностью избавиться от ухода постоянной составляющей, необходимо объединить результаты измерений акселерометра и гироскопа. Иными словами, само измерение угла нужно производить гироскопом, т.к. у него очень маленькие шумы, а постоянную составляющую необходимо брать от акселерометра. Именно это и происходит в цифровом фильтре процессора модуля. Результат вычислений процессора  приведен на следующем графике в сравнении с предыдущими графиками:

 

 Результат обработки процессора

 

        Из этого графика видно, что общий результат измерения повторяет огибающую результата измерений акселерометра, но на нем значительно меньше шумов, а постоянная составляющая не меняется.

        Уровень шумов на линии результата можно настроить изменением специального весового коэффициента. Этот коэффициент определяет, какие данные (с гироскопа или с акселерометра) в большей степени используются при расчете результата. Пользователь может изменять коэффициент в диаппазоне от 0 до 20. При коэффициенте 0 данные будут идти только с акселерометра, а при 20 - только с гироскопа. Например, если больший вес будет у акселерометра, то результат примет такой вид (коэффициент равен 1, шумов больше):

 

Аксел. - максимальный вес

 

        При большем весе данных с гироскопа график будет следующим (коэффициент равен 19):

 

Гироскоп - максимальный вес

 

        

Одновременный поворот по трем осям

 

            Как указывалось выше, в модуле не производится измерение скорости поворота по оси Z, т.к. при измерении наклона в этом нет необходимости. Однако, в модуле имеется возможность обработки показаний и по оси Z изменением весового коэффициента. Рассмотрим графики поворота одновременно по трем осям двумя двигателями поворотной платформы. Нижний поворачивается на 60°, верхний на 70°. При этом расчетные углы конечных точек будут следующие: по оси X он совпадет с углом поворота нижнего двигателя (т.е. он равен 60°), а по оси Y будет определяться формулой:

 

AngleY=ASIN(SIN(Alfa)*COS(Betta))

 

        Где Alfa - угол поворота верхнего двигателя, Betta - угол поворота нижнего двигателя.

        Подставив Alfa=70°, Betta=60° получим угол наклона по оси Y = 28°

        Вывод этой формулы здесь не приводится, желающие выведут ее самостоятельно.

        Для наглядности можно посмотреть видео этого вращения:

         

        Ниже приведен график углов X и Y при этом движения при K=19 (файл "RotXYZ.txt"):

  Поворот по трем осям, K=19

        На графике хорошо виден уход реальных измерений модуля от расчитанных по акселерометру при повороте по оси Z. Для того, что бы избежать этого эффекта, перед поворотом по оси Z нужно увеличить вес акселерометра в результате, уменьшая коэффициент. Следующий график снят при K=10 (файл "RotXYZ_10.txt"). Здесь расхождение практически не заметно:

  Вращение по трем осям, K=10

 

        Таким образом, изменением коэффициента K перед началом поворота, можно улучшить показания модуля при повороте вокруг оси Z. Однако стоит отметить, что если поворот производится только по оси Z, то данные с гироскопа будут нулевыми и измерять положение модуль сможет только по акселерометру.       

 

Резкое изменение скорости  

         

         Ниже приведен график резкой остановки вращения модуля при K=15 (файл "Разная скорость X.txt").

Резкое изменение скорости, K=15

        На нем виден сильный выброс на линии результата измерения, обусловленный наложением шума акселерометра. Т.к. программа внешнего контроллера обычно знает, когда будет резкое переключение скорости, то перед переключением можно задать K=19 или даже K=20 (отключив акселерометр на короткое время). Аналогичный график при K=19 см. в файле "Разная скорость Y.txt").

        Таким образом, в обычном режиме работы в модуле может быть задан K=16 (такой коэффициент задается при изготовлении). Если присутствует поворот модуля по оси Z (о чем внешней управляющей программе обычно известно), изменением коэффициента можно увеличить вес акселерометра. При наличии же резких переключений скоростей или в момент внешнего удара акселерометр на короткое время рекомендуется вообще отключать установкой K=20.

Переворот        

        Переворот можно отслеживать по оси Z акселерометра. Если ее значение положительно, то модуль перевернут.

 

        Детальное описание пользовательских интерфейсов, настроек модуля, способов калибровки можно найти в PDF на модуль.