MultiWii
Level I убавь до 0.030 в стаб моде и P убавь до 3.0
вроде лучше стало, даже взлететь удалось, но всеравно брыкается при взлете
видео взлета в acro и stab режимах
буду искать больше места - в комнате чуть взлет и уже куда-то врезаюсь =)
в комнате чуть взлет и уже куда-то врезаюсь =)
Глеб, виброгашение продумайте по лучше, будет летать отменно.
А в руке его клонит в одну сторону или в разные примерно на 50% газа? соответственно вопрос по стаб моде…
зы если в одну сторону, то модуляция (потребуется больше гасить вибрацию), если в разные, то ПИДы настраивать
И попробуй придушить аппу, rc rate поставь наполовину (0.5 кажется), может в этом дело)
Получил моторы, всё собрал) Вылезло 2 проблемы) Один мотор больше всех крутится, один хуже всех) По программе тоже самое, даже если регули не подключены. 2 проблема, сначала глушился, потом перестал) Заводится и молотит, не выключается на дисарм) в чём проблемы? Раньше всё было хорошо) Только пирата записывал на эту ардуину, но щас уже пробовал шить раза 3) Пофигу)
ура, multiwii внезапно полетел у меня о_0 но вот только в акро, в стабе даже взлететь не могу - запускаю моторы, чуть газу и он брыкается пока тупо не переворачивается… а в акро взлетает как по рельсам, настройки никакие не трогал (только гиру загрубил #define ITG3200_LPF_20HZ)
главная проблема стаб. мода это вибрации. Решить можно 2-мя способами: механикой и математикой… я упрямый и люблю второе потому победил вибрации без механики, а коптер мой очень таки вибро… 😃
Уже известная проблема цифровых акселей это перенасыщение (вибрациями в нашем случае). В двух словах если амплитуда вибраций больше выбранного диаппазона акселя, то спектр вибраций урезается и потом уж фильтры не помогут…
www.multiwii.com/forum/viewtopic.php?f=8&t=849&sta…
Потому нужно величивать диаппазон. С ADXL345 по идее все ок. Там +/-8g и резолюшн хороший на этот диаппазон.
Потому проверь следующее:
- раскомменти
#define TRUSTED_ACCZ
-
прижми коптер к полу и плавно увеличивая газ проверь не просядает ли Z ось. Если на месте во всем диаппазоне, то суппер гут. В принципе она не должна просядать в рабочем диаппазоне газа (в моем конфиге это 45-70%… и проваливаться начинает при при 80% с bma020 +/-8g). Если просядает в рабочем диаппазоне то смотри даташит можно ли еще увеличить диаппазон акселя, к примеру на +/-16g (ток незабудь изменить делители в ACC_getADC() и acc_1G). Если уж вибрации диаппазонами акселя не победить, то закоменти #define TRUSTED_ACCZ…
-
увеличь GYR_CMPF_FACTOR до 340.0f - 350.0f
IMU тогда больше смотрит на гиру чем на аксель -
из всех перепробавваных 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;
-
фильтр на гиру подыми хотябы до ITG3200_LPF_42HZ лучше до ITG3200_LPF_98HZ
-
если аппа бюджетная с НК выставь #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
как бы не потерять это всё - теперь в следующий раз попробую полетать уже после НГ
как бы не потерять это всё
давно собираюсь такие моменты-фиксы-воркэрраунды в дневник записывать… видимо пора 😃
видимо пора
rcwiki.ru для этого сделал кто-то из форумчан
за веткой не слежут, поэтому вопрос про OSD назреk - никто никакой OSD не цеплял? например от Syberian с мегапирата (который на hobbyking e-osd сделан)?
код от мегапирата довольно простой, только вот хз как быть с serial портом, на обычной ардуинки он один - варианты: переключение режимов порта через аппу или сотфверный serial
Народ помогите подружить дисплей www.ebay.com/itm/…/230706362193 с мультивии 1.9
Подключаю к плате на меге 2560 к контакту Rx.Включаю питание на дисплее тестовая картинка на 2 секунды появляется ,потом слэш слева вверху.Активирую режим дисплея,слэш пропадает и немного притухает яркость дисплея.На этом все 😦
Народ помогите подружить дисплей
Купленный экран на 19200 бод, а в multiwii стандартом идет 9600…
Купленный экран на 19200 бод, а в multiwii стандартом идет 9600…
Сменить скорость в коде мультивии? Что поправить в коде?
Что поправить в коде?
думаю тут - #define SERIAL_COM_SPEED 115200
Точно Не тут!!! Смотреть раздел про LCD!!!
Точно Не тут!!! Смотреть раздел про LCD!!!
Смотрел ,но что-то напоминающее скорость только это
/ 1000000 / 9600 = 104 microseconds at 9600 baud.
как поменять 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 гр.
Подключаю к плате на меге 2560 к контакту Rx.
судя по документации подключать нужно к контакту Тх
судя по документации подключать нужно к контакту Тх
И это тоже пробывал 😃
ADXL345 по идее все ок. Там +/-8g и резолюшн хороший на этот диаппазон
хотелось бы немножко об акселерометрах поговорить. Как я понял из темы multiwii форума, проблемы с уплыванием связаны с тем, что происходит насыщение выхода акселя под воздействием ВЧ вибраций. Чтобы от этого избавиться, надо увеличивать диапазон полной шкалы (или виброизолировать датчики), т.е, к примеру, если раньше +/- FS достигалась при значениях +/- 1g (FS - полная шкала), то теперь при +|- 8(16) g, но при этом появляется проблема - падает разрешающая способность и как следствие возрастает ошибка определения угла, так?
Данные какой битности использует multiwii для своих расчетов? Где-то мелькала цифра 10 бит. Глянул даташит к adxl345 и bma180. У них 10 и 14 бит, соответственно. Собсно такой вопрос как владельца bma180 - у нас имеется дополнительные 4 бита, т.е. не ухудшая разрешающей способности по отношению к bma020 (10бит) мы можем поднять диапазон измерения Ж до 16 раз. Верно? Если да, то, к примеру, почему бы не сделать +/- FS = +/- 8g? Насколько понял, значение Acc_Z при таких настройках почти у всех уже перестает проседать. Получилось бы более или менее универсальное решение. Поправьте, если вдруг где не прав.
Но это были рассуждения. А теперь главное - как это сделать? - Править регистры, но надо знать что и как править. Никто не сталкивался с уже готовыми кусками кода? Если нет, то придется изучать даташит. О результатах напишу )
хотелось бы немножко об акселерометрах поговорить. Как я понял из темы multiwii форума, проблемы с уплыванием связаны с тем, что происходит насыщение выхода акселя под воздействием ВЧ вибраций. Чтобы от этого избавиться, надо увеличивать диапазон полной шкалы (или виброизолировать датчики), т.е, к примеру, если раньше +/- FS достигалась при значениях +/- 1g (FS - полная шкала), то теперь при +|- 8(16) g, но при этом появляется проблема - падает разрешающая способность и как следствие возрастает ошибка определения угла, так?
дa
Данные какой битности использует multiwii для своих расчетов? Где-то мелькала цифра 10 бит.
Можно хоть 1 бит в теории! 😃 Т.е. мультивии исползует acc_1g переменную для того чеб знать сколько единиц на 1г…
а если по делу: эмпирически для того чеб держать уверенно угол, в идеале достаточно разрешения в 5 единиц на один градус. (90*5=450) + если вы посмотрите на ACC трим, то там как раз калибровка в 0.2 градуса на один шаг-трим.
Более 512 для acc_1g брать не стоит т.к. может быть переполнение… но если хотите больше надо чекать код и менять 16-битные переменные на 32-битные, но это опять же может ударить по перфомансу… т.е. золотая середина уже там 😉
Глянул даташит к 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гц) акселя на тех же коротких промежутках дает более точные значения углов… получилось отлично! надо видива выложить, а то все на словах… 😃
Но это были рассуждения. А теперь главное - как это сделать? - Править регистры, но надо знать что и как править. Никто не сталкивался с уже готовыми кусками кода? Если нет, то придется изучать даташит. О результатах напишу )
для 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 выставить