MultiWii

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), но если наклонять быстро, то именно В ЛЕВУЮ сторону крена он как-бы проваливается да похоже еще и специально “поддает” туда еще. Когда попробывал взлететь, он при отрыве отмочил элекантную и стремительную полубочку ВЛЕВО и упал на крышу - думаю из-за этого эффекта.

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

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

toleg
Prikupets:

Однако, в 1.7 в отличие от 1.6 суперчувствительности возникала в половине случаев и иногда пропадала при рестарте

Согласен у меня тоже самое только всё настроил висит как приколоченный сменил батарейку и всё сначала
1.7 прошивок три штуки с последней вообще беда на ней даже оригинальный ВМП +клонированныйНЧ нормально запустить не удалось

Prikupets:

с разными INTERLEAVING_DELAY (щас 2000)

таких высот мне не достичь клонированный ВМП на 1700 частенько уходит в суперчувствительность
а оригинальный только 1300

HATUUL
Prikupets:

опускать P до 2, и I и D пока 0,

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

Prikupets:

Однако, в 1.7 в отличие от 1.6 суперчувствительности возникала в половине случаев и иногда пропадала при рестарте

Тоже заметил.

Musgravehill
Prikupets:

суперчувствительности возникала в половине случаев и иногда пропадала при рестарте

У меня подобная напасть была связана с тем, что после инициализации гиры нужно было выдержать паузу delay(100);
Если у вас itg3205 - подключайте чип напрямую как itg3200 (без “программных” pullups). Я установил и наслаждаюсь.

Wishnu
Wishnu:

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

Ни у кого нет идей что может быть с сидуиной? Жуть как не хочется заказывать новую, ждать ее месяц %(

Covax
Wishnu:

Ни у кого нет идей что может быть с сидуиной? Жуть как не хочется заказывать новую, ждать ее месяц %(

чем ардуина питается? 5V?

Wishnu
Covax:

чем ардуина питается? 5V?

от силового аккума
Что интересно - по мере согревания сидуина снова начинает работать )

Covax
Wishnu:

от силового аккума Что интересно - по мере согревания сидуина снова начинает работать )

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

Wishnu
Covax:

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

Если где-то обрыв, почему в домашний условиях работает?
Завернуть в паралон конечно идея, но есть вероятность, что в полете переохладится и откажет 😉
Проверю вечерком пайку

Covax
Wishnu:

Если где-то обрыв, почему в домашний условиях работает?

Металл в тепле расширяется типа 😉 микроразрыв в тепле и замыкает. Причем если есть строительный фен, то лучше прожарить сидуинку.

SovGVD

положить сидуинку рядом с регулями - пусть греется немного 😉