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

    Вводная: измерение угла маятника


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



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



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

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



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

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

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

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



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

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



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



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



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



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

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

    Как крепить акселерометры



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



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

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



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



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



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



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



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



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



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



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



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

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 37

      0
      Классно.

      В 2006 году когда я выпускался из Тихоокеанского университета (Управление и информатика в технических системах), мы могли только мечтать о такого рода лабораторных работах. Всё было отвлечено от жизни, в виде программулек со схемами всяких ПИД-регуляторов во всяких в эмуляторах. Тогда никто и не думал про управление обратными маятниками и т.п. приложениями всего этого. Хотя ведь, это элементарные основы нашей специальности.
      Интересно, как там сейчас это? Есть кто живой оттуда?

      P.S. Привет Чье Ен Ун, и всей кафедре «Автоматики и системотехники» ТОГУ.

        +1
        Так а что мешает эти лабораторные делать дома? Я, собственно, на дому и учусь :)
          0
          Ничего не мешало :)…
          собственно я тоже на дому учился, только немного другому.
          И теперь это немного-другое помогает мне зарабатывать деньги. В управлении автоматикой, я не участвовал и не участвую.
            +1
            Ну а я в качестве хобби разбираюсь с ТАУ, ну и публикую тут. Вдруг кого вдохновит.
        0
        В акселерометрах обычно есть встроенный LPF-фильтр. Если частота сэмплирования небольшая, то можно настроить его отсечку в два-три раза ниже этой частоты, и он уберет все вибрации, при этом не потеряв (проинтегрировав) данные. Но, кончено, это не исключает пользу правильно-настроенной виброразвязки.
          +1
          Я не очень разбираюсь в предмете, но когда вы говорите про интегрирование, вы точно говорите про акселерометр, а не про связку акселерометр + датчик угловых скоростей?
            0
            Нет, только про акселерометр. Интегрирование выполняет фильтр, считывая данные на высокой скорости и выдавая на низкой. Если частота динамики процесса гораздо ниже частоты вибраций, то он поможет. Например, поставьте его на 20Гц и все что выше, он уберет.
              +1
              А, вы про обычный oversampling. В моём случае не поможет, т.к. вибрация ещё и насыщает датчик.
                0
                Тогда да, не поможет. Нужно выбирать диапазон погрубее. Кстати из-за высокой шумности таких датчиков, я вообще не понимаю зачем нужны диапазоны меньше 16G — в покое уровень шума в несколько раз больше, чем LSB (минимально-значащий бит) на этом диапазоне.
                  +1
                  У меня в покое ровно LSB получается.
          0

          Чисто теоретически можно попробовать что либо из смесей силикона/каучука/геля, эти материалы вроде как сильно гасят вибрации.
          Ну или отобрать у ребёнка "лизуна"
          Ну и совсем экзотическое -сделать из амбюшур от наушников,(вывернуть часть наружу) приклеив их геометично что то вроде пневмо демпфера…
          Ну а так полет фантазии не ограничен, извращаться можно по разному, но если это не поможет- всегда есть губка для посуды:-D

            0
            Я баловался с разными фракциями песка, в разных количествах, в пальце медицинской перчатки, например. Тоже работает, но надо навешивать аккуратно.
            0
            Из классики для подобных случаев — Фильтр Калмана, стоит попробовать имхо.
              0
              Да, безусловно, нужна ещё фильтрация данных потом (не обязательно Калман). Но тут речь идёт о том, как получить то, что можно скормить фильтру Калмана на вход.
                0
                Еще вариант (возможно посложнее) попробовать поработать не не с датчиком, а с источником шума — изолировать двигатель (установить на виброопоры), доработать сам двигатель — отбалансировать ротор и маховик, заменить подшипники (на более точную серию или даже на подшипники скольжения (если сейчас шариковые))
                По поводу виброопор (и для двигателя и для датчика) — тут правильно советовали силикон. Простейший вариант для домашнего изготовления — «отлить» в пластилиновую форму из сантехнического силиконового герметика. Сразу же с закладными шпильками из винтов для крепления. Характеристики опоры потом легко подбираются подрезкой, вырезанием окон ножом.
                  0
                  Изолировать моторчик — хорошая идея, но не вместо, а в плюс к изолированию датчиков. На коптерах, к слову, так и делают:
                  Скрытый текст



                  Балансировать не поможет, т.к. вибрация — это практически неизбежная вещь. Вот, посмотрите на график момента, выдаваемого моторчиком (самый нижний):



                  Если посмотрите моё видео, то при работе моторчик стрекочет, это именно оно, поэтому только балансировкой тут не обойтись.
                    0
                    а, точно, это же у вас такой шаговик получился. только видимо со слишком крупным шагом.
                    крутить быстрее (возможно маховик придется поменять или этот через редуктор) — частота будет больше, вибраций меньше (больше частота — меньше амплитуда, проще погасить)
                0

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

                +2
                Очень интересно! Кульбит с двумя акселерометрами впечатляет своей эффективностью и простотой.
                Остался вопрос, почему не закрепить акселерометр максимально близко к оси вращения. В этом случае r мало, и погрешностями от угловой скорости и центростремительного ускорения, скорее всего, можно пренебречь. Или здесь скрыт подводный камень?
                  +2
                  Да, можно попробовать закрепить один акселерометр прямо на оси, вполне себе вариант, но не всегда реализуемо механически.
                  0
                  Не совсем понял вот что: акселерометр на коротком плече (№2 на втором графике, как я понял) дает по сути те же измерения, только с меньшей амплитудой, при этом акселерометр на длинном плече не только амплитуду меньшую дает, но и форма искажена, и даже фаза (причем капитально в некоторых местах). Здесь точно не было проблемы с закреплением акселерометра на длинном плече? Наивное мнение: проблемы с фазой должны быть (или не быть) в обоих случаях с некоторым (нелинейным) коэффициентом. Вероятно просто порог заметности этих проблем пролегает как раз между точками закрепления этих акселей. Надо бы промоделировать вашу механику, только пока не пойму как именно…

                  И спасибо вам за прекрасный пример того, что просто «проложить что-нибудь мягкое» отнюдь не достаточно для гашения вибраций. Я в свое время очень много сил потратил на то, чтобы объяснить это коллегам, да так и не смог переубедить некоторых (хотя я по диссертации чуть ли не специалист в области колебаний). Признаться мне тогда просто не хватило времени, чтобы такой наглядный физический эксперимент продемонстрировать. Теперь можно просто кидать ссылку на ваш пост. :)
                    0
                    Нет, не было проблем с закреплением. Не забудьте, что графики «сырых» данных с акселерометра — это только угол вектора ускорения, но никак не его величина. Возможно, что это вас ввело в заблуждение. Разумеется, величина ускорений, измеренных на длинном плече, больше.
                      0
                      Да нет, я понял, что это графики углов. Меня удивляет такое сильное искажение на длинном плече по сравнению с коротким.

                      А вы не можете как-то выложить данные, по которым построены кривые на втором графике? Было бы интересно поковыряться с ними на досуге.
                        0
                        Вот .csv файл. Последние четыре столбца — сырые данные с акселерометров, в единицах «же». То есть, (xa,ya) = (0,-1) означает минус один же по вертикали.
                          0
                          Спасибо!
                            0
                            Меня удивляет такое сильное искажение на длинном плече по сравнению с коротким.


                            Чем короче плечо, тем ближе данные к истинному углу. Посмотрите, что искажения пропорциональны длине плеча. В идеале, если мы повесим датчик прямо на ось, динамика маятника вообще не будет играть роли.
                              0
                              Чем короче плечо, тем ближе данные к истинному углу. Посмотрите, что искажения пропорциональны длине плеча. В идеале, если мы повесим датчик прямо на ось, динамика маятника вообще не будет играть роли.


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

                              По поводу датчика на оси вы уже писали кажется, что его повесить не получается. Ну и в принципе также очевидно, что идеальное совпадение осей невозможно обеспечить в подобной конструкции.
                                0
                                В данной конструкции вполне можно было бы и на ось повесить, ну да это не суть важно. Характер искажения — у меня не свободно качающийся маятник, ему ускорение придаётся моторчиком. По одной оси искажения — это ускорение, а по второй — квадрат скорости. Там ни про какую фазу говорить не приходится.
                                  0
                                  Характер искажения — у меня не свободно качающийся маятник, ему ускорение придаётся моторчиком


                                  Ну это не так важно, если мы конечно показаниям инклинометра доверяем.
                                    0
                                    А что вы называете инклинометром в данном случае? Энкодер? Да, это подходящий эталон.
                                      0
                                      Да, я имел в виду измеритель на базе энкодера. Я просто не вдавался в детали того, как вы его используете, поэтому и спрашиваю, насколько мы ему доверяем.
                    0
                    Как вариант, моторчик демпфировать обычной полиуретановой прокладкой по статору (если я правильно разобрал его), уже будет лучше.
                    Также можно попробовать применить демпферы из CD/DVD приводов, там как раз они используются для демпфирования вибраций моторчика диска.
                      0
                      1. Скажите, сталкивались ли вы с автоколебаниями маятника? И если да, как боролись с этим в программе управления?
                      2. По вашему мнению, возможно ли здесь использовать вычислительную нейросеть (обучить и использовать) вместо фиксированного алгоритма управления? Интересно, что окажется эффективнее.
                        0
                        По автоколебаниям не скажу, а нейросеть сделать совсем не проблема. Только в данном случае она вряд ли будет работать лучше, так как для такой простой системы у нас есть решение в явном виде…
                          +1

                          Как мне кажется, в такой системе автоколебание возникнут от неудачно выбранного управления или от проблем с механикой/датчиками.
                          Нейросеть, наверное, можно обучить. Но надо понимать, зачем. Если для себя и из любопытства, то это одно. А если для повышения качества управления, то я несколько сомневаюсь.

                          0
                          а почему не электронный/софтверный нч фильтр?
                            0
                            Датчик уходит в насыщение, поэтому выдаёт неотфильтровываемый мусор. Ну и быстродействие снижается сильно с ФНЧ.

                          Only users with full accounts can post comments. Log in, please.