Activity

Gaui GU365-бюджетная 3-х осевая система FlybarLess для электро-вертолетов

Про “безфлайбар” я недавно инфу нарыл. А возился, конкретно, с “гирой” навороченной. Писал уже, что есть выходы на три сервы и входы для доп. гиродатчиков- буду заказывать в ближайшее время, ибо в Москве ADXRS на платке припаяный, под 7 косарей стоит и заказ на две недели- охренели, барыги- бизнес по русски. Софт написан, отлажен- ничто не мешает 3 гиро поставить для “безфлайбара”
Пока облётываю, коэффециенты подкручиваю- много чего рулится, только после лётных испытаний. Вывод пока один: пьезо малопригодно для headinghold- coldstart полчаса занимает, дрейф непредсказуемый у каждого экземпляра датчика, термостабилизация нужна! На небольших электричках, возможно и не так всё это критично- их так и так “колбасит”. Меня просто более крупные ЛА интересуют изначально- отсюда “навороты”. По поводу исходников…Ну, тут уже наломали копьев на эту тему…Я сам против коммерциализации подобных проектов. Но opensource’s opensource! Результат коллективной деятельности(студентов, фанатов. Открываем ftp и все дружно начинаем туда ваять- именно так это делается. Что лень? Время не хватает? Или ещё чего?). Поэтому не вижу ни одной причины, по которой буду исходники, от нечего делать, “давать посмотреть”. См. пример на первых двух фотках, чем опенсоурс от проработанного проекта отличается. ПрошиФки пжалста- работать всё будет на любой отладочной плате, не ниже 32-й Меги. Хардверных фильтров и т.п.- НЕТу, всё программно реализовано. Берём тот- же Crumb128 какой-нить, подсоединяем сервы, “гирьки”, полетели. Там настроек юзеровских до головной боли хватит))) В этом то я и прошу помощи у “продвинутых” мужчин. Если, конкретно “безфлайбар” интересует, то мне для этого нада только 2 раза код для PID скопировать- делов на 5 минут;) На фото параметры одного PID’a в терминале, лист “рабочих” данных, а так- же “прозрачный рилтайм даунлинк”.

Gaui GU365-бюджетная 3-х осевая система FlybarLess для электро-вертолетов
MikeMDR:
  1. Вопрос: Первоначальный посыл для создания собственной гиры по сравнению с аналогичными фирменными:
  • сделать дешевле ;
  • сделать функциональнее;
  • другое (😉).
    2)Для начала хотелось бы увидеть видео полёта, чтобы понять - интересно или нет 😃.
    Впрочем, для затравки моей мыслительной деятельности, и помня, что в споре рождается истина, IMHO, стоит выложить!

1: Дешевле??? -кхе-кхе 😛 мне не дешевле вышло по-любому+время… Если просто повторить-дешевле конечно: мега-500р, гироскоп от 50$+ радиомелочёвка.
2: Возможно, хотя, как ни наворачивай, всё сводится к обычному PID контроллеру, а headinghold как ни назови- всего лишь интегрирование. А, ну да, гувернер тут-же.
3: Заморочка! Адреналинчик- свой первый Nitro среди кустов на даче отлаживать. Настраивается всё, что можно, с терминала. Надеюсь на помощь с настройками. Я сам- начинающий-3d не летаю пока, но болен уже… Видео попробую завтра заснять- фотки сосед через забор делал:) Да и недостатков много пока:1 пьезо Murata’s shit! Дрейф исчезает минут через 15 после включения!(нужен SMM) 2: от резких порывов ветра(с ветром у меня на местности-полная и непредсказуемая засада!) и на подушке у земли проявляется перерегулировка, но однократная, без колебаний, лечится;) Прелесть в том, что: 1. RealTime Софт не глючный!(не один год обсасываю в разных проектах) Логика- железная! 2: за ручкой, как дрель вращается(proportional gain ослабляется, в зависимости от отклонения руля. Параметр настраивается 0-100% ослабление, и вааще их много там 😉) 3: 3-й вход можно для дополнительного режима использовать, если не для контроля гувернера. 4: 5,5 литров отлетал среди кустов,деревьев- ни одного стрёмного момента-РАБОТАЕТ!!!
Вообще цель: создать универсальную модульную систему, на базе простых и одинаковых “железных” кирпичей, т.е. в каждом: 3 серво-входа, аналоги, доп. вход на INT2 или компаратор, 3 серво-выхода, two-wire link, как интерфейс, UART. На этой-же “железке” работает мой графический OSD- слишком много человеко-часов. В zip’e схемка и картинка ещё. По схеме понятно, что проще некуда…😉

6000_Low_Res.zip

Gaui GU365-бюджетная 3-х осевая система FlybarLess для электро-вертолетов

Привет всем! Объясните в двух словах, как разработчик разработчику( скорее к Botvoed’ у вопрос) в чем смысл FlyeBarless’a? Я так понимаю два гиро-демпфера по XY? Или я ошибаюсь? Сам летаю на Raptor30 с самодельным гиро. Кому интересно, могу всё выложить…Система проста, как три копейки- она же может быть микшером на “крыле”. Стабилизация на крыле- хочешь по крену, хочешь по тангажу. Три выхода на сервы: цифра-аналог… Конфигурится с любого “терминала” командами. Верт недавно облетал- летом некогда было. Punk- технологии в действии: плата- “под утюг” односторонняя без сверления, минимум компонентов. Очередной вариант на даче собирал, “на коленке”, травил в дождевой водичке))) Основное ноу-хау, блин:“Пемоксоль”- краска с “лазера” липнет на ура, с первой попытки- школьник справится. Самое сложное для “не паяльника” будет Мегу присобачить. Гироскоп любой можно ставить- у меня на крыле кастрированная плата от “стрекозы” с трёхвольтовой Муратой(мелкая), на рапторе Murata на 5в. здоровая, ADXRS пока в руки не попался- задолбали все эти поставщики- изготовители и коммерсанты. Щас пару фич подшаманю- будет на ней-же и гувернёр. Какие тут изобретения, я Х.З.! Вот если оно всё само настраиваться будет- это да! Короче, если интересно, жду ответа

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

Всем юзерам Матлаба, КАЧАТЬ!!! www.u-dynamics.com/aerosim/ Успехов!
P.S. Тима поздравляю(скептически) со стабилизацией крыла!

“Имитация”- элементарно! UAV’s log(euler angz, alt)-(Rs232,485,USB )->Matlab+Aerospace Blockset->FSUiPc->FS2004! Как вам такой расклад? Чё огород то городить? Тим конечно любитель порисовать.

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

А че за таблы то? В gnucc есть crc16 в библиотеке… Посмотри на разводку и найди петлю! хе-хе. Да не одну. Потом давай их фильтровать! хо-хо! Matlab по вкусу пришелся- это правильно! А чем TWI не по-вкусу? Давай придумаем совершенно новое круглое колесо! Или “модбас”- это перевод?!

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

Ура! Летает! Мои конгратулейшонс т.с.
Tim, по дрожанию “серв”, пульсов и т.п. Вааще вся эта импульсная техника плохих “разводок” не любит:). Кто- то писал тут уже- я повторяю, садите питание в одном месте-в точке где оно приходит… Хотя- бы землю- тогда фильтруйте. Вот, например: сервы и т.п. запитаны из приемника, сигнал с другой платы-не поключено(красные провода из приемника +5BEC->THRO, рыжевастенькие и белый- сигнальные) Подтягивайте ICP и INTы входы через PORTD внутренним резюком. NoiseCAncer😁 не влияет на качество в конкретном приложении. Мне таким образом удалось даже сравнивать SPCMvsPPM JR приемники! Резисторы на PPM сигналы- только “защита от кривых пальцев”- нечего по сигнальным цепям токи гонять. Но питание- главнее! Не ГоняЙТе ТоКИ! по системе.
P.S. To Smalltim: Как управляется крыло?!😝

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

Гугл говорит, видео недоступно 😦
Сейчас же мне надо будет из-через-под коленку себя за ж*пу укусить, чтоб это влезло в код. Сейчас 99.7% места в атмеге занято. Потому я так нешустро реализовываю все новые фичи. Попробую утоптать код еще немного, но не гарантирую, что влезет.

Во! Блин! Нада же-е-е-е-е?! А быстрей не будет работать??? Градус в секунду?😉
Выложу графику ИЛС на МеГе- полный отстой получился! Ну не тянет она…

Панкратов_Сергей:

Не совсем грамотно выполнено и все.
Но и то проблема решаема. Посмотрите примеры из медицины - кардиограф и прочее.

Вам бы ребята вольтметры строить! (и пожарные сигнализации!!!)😁
Шутка!
Если в приборах нельзя определить “TREND!”, то используйте их на трамваях, а не в авиации…

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

UPD:
Если кому интересно, наткнулся на мерзкую вещь в AVRGCC, связанную с типом констант.

вот такой, например, код нифига не сработает:
u32 a;

if(a>1000){…}

а вот такой сработает:
u32 a;

if(a>(u32)1000){…}

Гады, столько крови попортили…

Да, есть там такая засада! Тоже попадал- время потратил, блин… Гребаный тайпкастинг! Флоаты- сомнительно использовать для контроля- тормозно(проще и лучше умножить на 10-x-x)… А вообще GCC -неплохой- машинный код намного ровнее, чем даже у iAR получается, хотя оптимизация неоптимальна

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

Это слишком сложно. Вполне достаточно выключать SPI на плате телеметрии, оставляя подтяжки. Тогда мастер будет читать FF. Как только телемертия готова, включить SPI и мастер считает 00. А далее передавать пакеты фиксированой длины, с нумировкой. У меня подобным образом работает. Пакеты 10 байт, длина рассчитана так, чтобы везьде успевать пролезать.
Можно, конечно, с подтверждением, но есть риск, что в кореектном пакете попадётся заявленая комбинация и будет сбой.

А почему OSD slave должен быть обязательно, если на ней датчики висят???
К smalltim вопрос: сколько прерываний помимо на Vsync и Hsync от LM-ки??? Скорее два байта в начале пакета для синхра: 0xAA, 0x55(стандартный feed). Один хрен OSD только в начале и в конце кадра имеет свободное время для доп. прерываний(в вашем варианте возможно и по центру), а в автопилоте с этим попроще будет. Т.е. с букафками беда начнется однозначно, если она слэйвом начнет пакет ловить не в нужном месте. А если графика на весь экран? Тогда еще вариант: завести синхроимпульсы с LM-ки на автопилот и по ним синхронизировать: в начале строки обмен по байту, а в первых двух строчках синхробайты- тогда в OSD только на SPI прерывание останется+пакет длиной в количество строк можно сделать(в две стороны соотв.)+никаких проблем с синхроном протокола

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

Для разработки приложения отображения параметров телеметрии на ПК (Windows XP) начали обсуждать протокол передачи.

Matlab поставьте. С подобными вещами управляется на ура, за пять минут любой “экран” набросать можно с графиками, готовыми приборами(авиа притом).

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

А вот, кстати, печатка для автопилота нарисовалась

Пока разводил, чуть умом не тронулся.

Жесть! Может разделить на проц.,компас и коммуникационные. На мой взгляд, слишком много переходов на платке-не “для дома(утюга фоторезиста)”. 7805 точно не для батарейного питания. Вместо диода, для защиты, я всегда ставлю самовосстанавливающийся на ~500ма, после него защитный SMAJ30, анод к массе. Параллельно диоду можно светодиод !КРАСНЫЙ!(до предохранителя). <–Впоследствии спасает от рук любой степени кривизны

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

To Smalltim: По схеме… На ресете меги косяк и на 43 выв. И делители на PPM входы точно не надо(как аппендикс назад пришивать) все толерантно 5<->3.3(а как мерять PPM будешь?). Даже не охота к теме возвращаться, что мега и половины не потянет( с приемлемым разрешением), чего от нее хотите

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

На видео от Maloii такое же прослеживается: last fly my easy star

Бум разбираться.

Похоже это разное время входа в прерывание по строкам(такт или два). На моей графической- такая-же точно “шняга” (софт полностью мой) может попробовать все переменные в 16 бит?- в один размер?

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

Вот, “босяцкий” индуктивный рпм сенсор, средствами меги, может работать БЕЗ ПРЕРЫВАНИЙ!

(Катушка- половина рас…еного РЭС-22)
[codebox]
int FeatureCalcRpm;
ADMUX |=_BV(REFS0) |_BV(REFS1); //2.56v at AREF pin
ADCSRA |=_BV(ADEN); //Включаем шнягу…
ACSR |=_BV(ACIC); //Компаратор- как источник сигнала ICP, по отрицательному фронту…
TCCR1B |=_BV(CS11); //|_BV(ICNC1); //Timer1_Freq=XTAL/8 минимальная частота измерения~30.5hz макс.~1mhz
или частота проверки бита захвата. У меня проверка в конце “тела” строчного прерывания 15625херц

if (bit_is_set(TIFR,ICF1)) {
TIFR|=_BV(ICF1); //сброс
TCCR1B = 0x00; //стоп
TCNT1=0x00; //сброс
FeatureCalcRpm=ICR1; //сохраняем
TCCR1B |=_BV(CS11);//|_BV(ICNC1); //старт
}
RotationzPerMinute=(XTAL/8/FeatureCalcRpm)*60; //>>1, если 2 магнита
[/codebox]
Резистором “чувствительность” можно менять область применения 😁
(без него-“измеритель шума”)

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

Ну вот. С Днём Рождения, блин! 😃 Может сам на себя посмотреть:

С детства роботов люблю!
С “демо” данными:

Что- то типа: “В ШТОПОРЕ”, с маркером автопилота…

Сорри, нет фото-камеры…(OSD 72x192 слева скорость, в центре- курс, справа вертикалка, внизу- скольжение+ контроль скольжения +8 aux индикаторов-%) Ну и не сделать толком больше на Меге ниче- все завязано на строчном прерывании… 😃 ~20kb -opt 3. Про обмен датой:
Самое простое- обмен по SPI. Скажем 32 байта туда<->сюда +1 sync, по одному в конце строчного прерывания- мастером!

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

Ну вот, грабли! Вилы! 😮 Ну вот, будем протокол придумывать! SPI- сдвиговый рег. обычный. В данной апп. OSD- мастер, вывод делать в кадровом прерывании, например, дополнительное прерывание вводить нельзя- будут строки выпадать, или сдвигаться, из- за очереди прерываний, а так, все ручками… Хотите ARINC-4xx освоить в “свободное” время 😛 ?? Для прошивки Мег, использую мегалоад- ниче удобнее не пробовал- автоопределение, по сбросу. Можно переписать на любой физ. интерфейс, а основную делать прозрачной, во время прошивки. Но, ARM7 имеют на борту заводской лоадер и оригинальные процедуры входа… SAM7S- USBloader, и всего 48 пинов! О чем еще мечтать?! вот под что плату нада делать, а не возиться с протоколом и читать всякую ересь 😉 !

Atmel’s AT91SAM7S is a series of low pincount Flash microcontrollers based on the 32-bit ARM
RISC processor. It features a high-speed Flash and an SRAM, a large set of peripherals, including
a USB 2.0 device (except for the AT91SAM7S32 and AT91SAM7S16), and a complete set
of system functions minimizing the number of external components. The device is an ideal
migration path for 8-bit microcontroller users looking for additional performance and extended
memory.

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

а, черт!..Полностью согласен! Про нормальный АЦП и по прерываниям. Походу PWM программный-дрожать будет в зависимости от сложности остального софта(подключал в свое время аналоговый стрелочный вариометр к 8051 без PWM- все вылизал, а стрелка дрожит, как осиновый листок). Не связывайся- много бестолкового секса будет 😃 . В приемнике можно- там ниче нет больше. А про выбор процессора, я лучше помолчу…(LPC21… 6 асинхронных каналов, например)…молчу 😵

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

Вы готовы мириться с погрешностью вычисления и отображения курса на базу до 10-15 градусов, когда углы крена и тангажа ненулевые? Точный-то курс автопилот всегда при необходимости сможет узнать, приведя крен и тангаж к нулям.

Так и есть. Реальный компас “бычий глаз” в виражах такое исполняет, да и в горизонте от вибрации и толчков может на 360 провернуться… Поэтому в полете используется ГПК(гирополукомпас)- выставляется на земле. Или ГМК- то- же, но с коррекцией от магнитного(XYZamr +angular rate sensor+инклинометр для начальной установки). В больших виражи считаются заранее, при составлении плана полета. При наличии на борту эвм, задача упрощается: горизонт-имеем курс (истинный и магнитный), скорость отн. земли. Имея УВС(указатель возд. скорости) считаем угол ветра и скорость ветра. Делаем небольшой доворот на ЗК (заданный курс) с фиксированным креном, режимом и высотой в течении одной секунды,например->в горизонт->получаем новый курс, а так- же угловую скорость разворота при заданном режиме. Полагаю, дальше все просто и понятно- задаем новое время виража(при параметрах, равных предыдущему) для выхода на ЗК. Никаких синусоид и полукругов. Это из штурманской подготовки…

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

Гуру, а как лучше организовать опрос магнитометров?

Сет-ресет-меряем?
Или сет-меряем-ресет-меряем и Vout=(Vset-Vreset)/2 ?

С какой частотой достаточно будет делать сет-ресет? 1 Гц? 0.1Гц? Один раз после включения?

Ну эта формула для установочного вычисления offset- значения (OS), повниматочней 😉
сет-меряемVset, 2usec passed, ресет, меряем Vreset
OS=(Vset-Vreset)/2
Vout=Vreset-OS, меряем Vreset,Vout=Vreset-OS, меряем Vreset,Vout=Vreset-OS…
Период обновления OS в минутах. Как вариант один раз после включения. Не столь важно- всегда можно сделать чаще.
Но раз в секунду и меньше точно не нада. Успехов!

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

Прямо как в старом анекдоте : пришел Пьер и все опошлил 😦
А как все хорошо начиналось : Smaalltim с год назад решил сделать устройство телеметрии.
И сделал!
Очень приличное, недорогое и работающее.
Одно это- достойно большого уважения !
Выложил информацию для всех.
И тут приходит боксер- теоретик, утверждающий, что по его (авторитетному и непререкаемомому) мнению- все это “вторичный продукт” (почитайте В.Войновича- узнаете расшифровку термина 😃 )
Батенька!
А где можно увидеть что то, сделанное Вашими ручками?
Или Вы действуете по театральному принципу: актера из меня не вышло, пойду в критики?

Как- то не в тему…

  1. Я тему ADC поднял на примере !СВОИХ! ошибок и наблюдений(вариометр, гироскоп для вертолета).
  2. Пусть Smalltim скажет, если я не хвалил OSD…и его самого!
  3. Только литературного кружка не хватает 😵
Телеметрия (часть 1)

Для общего обозрения, заморочился:
“относительный”, усредненный спектральный анализ для 1 результата после переключения на 4 канал, с гироскопом, 31 фрейм, ADC-125khz, переключение между 0 и 4 каналами 16x оверсемплинг:

для 16-го:

Шумит?! Все это понятно, про зарядку, импеданс… И что Atmel не очень- то в аналоговую часть углубляется…
С вариометром я AD7705 использовал- там в datasheet этому вопросу целая страница посвящена- стр.16!
Для общего дела, с наилучшими пожеланиями! 😃

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

Апноту укажите, пожалуйста.

Мне тоже интересно. В моем случае, физически подключено вот так:
ADC4 не имеет отношения к дифф. каналам. Частота 125кгц, мега32…

// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
А такие вещи,в программе, меня как-то пугают. А использует ли функция delay_us() таймер? Уверен нет- это макро на ассемблере, которое наверняка запрещает прерывания при входе в нее. Замечательно полезно!

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

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

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

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

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

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

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

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

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

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

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 на следующий канал сразу после получения результата…Я доооооолго морочился, пытаясь понять че шумит.

Телеметрия (часть 1)
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! наконец пришла зима! 😁 Ура товарищи!

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

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

  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 и складываешь с текущим значением положения серво на тангаж(в моем случае вообще два режима получается- висение и горизонтальный полет,т.е. еще и шагом нада рулить) Подстраиваешь чувствительность, чтобы сервы в состоянии покоя не шевелились-меньше шума- больше чувствительность- ниче нового не придумано! Завтра доберусь до тушки- выложу листинг с барометра.
Телеметрия (часть 1)
smalltim:

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

А что?

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

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

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

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

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

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

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

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

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

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

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

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

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

Согласен. Три гироскопа с акселерометрами- гимор. Один нужен полюбому. Курс по GPS будет (у нас тут на 300км вокруг +8) на 8 градусов больше чем с компаса показывать. Калмана фильтрация- это на один параметр два датчика нада- ашипка есть несовпадение сигналов… Если грамотно, на прерываниях, все делать, у меги, тупо таймеров не хватит, о чем я и говорил(128-я тоже не поможет) Хороший вариант- отдельно все это делать и на SPI(TWI), я так понял, он не задействован.

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

Гуру, простите. Пошел убиваться об стену. Надо читать доки: оказывается, специально для таких идиотов, как я, у Атмеги128 есть специально обученные ноги в количестве 8 штук, которые могут генерить прерывания при изменении состояния на входе.
Впрочем, эти ноги частично пересекаются по функциям с SPI, так что вопрос остается в силе. Впрочем, атмега128 и USART свой в режиме SPI может использовать. Пойду всё-таки искать подходящую стену.

Ну вот типа: например. Из моего декодера PPM. Использует ICP. Если по каналам, я использовал “подключатель” на hct125d- лишний драйвер тоже не помешает, для выравнивания фронтов. Что касается самих импульсов, я думаю, что если с контроллера выводятся напрямую к машинкам(в приемнике)- то одновременно стартуют…(все включил, по счетчику отключил)
[codebox]
//////////////////////////////////////////////////////////////
#define PULSEZ 32
#define RC_SEQ_PRESENT 0
#define RC_SEQ_ACKQ 1
#define TURN_LED_ON PORTB|=_BV(LED_0)
#define TURN_LED_OFF PORTB&=~_BV(LED_0)
volatile uint16_t MeasuredIcpz[PULSEZ*2], RcvdData[8], cntz;
uint8_t ChnlCnt, SYS_LOGIC_BITS, pulse_Piece;
//////////////////////////////////////////////////////////////
void InitCapture (void) {
cli();
TCCR1B=0;
TCNT1=0;
TCCR1B |=_BV(CS11) |_BV(ICES1);// Период измерения равен 8*65536/XTAL
TIMSK |=_BV(TICIE1) |_BV(TOIE1);
sei();
}
ISR (TIMER1_CAPT_vect){
TCCR1B&=~_BV(CS11);//стоп таймер
TCNT1=0; //счетчик в ноль
if (bit_is_clear(TCCR1B,ICES1)) TCCR1B|=_BV(ICES1);// переключаем полярность срабатывания
else TCCR1B&=~_BV(ICES1);
TCCR1B|=_BV(CS11);// таймер старт
if (ICR1<5555) {// мин. значение длительности на которое следует реагировать (для JR при кварце 12mhz в моем случае)
//TURN_LED_OFF;
SYS_LOGIC_BITS|=_BV(RC_SEQ_PRESENT); // последовательность присутствует!
MeasuredIcpz[pulse_Piece]=ICR1;// сохраняем все данные???
if (MeasuredIcpz[pulse_Piece]>777) {// канальный синхро ~550 не нужен
///////////////////////////////////////////////////////
RcvdData[ChnlCnt]=(RcvdData[ChnlCnt]+MeasuredIcpz[pulse_Piece])>>1;// усредняем???
///////////////////////////////////////////////////////
if (ChnlCnt++>=7) ChnlCnt=7;// сохраняем 8 каналов
}
if (pulse_Piece++==(PULSEZ*2)-1) pulse_Piece=0;
} else {
cntz=pulse_Piece;
ChnlCnt=0;
pulse_Piece=0;
SYS_LOGIC_BITS|=_BV(RC_SEQ_ACKQ);// если больше 5555 - посылка принята!
}
}
ISR (TIMER1_OVF_vect){// при переполнении таймера сбрасываем бит наличия и счетчики
cntz=pulse_Piece;
pulse_Piece=0;
SYS_LOGIC_BITS&=~_BV(RC_SEQ_PRESENT);
SYS_LOGIC_BITS&=~_BV(RC_SEQ_ACKQ);
//TURN_LED_ON;
}
[/codebox]
Типа, вот. просто и понятно. Работает шикарно. Input Capture Noise Canceler -не пробовал, за ненадобностью
MeasuredIcpz и cntz можно выкинуть

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

Осторожно, боясь сглазить, докладываю, что нашел выход на thermopile датчики 8…14 мкм от HL Planar 😃 ( cms.hlplanar.de/index.php?spath=338& ).
Сейчас выясняю детали. Цена обещает быть вкусной: ориентировочно в сумме 6 датчиков, 2 платы и 3 ОУ с обвязкой выйдут дешевле, чем голова + вертикальная миниголова от FMA.

Кто готов войти в долю по заказу - тихонько шепните в почту или сюда. 😎

Молодец! Рисует, значит. Ну, оно было сразу понятно, что шаришь…(я про openGL- грфику) 😉
Я, готов. Пусть будут.

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

Да, давать крен в зависимости от разницы курса и направления на базу. Но делать этот крен пропорциональным разнице. Чем меньше разница, тем меньше крен.
Тогда риск проскочить нужный курс минимален, максимальный проскок будет равен угловой скорости по курсу умноженной на секунду - интервал прихода данных с GPS.
Нужно еще заложиться на опоздание прихода с GPS информации по курсу на 2-3 секунды, и экстраполировать курс и необходимый крен на 2-3 секунды вперед. Текущую угловую скорость по курсу можно брать с GPS как разницу между текущим и предыдущим вектором скорости.
Больших сложностей с математикой тут нет.
Главное - сделать алгоритм сходящимся, т.е. при любых внешних воздействиях самик разворачивается носом к базе. С таким вот креном, пропорциональным отклонению в курсе, должно получиться.

Против сильного ветра стратегия такая. Если видим, что курс близок к курсу на базу, скорость по бародатчику нормальная, а скорость по GPS маленькая, то увеличиваем газ.

Если ветер такой сильный, что физически носом самик смотрит на базу, а скорость по GPS направлена в противоположную сторону от базы, то есть, самик летит хвостом вперед относительно земли, “не выгребает” против ветра, то тут надо думать. В таком случае можно креном урулить хрен знает куда.
Если самик против ветра даже на полном газу не выгребает, то до свидания, самик.

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

Ну, вы, блин, жжете! 😛
Пирометр не будет работать в 3-4 балла облачности! А она может быть у нас и на 90 метрах. Я не говорю про дождевые условия, туман. Подходит для простейших стабилиизаторов на площадке.
Ну может если спец. оптическую систему ставить…
Надо начинать с удержания высоты…Для этого вертикалку надо четко следить!! С учетом всех завихрений и потоков-практически АБСОЛЮТНО! непредсказуемая хрень. Меньше самолет-больше колбасит, больше колбасит-быстрее реакция, должна быть.
Ветер посчитать можно, только, зная воздушную скорость, граунд спид и истинный курс (из GPS), магнитный курс.
Для выхода на заданный курс- делишь разницу на 2. Вот и весь алгоритм- в одно выражение!(никаких матриц 😉 )
Крен задают исходя из возд. скорости. Задает угловую скорость разворота, виража. Радиус разворота(ЛУР-линейное упреждение разворота) R=(V^2)/(9.81*tgB-) B-крен. Зависит физически только от самого самолета, или пассажиров 😵 (прикидываю крен в 45 на арбузе). Причем, разворот или вираж исполняется на одной высоте- удержание высоты и воздушной скорости режимом. Используются проверенные табличные и граф. данные для всех полетных режимов. В основном 30 градусов- нормально(проще высотой управлять). Тут без гироскопа не обойдешься- когда разворот скоординированный,т.е. без скольжения(“шарик в центре”), то акселерометр(по Y) тоже в центре будет, и маятник, и другая механическая байда, включая мозжечок 😃
Гироскопы дорогие…И постоянно нуждаются в коррекции
по вертикальной перегрузке, зная воздушную(получается эксперементально)
Магнитного поля, трехосевой сенсор (линии параллельны земле. У птиц такая хрень есть, типа мозжечка)
А как насчет, камеру использовать?? белое- черное…компаратор…в начале кадра(строки) разрешать прерывание, ICP использовать для изм. длительности(точно).
Алгоритм слепого летчика:

  1. Черное внизу- хорошо!
  2. Черное ползет вниз- ручку от себя
  3. -//- вверх-ручку на себя.
  4. все белое-пилотаж 😃
  5. все черное…-начинаем звонить по мобиле…
    … с креном тоже понятно, если длительность по строкам считать, то получим крен
    Можно лазер, зафиксированный на ла, опять- же по местности камерой отслеживать. Промодулировать если лазер, можно получить разницу с кадровой(строчной) частотой. По биениям считаем скорость.
    Ещё интереснее можно, если качать лазер и камеру на заданный угол. Получим горизонтальную и вертикальную(и много че полезного).
Телеметрия (часть 1)

Flashka. Я тут схему накидал, для макета МАКЕТНУЮ!!! Там двух-осевой магн. сенсор используется( в левом верхнем углу) AD7705 можно не ставить.(хочу и так, и так попробовать) вместо hct125 уместен любой мультиплексор… Зеленым отмечено железо для 16бит преобразователя. Желтым: датчики для 5в. Как ни крутил 128-ю- целый борт ножек незадействован остается… А 32 идеально влезает!

куда pdf прилепить?? За hct125 не пинать- у меня дядя на hct125- фабрике…(любой MuX)