[image]

Использование твердотельных гироскопов в ракетомоделях

 
1 16 17 18 19 20 53
KZ Xan #21.01.2014 09:05  @Бывший генералиссимус#21.01.2014 07:48
+
-
edit
 

Xan

координатор

Б.г.>>>

Я точную подстройку нуля делал так:
Сравнивается старое значение нуля с очередным отсчётом. В зависимости от знака старое значение корректируется на малую величину, которая гораздо меньше среднеквадратичного отсчётов.
В результате ноль медленно дрейфует к среднеарифметическому отсчётов.
   
RU Бывший генералиссимус #21.01.2014 12:24  @Xan#21.01.2014 09:05
+
-
edit
 
Б.г.>>>>
Xan> Я точную подстройку нуля делал так:
Точная - это другой алгоритм. Сейчас я суммирую 9 последовательных отсчётов с каждого акселерометра. Девять - потому что номинальная чувствительность акселерометра 0,6 миллиже на LSB, а синус 1 градуса - 0,01745. Таким образом, 1 градус наклона даёт проекцию на соответствующую ось в 29 LSB, если помножить на 9, получается 261, что с 2% точностью совпадает с 256, т.е. выходной результат получается в градусах и 256-х долях градуса, что позволяет подавать его на вход ранее написанной ветки вычисления сигнала PWM.
При суммировании 9 отсчётов шум должен усредняться, и пиковое значение шума должно возрасти только в 3 раза, а не в 9, поэтому я и взял порог в плюс-минус 20 LSB. Это даёт примерно 2/3 градуса ошибки грубого приведения.
Дальше можно заниматься точным, обрабатывая гораздо больше отсчётов.
   11.011.0
KZ Xan #21.01.2014 21:07  @Бывший генералиссимус#21.01.2014 12:24
+
-
edit
 

Xan

координатор

Б.г.> 1 градус ... получается в градусах ... примерно 2/3 градуса

Градусы — это же противоестественная единица.
Натуральный продукт — это радианы.
:)



Пытаюсь сейчас понять, можно ли управлять маленькой ракетой — успеют ли рулевые машинки.
На симуляторе.
Но что-то новые знания плохо лезут в мозги!!! :D
Ещё не прочувствовал до конца весь этот процесс.
   
RU Бывший генералиссимус #21.01.2014 21:30  @Xan#21.01.2014 21:07
+
-
edit
 
Б.г.>> 1 градус ... получается в градусах ... примерно 2/3 градуса
Xan> Градусы — это же противоестественная единица.

Возможно. Но у гироскопа 1 LSB =1/80 той же противоестественной величины в секунду, а квант времени 1/819,2 секунды. Произведение этих двух штук даёт 1/65536 противоестественной величины, так что простым суммированием во втором байте получаются 1/256, в третьем - единички градусов, а в четвёртом, который в норме пуст, 256-градусные продукты.

Xan> Пытаюсь сейчас понять, можно ли управлять маленькой ракетой — успеют ли рулевые машинки.
ну, всё зависит от соотношения быстродействия машинок, прочности ракеты и цели управления :) На аэродинамическом этапе основная задача - держать угол атаки в заданных пределах, а программный разворот по тангажу - вторичная задача. А на заатмосферном этапе - задача скорректировать набранную ошибку.
   11.011.0

LEVSHA

опытный

Xan> Пытаюсь сейчас понять, можно ли управлять маленькой ракетой — успеют ли рулевые машинки.
Ты же знаешь что все будет зависеть не так от размера ракет как от величины возмущающего момента(несимметричность тяги, воздушные потоки)
Если возмущающий момент будет стремиться к нуль(идеальный вектор тяги и баланс масс) то и большого быстродействия не надо главное чтобы колебательный процесс не начался.
   8.08.0
RU Бывший генералиссимус #21.01.2014 23:00  @LEVSHA#21.01.2014 22:03
+
-
edit
 
Xan>> Пытаюсь сейчас понять, можно ли управлять маленькой ракетой — успеют ли рулевые машинки.
LEVSHA> Ты же знаешь что все будет зависеть не так от размера ракет как от величины возмущающего момента(несимметричность тяги, воздушные потоки)

Странное рассуждение :)

LEVSHA> Если возмущающий момент будет стремиться к нуль(идеальный вектор тяги и баланс масс) то и большого быстродействия не надо главное чтобы колебательный процесс не начался.

Что значит "Главное чтоб не начался"? При сдвиге фаз больше 90 градусов между возмущением и управляющим воздействием он обязательно начнётся. Именно это и определяет требуемую скорость управления.

Нет, не "главное, чтоб не начался", а чтоб не росла амплитуда этих колебаний выше критической - при которой ракету разломает либо аэродинамическими, либо собственными динамическим нагрузками.

За время активного участка амплитуда колебаний не должна превысить нескольких градусов, это раз, и СУ должна уметь учитывать эти колебания (ДУС от этих колебаний не должен дрейфовать или ложиться на упор).

Между прочим, быстродействие рулевых приводов 2-й ступени "Энергии" было, по американским понятиям, недопустимо близко к порогу автоколебаний. Но наши программисты не подвели :)
   11.011.0

Xan

координатор

Вот что пробовал симулировать.
Датчик даёт величину угла отклонения (x) и скорость вращения (dx/dt).
У управлялки есть два коэффициента:
первый — "возвращающая сила" или "жёсткость пружинки";
второй — "сила трения" или "вязкость".
Угловое ускорение, которое должно получиться, вычисляется так:

a_x = - k1 * x - k2 * dx/dt

Если взять k2 = 0, то получится маятник с периодом:

T = 2 * pi * sqrt(1 / k1)

Если k2 > 0, то колебания получаются затухающие.

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


Теперь добавил задержку, которую даёт рулевая машинка (задержки в датчике и мозгах на порядок меньше, чем в машинке).
Предположил, что машинка, получив команду, половину времени разгоняется к новому положению, а вторую — тормозится. То есть переходит в новое положение по S-образной кривой.
Ну и предположил, что это время равно обещаному в рекламе = 65 мс.

И теперь уже не всякие коэффициенты стали одинаково полезны! :)
Например, при k1 = 600 время четверти периода колебаний (90 градусов) должно получиться 64 мс.
И, таки да! — амплитуда колебаний росла со временем, и никакие кручения k2 не помогали.
При k1 = 550 (67 мс) и k2 = 35 колебания затухали, но медленно. Причём период колебаний получился 178 мс.

Вот нарисовал картинки для разных значений коэффициентов.
(Ракете придаётся скорость вращения = 20, длительность картинок = 1 секунда.)
Верхняя картинка — разные k1 и подобранные к ним "лучшие" k2:
k1 = 50, k2 = 11 (коричневый)
k1 = 100, k2 = 15
k1 = 200, k2 = 22
k1 = 400, k2 = 32
k1 = 500, k2 = 36 (синий)

Нижняя картинка — при k1 = 200 разные k2:
k2 = 11
k2 = 16
k2 = 22
k2 = 32
k2 = 45

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

Xan

координатор

Xan> Верхняя картинка — разные k1 и подобранные к ним "лучшие" k2:

На самом деле они не лучшие, они только казались лучшими в какой-то момент. До рисования графиков.
   
RU Бывший генералиссимус #22.01.2014 15:50  @Xan#22.01.2014 15:03
+
+1
-
edit
 
Xan>> Верхняя картинка — разные k1 и подобранные к ним "лучшие" k2:
Xan> На самом деле они не лучшие, они только казались лучшими в какой-то момент. До рисования графиков.

Это ещё не всё!
Это ты только угловую стабилизацию забабахал!
А уже в 8К84 была и система стабилизации центра масс!

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

Интегрирующие маятниковые акселерометры бокового и нормального ускорения давали сигналы, насколько в результате работы автомата угловой стабилизации сместился ЦМ ракеты, и возвращали ракету обратно на программную траекторию.
Мы спрашивали у наших преподов, как же эти две системы не мешают друг другу, ведь их сигналы в норме противоположно направлены, но, нет, они разведены по постоянным времени регулирования - от десятых долей герца до единиц герц в канале СУС, и раз в 10-30 медленнее в канале ССЦМ.
   11.011.0
KZ Xan #22.01.2014 16:42  @Бывший генералиссимус#22.01.2014 15:50
+
-
edit
 

Xan

координатор

Б.г.> Если ты приглядишься к своим графикам, то увидишь, что, хотя угол и вернулся на программное значение, интеграл от этого "колебания" ненулевой. А значит, ракета сместилась вбок.

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

Вот с быстрой задачей у меня получается, что если вектор тяги отклонить на 1, то угловое ускорение получится аж 3000.
А более-менее устойчивое управление получается, например, при k1 = 300. То есть надо в рулевой машинке в 10...20 раз уменьшить передачу.
Это если 60 градусов машинки превращать рычагами в 0.6 градуса ВТ, то 1 градус отклонения ракеты должнен превратиться в 10 градусов поворота машинки.
В общем, вполне прилично.
Тогда:
1. не надо будет закрутки;
2. в конце работы последней ступени можно ракету развернуть, чтоб погасить избыток импульса. Поскольку отсечку тяги делать слишком сложно.

Вроде бы!!! :D
   

Xan

координатор

Подумал, что последнюю ступень со всем управлением вполне можно испытать "дома". Несмотря на то, что у неё характеристическая скорость 3 км/с.
Задать программу полёта чтоб она поднялась метров на тридцать и начала нарезать круги радиусом 0.25 метра. Как раз не будет превышена угловая скорость гироскопов и ускорение будет 30 g.
Взлетит, покрутится 10 секунд, как китайская шутиха, и упадёт недалеко от места старта. :)
   
RU Бывший генералиссимус #25.01.2014 15:22  @Бывший генералиссимус#21.01.2014 12:24
+
-
edit
 
Вряд ли это наука, но точно на коленке.
Текущий вид установки. Надо бы видео снять, как она вертикализуется по нажатию кнопочки на клавиатуре, но видеосъёмка что-то много времени отнимает.

в дальнейших планах по модификации установки;
1. Посадить гироскоп на третью ось, хоть по ней и не будет мотора.
2. Повернуть ось вращения по рысканию на 45 градусов, чтобы можно было программу по тангажу отрабатывать, и при этом "рамки не складывались".
3. Изготовить из проводов от наушников-вкладышей более мягкий кабель от контроллера к датчикам, нынешний чересчур жёсткий.

P.S. Пусть вас не смущает лазерная указка на резинке, для визуализации точности достаточно, а в управлении она участия не принимает :)
   11.011.0
Это сообщение редактировалось 25.01.2014 в 15:28
RU Бывший генералиссимус #29.01.2014 13:46  @Бывший генералиссимус#21.01.2014 12:24
+
-
edit
 
Б.г.> Сейчас я суммирую 9 последовательных отсчётов с каждого акселерометра.

Что-то я опять поломал в своей программе и часть настроек перестали грузиться в гироскопы. Очень похоже, что пауза между байтами при передаче не может быть больше нескольких мкс, и к ЕЕПРОМу обращаться (даже на чтение) нельзя. Возможно, конечно, что просто опечатался где-нибудь...

Туго дело продвигается, очень туго.
   11.011.0
RU GOGI #29.01.2014 13:50  @Бывший генералиссимус#29.01.2014 13:46
+
-
edit
 
Б.г.> Туго дело продвигается, очень туго.
Ты все также на асме пишешь?
   26.026.0
RU Бывший генералиссимус #29.01.2014 13:51  @GOGI#29.01.2014 13:50
+
-
edit
 
Б.г.>> Туго дело продвигается, очень туго.
GOGI> Ты все также на асме пишешь?

Да :)
   11.011.0
RU GOGI #29.01.2014 18:34  @Бывший генералиссимус#29.01.2014 13:51
+
-
edit
 
А в чем причина такого ретроградства? На восьмибитном, в ассемблере...
   26.026.0
RU Андрей Суворов #29.01.2014 19:35  @GOGI#29.01.2014 18:34
+
+1
-
edit
 

Андрей Суворов

координатор

GOGI> А в чем причина такого ретроградства? На восьмибитном, в ассемблере...

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

И ещё одна причина - у меня есть тайная мечта, написать диссертацию о путях обхода (т.е. неэффективности и непригодности) традиционных ограничений режима нераспространения. Такая тема лежит на стыке техники и политики, и, даже если я вправду что-нибудь такое-эдакое сделаю, вряд ли кто согласится быть моим научным руководителем :)
   8.08.0
RU GOGI #29.01.2014 19:58  @Андрей Суворов#29.01.2014 19:35
+
-
edit
 
А.С.>но эффективность от этого понизилась.
Эффективность чего? Тебя или кода?
   26.026.0
RU Бывший генералиссимус #29.01.2014 20:35  @GOGI#29.01.2014 19:58
+
-
edit
 
А.С.>>но эффективность от этого понизилась.
GOGI> Эффективность чего? Тебя или кода?
Меня, конечно!
На Си я совсем неопытный писец.
   11.011.0
AR a_centaurus #29.01.2014 21:21  @Андрей Суворов#29.01.2014 19:35
+
-
edit
 

a_centaurus

опытный

А.С.> И ещё одна причина - у меня есть тайная мечта.... вряд ли кто согласится быть моим научным руководителем :)

А ты в Иране поищи. Или в Северной К. Они сильно этим озабочены (non-proliferartion). Но лучше держись подальше от этой темы, целее будешь. Это я тебе со знанием дела совет даю. :eek:
   12.012.0
KZ Xan #29.01.2014 22:11  @Бывший генералиссимус#29.01.2014 20:35
+
-
edit
 

Xan

координатор

Б.г.> На Си я совсем неопытный писец.

Ну там просто вместо
mov a, b
пишешь
b = a;

:)

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

С другой стороны, если ресурсов хватает, можно использовать всякие float, уже не задумываясь правильности выбора представления величин, чтоб они не зашкаливали.
Ну вот древний пик16ф877 успевает мою арифметику поворотов больше 100 раз в секунду.
А на новом так и вообще 400 на "студенческом" Си без оптимизации.
   
RU Бывший генералиссимус #30.01.2014 00:42  @Xan#29.01.2014 22:11
+
-
edit
 
Xan> Можно вообще писать так, что из одной строки Си будет получаться одна машинная команда.
Xan> Мне кажется, что на слабых МК надо писать именно так, тогда код близкий к оптимальному получается.

Тогда и по времени разработки не будет большой разницы, если строчек на асме и си одинаковое количество :)

Xan> С другой стороны, если ресурсов хватает, можно использовать всякие float, уже не задумываясь правильности выбора представления величин, чтоб они не зашкаливали.
Xan> Ну вот древний пик16ф877 успевает мою арифметику поворотов больше 100 раз в секунду.

Основная проблема при писании на Си - синхронизировать опрос датчиков, выдачу телеметрии, управление исполнительными органами, и всё это - без вложенных прерываний! А уж математику куда-нибудь приходится распихивать.
К примеру, у меня сейчас получение одного байта по SPI занимает 512 тактов центрального процессора, и быстрее нельзя - провода мешают. А выдача одного байта телеметрии занимает 1600 тактов ЦП. И быстрее тоже нельзя.
Причём железо гироскопов такое, что байты в него надо посылать парами, нельзя делать паузу между байтами длиннее нескольких десятков тактов. А вот между словами, наоборот, снимать CS, иначе что-то сбоит в передаче.

Xan> А на новом так и вообще 400 на "студенческом" Си без оптимизации.

Ну, в принципе, можно было бы взять ардуиновскую Мегу 328, и писать на си... Но начал на асме - продолжу на асме...
   11.011.0
RU GOGI #30.01.2014 07:53  @Бывший генералиссимус#30.01.2014 00:42
+
-
edit
 
Б.г.> Ну, в принципе, можно было бы взять ардуиновскую Мегу 328, и писать на си...
Нафиг старшие модели АВР. Непропорционально дорогие при слабых аппаратных возможностях. Бери АРМ - тут тебе и 32 разрядная арифметика и DMA и скорость много больше. И дешевая аппаратная отладка.
Я две недели мучился поднимая USB mass-storage device на AT90USB169 (потому как с U4 устройства стоят вообще неразумно дорого) имея в общем-то готовую библиотеку LUFA, плюнул, купил плату на LPC1343 с зашитым драйвером MSC и за день прекрасно запустил.
Тем более, под твои гироскопы есть Linux драйверы и тебе не придется все вручную писать, а только немного подправить его.
   26.026.0
KZ Xan #30.01.2014 09:35  @Бывший генералиссимус#30.01.2014 00:42
+
-
edit
 

Xan

координатор

Xan>> Мне кажется, что на слабых МК надо писать именно так, тогда код близкий к оптимальному получается.

Это я к тому, что если написать сразу сложную формулу, то Си её и будет сложно считать, переменные в стек засовывать, место в памяти жрать.
А если формулу разбить на мелкие кусочки, то ресурсы экономятся.

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

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

Б.г.> Основная проблема при писании на Си - синхронизировать опрос датчиков, выдачу телеметрии, управление исполнительными органами, и всё это - без вложенных прерываний!

На Си прерывания есть, пользоваться ими легко. У меня Си ещё и предупреждает о возможных конфликтах.

Переходи на Си! :)
   
RU Бывший генералиссимус #30.01.2014 10:44  @Xan#30.01.2014 09:35
+
-
edit
 
Xan> На Си прерывания есть, пользоваться ими легко.

Не-не-не!! Ты не понял! Вложенные прерывания для БЦВМ - табу! Как сказал мой знакомый разработчик, "БЦВМ всю жизнь проживает в критической секции".

Xan> У меня Си ещё и предупреждает о возможных конфликтах.

посмотрим...
   11.011.0
1 16 17 18 19 20 53

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru