Электронный гироскоп своими руками

Добавил пользователь Валентин П.
Обновлено: 18.09.2024

Не смог понять, что такое третий камень (который в SO8).

Flash-память 0.5 МБайт для сохранения полетного лога (Atmel AT45DB041B-).

Мне прошивка без надобности, а вот мог бы математикой поделится? Сам хочу что-то подобное сделать, но на PICе, а сложности именно с математической поддержкой (или алгоритмической, так точнее будет).

Мне прошивка без надобности, а вот мог бы математикой поделится?

Все довольно просто. Делайте пропорционально-интегральное управление по угловой скорости. Т.е. по таким формулам:

S = Kp*(W-(rudder-rudder0)) + I
I=I + Ki*(W-(rudder-rudder0)), где

W - угловая скорость

В интегральном контуре I обязательно нужен ограничитель, градусов 30-60, иначе будут проблемы, если ОС разомкнута (например, модель на земле).

Если датчик хороший и если не слажать в расчетах, будет Вам счастье.

Все довольно просто. Делайте пропорционально-интегральное управление по угловой скорости. Т.е. по таким формулам:

S = Kp*(W-(rudder-rudder0)) + I
I=I + Ki*(W-(rudder-rudder0)), где

W - угловая скорость
В интегральном контуре I обязательно нужен ограничитель, градусов 30-60, иначе будут проблемы, если ОС разомкнута (например, модель на земле).

Если датчик хороший и если не слажать в расчетах, будет Вам счастье.

Спасибо за информацию

Прикольно. Хоть кто-то окончательно родил гиру на достойном уровне.

по сравнению с GY240 и GY401, девайс ведет себя очень и очень достойно.

Достойно - это соизмеримо или гораздо лучше ?
Кстати, текущая версия проги меняет коэффициенты ПИ в полёте ? Ну то есть пытается самостоятельно победить возбуд ?

прошивку на халяву я раздавать не буду

Эх, профессионалы …
Кстати, мне кажется, что в такой реализации надо продавать не только прошивку, а - печатку с процом и датчиком или вообще готовый безкорпусный девайс.
Кстати, скока она весит грамм и денег как на фото ?
Я в своё время хотел поднять проект гиры из-за необходимости встроенного в гиру микшера хвост/основной ротор для реализации БК мотора на хвосте. Потом обошёлся микшерами пульта и перестал парится, хотя если встроить такой микшер в гиру - получше будет.
И ещё прикольно гиру совместить с гувернёром. Потому как добавление газа основного мотора должно сразу компенсироваться шагом/газом хвостового - меньше места для возбуда чем при двух независимых девайсах.
И ещё вопрос - когда будет самодельный трёх датчиковый гирыч для флай бар лесс полётиков ? (Аналог Цик лока/ В Стаба) ?
Одним словом, борт мозг для верта зреет в умах.

Достойно - это соизмеримо или гораздо лучше ?

Привет, Сергей,
Скорее - соизмеримо. Гораздо лучше не может быть по определению, поскольку алгоритм и коэффициенты были взяты по результатам анализа работы Футабы. Первые полеты гироскоп провел в режиме логгера вместе с Futaba GY240 и GY401. На основе анализа полученных данных и с учетом собственных соображений и был разработан софт. Результаты такие: нормальный режим адекватно работал и с пристрастием не анализировался. В режиме удержания дрейф азимута от времени при висении - около 5-10 градусов в минуту против 15-20 градусов GY240. Виляние хвостом при резком добавлении-сбросе газа в нормале (~2400 об/мин) в режиме обычной сервы - 20-25 градусов, как у самоделки, так и у 240 и 401, но в самоделке наблюдались некоторые колебания при возвращении хвоста. В режиме цифровой сервы (DS) самоделка мне понравилась больше, чем 401 (меньше виляние при набросе и колебания при резком бросании раддера), но, возможно, это субъективно. По-любому, эффективности ХР не хватало, чтобы адекватно компенсировать набросы шага/газа в нормале. В Idle-up (~2900 об/мин) и DS хвост был “как прибитый” и на самоделке и на 401. Не понравилось в самоделке то, что при закритическом повышении чувствительности колебания имели бОльшую амплитуду, чем в Футабе. Возможно, действительно требуется нелинейность или адаптивная подстройка к-тов. Я ее не делал, т.к. результат лично меня уже устраивает.
Вес - около 6г. За датчик я заплатил примерно 1600 руб, остальные компоненты - копейки.
Организовывать продажи у меня нет ни способностей, ни желания. К тому же я не думаю, что это может принести серьезную прибыль, т.к. большинство моделистов предпочтут бренды.
Циклоки-Вистабы уже витают в воздухе. Я после гувернера, может, и займусь. Датчики вот только дороговаты.

Кстати. еще про алгоритмы - Футаба насколько я заметил всё-таки интегрирует азимут при удержании балки. Ну то есть если из-за каких-то причин (нехватка эффективности ХР к примеру или проскакивание ремня) балку уводит градусов на 90, то после устранения причины через секунду/другую (сброс шаг/газ ОР) балка возвращается почти на то место, где и была. Если конечно вращалась не слишком быстро. Такого при стандартном ПИ регулировании угловой скорости не будет мне кажется, надо не только ошибку интегрировать, но и азимут тоже. Что-бы при его неконтролируемом изменении иметь возможность отследить изменение азимута/вернуть взад.
Ну и 1600 руб за датчик - енто блин дорого. Ну то есть для автопилота ещё приемлемо, а для замены флай бара - я чего-то у себя снял флай бар и летаю без него и без электроники его заменяющей. Сейчас был первый краш за 4+ часа налёта - высокие мощные колючки спасли всё кроме главной шестерни.

MPU6050 имеет 3-осевой акселерометр и 3-осевой гироскоп, интегрированные в один чип. Гироскоп измеряет скорость вращения или скорость изменения углового положения во времени по осям X, Y и Z. Для измерения используется технология MEMS и эффект Кориолиса.

Выходные данные гироскопа измеряются в градусах в секунду, поэтому для получения углового положения нам просто нужно интегрировать угловую скорость.

С другой стороны, акселерометр MPU6050 измеряет ускорение. Вкратце, он может измерять гравитационное ускорение по трем осям, и используя некоторую тригонометрию, мы можем вычислить угол, под которым расположен датчик. Итак, если мы объединим данные акселерометра и гироскопа, мы сможем получить очень точную информацию об ориентации датчика в пространстве.



MPU6050 также называют устройством слежения за движением по шести осям или устройством с 6 степенями свободы (шесть степеней свободы) из-за его 6 выходов, или 3 выхода акселерометра и 3 выхода гироскопа.

Ардуино и MPU6050

Давайте посмотрим, как мы можем подключить и прочитать данные с датчика MPU6050 с помощью Ардуино. Для связи с Ардуино мы используем протокол I2C, поэтому нам нужны всего два провода для подключения по линии данных и два провода для питания.

Arduino и MPU6050

Скетч MPU6050 Ардуино

Ниже приведем полный код, а после разъясним его поподробнее:

Описание кода: Итак, сначала нам нужно подключить библиотеку Wire.h, которая используется для I2C связи, и определить некоторые переменные, необходимые для хранения данных.

В разделе setup() нам нужно инициализировать библиотеку Wire.h и сбросить датчик через регистр управления . Для этого нам нужно взглянуть в datasheet, где мы можем увидеть адрес регистра:


Также, если мы хотим, мы можем выбрать полный диапазон для акселерометра и гироскопа, используя их регистры конфигурации. В этом примере мы будем использовать диапазон по умолчанию + — 2g для акселерометра и диапазон 250 градусов/с для гироскопа, поэтому оставим эту часть кода закомментированной:

В разделе loop() мы начинаем с чтения данных акселерометра. Данные для каждой оси хранятся в двух байтах или регистрах, и мы можем видеть адреса этих регистров в datasheet датчика:


Чтобы прочитать их все, мы начинаем с первого регистра и с помощью функции RequiestFrom() запрашиваем чтение всех 6 регистров для осей X, Y и Z. Затем мы читаем данные из каждого регистра, и, поскольку выходные данные состроят из старшего и младшего байта, мы соответствующим образом объединяем их, чтобы получить правильные значения:

Чтобы получить выходные значения от -1g до + 1g, подходящие для расчета углов, мы делим выходной сигнал с предварительно выбранной чувствительностью.


Наконец, используя две формулы, мы вычисляем углы крена и тангажа на основе данных акселерометра:

Далее тем же методом получаем данные гироскопа:


Мы считываем шесть регистров гироскопа, соответствующим образом объединяем их данные и делим их на предварительно выбранную чувствительность, чтобы получить результат в градусах в секунду:


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

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

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

Однако, поскольку мы не можем рассчитать рыскание по данным акселерометра, мы не можем реализовать для него дополнительный фильтр.

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

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

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


Видео устройства, аналогию которого я собирался сделать:

Покопался в своих железках и нашёл 2 шкива от магнитолы:


Склеил их вместе:


Отыскал их родные втулочки:


И соединил при помощи проволоки и пайки:


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

В идеале чем больше вес маховика и выше скорость вращения, тем лучше. Ну и естественно нужно свести к минимуму силы трения.

Как нибудь в следующий раз попробую сделать гироскоп из чего-нибудь другого.

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

самодельный гироскор

  • - две крышки от консервных банок
  • - кусочек ламината
  • - изолента
  • - гайки 6 шт.
  • - стальная ось или гвоздь
  • - пластилин
  • - клей
  • - 2 болта
  • - толстая проволока
  • - дрель, напильник

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

Далее делаем ось. Для этого закрепим электродрель в тисках, затянем в нем гвоздь без шляпки и напильником заточим. Так заточка оси будет располагаться максимально близко к центру оси. Заточить необходимо с двух сторон.

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

Теперь самое главное – балансировка. Пока клей сохнет, вам нужно идеально разместить грузы по краю крышки. Включаем дрель (вертикально), если вращающийся ротор бьет в какую-то сторону, то какой-то груз расположен не правильно. Поправляем, пробуем снова. Смазываем гайки сверху и накрываем второй крышкой. На края ротора приклеиваем изоленту. Сушим. Сам ротор готов!

Берем два болта подлиннее, крепим в тиски и пробиваем в них углубления, в которых будет закреплён ротор. Теперь нужно придумать внешнюю рамку. Из ламината вырезаем круг. Лучше заранее прорисовать его циркулем. Сразу прорисуйте вертикальную и горизонтальную линии под углом 90 градусов. Внутри вырезаем круг поменьше, но такой, чтобы туда помещался ротор. По горизонтальным линиям делаем дырочки для болтов друг против друга. Вкручиваем болты. Между ними помещаем ось нашего гироскопа. При этом нельзя затягивать слишком плотно, иначе трение будет гасить скорость вращения, и ничего не получится. Оставьте около 1 мм хода, но так, чтобы гироскоп не вываливался из болтов. Приклеиваем болты к планке, чтобы вибрация не выкрутила их из рамки.

Осталось только установить защиту. Берем толстую проволоку, сгибаем в кольцо. По месту отмеченной горизонтали прикрепляем к нашему изделию. Гироскоп готов. Наматываем ниточку на ось и, резко дергая за нее, проверяем работоспособность.

Читайте также: