Crius Hobby MultiWii
О! Глеб! Велкам бэк!
=) да, я воскрес из бана
у меня у одного ощущение что adxl345 работает лучше чем bma180? просто на трешку ставил 2 мозга с одной и той же прошивкой (один и тот же вариант крепления, один и теже пропы, аккум и т.д., даже гира та же, отличия только в акселе)
- seeduiono mega +allinone (там 180 аксель бошевый, вроде бы) - летал нормально, но то горизонт уплывает, то колбасит немного и удержать трудновато
- crius lite - там adxl345 - летает на 5+, а дома просто на 5 - если бы не кривой проп (шмякнулся, проп погнуло, выпрямил руками дальше полетел), висел бы как прибитый, а так в сторону сломанного пропа тянуло вчера
- аналогично квадрик есть с itg3205+adxl345 - очень адекватное поведение, не смотря на заведомо дешевые и кривые пропы
завалялся лишний 345 в закромах, хочу на досуге прикрутить его к 1 варианту, который сейчас на Y6 стоит (надеюсь bma180 будет не против тупо повисеть на i2c шине)
зы: за баномесяц разочаровался в y6, не интересуюсь квадриком и в диком восторге от трикоптера
И давайте еще раз расставим все точки на i, чтобы не было вопросов по поводу GPS и платок на 328p чипе (crius)
чтобы работал GPS есть 2 пути (наличие компаса обязательно)
-
отрубить всё что связано с работой с COM портом и на него перевесить GPS
плюсы: нужен только UART GPS,
минусы: полностью в пролете GUI, экранчики, OSD (хотя можно, если OSD работает на той же скорости что и GPS) и прочее что подключается к единственному Serial порту -
подключить связку UART GPS с 328p к crius через i2c шину по проекту code.google.com/p/i2c-gps-nav/ (например GPS приемник + arduino pro mini)
плюсы: уменьшаем время цикла, т.к. GPS работа возлагается на другой процессор, crius работает в полнофункциональном режиме без каких либо оговорок, GPS код в будущем поддерживает полет по точкам
минусы: надо докупать еще минимум 328p чип с обвязкой или любую из arduino на 328p или выше
на данный момент код от EOSBandi (code.google.com/p/i2c-gps-nav/) работает на основе кода из ArduCopter2 (ВНИМАНИЕ! требует другая библиотека i2c, поэтому для проекта лучше поставить еще одну arduino ide, если не обновить - работать не будет, вообще никак, даже если с бубном плясать)
примеры удержания позиции (код постоянно меняется, так что может быть это уже не актуально!)
пример возврата домой (коптер чуток перелетел, но потом вернулся куда надо)
всё это актуально для ЛЮБОГО Multiwii контроллера
у меня у одного ощущение что adxl345 работает лучше чем bma180?
как раз хотел написать про adxl345, который долго пролежал в загашнике… такой как тут… первый вариант (синий)
на днях подрубил его, и ужаснулся… значения в ГУИ прыгают +/-3…6 до фильтрации (МОТОРЫ ВЫКЛЮЧЕНЫ), +/-1…2 после филтрации (через флоат фильтр с фактором 100… т.е. смотреть на а2 прошивке в ГУИ)… у всех так?! либо бывают левые 345-ки?
пробовал вешать доп. кондеры (100мкф и 0.1мкф) на шину питания акселя… безрезультатно! в сравнении с bma020 (который я ругал) горизонт держит мягко гря херово!
игрался с внутренними фильтрами и понял что он нихера не усредняет самплы которые отдает (bma020 это делает!)… т.е. к примеру если частота дискретизации 50герц (т.е. как сейчас rate=50hz, bw=25hz), то это тупо raw значения снятые с сенсора 50 раз в секунду, а не усредненные промежуточные значения как предполагалось. Т.е. внутреннего ФНЧ там просто нет. Легко проверить если выставить ему дискретизацию в 0.5-1hz и будет хорошо видно как значения прыгают на +/-3…6 при разрешении 16g.
Потому один выход чтобы хорошо отфильтровать этот аксель, надо поднимать частоту дискретизации чтобы усреднить шум отфилтровав его ардуиной…
вобщем В ГУИ почти полностью получилось убрать шум так:
Sensors.pde
#if defined(ADXL345)
void ACC_init () {
delay(10);
i2c_writeReg(ADXL345_ADDRESS,0x2D,1<<3); // register: Power CTRL -- value: Set measure bit 3 on
// i2c_writeReg(ADXL345_ADDRESS,0x31,0x0A); // register: DATA_FORMAT -- value: Set bits 3(full range) and 1 0 on (+/- 8g-range)
i2c_writeReg(ADXL345_ADDRESS,0x31,0x0B); // register: DATA_FORMAT -- value: Set bits 3(full range) and 1 0 on (+/- 16g-range)
//i2c_writeReg(ADXL345_ADDRESS,0x2C,0x06); // rate=6.25hz, bw=3.13hz (see table 7 of the spec)
//i2c_writeReg(ADXL345_ADDRESS,0x2C,0x07); // rate=12.5hz, bw=6.25hz (see table 7 of the spec)
//i2c_writeReg(ADXL345_ADDRESS,0x2C,0x08); // rate=25hz, bw=12.5hz (see table 7 of the spec)
//i2c_writeReg(ADXL345_ADDRESS,0x2C,0x09); // rate=50hz, bw=25hz (see table 7 of the spec)
//i2c_writeReg(ADXL345_ADDRESS,0x2C,0x0A); // rate=100hz, bw=50hz (see table 7 of the spec)
i2c_writeReg(ADXL345_ADDRESS,0x2C,0x0B); // rate=200hz, bw=100hz (see table 7 of the spec)
acc_1G = 128;
}
НО альт холд девятых версий работать не будет скорее всего, т.к. в расчет берется вертикальное ускорение снятое с акселя…
У кого с 345 не держит или плохо держит горизонт попробуйте этот фикс и отпишитесь плз.
По первому пункту:
- не вникал, но мот по этому варианту уже есть прогресс… посмотри тут www.multiwii.com/forum/viewtopic.php?f=7&t=1654
По первому пункту:
это аналогично выпиливанию работы с GUI, т.е. нет одноврменной работы с GUI и с GPS, хотя бы для дебага (хотя я давно смотрел эту ветку, может как то умудрились много девайсов на один Serial повесить)
значения в ГУИ прыгают +/-3…6
у меня ±1 и не уплывает (коптер криво стоит, если что) платка Crius Lite
www.youtube.com/watch?v=FtkqVRps-h8
первый вариант (синий) - у меня сейчас точно такой же лежит :wacko: погляжу как себя поведет
напрягает что там столько всего напаяно - я у soliada брал, дык там только пару кондеров и работает отлично
www.youtube.com/watch?v=pHeWbDU5SPg
а вот с акселем 345 от soliada - аналогично или даже лучше (хотя там время цикла в 2 раза почти увеличено из-за тупых регулей)
Если на а2 в гуи прыгает на1…2 то это значит что до фильтрации на 3…6
Попробуй подлетнуть с фиксом и без если есть возможность…
З.ы. вспомнил… ты когда на вий вернулся и подрубал 345, я рекомндовал выбрать дискретизацию на 6 (или 3 гц) и ты отписался что хуже стало и что вообще не полетел вроде. А это значит что внутреннего фнч в 345 нет! Потому подымаем дискрет и фильтруем ардуиной…
на одном коптере 1.9_а2, на другом 2.0_а0 - обе прошивки без изменений (т.е. как слил у тебя, такую и залил)… в общем мне на adxl345 больше нравиться как летает =) а там уж хз чего и как
хотя вот с bma180
www.youtube.com/watch?v=5nqaqIGYTGs
вообще ровненько
Так можешь патч выше опробовать? И подлетнуть сперва без него, потом с ним…
Т.е. тамтолько частоту выставить на 200 для акселя и acc_1g уменьшить
Так можешь патч выше опробовать? И подлетнуть сперва без него, потом с ним…
завтра днем попробую, сейчас ребенок спит =) боюсь жена убьет, если захочу полетать
Про bma180 так и есть т.к. там внутрнний фнч пашет ну и боШ есть боШ ))
Про bma180 так и есть т.к. там внутрнний фнч пашет ну и боШ есть боШ ))
я лучше завтра БТ подключу и запишу графики в полете, а то на земле смотреть особого смысла нет
но bma180 только на другом коптере могу - так как перебирать и перезаливать всё очень геморно
я лучше завтра БТ подключу и запишу графики в полете
ну да, так даже лучше…
Так можешь патч выше опробовать? И подлетнуть сперва без него, потом с ним… Т.е. тамтолько частоту выставить на 200 для акселя и acc_1g уменьшить
я затра попробую, ща проп лень балансировать, видео снять правда только телефон.
У меня коптер очень легкий, хорошо видно должно быть.
вы кстати вроде писали/улучшали свою прошивку/IMU? есть успехи в сравнении с вием?
вы кстати вроде писали/улучшали свою прошивку/IMU? есть успехи в сравнении с вием?
давай на ты, мы ж ровесники 😃
Брошено все на пол дороги 😦 ремонт сейчас дома, не до этого.
Мысли есть, но делать уже буду на stm32 и mpu6050. Я все пытаюсь бороться с дрейфом гирика, как мне кажется это основная проблема не очень уверенного висения. По ФПВ на комнаном мелколете это очень чувствуется, на свежеоткалиброванном гирике лететь раза в 3 проще. Хочу попробовать дифференцировать показания акселя, для корректировки дрейфа гирика.
Даже если получится хуже не жалко, интересно попробовать.
пока заказал вот это
www.ebay.com/itm/320845417504
и это
www.ebay.com/itm/190634428431
если я правильно все вкурил там даже дебаг есть, что сильно упрощает процесс естесвенно
ну и дачик
www.ebay.com/itm/270974251850
тогда уже надо было сразу этот набор взять aliexpress.com/…/557334547-free-shipping-10DOF-the…
- борду на F4 там FPU и 168Mhz на борту 😉
ca.mouser.com/stm32F4discovery/
мой мелколет все это не поднимет 😃)
зы: за баномесяц разочаровался в y6, не интересуюсь квадриком и в диком восторге от трикоптера
а можно поподробнее, почему разочаровался в у6?
я как одержимый собрал схему у6, только вот облетать толком не успел…
а можно поподробнее, почему разочаровался в у6?
для сравнение, есть трешка, летает 10-12 минут с 2.2 аккумом, думаю с gopro будет летать не сильно меньше, при этом запас по тяге сейчас около 60% (взлет на 40%)
и есть y6, летает те же 10 минут, но с 8Ah аккумом и таскать должен ту же камеру (но правда на подвсе, который 200 грамм добавляет веса), взлет на 60%, уверенный подъем под 80%
т.е. в итоге толку от Y6 нет никакого, если не считать тяжелый подвес, который под gopro вообще парой серв можно заменить… вся надежда на то что реально хорошо будет летать в ветреных местах (как заявляют на буржуйских форумах), если нет, то 100% разочарование в плане эффективность
НО показалось Y6 стабильнее три- и квадро-коптера, к тому же складывается не плохо, теперь вот думаю как бы переделать в обычную гексу, если не будет летать там, где мне надо
завтра БТ подключу и запишу графики в полете
как и обещал, но чуток с правками
итак, 2.0 a0 код:
void ACC_init () {
delay(10);
i2c_writeReg(ADXL345_ADDRESS,0x2D,1<<3); // register: Power CTRL -- value: Set measure bit 3 on
i2c_writeReg(ADXL345_ADDRESS,0x31,0x0B); // register: DATA_FORMAT -- value: Set bits 3(full range) and 1 0 on (+/- 16g-range)
i2c_writeReg(ADXL345_ADDRESS,0x2C,0x09); // rate=50hz, bw=25hz (see table 7 of the spec)
acc_1G = 256;
}
www.youtube.com/watch?v=MuD-5WD5U9Q
2.0 a0 предложенные правки кода (летать не пытался, так как горизонт не адекватно себя ведет)
www.youtube.com/watch?v=k1Q5N0rEq6Q
2.0 a0 правки + моя правка для 1G
void ACC_init () {
delay(10);
i2c_writeReg(ADXL345_ADDRESS,0x2D,1<<3); // register: Power CTRL -- value: Set measure bit 3 on
i2c_writeReg(ADXL345_ADDRESS,0x31,0x0B); // register: DATA_FORMAT -- value: Set bits 3(full range) and 1 0 on (+/- 16g-range)
i2c_writeReg(ADXL345_ADDRESS,0x2C,0x0B); // rate=200hz, bw=100hz (see table 7 of the spec)
acc_1G = 256;
}
www.youtube.com/watch?v=sZ_Oyjheaaw
особых различий в полете не почувствовал
А блин забыл… при 1g = 128 надо данные на 2 делить (каждую ось) и калибровку потом сделать…
Как результат в гуи по всем осям должна быть тишина, когда коптер в покое …
А блин забыл… при 1g = 128 надо данные на 2 делить (каждую ось) и калибровку потом сделать…
Как результат в гуи по всем осям должна быть тишина, когда коптер в покое …
сегодня уже наверно не проверю, может быть вечером… и так на скорую руку делал
вот так должно быть + перекалибровку не забыть сделать:
#if defined(ADXL345)
void ACC_init () {
delay(10);
i2c_writeReg(ADXL345_ADDRESS,0x2D,1<<3); // register: Power CTRL -- value: Set measure bit 3 on
i2c_writeReg(ADXL345_ADDRESS,0x31,0x0B); // register: DATA_FORMAT -- value: Set bits 3(full range) and 1 0 on (+/- 16g-range)
i2c_writeReg(ADXL345_ADDRESS,0x2C,0x0B); // rate=200hz, bw=100hz (see table 7 of the spec)
acc_1G = 128;
}
void ACC_getADC () {
TWBR = ((16000000L / 400000L) - 16) / 2; // change the I2C clock rate to 400kHz, ADXL435 is ok with this speed
i2c_getSixRawADC(ADXL345_ADDRESS,0x32);
ACC_ORIENTATION( ((rawADC[1]<<8) | rawADC[0])/2 ,
((rawADC[3]<<8) | rawADC[2])/2 ,
((rawADC[5]<<8) | rawADC[4])/2 );
ACC_Common();
}
#endif