MultiWii
Суммировать n последних значения акселя и делить сумму на n. (acc+10) + (acc-6) / 2 = (acc+2) - шум станет меньше, если его значения распределены по обе стороны относительно “acc”.
Если не сложно можно пример на куске кода из 1.7
Плывут- в смысле, дрейф в одну сторону? Положил датчик на стол, а значение растет и растет по модулю?
Нет, если не трогать датчик все ровно, если отклонить датчик на бок на 45градусов GUI повторяет отклонение но потом плавно возвращается обратно в горизонт , при этом датчик физически остается наклоненным в бок на 45градусов.
может, так и есть? В перевернутом варианте еще хуже?
Описанный мной выше глюк возникает после изменения кода добавлением делителя /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)
пример на куске кода из 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]; /// сохраним текущее значение для использования на следующем шаге.
Для остальных осей аналогично. На истину не претендую.
Спасибо, этот коптер на работе, завтра попробую.
Сидуина не работает на холоде (при темп ниже ~+15градусов)
Что может быть?
Обнаружил это следующим образом - дома коптер летает исправно, как выношу на улицу или балкон - моторы перестают инициализироваться, прошить сидуину не получается, прочитать с нее данные тоже.
Господа, пора готовиться к качественным прорывам… Платы “все-в-одном” а-ля FY90q!
39mm x 28mm, 8(!) грамм.
120$, atmega328, gyro, accel, mag. Ессно совместима с эхотагом.
Магазин , обсуждение
Покупать прямо сейчас можно разве что для экспериментов, наблюдаются проблемы.
Ну а за первой ласточкой и остальные подтянутся, сами понимаете
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.
Гироскоп хороший, аксель не лучший. Несмотря на склонность к модульным системам, хочется взять такую вещь, чтобы все компактно было - для мелкого квадрика.
да фиг с ней с модольностью… главное чтоб работало и цена имхо хорошая за такой готовый комплект + i2c шина есть, можно много чего нацеплять
Вот так, попробывал я опять раскочегарить MultiWii с клонированными WMP и Nunchuk на Arduino Pro Mini 328p. Версия 1.7.
-
Вот первых, суперчувствительнось WMP - чуть наклоняешь плату, а на экране коптер делает переворот. Загрубил делителем на 5 где давно рекомендовали, причем (там сумма) поделил каждое слагаемое чтобы избежать переполнения при суммировании. Однако, в 1.7 в отличие от 1.6 суперчувствительности возникала в половине случаев и иногда пропадала при рестарте. Как-то это связано с временем цикла. Потом уже заметил что в 1.7 вроде и так иногда делят WMP на 5, в зависимости от того что от нее приходит - этого я не понял. Пробывал я с обоими частотами I2C (щас 400k), с разными INTERLEAVING_DELAY (щас 2000) и с INTERNAL PULL-UPS и без них (без них тоже работает, наверное они есть на WMP) - все равно суперчувствительность есть. После загрубления стал отображаться адекватно, но возникает эффект о котором уже писали - при резком отклонении возникает “перерегулирование” на экране, и потом угол медленно приходит в норму - ЧТО ТУТ ДЕЛАТЬ - УВИЛИЧИВАТЬ ДЕЛИТЕЛЬ? Может есть какое-нибудь способ четко вычислить чувствительность WMP и вычислить “идеальный” делитель?
-
Настроил ПИДы как смог. Пришлость опускать P до 2, и I и D пока 0, иначе вибрирует. Автолевел попробывал в руках над головой, но постепенно входит в прецессию и расколбас - наверное тоже из-за недостатка регуляции основного ПИДа. Но самая большая проблема в том, что если коптер поворачивать медленно, он сопротивляется нормально (ну чуть слабее чем надо из-за малого P), но если наклонять быстро, то именно В ЛЕВУЮ сторону крена он как-бы проваливается да похоже еще и специально “поддает” туда еще. Когда попробывал взлететь, он при отрыве отмочил элекантную и стремительную полубочку ВЛЕВО и упал на крышу - думаю из-за этого эффекта.
Шумы акселя и гир при работающем моторе вроде в норме, но изображения столбиков газа дико дергаются. Хорошо что моторы не могут так быстро менять обороты 😃
Написал много, спасибо что дочитали, а еще больше спасибо, если ответите 😃
Однако, в 1.7 в отличие от 1.6 суперчувствительности возникала в половине случаев и иногда пропадала при рестарте
Согласен у меня тоже самое только всё настроил висит как приколоченный сменил батарейку и всё сначала
1.7 прошивок три штуки с последней вообще беда на ней даже оригинальный ВМП +клонированныйНЧ нормально запустить не удалось
с разными INTERLEAVING_DELAY (щас 2000)
таких высот мне не достичь клонированный ВМП на 1700 частенько уходит в суперчувствительность
а оригинальный только 1300
опускать P до 2, и I и D пока 0,
Неделю назад согласился бы,I и D были врагами номер 1 и торчали на 0,сейчас у нас как-бы перемирие,как я понял I и D в ноль ни вкоем случае не ставить.Хотябы на 1 и то хорошо.
Однако, в 1.7 в отличие от 1.6 суперчувствительности возникала в половине случаев и иногда пропадала при рестарте
Тоже заметил.
суперчувствительности возникала в половине случаев и иногда пропадала при рестарте
У меня подобная напасть была связана с тем, что после инициализации гиры нужно было выдержать паузу delay(100);
Если у вас itg3205 - подключайте чип напрямую как itg3200 (без “программных” pullups). Я установил и наслаждаюсь.
Сидуина не работает на холоде (при темп ниже ~+15градусов)
Что может быть?
Ни у кого нет идей что может быть с сидуиной? Жуть как не хочется заказывать новую, ждать ее месяц %(
Ни у кого нет идей что может быть с сидуиной? Жуть как не хочется заказывать новую, ждать ее месяц %(
чем ардуина питается? 5V?
чем ардуина питается? 5V?
от силового аккума
Что интересно - по мере согревания сидуина снова начинает работать )
от силового аккума Что интересно - по мере согревания сидуина снова начинает работать )
гдето неконтакт, прозвони, не поможет - обклей арудину паралоном тонким, пусть греется, ох уж эти итальянки
гдето неконтакт, прозвони, не поможет - обклей арудину паралоном тонким, пусть греется, ох уж эти итальянки
Если где-то обрыв, почему в домашний условиях работает?
Завернуть в паралон конечно идея, но есть вероятность, что в полете переохладится и откажет 😉
Проверю вечерком пайку
Если где-то обрыв, почему в домашний условиях работает?
Металл в тепле расширяется типа 😉 микроразрыв в тепле и замыкает. Причем если есть строительный фен, то лучше прожарить сидуинку.
положить сидуинку рядом с регулями - пусть греется немного 😉
WMP - чуть наклоняешь плату, а на экране коптер делает переворот.
То-же было. Писал об этом. При питании схемы от ЮСБ, было нормально. Питаю от батареи, бардак. Поменял платки, все наладилось.
сли у вас itg3205 - подключайте чип напрямую как itg3200 (без “программных” pullups). Я установил и наслаждаюсь.
А можно фотку увидеть? У самого немного глючит вмп на 3205, всё не рискну вырезать оттуда гиру.
Подскажите, есть два вимоушена с диалэкстрима. Один черный с синей платкой (на датчиках не разобрать цифры) и белый с зеленой платкой, на ней стоит 3205.
Вопрос, какую из плат лучше использовать? какая лучше будет работать?