Система стабилизации DJI для вертолетов классической схемы и не только!

alekseii

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

vik500
alekseii:

Программно, у меня, реверс “на столе” работает без вопросов.

Реверс Вы делаете НАЗОЙ или вашим контролером?

iatseniuk

Подскажите, пожалуйста, как настраивать пиды Naza H, для 450-го вертолета. У меня все по умолчанию по 100%. В мануале очень резкий, а в АТТІ, сильно колбасит по вертикали.

alekseii
vik500:

Реверс Вы делаете НАЗОЙ или вашим контролером?

моим контроллером.

btr1209
alekseii:

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

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

alekseii

На конец то, сегодня, нашёл то что нужно (образец программы), здесь же на сайте. Написал человеку, пока “ждём”.

Все ответы есть в программе из “MultiWii”, но не могу в нём разобраться…

alekseii
btr1209:

так ссылку бы сразу дал

Нашёл ссылку на конкретного участника сайта и уже у него на личной странице ссылка на программу.
Интересует вот эта программа MultiWii_2_1_AIO_v2
Вопрос (один из многих), где сама функция - spekTime=micros(); не могу её найти.

btr1209

это случаем не оно

в том архиве файл RX

alekseii

spekTime = micros(); - это сам вызов этой функции (чтение “времени”), а вот где она сама из чего она состоит и что делает вопрос (если я всё правильно понимаю, конечно).

btr1209

судя по тому как она используется micros() это встроенная функция ни в одном файле с архива нет ее определения а вот как ее используют файлы

MultiWii_2_1.ino ,Sensors.ino возможно она определяется в програмной среде для авр

vik500

Сергей в #1180 пишет главное чтоб был правильный алгоритм

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

У нас каждый сам, а вроде как общее дело делаем.

alekseii

Я тоже готов заплатить, Виктор, если действительно у Вас есть человек который сможет помочь я напишу (и если сумма приемлемая оплачу) что надо (мне сейчас), напишите в личку (есть ли этот спец).
{судя по тому как она используется micros()} так скорее всего и есть, но это под свою среду разработки (ардуино), а что там и как X… его знает.

alekseii

(мысли одна за другой, надеюсь не “одна безумней другой”)
Итак, главное без паники. Про эту функцию, нашёл её, правда толку от этого не много, точнее, главный вопрос, когда в ней происходит перезапуск таймера (аппаратного) не понятно, но с другой стороны, это наверное и не важно. Производится проверка конечных (измеренных) значений, так что, будут каждый 10-ый (например) измеренный пакет “не правильным” да и фиг с ним. Не понял, как на ту же мегу 328 они (мультивийци) умудрились подсоединить 8-мь моторов (именно моторов) мне не понятно, похоже они переключают аппаратные таймеры то на один мотор то на другой (моё предположение). Понял, что (пишу, может кто что “поправит”…) входные сигналы определяются по прерываниям (прерывания PCI).
Главное, похоже у меня не получится собрать этот “адаптер” на уже купленном контроллере m32u4, нужен m2561. С одной стороны ещё потеря двух недель (на заказ и доставку и денег…), но с другой по настоящему, на конец то появляется (так думаю) “свет в конце туннеля” 😃

vik500

Я только что разговаривал со специалистом с ИРИС www.pkpiris.ru в понедельник или вторник надо уже конкретную дать информацию.

vik500

Ну что, мы остановились в нескольких шагах? Я всё таки перешёл на сторону микропроцессора. На простой логике слишком большой огород а урезать нет тогда смысла всё это делать.

btr1209

Алексей вам надо скачать вот от сюда arduino.cc/en/Main/Software вот это Windows ZIP file for non admin install
весит 202 метра и подключит от туда все библиотеки тогда многое заработает более корректно там практически все функции которыми пользуются мультивии есть

там неплохие исходники для управления сервами

alekseii

Виктор, гадать какой будет алгоритм (такой или иной) - гадать без толку !!!
Сделать плату со входами и выходами и подключённым экраном, далее “тупое” (это я про себя:) ) сидение перед изменяющимися цифрами (при изменении положений джойстиков на пульте). Именно так.
По поводу алгоритмов, да он понадобится, но после осознания “увиденных” сигналов (конкретно по поводу программы для адаптера, в ней нет обработки данных ГПС (ГЛОНАСС), в целом, будет гораздо проще). Посоветуетесь, Вам всё расскажут, главное выбрать МК (микроконтроллер) . На самом деле, как я написал, можно (практически) любой МК, в том же хеликоманде (в блоке с “проводами”) стоит старенькая мега48, но надо “с уметь” “запустить” свою программу на на тех так сказать “дровах”. Всё можно сделать, нет аппаратного таймера - “делаем” программный, нет встроенного интерфейса - “пишем” его сами, итд. Как говорится, МК не сможет только кофе сварить 😃 Но для этого нужны знания и опыт. Если его нет - то лучше “взять” современный МК, в котором многое реализовано в “железе”, то есть аппаратно.

alekseii

P.S. есть люди для которых важен процесс управления моделью, а есть для которых важен сам процесс изготовления 😃

vik500

Люди помогите дописать этот бред. Программист видел вертолет только на витрине детского мира, и ему надо рассказать всё до последней мелочи.
Техническое задание для программиста.

  1. В состоянии покоя когда мы не трогаем ручки управления все сигналы на выходе НАЗЫ одинаковые, и они должны повторятся на выходах микроконтроллера 1,2,3,4.

Управление Шаг-Газ
При изменении газа на всех шести выходах НАЗЫ сигналы изменяется одинаково (меняется скважность) и на выходах 1,2,3 нашего микроконтроллера должны быть такие же, но при этом надо учитывать что выход НАЗЫ

М1,М4 управляют выходом 1 микроконтроллера,

М2,М5 управляют выходом 2 микроконтроллера,

М3,М6 управляют выходом 3 микроконтроллера,

То есть у нас здесь три независимых канала.

При изменение длительности импульсов сигнала между выходами НАЗЫ (при развороте) они меняются, на М1,М2,М3, скважность уменьшается а на М4,М5,М6 увеличивается или наоборот это зависит от направления разворота, а на выходах 1,2,3 сигнал не должен меняться.

Управление Курсом

4 канал не зависит от предыдущих трех. Выход 4 микроконтроллера, при изменении газа сигналы на выходе М1, М2, М3, М4, М5,М6 изменяются одинаково а на выходе 4 нашего микроконтроллера сигнал не должен меняться и только при повороте когда сигналы на выходах НАЗЫ М1,М2,М3 будут отличатся от М4,М5,М6 по длительности импульса на выходе 4 длительность сигнала тоже будет меняться. Тем самым будет управление хвостом.

Управление креном.

При изменении сигнала между М2 и М5 а также между М3 и М6 сигнал на выходе 1 и 3 также меняется. (пояснение: на М2 длительность сигнала уменьшается на М5 увеличивается, на М3 увеличивается а на М6 уменьшается то есть сервоприводы должны вращаются в разные стороны)

Управление тангажом.

  1. На все четырёх выходах микроконтроллера надо сделать

а) регулировку конечных точек.

б) регулировку центральной точки.

в) а также реверс.

robis
alekseii:

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

А есть еще те, для кого важно и одно и другое 😉

alekseii:

похоже у меня не получится собрать этот “адаптер” на уже купленном контроллере m32u4, нужен m2561

Почему? Задача Y6=>H3 вроде не архисложная (хотя все относительно), но Вы и сами пришли к выводу, что тип контроллера не сильно важен - иногда можно менять просто подход (например, таймер аппаратный или программный). Можно и на меге 328.
Мне думается, что при выборе МК важнее его вес с обвязкой, размер, цена, доступность, и удобство применения для наших целей (например, возможность менять параметры в поле).

vik500:

Я только что разговаривал со специалистом с ИРИС www.pkpiris.ru в понедельник или вторник надо уже конкретную дать информацию.

Виктор, если Вы ставите задачу программисту, то лучше предварительно определиться с МК (тут важно мнение Алексея, т.к. он ближе всех касался темы). Далее, я тоже готов финансово поддержать этот проект, но не стоит надеяться, что первая версия вот так замечательно и сразу заработает. Практически всегда “всплывают” мелкие и крупные неожиданности как по части постановки задачи так и в программ или сама Наза “выкинет” сюрприз. Обычно бывает несколько версий (~10-30) и за каждую платить?
Поэтому, лучше будет, предварительно согласовать железо (МК), еще раз “вылизать” начальный алгоритм (его надо максимально именно закончить), предать все это дело программисту, ну и сразу договориться о передаче исходников и готовой среды программирования для нас.

P.S. С логикой пока “заминка”. Есть сложности, поначалу показалось, что все проще, но когда нарисовал на бумаге возникли вопросы.

vik500

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

btr1209
vik500:

Люди помогите дописать этот бред. Программист видел вертолет только на витрине детского мира, и ему надо рассказать всё до последней мелочи.
Техническое задание для программиста.

  1. В состоянии покоя когда мы не трогаем ручки управления все сигналы на выходе НАЗЫ одинаковые, и они должны повторятся на выходах микроконтроллера 1,2,3,4.

Будим считать что на входе одинаковые а вот на выходах разные должны быть

vik500:

Управление Шаг-Газ
При изменении газа на всех шести выходах НАЗЫ сигналы изменяется одинаково (меняется скважность) и на выходах 1,2,3 нашего микроконтроллера должны быть такие же, но при этом надо учитывать что выход НАЗЫ

не должны быть такие же , если по уму они должны быть одинаковы в процентном соотношении по отношению к входным

и чтоб было понятней нужно им сразу присвоить имена

vik500:

М1,М4 управляют выходом 1 микроконтроллера,

элеватор

vik500:

М2,М5 управляют выходом 2 микроконтроллера,

элерон

vik500:

М3,М6 управляют выходом 3 микроконтроллера,

пич или шаг (кто как привык)

vik500:

То есть у нас здесь три независимых канала.

При изменение длительности импульсов сигнала между выходами НАЗЫ (при развороте) они меняются, на М1,М2,М3, скважность уменьшается а на М4,М5,М6 увеличивается или наоборот это зависит от направления разворота, а на выходах 1,2,3 сигнал не должен меняться.

плевать на выходы 1,2,3 полетный контролер с механической обратной связью так что это уже проблемы назы если верт даст крен наза выровняет вы и не заметите

vik500:

Управление Курсом

4 канал не зависит от предыдущих трех. Выход 4 микроконтроллера, при изменении газа сигналы на выходе М1, М2, М3, М4, М5,М6 изменяются одинаково а на выходе 4 нашего микроконтроллера сигнал не должен меняться и только при повороте когда сигналы на выходах НАЗЫ М1,М2,М3 будут отличатся от М4,М5,М6 по длительности импульса на выходе 4 длительность сигнала тоже будет меняться. Тем самым будет управление хвостом.

баба яга против на 4 канале то есть руль направления но рудер короче правда, так вот на рудере должен быть постояный сигнал нуля сервы

и по возможности стоб был выбор между 1520 , 760 и третий не помню допишите кто знает это центр сервы значить тоже в процентном прибавляться или отнимается от середины
пример разница между верхним и нижнем составит 10% значит 1520+10%= 1748 это одно направление или 1520-10%=1292 это другое направление итак для всех возможных
серв

vik500:

Управление креном.

При изменении сигнала между М2 и М5 а также между М3 и М6 сигнал на выходе 1 и 3 также меняется. (пояснение: на М2 длительность сигнала уменьшается на М5 увеличивается, на М3 увеличивается а на М6 уменьшается то есть сервоприводы должны вращаются в разные стороны)

мне кажется здесь ошибка как то лишено логике на столе может и так
а воздухе вряд ли кто мерил разве что назовцы М6,3 это один луч М5,2 второй луч логичнее М5,2 убавить а М6,3 добавить газу чтоб получился крен и при этом центр коптёра сохранил свое положение , проверьте плиз свои наблюдения на этот счет

реверс нужен на все 4 канала

vik500:

Управление тангажом.

  1. На все четырёх выходах микроконтроллера надо сделать

а) регулировку конечных точек.

б) регулировку центральной точки.

не вижу необходимости в центральной точке вообще если считаете что нужна объясните зачем то есть практическое применение

vik500:

в) а также реверс.

vik500:

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

программу писать лучше на Си привязываться к контролеру не желательно это проблемы компилятора и если уж платить то код должен быть с пояснялками тогда многие и сами смогут подпилить под себя пример кода

1 ISR(TIMER0_COMP_vect) // Прерывание по совпадению
2{
3 if (servo_state) // Если не нулевое состояние то
{
OCR0 = ServoNextOCR[servo_state]; // В регистр сравнения кладем
4 PORTA &= ~ServoPortState[servo_state]; // Сбрасываем биты в порту, в
//соответствии с маской в массиве масок.