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

btr1209

Если применить АВР тогда не надо заниматься ерундой нужно все это поручить компьютеру.
И так что мы знаем
1 с назы выходит управляющий сигнал с изменяемой скважностью диапазон приблизительно от 800 до 2100 мили секунд с частотой 400 гц
2 середина для серв приблизительно 1500 мс так же бывает 760 мс и еще один не помню но это сейчас не важно
3 используем схему три коптера по 2 мотора на луч
4 наза поворачивает моторами
5 цифровая серва жрет 200 Гц АП, 300 Гц хвост

теперь что нам нада

1 превратить сигнал с каждого луча для управления сервой
2 газ проще пустить в обход назы
3 добыть сигнал для рудера
4 установка конечных точек АП, для хвоста обычно есть в гироскопе

не надо сочинять велосипед назовцы уже все придумали Виктор это доказал на практике
видео не показывает

vik500
btr1209:

цифровая серва жрет 200 Гц

Цифровая серва прекрасно работает на 400 Гц. Я подключал сервы напрямую к NAZA-M и летал. NAZA-M прекрасно подходит к вертолету и цена в три раза дешевле NAZA-H но есть одно НО не работает автопилот.

robis:

Важно понять на 100%, - в этот момент она “крутит” верхними и нижними одинаково или вернее: фазы на верхнем и нижнем моторе зеркально совпадают или нет.

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

btr1209

1 присваиваем значение переменным элерон=800
2 элеватор=800
3 пич=800
4 рудер=1500
5 лимит низ=800
6 лимит верх=2100
8 М1=лимит низ
9 М2=лимит низ
10 М3=лимит низ
11 М4=лимит низ
12 М5=лимит низ
13 М6=лимит низ
14 считываем длительность импульса с канала М6 и присваиваем значение переменой М6 и переменой а М6=а
15 считываем длительность импульса с канала М3 и присваиваем значение переменой М3 и переменой б М3=б переход в подпрограмму расчета длительности импульса переход на 43 строку
16 присваиваем новое значение пич=с
17 открываем выходной порт для пич настраиваем скорость выдачи 200Гц и передаем значение переменой пич

18 считываем длительность импульса с канала М5 и присваиваем значение переменой М5 и переменой а М5=а
19 считываем длительность импульса с канала М2 и присваиваем значение переменой М2 и переменой б М2=б переход в подпрограмму расчета длительности импульса переход на 43 строку
20 присваиваем новое значение элерон=с
21 открываем выходной порт для элерон настраиваем скорость выдачи 200Гц и передаем значение переменой элерон

22 считываем длительность импульса с канала М4 и присваиваем значение переменой М4 и переменой а М4=а
23 считываем длительность импульса с канала М1 и присваиваем значение переменой М1 и переменой б М1=б переход в подпрограмму расчета длительности импульса переход на 43 строку
24 присваиваем новое значение элеватор=с
25 открываем выходной порт для элеватор настраиваем скорость выдачи 200Гц и передаем значение переменой элеватор

26 сравниваем значение М6 и М3 вычисляем кто больше если М3 значит правый поворот и переход на строку 27 если М6 левый переход на строку 28
27 М3-М6=Хправ1 также присваиваем значение переменой поворот=1 переход строка 29
28 М6-М3=Хлев1 также присваиваем значение переменой поворот=2

29 сравниваем значение М5 и М2 вычисляем кто больше если М2 значит правый поворот и переход на строку 27 если М5 левый переход на строку 31
30 М2-М5=Хправ2 также присваиваем значение переменой поворот1=1 переход строка 32
31 М5-М2=Хлев2 также присваиваем значение переменой поворот1=2

32 сравниваем значение М4 и М1 вычисляем кто больше если М1 значит правый поворот и переход на строку 27 если М4 левый переход на строку 34
33 М1-М4=Хправ3 также присваиваем значение переменой поворот2=1 переход строка 35
34 М4-М1=Хлев3 также присваиваем значение переменой поворот2=2

35 если поворот+поворот1+поворот2=3 то переход на строку 38 пр
36 если поворот+поворот1+поворот2=6 то переход на строку 40 лев
37 рудер=1500 переход на 42 строку
38 (Хправ1+Хправ2+Хправ3)/3=угол.пов
39 1500+угол.пов=рудер переход на 42 строку
40 (Хправ1+Хправ2+Хправ3)/3=угол.пов
41 1500-угол.пов=рудер переход на 42 строку
42 открываем канал рудера настраиваем скорость передачи 300Гц и передаем переменную рудер переход на 14 строку

43 подпрограмма расчета длительности импульса
здесь высчитываем значение для луча (а+б)/2=с
здесь сравниваем результат с лимитами с <= лимит низ если истина присваиваем значение с=лимит низ если лож ничего не делаем
здесь сравниваем с >= лимит верх если истина присваиваем значение с=лимит верх если лож ничего не делаем
возврат

btr1209

недосмотрел нужно заменить на вот эти строки
29 сравниваем значение М5 и М2 вычисляем кто больше если М2 значит правый поворот и переход на строку 30 если М5 левый переход на строку 31
32 сравниваем значение М4 и М1 вычисляем кто больше если М1 значит правый поворот и переход на строку 33 если М4 левый переход на строку 34
39 рудер+угол.пов=рудер переход на 42 строку
40 (Хлев1+Хлев2+Хлев3)/3=угол.пов
41 рудер-угол.пов=рудер

alekseii

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

btr1209

к фазе нужно цепляться если строить на логике если программно то к фазе цепляться не надо замените длительность на скважность может так для вас будет понятнее

зачем видеть что с неё выходит если она сама следит за горизонтом и делает нужные коррекции конкретней что вас смущает в алгоритме данной программы
наша задача из 6 каналов сделать 4

alekseii

Сергей здравствуйте !
Я противник “логики” (в смысле, собирать на отдельных логических элементах, в тоже время, в специализированных микросхемах, например шим контроллеры в блоках питания, логика уже встроена, без неё ни как), по поводу замены длительности на скважность, это да, кому как удобнее.
Зачем видеть что выходит с контроллера, да, в принципе это даром не надо. Но как удастся отстроить программу, не видя что приходит на контроллер, как выполнить масштабирование (соизмерение входных и выходных значений) сигналов. Безусловно, это всё можно просчитать (при достаточном практическом опыте), но на практике (говоря прямо, любителю-самоделкину) без этого “экранчика”, лично я не представляю как это можно сделать.
В программе не то что смущает, (мне знаком язык ассемблер и Си, у Вас другой язык, так мне кажется по “построению” и Вашему написанию, хотя это не важно). Я до конца не понимаю некоторые “тонкости” работы назы. Да, моторы в паре (при развороте) работают - один уменьшил обороты другой наоборот увеличил. Но это при “идеальных” условиях, то есть когда наза находится в “горизонте”. Если идёт болтанка и (или) резкое изменение высоты (например и режим автомат, не ручной) происходят не понятные мне процессы, У одного мотора обороты уменьшаются до одного предела (например -80 единиц) а у другого увеличивается на +130 (а не на +80, как можно было бы предположить) и ещё идёт поправка от крена итд. Предполагаю, это происходит (от части) не корректная отработка (на столе), а в полёте такого происходить не будет или же сама наза в ведёт свои дополнительные поправки. На счёт увеличения на +130 или уменьшения (-80) единиц, это нужно для получения сигнала корректировки на сервы автомата перекоса (и сигнала рудера). Для себя решил, на все эти “мелочи” не обращать, будут “полевые” испытания, они всё и покажут 😃

btr1209

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

vik500

Алексей
Всё управление происходит синхронно то есть если летим в перёд передние двигатели верхний и нижний уменьшают обороты одинаково а задние увеличивают (длинна импульсов на верхних и нижних двигателях одного луча одинаковые на все 100%) изменение происходит при развороте длительность меняется на всех и тоже линейно (одинаково).
Если возьмем горизонтальное висение при идеальных условиях за 100 единиц то при полете вперёд передние верхние и нижние будут 90 ед. а задние 110 ед. если туда добавляем разворот то передние верхние 100 ед. задний верхний 120 ед. и соответственно передние нижние 80 ед. задний нижний 100 ед. так мы летим по кругу.

alekseii

Программу назы - нет ! Для этого надо такую(большую 😃 ) голову иметь, её наверное и один человек вообще не напишет (если он не 10-ть раз гений).
Именно адаптер, но в нём (этом “адаптере”) всё равно придётся “генерировать” все сигналы управления (которые пойдут на сервы, все 5-ть (4-ре для электры, 5-ый сигнал соответственно на регуль мотора) штук). А их настройкой (крайние точки, среднее положение) надо будет заниматься, для этого и надо (желательно) иметь этот маленький экранчик, если это Вы имеете в виду. По крайней мере это моё представление данной затеи.

(длинна импульсов на верхних и нижних двигателях одного луча одинаковые на все 100%)
Виктор, честно говоря ,у меня в голове небольшая каша, в автоматическом режиме у меня получалось именно так как я написал (возможно я действительно ошибаюсь, но получал именно такой результат). У меня и появился большой вопрос, именно при этих разницах в значениях между верхним и нижним моторами одной пары, думаю это при “выворачивании” руля до упора (надо будет перепроверить), а если это так - то ничего страшного не будет, это же не 3Д верт, “газуешь” спокойно, плавно поворачиваешь 😃 и всё будет OK. (каша в голове - “сопротивление” буквально на каждом шагу, думал испытания проводить ещё недели две назад, а на практике нет, не тут то было и когда они будут пока не знаю…)

btr1209

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

То что написал я это быстрей алгоритм чем программа переложите это на СИ и получите основной код адаптера и его можно облетать
средние точки серв нам ненужно нам нужен только максимально допустимые значения верх и низ чтоб не выламывать механику и была возможность настраивать максимальные углы атаки лопастей те же -6 +10 сигнал мотора правильней взять с приемника на прямую а наза будет управлять только шагом

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

vik500
btr1209:

Виктор поднял верт если я правильно понял тупо воткнул место моторов сервы изменил настройки назы и он полетел и даже сам весел.

Да я поднял вертолет с NAZA-M и он прекрасно летает блинчиком и висит в режиме GPS.

youtu.be/nkLHHzAMvK0

robis

понастрочили… 😃

btr1209:

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

Мы вкурсе 😉 Если Вы говорите о фазах программной обработки, то их значения (в нашем случае) мизерны и их величинами можно просто пренебречь, особенно если там будет:

alekseii:

16 гигагерц, для выполнения данной программы будет достаточно, AVR - это сила

(шутка) 😃
Мы говорим лишь о технической возможности.

btr1209:

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

robis:

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

Кто нибудь спорит?
По поводу мусора - не согласен! Именно обсуждение вопросов адаптации Naza-M Lite к вертолету оживило эту ветку и наоборот только способствует поиску решения. Текущая активность говорит об интересе к теме сама за себя.

btr1209:

Виктор поднял верт если я правильно понял тупо воткнул место моторов сервы изменил настройки назы и он полетел и даже сам весел.

Сергей, не надо все валить в одну кучу. Есть два пути решения этой задачи: на логике и программный. Мы с Виктором, пока изучаем первый и есть вероятность, что все получится относительно просто.
Благодаря усилиям и практическим тестам Виктора мы выяснили несколько важных фактов:

  • Вертолет в режиме коптера Y6 нормально стабилизируется, летает и управляется в ручном режиме (при наличии доп. гироскопа на рудере)
  • Наза всегда делает вертолетный разворот в режиме RTH
  • много других “мелочей”, который “всплыли” в процессе обсуждения
    Это исходные данные и необходимый минимум тестов.
    Но, теоретически, я за программный вариант, т.к. это на порядок больше возможностей. Вы написали примерный алгоритм - это замечательно, но еще нужен заинтересованный человек, имеющий опыт работы с AVR в соответствующей программной среде, чтобы доводить все это “до ума” Версия 1.0 никогда не бывает окончательной.
Shnuroker

Добрый день. Не как не получается настроить naza h, может кто то поможет советом. Суть проблемы в том, что при взлете вертолет сильно начинает вилять хвостом, в чем дело не пойму, чувствительность менял,аппа jr pcm9x2, на хвосте серва align ds620, знает может кто в чем дело???

btr1209

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

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

заинтересованное лицо надеюсь у нас есть это Алексей судя по его постам он уже достаточно освоился с АВР но у него может это коммерческий проект

Shnuroker:

Добрый день. Не как не получается настроить naza h, может кто то поможет советом. Суть проблемы в том, что при взлете вертолет сильно начинает вилять хвостом, в чем дело не пойму, чувствительность менял,аппа jr pcm9x2, на хвосте серва align ds620, знает может кто в чем дело???

если в полете перестает то подымите кривую газа из за малых оборотов не хватает производительности хвоста

Shnuroker

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

vik500
btr1209:

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

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

Shnuroker:

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

Уменьшайте чувствительность или регулируйте первоначальное положение лопастей.

robis
btr1209:

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

Упс… я как то упустил это. Виктор, Вы делали реверс серв для тарелки? и что либо кроме назы было добавлено?

btr1209:

заинтересованное лицо надеюсь у нас есть это Алексей судя по его постам он уже достаточно освоился с АВР но у него может это коммерческий проект

Я имел ввиду заинтересованное в нашем хобби. Это для души, на добровольных началах, в свободное время. Мне показалось, что Алексей все же пока начинающий в AVR, но “смотрит” в правильном направлении. Эта задачка простая, но только для программиста с опытом (если уже есть выполненный хотя бы один подобный проект). Мне тоже доводилось писать программки для контроллеров на ассемблере для процессора Z80, правда очень давно.

vik500
robis:

Упс… я как то упустил это. Виктор, Вы делали реверс серв для тарелки? и что либо кроме назы было добавлено?

Я сам не ожидал, но сервы одного производителя при одном и том же сигнале могут крутится в разные стороны, НАЗА здесь не причём и нечего дополнительного я не ставил хотя была мысль поставить микросхему с элементом НЕ.

btr1209

поменяйте местами сервы ивам снова понадобится реверс

vik500
btr1209:

поменяйте местами сервы ивам снова понадобится реверс

Я поменял направление вращения самой сервы.