Хабрахабр

Два акселерометра, губка для посуды и четыре гайки

Итак, разобравшись с датчиками Холла для бесколлекторных двигателей, покажу для чего это было нужно. Я сделал стенд с простейшим обратным маятником, который стабилизируется при помощи маховика, вращаемого моторчиком на свободном конце маятника:

Я учусь теории управления и построил таких игрушек некоторое количество, вот, например, мой обратный маятник на тележке:

Самый простой вариант — это поставить инкрементальный энкодер, это я уже подробно разобрал. Разбор управления подобными штуками оставим на следующую статью, а темой сегодняшней статьи является измерение угла маятника.

Пользоваться я буду самыми копеечными adxl345. Но в данной статье я хочу измерять положение маятника при помощи акселерометров, к нему прикрепленных. Я прицепил акселерометр так, чтобы ось Y была вдоль маятника, а ось X была бы маятнику ортогональна: Итак, если мы прицепим акселерометр на маятник на расстоянии r от шарнира, как определить угол?

Тогда акселерометр будет выдавать проекцию вектора силы тяжести на свои оси. Давайте предположим для начала, что маятник не движется. То есть, измерение акселерометра будет выглядеть как (x,y,z) = (g cos θ, -g sin θ, 0). Поскольку всё происходит в одной плоскости, то в идеале по оси Z акселерометр будет выдавать нулевые значения. Ну а угол можно получить при помощи арктангенса от y/x.

Если же акселерометр начинает двигаться, то всё становится чуточку сложнее: помимо ускорения свободного падения он будет ещё измерять угловое ускорение маятника и соответствующее центростремительное ускорение, они показаны красными стрелочками на схеме.

Я повесил акселерометр на маятник, и заодно для контроля завёл инкрементальный энкодер, который мне даёт настоящий угол, с которым можно сравнивать измерения по акселерометру.

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

Хорошо видно, что кривые не очень совпадают. В этой картинке я у меня качается маятник, изменение его настоящего угла во времени — это красная кривая, а синяя кривая — арктангенс от y/x, они же измерения акселерометра.

Два акселерометра будут нам давать измерения (xa,ya) и (xb,yb), которые (в идеальном случае) должны зависеть следующим образом от угла θ и от угловой скорости/ускорения: А теперь давайте добавим второй акселерометр, на сей раз на расстоянии r/2 от центра.

А теперь магия, следите за руками! В принципе, всё двоольно прозаично, но зачем я так сделал? Давайте посчитаем, чему будет равняться (xa,ya) — 2*(xb, yb):

То есть, при помощи двух акселерометров мы можем оценивать угол маятника, не оглядываясь на его динамику: Вся динамика самого маятника ушла, осталась только проекция вектора ускорения свободного падения!

А вот так выглядит оценка в реальном времени:

Он весьма недурно совпадает с эталонной кривой, полученной с энкодера. Здесь синяя и зелёная кривая — это «сырые» данные с акселерометров, а чёрная кривая — это посчитанный угол. Я не занимался юстировкой датчиков, всё прикручено «на глаз», откуда небольшие расхождения между данными с акселерометров и с энкодера.

Сейчас будут. На этом историю можно было бы закончить, но я обещал губку для посуды (и четыре гайки!), где же они? Давайте теперь начнём с самого начала. Этот график был получен совсем не с первого подхода.

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

Выясняется, что когда моторчик работает, то акселерометры выдают полный бред. Это тот же самый график, что и предыдущий, но добавил ещё одну розовую кривую, которая даёт задание тока в моторчике, который, в свою очередь, и качает наш маховик. Но как только моторчик выключается, всё магически возвращается к норме… Почему?

Тогда решил делать виброразвязку. Сначала я грешил на электронаводки, но оказалось, что виновником являются высокочастотные вибрации при работе бесколлекторного движка. Вот так выглядела моя первая виброразвязка. Никогда ничем подобным не занимался, под рукой был только соплемёт.

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

Вот так выглядят графики:

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

Вот её графики, отличия видны в районе восьмой-десятой секунды на синем графике, который должен быть более-менее треугольным.

Можно было бы попробовать капнуть глицерина, но это не наш метод! На этом я было успокоился, но оказалось, что я взял новую губку, которая через пару дней высохла так, что стала недостаточно эластичной. Поэтому заменил кухонную губку на антистатик-поролон:

Вот соответствующие графики:

Попробовал следующую конфигурацию: И тут меня посетила мысль: а зачем я вообще парюсь с массой, нельзя ли платку акселя непосредственно на поролон приклеить?

Ответ: нет, нельзя!

Вывод: виброразвязка это хорошо, но надо грамотно подбирать частоту отсечки. В общем всё, что вы хотели знать об НЧ-фильтрах, но боялись спросить. Если кто-нибудь сможет преложить менее экспериментальный способ подбора материалов, их толщины и соответствующих грузов, буду очень благодарен!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть