Телеметрия (часть 1)

lodeworx

Кто сам летает, знать должен, как держать горизонт по “пионерке”(указатель скорости разворота). Выдерживаешь режим(если с двигателем), вертикальную в ноль, воздушную- постоянной, разворот в ноль. Кто скажет, что это не горизонт? Вы тут со своей математикой скорее очередной симулятор сваяете! А как турбулентность фильтровать, и зачем? Автопилот- вообще самый элементарный регулятор. В чем вообще проблема то? Прописываешь максимальные отклонения рулей, умножаешь ашипку на коэфф. регулирования(Gain) и прибавляешь к исходному положению серво. Чувствительностью от помех избавляешься… А для возврата модели по GPS и компас не нужен- выдерживай высоту и курс по GPS, ну будет, из-за боковой составляющей угол сноса ИК=GPSк=МК+/-МС+/-УС и че? Для Москвы, например самолетик 45км/ч, ветер, северный 000 15 км/ч УСмакс=(U/V)*60=20 градусов, точка на западе 270 5км, (feedback через GPS) УВ=90 путевая составляющая отсутствует- долетим за 6.66666 минут, при этом магн. компас должен будет показывать 270-8+20=282 градуса. Т.е. вполне можно обойтись только GPS. У меня компас для установки гироскопа используется только+ 2 акселя.
Адаптивная или нелинейная фильтрация, средствами контроллера в трех строчках реализуется, блин! Я год назад еще адаптивную систему охлаждения запустил, ниче не зная про Калмана(температура, конечно медленнее меняется) 😛

Dikoy
smalltim:

Если хотите отговорить - пока не поздно это сделать 😃

У меня только один аргумент против - в 2-3 раза дешевле, а гимора больше… Были б они в 20-30 раз дешевле 😦
А так я тока за. Сам хочу с аналогом поиграться, да жаба душит второй заказ делать 😃

lodeworx:

Автопилот- вообще самый элементарный регулятор. В чем вообще проблема то?

Раз вы такие умные, что ж вы строем не ходите? (с)

lodeworx
RK3AMS:

А вот случай с моделью тов. Maloii и разбором причин этого в посте №1242 пункт 3 говорит, что
не всё так просто с этой GPS.
Радиомаяк служит для оптеделения направления на точку, а не положения в пространстве. 😒

Можно и в пространстве- по двум маякам NDB(1mhz max). Около Шереметьево VOR 114.6mhz- он один у нас 😦 . Здесь рамочные антенны не нужны- только штыревая(вращается сам маяк) определяется радиал и дистанция. Поймать можно китайским приемником за 100р(катушку на контуре раздвинуть).

smalltim

>Кто сам летает, знать должен, как держать горизонт по “пионерке”(указатель скорости разворота). Выдерживаешь режим(если с двигателем), вертикальную в ноль, воздушную- постоянной, разворот в ноль. Кто скажет, что это не горизонт?

Опишите, пожалуйста, как сделать вертикальную в ноль и разворот в ноль. Спасибо.

>Автопилот- вообще самый элементарный регулятор. В чем вообще проблема то? Прописываешь максимальные отклонения рулей, умножаешь ашипку на коэфф. регулирования(Gain) и прибавляешь к исходному положению серво. Чувствительностью от помех избавляешься… А для возврата модели по GPS и компас не нужен- выдерживай высоту и курс по GPS, ну будет, из-за боковой составляющей угол сноса ИК=GPSк=МК+/-МС+/-УС и че? Для Москвы, например самолетик 45км/ч, ветер, северный 000 15 км/ч УСмакс=(U/V)*60=20 градусов, точка на западе 270 5км, (feedback через GPS) УВ=90 путевая составляющая отсутствует- долетим за 6.66666 минут, при этом магн. компас должен будет показывать 270-8+20=282 градуса. Т.е. вполне можно обойтись только GPS. У меня компас для установки гироскопа используется только+ 2 акселя.

Можно фото готового девайса?

>Адаптивная или нелинейная фильтрация, средствами контроллера в трех строчках реализуется, блин! Я год назад еще адаптивную систему охлаждения запустил, ниче не зная про Калмана(температура, конечно медленнее меняется)

И как, хорошо летает адаптивная система охлаждения?

lodeworx

😮 она не летает- охлаждает, сорри. Алгоритм достаточно интересный получился…(оффтоп- оранжерея)
Как вертикалку мерять? Странный вопрос. Практически, в программе у меня каждому новому измерению, клеится timestamp с разрешением 0.001 сек(обсчет в свободное от прерываний время) 2-я производная- тренд вертикальной скорости. При включении автопилота на удержание высоты, запоминаешь значение с барометра, изменения интегрируешь по времени, умножаешь на gain и плюсуешь к текущему положению серво на тангаж. Тренд так- же можно задействовать, для “плавности”. А вот что бывает при перерегулировке: www.youtube.com/watch?v=Ieef0tLrv9c&feature=relate… -система в разнос!
На разворот, я лично, приделал MURATA-GYROSTAR-ENV-05V(пьезо, случайно достался). Ставишь в самоль вертикально. +/- 60гр.сек, при нуле на выходе 2.5 в, оверсемплинг в 12бит. Пожалуйста, бери ошибку и на серво(можно хоть на паре операционников сделать аналоговый). От температурного дрейфа и шума чувствительность спасает- не нужна такая точность!
Фото завтра ночью выложу,если интересно могу схемы, но это сам пациент и его кишки(на 88% готовы). И вообще это не самолет…

smalltim

>И вообще это не самолет…

А что?

>Как вертикалку мерять? Странный вопрос.

Вопрос был не про то как мерить, а про то, как поставить в 0.
Впрочем, какова у Вас разрешающая способность и стабильность показаний с бародатчика?

>На разворот, я лично, приделал MURATA-GYROSTAR-ENV-05V(пьезо, случайно достался). Ставишь в самоль вертикально.

В общем, понятно. Самолет, то есть, эээ… девайс самостабилизирующийся?

lodeworx
smalltim:

>И вообще это не самолет…

А что?

>Как вертикалку мерять? Странный вопрос.

Вопрос был не про то как мерить, а про то, как поставить в 0.
Впрочем, какова у Вас разрешающая способность и стабильность показаний с бародатчика?

>На разворот, я лично, приделал MURATA-GYROSTAR-ENV-05V(пьезо, случайно достался). Ставишь в самоль вертикально.

В общем, понятно. Самолет, то есть, эээ… девайс самостабилизирующийся?

Вертолет, нитро. Самому интересно, как акселерометры себя поведут!?
С 16 битным ацп у НАС около 20 см. по высоте было разрешение, устроит такое? Стабильность сильно зависит от грамотного питания, опорного напряжения(дело в том, что все эти железки делались для реальных парящих полетов, а моделями я только летом занялся- так железку дешевле в небо запулить 😒 ) пришлось схемотехнику упрощать из-за веса и размеров. Почти все пришлось переделывать в сторону упрощения. Почти закончил!
2 недели потратил на систему электропитания. Могу выложить распечатки с датчиков за минуту, как и код для АЦП с 12bit оверсемплингом(без фильтрации 😁 )
Сундук с шестеренками!? Я полагаю, да! 😃

smalltim

Эээ… собственно, вопрос:
Эта Ваша штука сможет самостоятельно привести вертолет на базу или нет?
У Вас нет всяческих покупных стабилизаторов-копилотов, поставленных дополнительно к автопилоту?

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

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

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

Еще сбоку пирометры - вроде как универсально (но надо испытывать), относительно дешево и сердито.

И тут появляется lodeworx и говорит, что сделать автопилот для вертолета можно на одном гироскопе и еше на крепком словце.

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

lodeworx

До полного автопилота для вертолета как-то далековато еще…
заводской приемник и сервы только

  1. гироскоп
  2. компас XY
  3. аксель XY
  4. высотомер
  5. GPS
    Ну вот, по быстрому. Движок выключен(я его вообще еще не заводил 😕 ) Это 1hz
    Gyro: 2484.mV
    Gyro: 2483.mV
    Gyro: 2483.mV
    Gyro: 2483.mV
    Gyro: 2483.mV
    Gyro: 2485.mV
    Gyro: 2486.mV
    Gyro: 2484.mV
    Gyro: 2488.mV
    Gyro: 2481.mV
    Gyro: 2483.mV
    Gyro: 2483.mV
    Gyro: 2484.mV
    Gyro: 2483.mV
    Gyro: 2485.mV
    Gyro: 2483.mV
    Gyro: 2483.mV
    Gyro: 2483.mV
    Gyro: 2483.mV
    Gyro: 2483.mV
    Gyro: 2481.mV
    Gyro: 2483.mV
    Gyro: 2484.mV
    Никакой интеграции и фильтров, just raw data… Программно- 1.2287 mv чувствительность.
    еще раз про вертикалку в ноль. Ну совсем просто: запоминаешь, без всякой математики показания с MPX (в попугаях) на нужной высоте, а изменения(+/-) умножаешь на GAIN и складываешь с текущим значением положения серво на тангаж(в моем случае вообще два режима получается- висение и горизонтальный полет,т.е. еще и шагом нада рулить) Подстраиваешь чувствительность, чтобы сервы в состоянии покоя не шевелились-меньше шума- больше чувствительность- ниче нового не придумано! Завтра доберусь до тушки- выложу листинг с барометра.
smalltim

>До полного автопилота для вертолета как-то далековато еще

Ээ… тогда я все вопросы снимаю.

>Завтра доберусь до тушки- выложу листинг с барометра
Не, не надо.

Про поддержание вертолета в стабильном состоянии - удачи! Получится простыми методами - бум перенимать опыт, если поделитесь 😃

Одна тут ссылочка мне понравилась. По идее, физически должно быть эквивалентно управлению по одной из степеней свободы верта:
Inverted Pendulum Balancing Robot Montage

Psw

БалансирныйРоботГизмо выглядит прикольно, согласен. Но у него высота заведомо неизменна, а вот в вертолёте 2х осевой аксель да и 3х осевой - нервничать должны сильно. Хотя годика 3 назад кто-то на форуме поговаривал о попытках стабилизировать висение комнатного верта 2х осевым акселем, уж не знаю на сколько успешно - видео не выкладывалось.

serj
Dikoy:

Документы есть - я с этим переездом никак не могу найти книжку, которую обещал и сканер. Но всё будет.
Комплексирование GPS и инерциалки это то, к чему мы в итоге пришли. Не так всё просто там, но движемся в этом направлении. Пока результатов нет…
Текнол комплексирует бинсу и компас, у них летает…

Само у них летает, но только на самоустойчивом электролете с рулем направления без элеронов 😃
Измерить они могут, а вот управлять- с этим наблюдаются трудности …
Я думаю, вам известно сколько “дозоров” было положено с помощью их автопилота 😦

Вообще, задача измерения и управления- это две разные задачи…

Кстати, тот же Побежимовский “элерон” - замечательный комплекс, простой как 2 копейки, имеет на борту из датчиков только gps и барометр, да еще один гироскоп 😃

Так что- на “бюджетный” вариант- максимум две пары пирометров и в сад 😃

Про компас- на широте Питера 5 градусов наклона по крену могут привести к 15 градусам ошибки курса.

Про гиру модельную по крену- я имел в виде только демпфер…

Dikoy
serj:

Я думаю, вам известно сколько “дозоров” было положено с помощью их автопилота 😦

Вообще, задача измерения и управления- это две разные задачи…

Так что- на “бюджетный” вариант- максимум две пары пирометров и в сад 😃

Про компас- на широте Питера 5 градусов наклона по крену могут привести к 15 градусам ошибки курса.

Да, я знаю. Только не знаю, это с ИХ автопилотом, или доработанным канадским, на котором они и лётают собственно?

Да, +1. Измерение и управление задачи разные. Причём управление - сильно проще.

К пирометрам желателен аксель. Во-1 он позволит использовать только 4 пирометра, при этом знать направление на землю. Во-2 его можно использовать совместно с 3-х осевым компасом, делая его невосприимчивым к кренам ( www.magneticsensors.com/datasheets/hmc1055.pdf , стр.9, HEADING COMPUTATION). +GPS. Вот это, ИМХО, и есть опримальная концепция:
GPS, возд. скорость, компас, пирометры, аксель. Альтиметр - как опция. И всё.

Вся математика компаса укладывается в 3 строчки:
X’ = X * cos(φ) + Y * sin(θ) * sin(φ) – Z * cos(θ) * sin(φ)
Y’ = Y * cos(θ) + Z * sin(θ)
Azimuth (Heading) = arctan (Y’ / X’)

lodeworx
Dikoy:

Да, я знаю. Только не знаю, это с ИХ автопилотом, или доработанным канадским, на котором они и лётают собственно?

Да, +1. Измерение и управление задачи разные. Причём управление - сильно проще.

К пирометрам желателен аксель. Во-1 он позволит использовать только 4 пирометра, при этом знать направление на землю. Во-2 его можно использовать совместно с 3-х осевым компасом, делая его невосприимчивым к кренам ( www.magneticsensors.com/datasheets/hmc1055.pdf , стр.9, HEADING COMPUTATION). +GPS. Вот это, ИМХО, и есть опримальная концепция:
GPS, возд. скорость, компас, пирометры, аксель. Альтиметр - как опция. И всё.

Вся математика компаса укладывается в 3 строчки:
X’ = X * cos(φ) + Y * sin(θ) * sin(φ) – Z * cos(θ) * sin(φ)
Y’ = Y * cos(θ) + Z * sin(θ)
Azimuth (Heading) = arctan (Y’ / X’)

+5! наконец пришла зима! 😁 Ура товарищи!

lodeworx

AVR-ADC_GLYUK! В мануалах как-то не заостряют внимание на этом- я в свое время напопоролся. Если у вас ADC использует …на… Я лучше код выложу с комментариями!
[codebox]
#define SELMUXADC 0b11111000—>Маска для ADMUX
#define OVERSAMPLERCHANNELS 1 ->каналов на оверсемплинг
#define OVERSAMPLExX 16-> 16х
#define NoP asm volatile (“nop”)
typedef struct {
uint16_t D_Container;
uint16_t Result;
uint8_t chnmask;
} Oversampler_SET;
Oversampler_SET Oversampler_CHNL[OVERSAMPLERCHANNELS];

ADMUX =_BV(REFS0);
ADCSRA =0b111 |_BV(ADEN) |_BV(ADIE) |_BV(ADSC);
//------------------------------------------------------
ISR (ADC_vect) {
Oversampler_SET *wrkwith;
wrkwith=&Oversampler_CHNL[OvSmpl];
if (wrkwith->Stat_Cntr++) { здесь уже нет “ашипки”
//if (wrkwith->Stat_Cntr++<OVERSAMPLExX) { а здесь так не надо делать

wrkwith->D_Container+=ADC; <- здесь НЕЛЬЗЯ использовать первый результат НЕ ТОЛЬКО при первом старте ADC, но и после переключения MUX!!!-ОН(осчет ADC) КРИВОЙ-шумит т.е.! Хитрые атмельщики- утаили!

}else if (wrkwith->Stat_Cntr>OVERSAMPLExX) { был “равно” стал “больше” т.е. делаем не 16, а 17 семплов
wrkwith->Result=(wrkwith->D_Container&0b11111111111100)>>2; >12 bit результат
wrkwith->Stat_Cntr=0;
wrkwith->D_Container=0;
if (OvSmpl++==OVERSAMPLERCHANNELS) OvSmpl=0;
wrkwith=&Oversampler_CHNL[OvSmpl];
ADMUX =(ADMUX&SELMUXADC) |wrkwith->chnmask; < ТРАГИЧЕСКИЙ момент 😃
NoP; < ждем такт, пока не обновится
}
ADCSRA|=_BV(ADSC); < стартуем
}
[/codebox]
Наглядненько
Наверняка ни я один попался, т.к. первое, что приходит в голову, при нескольких каналах ADC- это обновлять ADMUX на следующий канал сразу после получения результата…Я доооооолго морочился, пытаясь понять че шумит.

serj
lodeworx:

AVR-ADC_GLYUK! В мануалах как-то не заостряют внимание на этом- я в свое время напопоролся.

Вообще-то именно для этого в институтах учат схемотехнике 😃 чтоб следствия схемного построения аналоговой части (УВХ после коммутатора) не принимали за глюки … Сорри, не хотел язвить, но не удержался…

smalltim

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

Dikoy
serj:

Вообще-то именно для этого в институтах учат схемотехнике 😃 чтоб следствия схемного построения аналоговой части (УВХ после коммутатора) не принимали за глюки … Сорри, не хотел язвить, но не удержался…

Называется “первое пустое преобразование” у всех АЦП последовательного приближения 😃 У СД просто возрастает время накопления. Раза в 2-3.

Psw
lodeworx:

я лично, приделал MURATA-GYROSTAR-ENV-05V (пьезо, случайно достался)<> вообще это не самолет

lodeworx:

Вертолет, нитро.

Порылся в своей коллекции убитых девайсов, содеял фотку:

двух убитых датчиков Мурата ENV-03 на фоне исправного ENV-05. Убились на верте при крашах на кухне. В одном 03 датчике даже краешек кристалла обломился, хотя корпус был целым естественно - обломился чисто от “ускорения несовместимого с жизнью”. Что-то мне подсказывает, что в ENV-05 кристалл ещё жирнее и убъётся при краше ещё легче. Про вибрации ДВС уж ваапще молчу - как он их там “переварит” без наводок.

serj:

в институтах учат схемотехнике

А я вот сам грызу гранит схемотехники потихоньку. Но то что после переключения MUX надо подождать для зарядки конденсатора УВХ перед началом АЦП - вроде и в даташитах написано и само по себе понятно.

smalltim:

после переключения каналов АЦП первый полученный результат выбрасываю

Ну да, это тоже способ “подождать”, только не самый быстрый.
Речь была об алгоритме получения каждого АЦП результата Переключил-Подождал зарядки УВХ -Запустил АЦП/Отключение конденсатора УВХ. Либо можно - при отсутствии регулируемой аппаратной задержки для УВХ как в 18 пиках, можно было делать в прерывании от готовности АЦП результата - Начало Обработчика Прерывания АЦП - пауза реакции на флаг прерывания и на сохранение регистров достаточна для зарядки УВХ - Запуск нового АЦП/Отключение УВХ - переключение MUX - быстрое копирование/накопление результата АЦП пока новый результат не готов - выход из прерывания.
И при этом не надо ничего выбрасывать и АЦП работает достаточно шустро без особых пустых программных задержек. Делал так в 16 пике.

smalltim

>Ну да, это тоже способ “подождать”, только не самый быстрый.

У меня каждый канал после переключения опрашивается 64 раза в режиме free run, потеря 65-го измерения - не слишком существенная потеря времени 😃

Vad64
smalltim:

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

А можно поинтересоваться, в какой доке и где написано, что после переключения канала АЦП AVR надо ждать или откидывать первый результат?

smalltim

У меня была где-то аппноута про АЦП Атмеги.
Её не нашел, но вот что нашел, например, в даташите по AT90USB1287, которую использую в автопилоте:

In Free Running mode, always select the channel before starting the first conversion. The
channel selection may be changed one ADC clock cycle after writing one to ADSC. However,
the simplest method is to wait for the first conversion to complete, and then change the
channel selection. Since the next conversion has already started automatically, the next
result will reflect the previous channel selection. Subsequent conversions will reflect the new
channel selection.
When switching to a differential gain channel, the first conversion result may have a poor accuracy
due to the required settling time for the automatic offset cancellation circuitry. The user
should preferably disregard the first conversion result.

Psw

Если есть оверсэмплинг к примеру 4 канала по 64 считывания, то без постоянного переключения между каналами при каждом АЦП - результаты будут неравномерно взвешенны во времени, что чисто теоретически не есть хорошо. Так что лично я для чистоты совести исповедовал переключение MUX при каждом АЦП - к примеру если общий цикл накопления результата по всем каналам 1 секунда - то результат будет “более честным” - мало ли какие были всплески сигнала, а мы их могли прозевать и не усреднить.

lodeworx
Psw:

Если есть оверсэмплинг к примеру 4 канала по 64 считывания, то без постоянного переключения между каналами при каждом АЦП - результаты будут неравномерно взвешенны во времени, что чисто теоретически не есть хорошо. Так что лично я для чистоты совести исповедовал переключение MUX при каждом АЦП - к примеру если общий цикл накопления результата по всем каналам 1 секунда - то результат будет “более честным” - мало ли какие были всплески сигнала, а мы их могли прозевать и не усреднить.

Ну да, логично, я так-же пошел.

lodeworx
Psw:

Порылся в своей коллекции убитых девайсов, содеял фотку:

двух убитых датчиков Мурата ENV-03 на фоне исправного ENV-05. Убились на верте при крашах на кухне. В одном 03 датчике даже краешек кристалла обломился, хотя корпус был целым естественно - обломился чисто от “ускорения несовместимого с жизнью”. Что-то мне подсказывает, что в ENV-05 кристалл ещё жирнее и убъётся при краше ещё легче. Про вибрации ДВС уж ваапще молчу - как он их там “переварит” без наводок.

А я вот сам грызу гранит схемотехники потихоньку. Но то что после переключения MUX надо подождать для зарядки конденсатора УВХ перед началом АЦП - вроде и в даташитах написано и само по себе понятно.

Ну да, это тоже способ “подождать”, только не самый быстрый.
Речь была об алгоритме получения каждого АЦП результата Переключил-Подождал зарядки УВХ -Запустил АЦП/Отключение конденсатора УВХ. Либо можно - при отсутствии регулируемой аппаратной задержки для УВХ как в 18 пиках, можно было делать в прерывании от готовности АЦП результата - Начало Обработчика Прерывания АЦП - пауза реакции на флаг прерывания и на сохранение регистров достаточна для зарядки УВХ - Запуск нового АЦП/Отключение УВХ - переключение MUX - быстрое копирование/накопление результата АЦП пока новый результат не готов - выход из прерывания.
И при этом не надо ничего выбрасывать и АЦП работает достаточно шустро без особых пустых программных задержек. Делал так в 16 пике.

Что же вы там с ним на кухне делали- то? 😮 ENV-05 только питанием отличается(5в). При краше, мне его меньше всего жалко будет, по сравнению со всем остальным… Я для него уже соорудил силиконово-пластиковый гробик 😁 А ДВС именно с этими гиро и летает лет 10…