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

robis

Виктор, вероятно мы сможем получить сигналы для серв на простой логике, а вот с рудером сложнее - придется учитывать все шесть каналов. Надо подумать по первой и второй части.

vik500
robis:

а вот с рудером сложнее - придется учитывать все шесть каналов.

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

btr1209

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

alekseii

Надо сразу “предусмотреть” выходы на сервы не только на тарелку перекоса, но и на газ и рудер. Микроконтроллер - мега32u4 (например). У него 4-е таймера, на трёх (2-ух) таймерах легко будет организовать все (5-ть) выходы-шим (для управления сервами, с любой частотой и длительностью). И один таймер (8-ми разрядный) для определения длительностей входных сигналов. В принципе, сразу распаивать практически ничего не надо, есть маленькие платы с распаянными микроконтроллером, кварцем и всякой мелочёвкой.
Так что нужен программист (действующий, кто “в теме”) и всё (не считая заведомо и прямо пропорционально опыту программиста (инженера) потраченного времени и денег…).
Проблема в том (моё видение), что нельзя полностью смоделировать работу назы на столе. Хотя, возможно для отработки “на столе” будет достаточно ручного режима назы (автомат на столе не работает). Далее, собрав и запрограммировав, настраивается подключенный, свой, контроллер по предварительно “подключённому” маленькому экранчику (DV датавизион из чип и дипа за 300 руб или такой же экранчик но с rs232 интерфейсом) или сделанному подключению по USB к компу с интерфейсной прогой (как на назе 😃 ) и всё, на полётные испытания 😃
Размеры готового изделия (распаянного в резоните, например) будет 3-и на 4-е сантиметра и 5-ть мм толщиной (вес 10-15 гр). В работе с контроллерами есть много тонкостей, знание особенностей программы-среды разработки, знание языка программирования и наверное самое главное это знание алгоритмов работы), ничего сложного но пока в них не разберешься не получится НЕ ШИША !
Так что для начала необходимо выбрать микроконтроллер (я выбрал указанный AVR) с “наличием” аппаратных таймеров (их можно организовать и программным способом, но зачем лишний геморрои), да и встроенный USB “лишним” не будет. За частотой думаю гнаться не нужно (16 гигагерц, для выполнения данной программы будет достаточно, AVR - это сила 😃 ). Второе, нужно устройство вывода (в реальном времени) заданных параметров (длительностей входных сигналов, выводов сигналов коррекции, скорректированных сигналов, а также сигналов для оконечной настройки на верте).
Так что для начала - контроллер с подсоединённым устройством вывода и подсоединённой назой (все шесть каналов). Пишется программа с фрагментом кода который только будет распознавать длительности входных сигналов (ни какая фаза там даром не нужна, извиняюсь). В этом фрагменте необходимо правильно рассчитать частоту выборок и конкретно время на обработку подпрограммы прерывания, для программиста (без неё никак скорее всего не получится) а дальше ручку, бумагу и заниматься “обработкой” полученных данных.
(сам пока “разбираюсь” с этими особенностями, уж что то их слишком много…)

vik500
alekseii:

Так что нужен программист (действующий, кто “в теме”)

Программиста в теме мы не найдем!!!

alekseii:

необходимо выбрать микроконтроллер

Давайте выбирать я в этом не специалист или

vik500:

отдать инженеру

alekseii:

нужно устройство вывода

Это NAZA у нас есть.

alekseii:

самое главное это знание алгоритмов работы

Вот это мы должны предоставить программисту!!!
То есть техническое задание (что мы хотим получить и как это работает)

robis
btr1209:

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

Сергей, Вы все верно говорите - безусловно понадобится двух лучевой осциллограф. Виктор вероятно изыщет такую возможность. Там все должно быть более-менее линейно, кроме участков с разворотами, из-за того, что Наза резко “подруливает” моторами в начале разворота. Важно понять на 100%, - в этот момент она “крутит” верхними и нижними одинаково или вернее: фазы на верхнем и нижнем моторе зеркально совпадают или нет. Если повезет и это так, то вариант на логике можно будет назвать простым и элегантным решением.

vik500

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

robis

Виктор, Вы не совсем уловили - они могут не совпадать специально, если это (к примеру) требуется для поддержания ровного висения на разворотах. Например, если верхние моторы уменьшают скорость вращения, то нижние должны увеличить и возможно зависимость будет не линейной, или могут запускаться раньше или позже. В общем х.з. - лучше взять Назу и сходить туда, где есть осциллограф с двумя входами. Если фазы совпадут на 100, то с логикой проблем не будет.

btr1209

Ребята не надо забывать что любой компьютер может выполнять только одно действие в один момент времени , просто он делает это быстро и нам кажется что комп делает все сразу.
Авр пик контролеры наза и прочее это тот же комп и работают все одинаково поэтому и надо посмотреть как это все выглядит если этого не знать дальнейшее обсуждение тол ко мусорит ветку, значит засинхронизироватся надо от любого мотора можно взять и М1 и относительно его посмотреть как все выглядит.
Пример
__-__ верхний если такой вариант или __—__ такой
__–_ нижний тататататататат атататат __-___ (татата заполнитель для форматирования)
то смысл есть заморачиватся с логикой

в общем надо посмотреть что происходит в реале это если сочинять на логике

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 кнопки и один джампер для переключения цифровые или аналоговые сервы АП две для настройки нижнего предела и две для верхнего остальное написали назовцы