MultiWii

sulaex
SovGVD:

в комнате чуть взлет и уже куда-то врезаюсь =)

Глеб, виброгашение продумайте по лучше, будет летать отменно.
А в руке его клонит в одну сторону или в разные примерно на 50% газа? соответственно вопрос по стаб моде…

зы если в одну сторону, то модуляция (потребуется больше гасить вибрацию), если в разные, то ПИДы настраивать

Covax

И попробуй придушить аппу, rc rate поставь наполовину (0.5 кажется), может в этом дело)

nsk-racer

Получил моторы, всё собрал) Вылезло 2 проблемы) Один мотор больше всех крутится, один хуже всех) По программе тоже самое, даже если регули не подключены. 2 проблема, сначала глушился, потом перестал) Заводится и молотит, не выключается на дисарм) в чём проблемы? Раньше всё было хорошо) Только пирата записывал на эту ардуину, но щас уже пробовал шить раза 3) Пофигу)

mahowik
SovGVD:

ура, multiwii внезапно полетел у меня о_0 но вот только в акро, в стабе даже взлететь не могу - запускаю моторы, чуть газу и он брыкается пока тупо не переворачивается… а в акро взлетает как по рельсам, настройки никакие не трогал (только гиру загрубил #define ITG3200_LPF_20HZ)

главная проблема стаб. мода это вибрации. Решить можно 2-мя способами: механикой и математикой… я упрямый и люблю второе потому победил вибрации без механики, а коптер мой очень таки вибро… 😃

Уже известная проблема цифровых акселей это перенасыщение (вибрациями в нашем случае). В двух словах если амплитуда вибраций больше выбранного диаппазона акселя, то спектр вибраций урезается и потом уж фильтры не помогут…
www.multiwii.com/forum/viewtopic.php?f=8&t=849&sta…
Потому нужно величивать диаппазон. С ADXL345 по идее все ок. Там +/-8g и резолюшн хороший на этот диаппазон.
Потому проверь следующее:

  1. раскомменти
#define TRUSTED_ACCZ
  1. прижми коптер к полу и плавно увеличивая газ проверь не просядает ли Z ось. Если на месте во всем диаппазоне, то суппер гут. В принципе она не должна просядать в рабочем диаппазоне газа (в моем конфиге это 45-70%… и проваливаться начинает при при 80% с bma020 +/-8g). Если просядает в рабочем диаппазоне то смотри даташит можно ли еще увеличить диаппазон акселя, к примеру на +/-16g (ток незабудь изменить делители в ACC_getADC() и acc_1G). Если уж вибрации диаппазонами акселя не победить, то закоменти #define TRUSTED_ACCZ…

  2. увеличь GYR_CMPF_FACTOR до 340.0f - 350.0f
    IMU тогда больше смотрит на гиру чем на аксель

  3. из всех перепробавваных LPF фильтров лучшие результаты дал флоатовый:
    найди

      accTemp[axis] = (accTemp[axis] - (accTemp[axis] >>4)) + accADC[axis];
      accSmooth[axis] = accTemp[axis]>>4;

и замени на

        static float accTempF[3];
....
        #define lfpFactor 0.987f
        //lfpFactor = 0.9f + constrain(rcData[AUX2]-1000, 0, 990)/10000.0f; // k=0..0.99
        accTempF[axis] = accTempF[axis]*lfpFactor + accADC[axis]*(1.0f - lfpFactor);
        accSmooth[axis] = accTempF[axis];
  • в комплиментарном фильтре используй это же флоатовое значение
    найди
EstG.A[axis] = (EstG.A[axis] * GYR_CMPF_FACTOR + acc) * INV_GYR_CMPF_FACTOR;

замени на

EstG.A[axis] = (EstG.A[axis] * GYR_CMPF_FACTOR + accTempF[axis]) * INV_GYR_CMPF_FACTOR;
  1. фильтр на гиру подыми хотябы до ITG3200_LPF_42HZ лучше до ITG3200_LPF_98HZ

  2. если аппа бюджетная с НК выставь #define DEADBAND 30

  • для этой аппы будет полезна примочка throttle expo… высоту легко держать и летать проще… поищи поиском тут

ах да и ПИД-ы:
roll/pitch: 6.0-0.035-40…45
yaw: 8.0-0.045
level: 7.0-0.015

rcrate: 0.52…0.56

SovGVD

как бы не потерять это всё - теперь в следующий раз попробую полетать уже после НГ

mahowik
SovGVD:

как бы не потерять это всё

давно собираюсь такие моменты-фиксы-воркэрраунды в дневник записывать… видимо пора 😃

SovGVD
mahowik:

видимо пора

rcwiki.ru для этого сделал кто-то из форумчан

SovGVD

за веткой не слежут, поэтому вопрос про OSD назреk - никто никакой OSD не цеплял? например от Syberian с мегапирата (который на hobbyking e-osd сделан)?

код от мегапирата довольно простой, только вот хз как быть с serial портом, на обычной ардуинки он один - варианты: переключение режимов порта через аппу или сотфверный serial

kedrikov

Народ помогите подружить дисплей www.ebay.com/itm/…/230706362193 с мультивии 1.9

Подключаю к плате на меге 2560 к контакту Rx.Включаю питание на дисплее тестовая картинка на 2 секунды появляется ,потом слэш слева вверху.Активирую режим дисплея,слэш пропадает и немного притухает яркость дисплея.На этом все 😦

leprud
kedrikov:

Народ помогите подружить дисплей

Купленный экран на 19200 бод, а в multiwii стандартом идет 9600…

kedrikov
leprud:

Купленный экран на 19200 бод, а в multiwii стандартом идет 9600…

Сменить скорость в коде мультивии? Что поправить в коде?

devv
kedrikov:

Что поправить в коде?

думаю тут - #define SERIAL_COM_SPEED 115200

Covax

Точно Не тут!!! Смотреть раздел про LCD!!!

kedrikov
Covax:

Точно Не тут!!! Смотреть раздел про LCD!!!

Смотрел ,но что-то напоминающее скорость только это
/ 1000000 / 9600 = 104 microseconds at 9600 baud.

devv

как поменять 2 оси у гиры ?
из датчиков только не пиленный MP (3205)

меняю в sensors в самом верху:
#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = X; gyroADC[PITCH] = Y; gyroADC[YAW] = Z;}
на
#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = Y; gyroADC[PITCH] = X; gyroADC[YAW] = Z;}
заливаю. запускаю конфиг, так же (смотрю на цифры в Gyro roll и Gyro pitch) .

Нашел в config внизу, раскомментировал строчку:
#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = Y; gyroADC[PITCH] = X; gyroADC[YAW] = Z;}
не помогает.

Когда пользовал “все в одном” то просто находил в def.h #if defined(ALLINONE) и понимал что всё там (адреса и ориентация)

А простой MP не могу развернуть на 90 гр.

sulaex
kedrikov:

Подключаю к плате на меге 2560 к контакту Rx.

судя по документации подключать нужно к контакту Тх

kedrikov
sulaex:

судя по документации подключать нужно к контакту Тх

И это тоже пробывал 😃

tda2030
mahowik:

ADXL345 по идее все ок. Там +/-8g и резолюшн хороший на этот диаппазон

хотелось бы немножко об акселерометрах поговорить. Как я понял из темы multiwii форума, проблемы с уплыванием связаны с тем, что происходит насыщение выхода акселя под воздействием ВЧ вибраций. Чтобы от этого избавиться, надо увеличивать диапазон полной шкалы (или виброизолировать датчики), т.е, к примеру, если раньше +/- FS достигалась при значениях +/- 1g (FS - полная шкала), то теперь при +|- 8(16) g, но при этом появляется проблема - падает разрешающая способность и как следствие возрастает ошибка определения угла, так?
Данные какой битности использует multiwii для своих расчетов? Где-то мелькала цифра 10 бит. Глянул даташит к adxl345 и bma180. У них 10 и 14 бит, соответственно. Собсно такой вопрос как владельца bma180 - у нас имеется дополнительные 4 бита, т.е. не ухудшая разрешающей способности по отношению к bma020 (10бит) мы можем поднять диапазон измерения Ж до 16 раз. Верно? Если да, то, к примеру, почему бы не сделать +/- FS = +/- 8g? Насколько понял, значение Acc_Z при таких настройках почти у всех уже перестает проседать. Получилось бы более или менее универсальное решение. Поправьте, если вдруг где не прав.
Но это были рассуждения. А теперь главное - как это сделать? - Править регистры, но надо знать что и как править. Никто не сталкивался с уже готовыми кусками кода? Если нет, то придется изучать даташит. О результатах напишу )

mahowik
tda2030:

хотелось бы немножко об акселерометрах поговорить. Как я понял из темы multiwii форума, проблемы с уплыванием связаны с тем, что происходит насыщение выхода акселя под воздействием ВЧ вибраций. Чтобы от этого избавиться, надо увеличивать диапазон полной шкалы (или виброизолировать датчики), т.е, к примеру, если раньше +/- FS достигалась при значениях +/- 1g (FS - полная шкала), то теперь при +|- 8(16) g, но при этом появляется проблема - падает разрешающая способность и как следствие возрастает ошибка определения угла, так?

дa

tda2030:

Данные какой битности использует multiwii для своих расчетов? Где-то мелькала цифра 10 бит.

Можно хоть 1 бит в теории! 😃 Т.е. мультивии исползует acc_1g переменную для того чеб знать сколько единиц на 1г…
а если по делу: эмпирически для того чеб держать уверенно угол, в идеале достаточно разрешения в 5 единиц на один градус. (90*5=450) + если вы посмотрите на ACC трим, то там как раз калибровка в 0.2 градуса на один шаг-трим.
Более 512 для acc_1g брать не стоит т.к. может быть переполнение… но если хотите больше надо чекать код и менять 16-битные переменные на 32-битные, но это опять же может ударить по перфомансу… т.е. золотая середина уже там 😉

tda2030:

Глянул даташит к adxl345 и bma180. У них 10 и 14 бит, соответственно. Собсно такой вопрос как владельца bma180 - у нас имеется дополнительные 4 бита, т.е. не ухудшая разрешающей способности по отношению к bma020 (10бит) мы можем поднять диапазон измерения Ж до 16 раз. Верно? Если да, то, к примеру, почему бы не сделать +/- FS = +/- 8g? Насколько понял, значение Acc_Z при таких настройках почти у всех уже перестает проседать. Получилось бы более или менее универсальное решение. Поправьте, если вдруг где не прав.

все верно, сам пока не понял почему для bma180 до сих пор не подняли разрешение… вроде как на буржуйском сайте кто-то шаманил, поищите…
www.multiwii.com/forum/viewtopic.php?f=8&t=849&sta…
либо не теряйте времени и сделайте по даташиту и закиньте на два форума… если у вас конечно же проблемы с вибрациями… если нет, летайте лучше! 😃 Я так и не научился толком летать 😃
а вот с bma020 уже сложнее, разрешение падает до 64 при диаппазоне +/-8г… по совету ziss_dm применил оверсамплинг с флоат фильтром (поднимает разрешение), далее увеличил вес гиры в ИМУ, т.е. на коротких промежтках времени ИМУ считает угол в основном по гире + оверсамплинг с флоат фильтром (2-3гц) акселя на тех же коротких промежутках дает более точные значения углов… получилось отлично! надо видива выложить, а то все на словах… 😃

tda2030:

Но это были рассуждения. А теперь главное - как это сделать? - Править регистры, но надо знать что и как править. Никто не сталкивался с уже готовыми кусками кода? Если нет, то придется изучать даташит. О результатах напишу )

для bma020

#if defined(BMA020)
void ACC_init(){
  i2c_writeReg(0x70,0x15,0x80);
  uint8_t control = i2c_readReg(0x70, 0x14);
  control = control & 0xE0;
  //control = control | (0x00 << 3); //Range 2G 00
  //control = control | (0x01 << 3); //Range 4G 01
  control = control | (0x02 << 3); //Range 8G 02
  control = control | 0x00;        //Bandwidth 25 Hz 000
  i2c_writeReg(0x70,0x14,control);
  acc_1G = 63;
}

#define DELIMITER 64

void ACC_getADC(){
  TWBR = ((16000000L / 400000L) - 16) / 2;
  i2c_getSixRawADC(0x70,0x02);
  ACC_ORIENTATION(    ((rawADC[1]<<8) | rawADC[0])/DELIMITER ,
                      ((rawADC[3]<<8) | rawADC[2])/DELIMITER ,
                      ((rawADC[5]<<8) | rawADC[4])/DELIMITER );
  ACC_Common();
}
#endif

если хотите оверсамплинг применить то нужно Bandwidth на 190hz выставить

nsk-racer

записал вии на ардуину328, на ней дисарм заработал, но один мотор всё таки быстрее остальных, ещё из проблем, коптер не летает! На полном газе он пытается подняться, прыгает, но тут же глохнет, на секунд 5 всё таки взлетал и рулился как положено, но потом опять заглох! Что это может быть??
Движки эти:
Turnigy D2836/11 750KV Бесколлекторный электро двигатель

Характеристика :
Батарея: 2-3 банки / 7,4 ~ 11,1 вольт
Обороты : 750kv
Максимальный ток: 14А
Ток холостого хода: 0.8A
Максимальная мощность: 210 Вт
Внутреннее сопротивление: 0,160 Ом
Вес: 71 г (включая разъемы)
Диаметр вала: 4мм
Размеры: 28x36 мм
Рекомендуемый пропеллеры : 7.4в - 12x6 , 11.1в - 9x6
Макс тяга: 800 гр.

Регули плюш 18А
на дт-750 всё летало прекрасно, просто один развалился и я решил купить другие моторы взамен. Как мне кажется, что пропадает питание на моторах почему то, почему? Контроллер не выключается, питается от регулей.
позже скину видео этих чудес

native18
nsk-racer:

На полном газе он пытается подняться, прыгает, но тут же глохнет, на секунд 5 всё таки взлетал и рулился как положено, но потом опять заглох! Что это может быть??

Было абсолютно такое поведение на Х-коптере, грешил на аккумулятор. Но когда зарядил, поведение в точности повторилось. Оказалось обрыв одного из проводов в обмотке одного из движков из-за вибрации. Как результат очень малая тяга одной из СУ.
При взлете полетный стабилизатор понимает, что горизонт уходит и глушит работу остальных движков, дабы выровняться. Проверьте тягу всех СУ по отдельности и скорее всего причина быстро найдется.