MultiWii

killmouse

kite, спасибо, всё дело в символах, всё прошло. А я и буквами плясал и цыфирями, и в бубен бил, и друга в Москве напряг…

Covax
schumixmd:

так для ваших условиях магнетометер + барометер + уже имеющийся осд и гпс будет самая лутщая комбинация…зачем второй?

я этот в начале годща заказал, когда и мыслей о ОСД не было, вот только пришел. Спасибо американцу, что вообще выслал и то Норберту, а НОрберт нам…

skyrider

Нунчак на акселе mma7660, при неподвижном коптере шумит ROLL и PITCH (цифры бегают в GUI от -10 до 10),
поправил как killmouse

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 );

помогло, шуметь аксель перестал, но вылезла другая проблема, такой эффект видел когда неправильно ориентирован чак, отклоняешь коптер например влево - в GUI c права как и положено на против надписи ROLL тоже отклонение влево - затем медленный возврат обратно в горизонт, хотя коптер так и стоит с наклоном в лево. Sergey Serov - у Вас такое наблюдается и как с этим бороться?

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градусов)
Что может быть?

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