MultiWii
Как там кстати компас? На него не оказывают сильное влияние близкорасположенные детальки?
Залил свой модифицированный код FreeIMU_lib - все идеально. Тестовый кубик на экране повторяет движения платы (поворот на 90 по транспортиру дает 90 градусов приращения по YAW).
В Мультивии 2 пре3 при крене “компас” отклоняется, при тангаже - стоит на месте. Думаю, это связано с реализацией IMU в этой версии прошивки. Сам компас работает хорошо.
а чего это за страшная такая петля из медного провода?
Греется как кипятильник этот макс,это его особенность.На esyosd до 70 градусов,как вы думаете как ему живется…
Готов поверить, что это суперпупер ядреная земля с экраном, но никак не радиатор ))))
Попробуйте собрать потом посмотрим кокое ядерное заземление вы придумаете 😃😃😃
Радиатор
Прямо в точку 😃
2.0 рк3 вопрос, автор ввел переменную Д для акселя чего не было в предыдущих прошивках, выставив Д=0 получил равномерное качание коптера во все стороны. Изначально автор по стандарту поставил Д = 100, За что может отвечать этот параметр
это давний энхансмент от Шикры… полезен для ФПВ… “для полетать” мне не нравится, т.к. соот-е сила-наклон в стаб моде становится нелинейной…
www.multiwii.com/forum/viewtopic.php?f=8&t=1290
The term D of the PID LEVEL settings is now used to limit the effect of the level correction thanks to the suggestion of Shikra (see viewtopic.php?f=7&t=905 ).
By default (D=100), the behaviour of the stable mode is unchanged.
With a lower D, effects are:
- a smoothing level change
- should prevent some wobbles of death
…
Не смог понять одного - можно ли подключить этот модифицированный E_OSD к плате MWii на меге 328? Или нужен отдельных хардверный (mega 1280(2560))/софтверный uart для передачи данных с IMU? Надо будет код глянуть…
Я подключал к Arduino Nano. OSD подключаеться к пин TX мозга. Если хочеться LCD то ему надо подключить к RX arduino. Передача данньiх к OSD неперерьiвная. Если нужно подключить GPS то он должен бьiть на I2C - я далеко от етого. Подключил сонар DIY007v2 и он работает вместе с баро, но т.к. у меня баро нету то OSD отображает только вьiсота из сонара. У меня ОСД с мега168 и т.к. у ней в 2 раза больше память запихнул еще 2 линии для будущих разработок - данньi из GPS-a: Latitude, Longitude, Distnce to Home и углах ROLL, PITCH, YAW. Думаю не очен сложно добавить ето в коде МултиВии как только код а ля GPS-a будеть без багов. Flash заполнена на 60%.
MULTIWII_V1_DIMM168PIN.rar
файл можно смело править заменяя компоненты и изменяя конфигурацию ног, это полноценный мультивии, только вход с приемника 1, ppm sum, обычными приемниками пользоваться не планирую по этому убрал, но если нужно, дорисовать не трудно.
Проверил, подправил, все работает, глюков не замечено, поставил пока на подвес в качестве независимых мозгов .
Схему не выкладываю, ибо ее нет, все как на картинке, оно по даташиту ардуины и pca9306
вход приемника 1, ppm sum
Дмитрий, что это значит? Как я понимаю, обычный приемник не подключить? На пример, для управления сервами в ручную.
Дмитрий, что это значит? Как я понимаю, обычный приемник не подключить? На пример, для управления сервами в ручную.
по идее можно, указав ардуине нужные ноги , любые из 6ти которые разведены для моторок и d2 который вверху слева
всётаки нашел часок чтобы разобраться как подключить OSD от Syberian для мегапирата к Multiwii
пока сделал только горизонт, но разобрался чего ды как и остальное добавить не проблема
итак
- меняем скорость порта на 9600
- в Serial под конец SerialCom должно получиться
case 'E': //GUI to arduino MAG calibration request
calibratingM=1;
break;
}
} else {
#if defined(SYBERIAN_OSD)
byte j=0;
static int8_t dcmr,dcmp,hom;
osd_pak++;
if (osd_pak>2) osd_pak=0; // from 0 to 3
switch(osd_pak)
{
case 0:
dcmr=(angle[ROLL])*0.06;
dcmp=(angle[PITCH])*0.03;
if(dcmp<-31) dcmp=-31;
if(dcmp>31) dcmp=31;
dcmr=-dcmr; // или не надо переворачивать ось... не помню =)
serialize8(osd_sync);
serialize8(osd_pak);
serialize8(osd_pak);
serialize8((char)dcmr);
serialize8((char)dcmp);
serialize8(j);
serialize8(j);
serialize8(j);
serialize8(j);
serialize8(j);
UartSendData();
break;
}
// end txing packet
osd_sync^=255;
#endif
}
- в config.h добавляем
#define SYBERIAN_OSD - в MultiWii_2_0_preтраляля
добавляем где куча переменных определяется
byte osd_pak=0;
byte osd_sync=0xcb;
вот собственно и всё =) горизонт будет работать, остальное можно добавить:
/*buffer format:
0-sync word changed (0xcb, 0x34)
1 packet type (0 - ahi,bat,cur,mah, 1 - nav, 2 - maintenance
2 0 1 2
3 roll gpslat1 gpsSPD
4 pitch gpslat2 gpsALTH
5 homeset gpslat3 gpaALTL
6 homeL gpslat4 gpsDISH
7 control_mode gpslon1 gpsDISL
8 BATl gpslon2 status
9 Ih gpslon3 config (1 - OSD off)
10 IL (up 80.0A) gpslon4 emerg
по этой табличке добавлено в пакете 0 только roll и pitch, себе добавлю еще батарейку (подскажет кто может - делитель напряжения нужен, если я не всю батарейку цеплять собираюсь, а только одну ячейку, т.е. от 3 до 4.2в по идее, а ардуинка хочет от 0 до 5в) и режим (код править лениво, если точнее лениво разбираться как hex получить в linux, поэтому выберу чего нибудь из этой табличке):
{case 0: print(30,"MANUAL");break;
case 1: print(30,"CIRCLE");break;
case 2: print(30,"STABLE");break;
case 5: print(30,"WIRE A");break;
case 6: print(30,"WIRE B");break;
case 10: print(30,"AUTOPILOT");break;
case 11: print(30,"RTL");break;
case 12: print(30,"LOITER");break;
case 13: print(30,"TAKEOFF");break;
case 14: print(30,"LANDING");break;
default: print(30,"UNKNOWN");break;
скриншотик для затравки (делался давно, но сейчас то ничего не поменялось)
еще может кто подскажет в каких попугаях высота измеряется, чтобы тоже её в OSD добавить?
кстатии посмотрел код - туда же можно без проблем налепить GPS на обычную ардуинку, сделав включение порта на слушание GPS приемника (пассивного! а то есть приемники, которые не отдают, пока не попросишь, но можно и их, но тогда в пролете OSD) каким нибудь хитрым стик-жестом (для LCD вроде так)
i2c-gps-nav давно уже есть, тем более интегрировано с мультивии
Рекомендую все вместе совместить
i2c-gps-nav давно уже есть
оно как то поможет с UART GPS приемником?
Ессно. данные по уарту, обмен с основными мозгами - по i2c
Ессно. данные по уарту, обмен с основными мозгами - по i2c
т.е. юзая эту либу на обычной Arduino Mini/pro/328p с одним UART можно не писать свои костыли, а уже работает?
ы, в гугле же написано.
[gps]-[uart arduino]-[i2c]-[multiwii]
судя по коду там про mega и про i2c в основном, а я говорю про односторонний UART на обычной ардуинке, где только ОДИН хардверный UART есть
Так, стоп. Задача подключить e-osd (как железку) к мультивию и запихнуть туда же гпс датчик?
Через softwareserial на мультивие я подключал гпс, хоть и криво
задача завести UART GPS на RX0 пин, а TX0 для OSD оставить, т.е. для меги или i2c GPS приемников проблем нет, а на обычной ардуинки уже косяк выходит
- в новом мультивие (а может и раньше, давно не следил) убрали стандартную либу работы с serial портом, поэтому попытки добавить софтверный порт приводят к ошибкам компиляции (ну или avr-gcc снова тупит)
реальная работа OSD с multiwii
нужна помощь кодеров
есть такой код
int tmp_alt=(EstAlt-AltGround)/100;
if(tmp_alt<0) tmp_alt=0;
serialize8((char)(tmp_alt>>8)); // altitude
serialize8((char)(tmp_alt&255)); // altitude
не работает
а вот так работает, т.е. где то косяк с типами данных, может кто подскажет как перевести нормально? =)
int tmp_alt=(EstAlt-AltGround)/100;
if(tmp_alt<0) tmp_alt=0;
tmp_alt=123;
serialize8((char)(tmp_alt>>8)); // altitude
serialize8((char)(tmp_alt&255)); // altitude
попробуй вот так
uint16_t tmp_alt=(max(EstAlt-AltGround,0))/100; serialize16(tmp_alt); // altitude
я правда не понял как не работает, вроде младший и старший байты попутаны.
хотя max давольно увесистый вызов
uint16_t tmp_alt;
if (EstAlt>AltGround)
tmp_alt=(EstAlt-AltGround)/100;
else
tmp_alt=0;
serialize16(tmp_alt);