MultiWii

killmouse

Нет, когда я пробовал делить всё отрабатывало нормально.
Про медленный возврат здесь вроде писали, что перевернуть вверх ногами надо аксель, если я не путаю 😃

Деление несколько грубая форма корректировки, это первое, что в голову пришло на тот момент, делитель надо подбирать индивидуально.

Musgravehill

Наконец, дошли руки до LLC. Сегодня получил свой заказ PCA9306DCTR. Припаял микросхему по центру маленькой платки. Схема заработала, время цикла упало до 3100, было 3200-3600. Наверное, иногда шел мусор по шине. Теперь можно подключать все 3.3В датчики без опасений.

skyrider:

ROLL тоже отклонение влево - затем медленный возврат обратно в горизонт

У вас выборосы ROLL совпадают по направлению для Гиры и Акселя - оба броска вверх или оба вниз? Если вразнобой, то нужно поменять знак: accADC[ROLL] = - +
Для всех осей проверить. если мнемограмма коптера начнет наклоняться в противоположную сторону - менять знаки у гиры И акселя по этой оси.

mahowik
Musgravehill:

Сегодня получил свой заказ PCA9306DCTR. Припаял микросхему по центру маленькой платки.

а чем паяли в итоге? помню были сомнения 😃
кстать к чипу только доп. элементы (радиодетали) нужны?

skyrider
killmouse:

Нет, когда я пробовал делить всё отрабатывало нормально. Про медленный возврат здесь вроде писали, что перевернуть вверх ногами надо аксель, если я не путаю

Да нет, переворачивать не надо, достаточно убрать делители в прошивке ( /7 ) на аксели по всем осям и в GUI все нормально, хотя именно так у меня и было на другом квадрике при перевернутом вверх ногами акселе.

Musgravehill:

У вас выборосы ROLL совпадают по направлению для Гиры и Акселя - оба броска вверх или оба вниз?

Нет , только на акселе , причем не только ролл но и немного питч, явно шумит аксель.

Covax
Musgravehill:

Наконец, дошли руки до LLC. Сегодня получил свой заказ PCA9306DCTR. Припаял микросхему по центру маленькой платки. Схема заработала, время цикла упало до 3100, было 3200-3600. Наверное, иногда шел мусор по шине. Теперь можно подключать все 3.3В датчики без опасений.

Борис, можно поподробнее, где заказать, схему платки, я как то пропустил это творение 😃 Эта штука я так понимаю намного лучше спакфановкой поделки?

Musgravehill
mahowik:

чем паяли

Паял обычным паяльником с жалом “аля микроволна” - бором сделал углубление для отбора припоя. Главное, побольше спиртокарифоли, а перед пайкой резинкой почистить контакты. После пайки промыл спиртом и залил цапон-лаком для прочности.

К чипу нужны только подтяжки с двух сторон шин и подтяжка 200кОм на пин Enable. Резисторы хотел SMD, но односторонный гетинакс не позволил. Поэтому взял обычные и напаял на макетку поближе к пинам.
pca9306.pdf - правильный даташит для PCA 9306 DCT R. (1 pin = GND). В даташите NXP есть только “DC” маркировка, и у нее пин1 = питание.

DUAL BIDIRECTIONAL I2C BUS VOLTAGE-LEVEL TRANSLATOR - готовый двунаправленный конвертер уровней с размерами 3*3мм. Лучше любых транзисторов и делителей. 5В <—> 3.3В

Covax:

намного лучше спакфановкой поделки

Да, намного лучше - наиболее правильное решение.

Платку рисовал в Sprint layout 5. Проще не бывает. Делал ЛУТом на глянцевой бумаге. На удивление, все получилось сразу. Думаю, кто будет делать подобное - пусть сразу нарисуют дорожки под резисторы (я их паял отдельно от платы). Я немного позже перерисую и перетравлю новый вариант.

Микросхема у нас стоит 33р - с наценкой.

Covax
Musgravehill:

Платку рисовал в Sprint layout 5. Проще не бывает. Делал ЛУТом на глянцевой бумаге. На удивление, все получилось сразу. Думаю, кто будет делать подобное - пусть сразу нарисуют дорожки под резисторы (я их паял отдельно от платы). Я немного позже перерисую и перетравлю новый вариант.

Борис, если не жалко, выложи потом платку для общественности. И фотку уже готовой платки крупным планом. p.s. Из даташита экономисту тож не хрена не понятно, как через этот LLC подключать 3.3V сенсоры 😃

Musgravehill
Covax:

платку для общественности

лак еще не схватился.

narod.ru/disk/10299871001/pca9306.rar.html плата для Sprint layout 5.

Сергей, в даташите на 1й странице:
V REF1 - это низковольтная часть, сюда подаем 3.3В
SCL 1, SDA 1 - это низковольная шина, куда цепляем наши датчики.
GND - земля.
----------
V REF 2 - это высоковольтная часть, сюда подаем 5В
SCL 2, SDA 2 - это высоковольная шина, куда цепляем Ардуино, которое работает с 5В.
EN - включение чипа.
---------------
На EN, SCL 2, SDA 2, SCL 1, SDA 1 - нужны подтягивающие резисторы.

Схема есть на странице 7 (там там мастер низкольтный, а датчики -высоковольтные). Rpu - это подтяжки. Важно, что низковольтная часть должна быть на “1”, высоковольтная - на “2”.

На EN через 200кОм подаем +3.3В
На SCL 2 и SDA 2 через 3.3кОм резисторы подаем +5в.
У меня на датчиках уже стоят подтягивающие резисторы, в сумме по 2кОм на каждую шину. Поэтому подтяжки на SCL 1 и SDA 1 отдельно паять не нужно.

HATUUL

Проколхозил польского квадрика,всё ,кроме резинок и купола ,взято из запасный частей.Думаю многим будет интересно.😃
Процентов 70,вибрации гасится.

Резинки с креплением внизу не соприкосаются,просто так фото вышло.
У купола появилась двойная задача,в полёте защищать электронику от ветра,влаги,и ударов.А на земле как пиалка для чая.
По дороге собрал экранчик 16х2,правда вместо некоторых цыфр пишет кирильские буквы.😁

vtumane
mahowik:

кому интересно тут MultiWii Interconnect Board

Расположение платы ITG-3200 под софт 1.6. В 1.7 Алекс поменял оси (скорее всего под WMP на itg3205 c прямым подключением).
Так что придется править, как и владельцам FreeIMU.

skyrider
killmouse:

accADC[ROLL] = ( ((rawADC_WMP[3]<<2) + ((rawADC_WMP[5]>>4)&0x2))/7 );
accADC[PITCH] = - ( ((rawADC_WMP[2]<<2) + ((rawADC_WMP[5]>>3)&0x2))/7 );
accADC[YAW] = - ( (((rawADC_WMP[4]&0xFE)<<2) + ((rawADC_WMP[5]>>5)&0x6))/7 );

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

Musgravehill
skyrider:

загрубить чуйку акселя

Суммировать n последних значения акселя и делить сумму на n.
(acc+10) + (acc-6) / 2 = (acc+2) - шум станет меньше, если его значения распределены по обе стороны относительно “acc”.

Плывут- в смысле, дрейф в одну сторону? Положил датчик на стол, а значение растет и растет по модулю?

skyrider:

будто плата стоит вверх ногами

может, так и есть? В перевернутом варианте еще хуже?

skyrider
Musgravehill:

Суммировать n последних значения акселя и делить сумму на n. (acc+10) + (acc-6) / 2 = (acc+2) - шум станет меньше, если его значения распределены по обе стороны относительно “acc”.

Если не сложно можно пример на куске кода из 1.7

Musgravehill:

Плывут- в смысле, дрейф в одну сторону? Положил датчик на стол, а значение растет и растет по модулю?

Нет, если не трогать датчик все ровно, если отклонить датчик на бок на 45градусов GUI повторяет отклонение но потом плавно возвращается обратно в горизонт , при этом датчик физически остается наклоненным в бок на 45градусов.

Musgravehill:

может, так и есть? В перевернутом варианте еще хуже?

Описанный мной выше глюк возникает после изменения кода добавлением делителя /7

accADC[ROLL] = ( ((rawADC_WMP[3]<<2) + ((rawADC_WMP[5]>>4)&0x2))/7 );
accADC[PITCH] = - ( ((rawADC_WMP[2]<<2) + ((rawADC_WMP[5]>>3)&0x2))/7 );
accADC[YAW] = - ( (((rawADC_WMP[4]&0xFE)<<2) + ((rawADC_WMP[5]>>5)&0x6))/7 );

Если убрать этот делитель и оставить оригинальный код в GUI аксель точно повторяет движения датчика и не плывет.
Загрубить чуйку акселя нужно потому что когда датчик находится в покое шумит ROLL и PITCH (цифры бегают в GUI от -10 до 10)

Musgravehill
skyrider:

пример на куске кода из 1.7

 void i2c_ACC_init() {
  i2c_rep_start(0xA4 + 0);//I2C write direction => 0
  i2c_write(0xF0);
  i2c_write(0x55);
  i2c_rep_start(0xA4 + 0);//I2C write direction => 0
  i2c_write(0xFB);
  i2c_write(0x00);
  delay(250);
  accPresent = 1;
  accADCold[ROLL]=0; //////инициализация предыдущего значения////////////

}

void i2c_ACC_getADC() {
  TWBR = ((16000000L / 400000L) - 16) / 2; // change the I2C clock rate. !! you must check if the nunchuk is ok with this freq
  i2c_rep_start(0xA4 + 0);//I2C write direction => 0
  i2c_write(0x00);
  i2c_rep_start(0xA4 + 1);//I2C read direction => 1
  for(uint8_t i = 0; i < 5; i++)
    rawADC_NUN[i]=i2c_readAck();
  rawADC_NUN[5]= i2c_readNak();

  accADC[ROLL]  =   ( (rawADC_NUN[3]<<2)        + ((rawADC_NUN[5]>>4)&0x2) );
  accADC[PITCH] = - ( (rawADC_NUN[2]<<2)        + ((rawADC_NUN[5]>>3)&0x2) );
  accADC[YAW]   = - ( ((rawADC_NUN[4]&0xFE)<<2) + ((rawADC_NUN[5]>>5)&0x6) );

  ////////////////////////   сглаживание    ///////////////


  accADC[ROLL] = ( accADC[ROLL] + accADCold[ROLL]   )  / 2;  ///сгладим
  accADCold[ROLL] = accADC[ROLL];                           /// сохраним текущее значение для использования на следующем шаге.


Для остальных осей аналогично. На истину не претендую.

 
skyrider

Спасибо, этот коптер на работе, завтра попробую.

Wishnu

Сидуина не работает на холоде (при темп ниже ~+15градусов)
Что может быть?

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

leprud

Господа, пора готовиться к качественным прорывам… Платы “все-в-одном” а-ля FY90q!

39mm x 28mm, 8(!) грамм.
120$, atmega328, gyro, accel, mag. Ессно совместима с эхотагом.
Магазин , обсуждение
Покупать прямо сейчас можно разве что для экспериментов, наблюдаются проблемы.

Ну а за первой ласточкой и остальные подтянутся, сами понимаете

Musgravehill

MCU: 16Mhz Atmel Atmega328p
Gyro: L3G4200D
Accel - ADXL345
Compass - HMC5843
Input voltage - 5v-16v.
Up to 16 I/O ports for PWM (in/out), external modules etc. (8 PWM out?)
I2C header for external I2C units.
1.5"x1.1" (39mm x 28mm).
6 grams.

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

SovGVD

да фиг с ней с модольностью… главное чтоб работало и цена имхо хорошая за такой готовый комплект + i2c шина есть, можно много чего нацеплять

Prikupets

Вот так, попробывал я опять раскочегарить MultiWii с клонированными WMP и Nunchuk на Arduino Pro Mini 328p. Версия 1.7.

  1. Вот первых, суперчувствительнось WMP - чуть наклоняешь плату, а на экране коптер делает переворот. Загрубил делителем на 5 где давно рекомендовали, причем (там сумма) поделил каждое слагаемое чтобы избежать переполнения при суммировании. Однако, в 1.7 в отличие от 1.6 суперчувствительности возникала в половине случаев и иногда пропадала при рестарте. Как-то это связано с временем цикла. Потом уже заметил что в 1.7 вроде и так иногда делят WMP на 5, в зависимости от того что от нее приходит - этого я не понял. Пробывал я с обоими частотами I2C (щас 400k), с разными INTERLEAVING_DELAY (щас 2000) и с INTERNAL PULL-UPS и без них (без них тоже работает, наверное они есть на WMP) - все равно суперчувствительность есть. После загрубления стал отображаться адекватно, но возникает эффект о котором уже писали - при резком отклонении возникает “перерегулирование” на экране, и потом угол медленно приходит в норму - ЧТО ТУТ ДЕЛАТЬ - УВИЛИЧИВАТЬ ДЕЛИТЕЛЬ? Может есть какое-нибудь способ четко вычислить чувствительность WMP и вычислить “идеальный” делитель?

  2. Настроил ПИДы как смог. Пришлость опускать P до 2, и I и D пока 0, иначе вибрирует. Автолевел попробывал в руках над головой, но постепенно входит в прецессию и расколбас - наверное тоже из-за недостатка регуляции основного ПИДа. Но самая большая проблема в том, что если коптер поворачивать медленно, он сопротивляется нормально (ну чуть слабее чем надо из-за малого P), но если наклонять быстро, то именно В ЛЕВУЮ сторону крена он как-бы проваливается да похоже еще и специально “поддает” туда еще. Когда попробывал взлететь, он при отрыве отмочил элекантную и стремительную полубочку ВЛЕВО и упал на крышу - думаю из-за этого эффекта.

Шумы акселя и гир при работающем моторе вроде в норме, но изображения столбиков газа дико дергаются. Хорошо что моторы не могут так быстро менять обороты 😃

Написал много, спасибо что дочитали, а еще больше спасибо, если ответите 😃