ArduCopter Mega: порт на обычную Arduino (тестим)

Mark_Kharkov
kren-DEL:

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

Магнитное поле проходит всегда (если не брать случай с сверхпроводниками, но это не про коптеры), его только можно ослабить в той или иной степени специальными экранами. Физику Вы не обманите никак.
Да, есть такое понятие как магнитное экранирование. Наберите в гугле. Почитать можно об этом например тут:
www.femto.com.ua/articles/part_1/2064.html
И вообще тема магнитного экранирования довольно сложная, забираться в такие дебри не рекомендую, уж поверьте, что разместить по-другому компоненты или вынести компас в любом случае будет не только проще, но и легче.
Что в коптере является источниками сильных магнитных помех? -

  1. силовые провода от регулей к движкам. При чем магнитное поле испульсное (т.к. работает ШИМ).
  2. силовые провода от аккумулятора к регулям.
  3. Сами регули (в них же есть проводники тока и большие силы тока - значит есть и сильное магнитное поле).
  4. Сам аккумулятор. Почему? Все просто - в нем тоже есть внутри проводники и токи очень большие под нагрузкой коптера.
    Да, даже в тех же компьютерных колонках делается “магнитное экранирование” (что на деле означает что магниты накрыты хорошо проводящем магнитное поле проводником, поэтому очень небольшая часть магнитного поля выходит “наружу”). Такой способ действительно довольно эффективен. В винчестерах принцип экранирования похожий.
    А теперь в реалиях коптера: заэкранировать от магнитного поля сам мозг - нельзя, т.к. магнитометр же должен “чуять” поле земли.
    Заэкранировать все силовые провода + регули + аккумулятор = вес экранов будет больше самого коптера. Оно такое надо? Нет.
    Поставить 1 ну пластинку и думать что это сильно поможет - не поможет. Не верите? Возьмите листик бумаги, нарисуйте в нем в масштабе 1:5 силовую проводку коптера, откройте учебник физики, посмотрите как должны проходить “силовые линии” магнитного поля от проводки, нарисуйте их на бумаге. А теперь добавьте туда на рисунок пластинку, и посмотрите, какое количество этих линий она будет пересекать и сколько линий останется. Останется либо бОльшая часть, либо вес будет саавсем не приличным.
    Думаете почему многие выносят компасы “подальше”? Это самый простой, проверенный и действенный способ избавиться от этого влияния. Все остальное - полумеры. А где полумеры - там будут рано или поздно глюки. А потом в очередной раз думать “из-за чего коптер упал в лойтере?”.

P.S. Это как раз тот случай, когда “обчинка не стоит выделки” и пытаться изобретать велосипед - неблагодарное занятие. На своих коптерах всегда взял за правило не ближе 10см силовая проводка от магнитометра мозгов коптера при токах до 30А (на 1н регуль/двиг) и не ближе 15см при токах в 100 и более ампер. Пока-что нормально и глюков не наблюдалось.
P.P.S. Есть еще много разных полумер: например специальным образом прокладывать и скручивать проводку, что бы создаваемое магнитное поле от каждого проводника гасило друг друга, и результирующее поле было слабым. Можете погуглить и попробовать. Собственно сам от этого отказался, чем проще способ - тем надежней.

masteryoda

2 Sir Alex:

Вопрос по 3.0.1, как сейчас в UserCode использовать Serial1? Суть в том, что мне нужно на Serial1 выводить определенную строку с частотой 10Гц. Как я понимаю в инициализации раньше достаточно было написать Serial1.begin(38400). Сейчас ошибка: error: ‘Serial1’ was not declared in this scope
Как быть?

TRAHOMOTO
limon_spb:


Почему тут схема такая, а в инструкции криуса она перечеркнута красным 😃

В первой версии (1.0, 0.1 …) плат на ней стоял линейный стабилизатор, который очень сильно грелся и горел делая из 12В -> 5В (кажется) … поэтому и приводятся разные схемы подключения.

limon_spb:


К каким rx и tx подключаться то.

Подключаться к тому Serial на который у Вас подлючен 3DRadio modem, при этом:

  • Если у Вас есть модем - объединяете rx модема и rx MinimOSD, а tx osd вынимаете из колодки совсем
  • Если у Вас нет модема - rx MinimOSD к tx контроллера, tx контроллера к rx OSD
limon_spb:


Слышал надо при этом что-то в планере поколдовать

Ничего не нужно

limon_spb:


В каких случаях нужно скачивать доп программу для настройки OSD.

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

limon_spb:


Что за загадочные джамперы с заклинаниями DVDD и AVDD, DGND, AGND.

Т.к. плата по сути состоит из двух частей, аналоговой на MAX и цифровой Mega 328, то дабы исключить помехи они разделены и:

  • DVDD - (digital vdd) питание цифровой части
  • AVDD - (analogue vdd) питание аналоговой части
  • DGND - (digital ground) земля (минус если хотите) цифровой части
  • AGND - (analogue ground) земля аналоговой части

Как правило (судя по сообщениям на форуме) практически все моделисты запаивают эти джамперы и питают всю OSD 5В и не кашляют. Я сделал так же.

SovGVD
TRAHOMOTO:

Ничего не нужно

писали давно, что чето нужно, иначе данные пропадают периодически, да и к rx можно будет не подключать
мне всё лень было, но при полетах периодически “картинка” OSD пропадает и написано о том что ждет данных, при этом значек “сердцебиения” протокола мыргает стабильно
прошивка дефолтная, ибо extra упорно не хочет работать у меня почему то

DVE
Mark_Kharkov:

P.S. Это как раз тот случай, когда “обчинка не стоит выделки” и пытаться изобретать велосипед - неблагодарное занятие. На своих коптерах всегда взял за правило не ближе 10см силовая проводка от магнитометра мозгов коптера при токах до 30А (на 1н регуль/двиг) и не ближе 15см при токах в 100 и более ампер. Пока-что нормально и глюков не наблюдалось.

+100.

Сколько ни возился с проводкой, скруткой и пр, эффект минимален, возня того не стоит. Контроллер выносим вверх на стойках, и все, никаких проблем, дешево и сердито.

Sir_Alex
masteryoda:

Вопрос по 3.0.1, как сейчас в UserCode использовать Serial1? Суть в том, что мне нужно на Serial1 выводить определенную строку с частотой 10Гц. Как я понимаю в инициализации раньше достаточно было написать Serial1.begin(38400). Сейчас ошибка: error: ‘Serial1’ was not declared in this scope Как быть?

С сериал1 есть небольшая трудность. Дело в том, что HAL прячет от нас реализацию Сериал порта. Т.е. вся работа должна идти через hal. Но Ардукоптеровцы предусмотрели только три порта 0, 2, 3 ((

Я посмотрю, можно ли добавить еще один сериал в HAL…

Shuricus:

А все таки как можно выводить расход батареи в mah а не в процентах в минимОСД?

Ну по идее, AC рассчитывает mAh, но понимает ли это OSD - я не в курсе, у мну пока нет OSD. Возможно надо например обновить прошивку или через программу настройки, сказать показывать не % а ток…

Shuricus

Спасибо Алекс. Удалил пост, потому что нашел - в пререлизе это теперь переключается в закладке Конфиг!

TRAHOMOTO
SovGVD:

писали давно, что чето нужно, иначе данные пропадают периодически, да и к rx можно будет не подключать
мне всё лень было, но при полетах периодически “картинка” OSD пропадает и написано о том что ждет данных, при этом значек “сердцебиения” протокола мыргает стабильно
прошивка дефолтная, ибо extra упорно не хочет работать у меня почему то

Месяца три назад перечитывал эту тему с первой страницы 2 дня и если честно не припоминаю (может и упустил) ничего похожего. Я свой ОСД брал на dx.com (v 0.1), запаял перемычки для питания от 5В, прошивал minimosd-extra через донгл на чипе CP2103 нажимая перед прошивкой Reset пальцем 😃. Далее залил шрифты, немного подвигал показания и потом подключил так как описал, игрался денек другой … показания не пропадали 😃. НО! вполне возможно что мне повезло.

SovGVD

Вот extra у меня никак не захотела работать почему то, заливал тоже в 0.1 с запаянными перемычками (брал на али), залил шрифты, настроил, подключил, но никакие показания не менялись на экране (например наклон коптера никак не отражался на авиагоризонте)… и заливал через arduino ide, мне надо было скорость порта поменять.
Забил, влил обычную версию, до сих пор работает, но со сбоями, уже даже привык и не напрягает =) Скоро ардуфлаер будет, попробую с ним, хотя на 99.9% уверен что проблема в OSD где то, т.к. пират то mavlink стабильно отдает, да и куча версий уже поменялась, а osd всё так же тупит.
А тут где то проскакивала толи ссылка, то ли еще чего, на описание того что надо в настройках прописывать, для гарантированной работы.

masteryoda
Sir_Alex:

С сериал1 есть небольшая трудность. Дело в том, что HAL прячет от нас реализацию Сериал порта. Т.е. вся работа должна идти через hal. Но Ардукоптеровцы предусмотрели только три порта 0, 2, 3 ((

Я посмотрю, можно ли добавить еще один сериал в HAL…

Тогда, как реализовать задачу иным путем. В принципе порт можно использовать и другой, например 3, второй занят GPS. На 2.8 я на основе кода для Ремзиби ОСД решал проблему. Сейчас все стало сложнее для меня. Ткните пальцем, плиз.

limon_spb
pilot01:

На хабре статья была. Там парень сигналы обычной логики на 40м отправлял и успешно принимал. А здесь (General Purpose Logic - ведь оно?) отмечено всего пол метра…

TRAHOMOTO:

…Я сделал так же.

Спасибо!

Sir_Alex
masteryoda:

Тогда, как реализовать задачу иным путем. В принципе порт можно использовать и другой, например 3, второй занят GPS. На 2.8 я на основе кода для Ремзиби ОСД решал проблему. Сейчас все стало сложнее для меня. Ткните пальцем, плиз.

Скиньте мне свой код, я посмотрю как его прикрутить.

masteryoda

Ничего заумного, просто строка о состоянии коптера:

void userhook_init()
{
    // put your initialisation code here
    // this will be called once at start-up
    Serial1.begin(38400);
}

void userhook_MediumLoop()
{
    // put your 10Hz code here
  Serial1.print("$LED,");
  Serial1.print(current_loc.alt/100,DEC);
  Serial1.print(",");
  Serial1.print(control_mode);
  Serial1.print(",");
  Serial1.print(ahrs.roll_sensor/100,DEC);
  Serial1.print(",");
  Serial1.print(ahrs.pitch_sensor/100,DEC);
  Serial1.print(",");
  Serial1.print(motors.armed());
  Serial1.println("#");
}
pilot01
SovGVD:

Вот extra у меня никак не захотела работать почему то, заливал тоже в 0.1 с запаянными перемычками (брал на али), залил шрифты, настроил, подключил, но никакие показания не менялись на экране (например наклон коптера никак не отражался на авиагоризонте)… и заливал через arduino ide, мне надо было скорость порта поменять.
Забил, влил обычную версию, до сих пор работает, но со сбоями, уже даже привык и не напрягает =) Скоро ардуфлаер будет, попробую с ним, хотя на 99.9% уверен что проблема в OSD где то, т.к. пират то mavlink стабильно отдает, да и куча версий уже поменялась, а osd всё так же тупит.
А тут где то проскакивала толи ссылка, то ли еще чего, на описание того что надо в настройках прописывать, для гарантированной работы.

Такая же фигня была пока где-то в опциях планера (Enable OSD) не выбрал и сразу все заработало (нашел вроде тут MissionPlanner -> Hardware Options кнопка “Enable Telemetry”)

limon_spb:

На хабре статья была. Там парень сигналы обычной логики на 40м отправлял и успешно принимал. А здесь (General Purpose Logic - ведь оно?) отмечено всего пол метра…

Спасибо!

Не думаю что тот парень со скоростью 10 Мбит в сек кнопки нажимал =) тут важна частота (скорость обращения) и характеристики кабеля (pF/m пикофарад на метр).

Sir_Alex:

С сериал1 есть небольшая трудность. Дело в том, что HAL прячет от нас реализацию Сериал порта. Т.е. вся работа должна идти через hal. Но Ардукоптеровцы предусмотрели только три порта 0, 2, 3 ((

Я посмотрю, можно ли добавить еще один сериал в HAL…

Ну по идее, AC рассчитывает mAh, но понимает ли это OSD - я не в курсе, у мну пока нет OSD. Возможно надо например обновить прошивку или через программу настройки, сказать показывать не % а ток…

Можно

Летаю на версии MinimOSD-Extra_Copter_Pre-release_2.4_r682.hex в настройках OSD (CT Tool for MinimOSD Extra 2.3.0.8 Pre Release r676.zip) есть опция выбора % или mah.
Правда MinimOSD v 1.1 c 3drobotics незнаю как с остальными дела

SergDoc
Sir_Alex:

Но Ардукоптеровцы предусмотрели только три порта 0, 2, 3 ((

это тоже эфемерные названия, где-то есть настройка, какой из портов 0, какой 2, а какой 3, это из-за px4 там первый порт занят осью, а остальные так же настраиваемые в зависимости от конфига там и usart5 может быть 2-м или 3-м…

Sir_Alex
SergDoc:

это тоже эфемерные названия, где-то есть настройка, какой из портов 0, какой 2, а какой 3, это из-за px4 там первый порт занят осью, а остальные так же настраиваемые в зависимости от конфига там и usart5 может быть 2-м или 3-м…

Да я в курсе, но вопрос в том, как завести 4й порт ))) Базовый класс HAL подразумевает только 3 порта.

SergDoc

не тут?

#ifndef __AP_HAL_HAL_H__
#define __AP_HAL_HAL_H__

#include "AP_HAL_Namespace.h"

#include "../AP_HAL/UARTDriver.h"
#include "../AP_HAL/SPIDriver.h"
#include "../AP_HAL/AnalogIn.h"
#include "../AP_HAL/Storage.h"
#include "../AP_HAL/Console.h"
#include "../AP_HAL/GPIO.h"
#include "../AP_HAL/RCInput.h"
#include "../AP_HAL/RCOutput.h"

class AP_HAL::HAL {
public:
    HAL(AP_HAL::UARTDriver* _uartA,
        AP_HAL::UARTDriver* _uartB,
        AP_HAL::UARTDriver* _uartC,
        AP_HAL::I2CDriver*  _i2c,
        AP_HAL::SPIDeviceManager* _spi,
        AP_HAL::AnalogIn*   _analogin,
        AP_HAL::Storage*    _storage,
        AP_HAL::ConsoleDriver* _console,
        AP_HAL::GPIO*       _gpio,
        AP_HAL::RCInput*    _rcin,
        AP_HAL::RCOutput*   _rcout,
        AP_HAL::Scheduler*  _scheduler,
        AP_HAL::Util*       _util)
        :
        uartA(_uartA),
        uartB(_uartB),
        uartC(_uartC),
        i2c(_i2c),
        spi(_spi),
        analogin(_analogin),
        storage(_storage),
        console(_console),
        gpio(_gpio),
        rcin(_rcin),
        rcout(_rcout),
        scheduler(_scheduler),
        util(_util)
    {}

    virtual void init(int argc, char * const argv[]) const = 0;

    AP_HAL::UARTDriver* uartA;
    AP_HAL::UARTDriver* uartB;
    AP_HAL::UARTDriver* uartC;
    AP_HAL::I2CDriver*  i2c;
    AP_HAL::SPIDeviceManager* spi;
    AP_HAL::AnalogIn*   analogin;
    AP_HAL::Storage*    storage;
    AP_HAL::ConsoleDriver* console;
    AP_HAL::GPIO*       gpio;
    AP_HAL::RCInput*    rcin;
    AP_HAL::RCOutput*   rcout;
    AP_HAL::Scheduler*  scheduler;
    AP_HAL::Util*       util;
};

#endif // __AP_HAL_HAL_H__

    AP_HAL::UARTDriver* uartA;
    AP_HAL::UARTDriver* uartB;
    AP_HAL::UARTDriver* uartC;
    AP_HAL::UARTDriver* uartD;

до самого арду ещё не долез, у нас пока с nuttx напряги 😦

kren-DEL
kren-DEL:

пробовал повторить сбой FS

Что скажите, Sir Alex? Это нормальная работа FS?

Sir_Alex
kren-DEL:

Что скажите, Sir Alex? Это нормальная работа FS?

Да, это нормально. Отключить RTL после сбоя можно только передернув режим (как бы мы говорим что все ОК, я у руля). А то что потом сработал дизарм - то же правильно. На земле, срабатывает LAND и тут же дизарм, т.к. коптер уже на земле. Короче, все как и задумано в ArduCopter, ну можно еще почитать у них на сайте, про ньюансы FS.

masteryoda

Sir Alex, как дела с портами? Есть ли идеи? Мне 1 порт не принципиален, можно и 3. Только в какую сторону копать?

SovGVD
masteryoda:

Только в какую сторону копать?

А нельзя брать данные из MAVlink протокола?