Квадрокоптер на Arduino DUE

Dmitry_DM

Добрый вечер всем! Все-таки хочется узнать ответ на предыдущий вопрос, я хочу собрать БЛА, но уж простите, не могу найти в том коде где подключение пинов расписано… помогите кто нибудь! не закидывайте помидорами(( заранее спасибо!

Jade_Penetrate

Задается оно в файле output.cpp,
Дело в том, что, по умолчанию, выходные порты привязаны к аппаратным выходам таймера атмеги, хотя есть и программный шим. Поэтому, лучше вам попробовать вывести их на порты аппаратных таймеров вашего процессора, а процедуру инициализации таймеров, и название регисторв заменить на свои. Или делать все на программном шиме, описывается там же, но инициализацию и настройки под свое железо менять придется в любом случае.

AlexeyStn
Dmitry_DM:

не могу найти в том коде где подключение пинов расписано…

Откройте “def.h”.
В нём есть разделы, где определено подключение пинов для разных плат. Они озаглавлены #if defined(PROMINI), #if defined(PROMICRO), #if defined(MEGA) и т.д.
Найдите #if defined(ARDUINO_DUE) и посмотрите, какие функции каким пинам соответствуют.

Samer

Dmitry_DM Я сделал свое управление на 3DRadio модемах.
Из турниги использую батарею , стики и кнопки. В коробке ардуино и модем.
Ардуино считывает данные стиков и кнопок ( свой софт и протокол ) и передает пакеты по 6 байт примерно 10 раз в сек. Другой модем на коптере.
Ардуина в контроле управления принимает пакеты сравнивает контрольную сумму и выдает данные на управление. У тебя слишком большая плата. Делай
на нано версии. И еще совет - акселерометр надо крепить к железной пластине а её на демпферах подвешивать.
До этого был аксель LSM303 , хрень полная . Сейчас поставил MPU6050.
Виброразвязка самое главное.

Dmitry_DM

спасибо всем за ответы! буду пробовать все вышеописанное
отдельное спасибо Samer за то, что я всегда искал…
хотелось бы обсудить где - нибудь детальнее эту конструкцию, но несколько позже, надо хотя бы с нормальным научится
но я не хочу потерять человека, который сделал то, что я хотел, если можно, Samer, оставьте свою почту мне в ЛС

Jade_Penetrate:

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

возможно, это нужно проверить, но есть предположение, что в той версии Multiwii для Due это все продумано, ибо разработчик писал, что все что там написано работает на DUE
брал тут

14 days later
Dmitry_DM

Здравствуйте! В общем, соблюдая все вышеописанные рекомендации, мы все же собрали квадрокоптер… проводка идеальна, вибраций почти нет.
Но, к сожалению, конструкция не взлетела. Теперь опишу все по порядку

  1. Мы сконфигурировали MultiWii_for_DUE вот вся прошивка
    в config.h выбрано только датчики, в файле Output.cpp написано о моторах
#if defined(ARDUINO_DUE)
  uint8_t PWM_PIN[8] = {3,5,6,2,7,8,9,10};      //for a quad+: rear,right,left,front   //+ for y6: 7:under right  8:under left
#endif

а немного ниже

#if defined (ARDUINO_DUE)
   /* Thanks to  */
  #if (NUMBER_MOTOR > 0)
   setPWMpin(34); //PWM L0
   PWMC_DisableChannel(PWM, 0);
  #endif
  #if (NUMBER_MOTOR > 1)
   setPWMpin(36); //PWM L1
   PWMC_DisableChannel(PWM, 1);
  #endif
  #if (NUMBER_MOTOR > 2)
   setPWMpin(38); //PWM L2
   PWMC_DisableChannel(PWM, 2);
  #endif
  #if (NUMBER_MOTOR > 3)
   setPWMpin(40); //PWM L3
   PWMC_DisableChannel(PWM, 3);
  #endif

но мы, почему-то использовали не 3,5,6,2 (ШИМ), а 34,36,38,40 (цифровые) (только в них моторы после подачи питания издавали инициализирующий звук) и переставали пищать каждую секунду.
Так куда нужно втыкать пины мотора?
А так же как понять какой мотор по очереди втыкать: верхний левый, верхний правый, нижний левый, нижний правый?
Теперь в def.h написано

  #define THROTTLEPIN                0  //PIN 62 =  PIN A8
  #define ROLLPIN                    1  //PIN 63 =  PIN A9
  #define PITCHPIN                   2  //PIN 64 =  PIN A10
  #define YAWPIN                     3  //PIN 65 =  PIN A11
  #define AUX1PIN                    4  //PIN 66 =  PIN A12 (DAC0)
  #define AUX2PIN                    5  //PIN 67 =  PIN A13 (DAC1)

это, как я понимаю пины куда втыкать каналы приемника
Опять же: как понять в какой очередности вставлять каналы? По-очереди? С 1 по 6 в А8 по А13?
В общем при подключении нижеописанным образом аппарат не взлетел, даже не ввелся в режим Arming опустив левый стик пульта в нижний правый угол на 2 секунды вот так:

Подключали так:
Приемника R6B 5v. - 5v.
Приемника R6B GND - GND
THR: PIN 62 - A8
ALE: PIN 63 - A9
ELE: PIN 64 - A10
RUD: PIN 65 - A11
AUX1: PIN 66 -DAC0
AUX2: PIN 67 - DAC1

Motor 1: PIN 34 (digital)
Motor 2: PIN 36 (digital)
Motor 3: PIN 38 (digital)
Motor 4: PIN 40 (digital)

MPU6050, BMP085, HMC5883: SCL - SCL
MPU6050, BMP085, HMC5883: SDA - SDA
MPU6050, HMC5883 5v. - 5v.
BMP085 3.3v. - 3.3v.
MPU6050, BMP085, HMC5883 GND - GND

Питание Arduino DUE от BEC Motor 1
Все это показано на картинке:

Пульт настраивали по видео:

Прошу помощи у всех вас! Пожалуйста, помогите разобраться и запустить коптер! Буду благодарен за любую помощь!

еще забыл добавить, что программа Windows GUI for MultiWii версии 2.3 (совпадает с версией для коптера) не смогла соединиться с прошивкой на Arduino, подключенной по USB, при выборе ком порта, и нажатия Connect, оно написало “Connecting MavLink”, затем еще что-то с отсчетом в 24 сек., по истечению которых выдало ошибку

а так же в config.h какой выбрать SERIAL_SUM_PPM в секции 3 - RC SYSTEM SETUP ?
Мы выбирали последний

#define SERIAL_SUM_PPM         PITCH,ROLL,THROTTLE,YAW,AUX1,AUX2,AUX3,AUX4,8,9,10,11 //For some Hitec/Sanwa/Others
LampGraph

Дмитрий, начните уже курить теорию, хотя бы параллельно с практикой. Вот несколько наводящих вопросов разобравшись в которых вы перестанете задавать вопросы которые все называют глупыми и не хотят отвечать:
Что такое PWM? Принцип работы, как устроено в микроконтроллере, каким образом конфигурируется. Для практического закрепления берете светодиод и без всяких библиотек и функций заставляете его моргать с разной частотой. Причем пишете не на виринге, а на C - так понятней будет. Как освоите аппаратный шим, пробуете написать программный.
Что такое PPM? Разбираетесь в протоколе, втыкаете приемник к арудине и пишете программу для считывания сигнала. Тут вам сильно помогут исходники мультивия. После того как сможете самостоятельно считывать - убираете приемник, вместо него втыкаете вторую ардуину и генерируете PPM сигнал.
Как работает бесколлекторный двигатель? Разбираетесь какой сигнал должен подать регулятор на мотор что бы заставить его крутиться. Писать прошивку для регуля необязательно.
Режимы работы и программирования ESC Тут вы узнаете почему, как и когда пищит регулятор.
Далее подключаете к ардуине регулятор и уже с помощью шима заставляете не светодиод моргать, а проводите калибровку регулятора и заставляете крутиться моторы.
Затем подключаете приемник к ардуине и заставляете уже арудину с помощью аппаратуры управлять регуляторами что бы крутить моторы, но при этом вы будете понимать почему так происходит.
Только тогда сможете более-менее понимать исходники прошивки и займетесь наконец вашей задачей - управление коптером с компьютера.
А еще советую раздобыть осциллограф и увидеть все это в живую (PWM, PPM и прочее)
А еще научитесь читать даташиты - тоже полезно.

Dmitry_DM

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

LampGraph:

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

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

LampGraph:

займетесь наконец вашей задачей - управление коптером с компьютера

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

Dmitry_DM

Добрый вечер! Ответьте, кто - нибудь на мои вопросы выше! Очень срочно нужна ваша помощь! Буду благодарен за любую подсказку по поводу “что сделать, что бы аппарат взлетел?”.

LampGraph
Dmitry_DM:

я просто хочу что бы аппарат запустился

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

Dmitry_DM:

но мы, почему-то использовали не 3,5,6,2 (ШИМ), а 34,36,38,40 (цифровые) (только в них моторы после подачи питания издавали инициализирующий звук) и переставали пищать каждую секунду.

Почему они перестали пищать? Подозреваю что на цифровых каналах был высокий уровень, а на 3,5,6,2 его не было.
Инициализирующий звук - это какой именно? Может быть они переходили в режим калибровки?
Почему вы выбрали именно эти пины? Я не случайно написал про PWM, возможно на выбранных вами пинах вообще его нет, возможен только программный и он нигде не написан. Я не хочу за вас читать даташит, но вы сами пишете что воткнули не в шим, а в цифровые пины. А регули с помощью чего управляются? Возможно здесь ответ на ваш вопрос?
Почему регуляторы пищат каждую секунду? Очевидно потому что нет сигнала на входе. Почему его нет? Возможно потому что нет арминга.
Регуляторы с помощью контроллера калибровали?

rual
Dmitry_DM:

Буду благодарен за любую подсказку по поводу “что сделать, что бы аппарат взлетел?”.

Подкинуть вверх?

Dmitry_DM
LampGraph:

Инициализирующий звук - это какой именно?

Сначала такой мелодичный, потом 3 коротких пиков (это вроде как кол-во банок), потом один длинный и замолкают

LampGraph:

Регуляторы с помощью контроллера калибровали?

подключали регуль к 3-му каналу приемника и подавали мин-маск с пульта, они откалибровались, ибо 1 из них (до калибровки) стартовал с 40%, теперь с 0%, т.е калибровка помогла

LampGraph:

читать даташит

ну вот такие там пины
при этом ШИМ: выводы с 2 по 13
На них реализуется 8-битный выход ШИМ с помощью функции analogWrite(). Разрешение ШИМ можно менять, используя функцию analogWriteResolution().
(так на сайте написано)

LampGraph
Dmitry_DM:

подключали регуль к 3-му каналу приемника и подавали мин-маск с пульта

Я спросил про калибровку с помощью контроллера, т.е. при подключении с ардуине с залитой прошивкой мультивий.
Дело в том, что арминг зависит от многих параметров (например, от калибровки компаса), а калибровка регуляторов - от правильности подключения.

Dmitry_DM:

при этом ШИМ: выводы с 2 по 13
На них реализуется 8-битный выход ШИМ с помощью функции analogWrite(). Разрешение ШИМ можно менять, используя функцию analogWriteResolution().

Еще раз спрашиваю: вы разобрались каким образом управляется регулятор? Как регулируется скорость вращения моторов?

Dmitry_DM
LampGraph:

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

не делали… я даже до сих пор не уверен, что регули надо подключать к 3,5,6,2

LampGraph:

например, от калибровки компаса

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

LampGraph:

калибровка регуляторов - от правильности подключения

что подразумевается под “правильностью?”

LampGraph:

вы разобрались каким образом управляется регулятор? Как регулируется скорость вращения моторов?

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

ssilk
Dmitry_DM:

походу я вообще ничего не знаю

Золотые слова…) Вам уже раз 50 сказали, что нужно сначала изучить вопрос, вникнуть, понять что и как работает, а уж потом собирать все в одну кучу…
Для начала, разберитесь в принципе работы и назначении сервомашинок, или рулевых, в другой интерпретации… В радиоуправлении очень многое строится именно на работе серво, в том числе и регуляторы оборотов…
Изучите ШИМ в принципе, безотносительно к радиоуправлению и моделизму вообще, потом найдите связь между ШИМ и сервоприводом… На практике, научитесь управлять сервами с помощью ардуины, предварительно оценив работу сервы от пульта и приемника…
В идеале, начинать бы надо с понимания, что мультикоптер это программно-аппаратный эмулятор ротора вертолета…) Циклический и коллективный шаги ротора вертолета тоже управляются сервами…
Ну и, все, что Вам выше рекомендовали тоже надо изучать…

rual
ssilk:

На практике, научитесь управлять сервами с помощью ардуины, предварительно оценив работу сервы от пульта и приемника…

Вот! Очень правильный совет. Прислушайтесь, Дмитрий.
Кроме того, иногда (у меня как правило) разбираться в чужом коде сложнее чем написать свой.