MultiWii
Сегодня взялся за испытания второго контроллера.
В качестве подопытных кроликов выступили следующие кандидаты:
- Arduino Nano v3
- Wii синяя плата на itg3205 (маркировка MP-V3.0)
- NK синяя плата на ADXL335 (маркировка W-2A ниже написано 10042-20101105 еще ниже Wii Nunchuk-G Edition V1.1)
- Прошивка 1_preter7
Wii запустился сразу, аксель закапризничал, разбирлся с распайкой, при очередном подключении он сдался и запустился, только график зашкаливал.
Пошаманил в коде, добавил деление на аксель.
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 );
на 7 это утрировано, так как запускал без коптера, и ориентировался только по графику гироскопов, чтоб был приближенный.
INTERLEAVING_DELAY выставил 2000, на 3000 то же самое, разницы особой не заметил.
питание wii+nk от 3v3
Так что я для себя миф о неработоспособности “синюшных” плат развеял.
Фото вечером, на работе нечем щелкать 😃
А у меня при загрузке в ардуино нано скетча от Олега пишет:
MW1pt7_MARG.cpp: In function ‘void __vector_14()’:
MW1pt7_MARG:1338: error: ‘PORTF’ was not declared in this scope
MW1pt7_MARG:1347: error: ‘PORTF’ was not declared in this scope
MW1pt7_MARG:1360: error: ‘PORTF’ was not declared in this scope
MW1pt7_MARG.cpp: In function ‘void configureReceiver()’:
MW1pt7_MARG:1460: error: ‘DDRK’ was not declared in this scope
MW1pt7_MARG:1461: error: ‘PORTK’ was not declared in this scope
MW1pt7_MARG.cpp: In function ‘void __vector_5()’:
MW1pt7_MARG:1482: error: ‘PINK’ was not declared in this scope
MW1pt7_MARG.cpp: In function ‘void LCDprint(uint8_t)’:
MW1pt7_MARG:1653: error: ‘PORTE’ was not declared in this scope
Подключен вий без нунчака. Скетч также не компилится.
Кусочек скетча:
/* Set the minimum throttle command sent to the ESC (Electronic Speed Controller) */
/* This is the minimum value that allow motors to run at a idle speed */
//#define MINTHROTTLE 1300 // for Turnigy Plush ESCs 10A
#define MINTHROTTLE 1120 // for Super Simple ESCs 10A
//#define MINTHROTTLE 1190
/* The type of multicopter */
//#define GIMBAL
//#define BI
//#define TRI
//#define QUADP
#define QUADX
//#define Y4
//#define Y6
//#define HEX6
//#define HEX6X
//#define FLYING_WING //experimental
#define YAW_DIRECTION 1 // if you want to reverse the yaw correction direction
//#define YAW_DIRECTION -1
#define I2C_SPEED 100000L //100kHz normal mode, this value must be used for a genuine WMP
//#define I2C_SPEED 400000L //400kHz fast mode, it works only with some WMP clones
//#define PROMINI //Arduino type
#define MEGA
//enable internal I2C pull ups
#define INTERNAL_I2C_PULLUPS
//****** advanced users settings *************
// Failsave settings - added by MIS
// Failsafe check pulse on THROTTLE channel. If the pulse is OFF (on only THROTTLE or on all channels) the failsafe procedure is initiated.
// After FAILSAVE_DELAY time of pulse absence, the level mode is on (if ACC or nunchuk is avaliable), PITCH, ROLL and YAW is centered
// and THROTTLE is set to FAILSAVE_THR0TTLE value. You must set this value to descending about 1m/s or so for best results.
// This value is depended from your configuration, AUW and some other params.
// Next, afrer FAILSAVE_OFF_DELAY the copter is disarmed, and motors is stopped.
// If RC pulse coming back before reached FAILSAVE_OFF_DELAY time, after the small quard time the RC control is returned to normal.
// If you use serial sum PPM, the sum converter must completly turn off the PPM SUM pusles for this FailSafe functionality.
#define FAILSAVE_DELAY 10 // Guard time for failsafe activation after signal lost. 1 step = 0.1sec - 1sec in example
#define FAILSAVE_OFF_DELAY 200 // Time for Landing before motors stop in 0.1sec. 1 step = 0.1sec - 20sec in example
#define FAILSAVE_THR0TTLE (MINTHROTTLE + 200) // Throttle level used for landing - may be relative to MINTHROTTLE - as in this case
/* The following lines apply only for a pitch/roll tilt stabilization system */
/* It is not compatible with Y6 or HEX6 or HEX6X */
/* Uncomment the first line to activate it */
#define SERVO_TILT
#define TILT_PITCH_MIN 1020 //servo travel min, don’t set it below 1020
#define TILT_PITCH_MAX 2000 //servo travel max, max value=2000
#define TILT_PITCH_MIDDLE 1500 //servo neutral value
#define TILT_PITCH_PROP 10 //servo proportional (tied to angle) ; can be negative to invert movement
#define TILT_ROLL_MIN 1020
#define TILT_ROLL_MAX 2000
#define TILT_ROLL_MIDDLE 1500
#define TILT_ROLL_PROP 10
/* I2C gyroscope */
//#define ITG3200
//#define L3G4200D
/* I2C accelerometer */
//#define ADXL345
//#define BMA020
//#define BMA180
/* I2C barometer */
//#define BMP085
/* I2C magnetometer */
//#define HMC5843
//#define HMC5883
/* ADC accelerometer */ // for 5DOF from sparkfun, uses analog PIN A1/A2/A3
//#define ADCACC
/* The following lines apply only for specific receiver with only one PPM sum signal, on digital PIN 2 */
/* IF YOUR RECEIVER IS NOT CONCERNED, DON’T UNCOMMENT ANYTHING. Note this is mandatory for a Y6 setup */
/* Select the right line depending on your radio brand. Feel free to modify the order in your PPM order is different */
//#define SERIAL_SUM_PPM PITCH,YAW,THROTTLE,ROLL,AUX1,AUX2,CAMPITCH,CAMROLL //For Graupner/Spektrum
//#define SERIAL_SUM_PPM ROLL,PITCH,THROTTLE,YAW,AUX1,AUX2,CAMPITCH,CAMROLL //For Robe/Hitec/Futaba
//#define SERIAL_SUM_PPM PITCH,ROLL,THROTTLE,YAW,AUX1,AUX2,CAMPITCH,CAMROLL //For some Hitec/Sanwa/Others
/* interleaving delay in micro seconds between 2 readings WMP/NK in a WMP+NK config */
/* if the ACC calibration time is very long (20 or 30s), try to increase this delay up to 4000 */
/* it is relevent only for a conf with NK */
#define INTERLEAVING_DELAY 3000
//for V BAT monitoring
//after the resistor divisor we should get [0V;5V]->[0;1023] on analog V_BATPIN
// with R1=33k and R2=51k
// vbat = [0;1023]*16/VBATSCALE
#define VBATSCALE 131 // change this value if readed Battery voltage is different than real voltage
#define VBATLEVEL1_3S 107 // 10,7V
#define VBATLEVEL2_3S 103 // 10,3V
#define VBATLEVEL3_3S 99 // 9.9V
/* when there is an error on I2C bus, we neutralize the values during a short time. expressed in microseconds */
/* it is relevent only for a conf with at least a WMP */
#define NEUTRALIZE_DELAY 100000
/* this is the value for the ESCs when thay are not armed */
/* in some case, this value must be lowered down to 900 for some specific ESCs */
#define MINCOMMAND 1000
/* this is the maximum value for the ESCs at full power */
/* this value can be increased up to 2000 */
#define MAXTHROTTLE 1850
/* This is the speed of the serial interface. 115200 kbit/s is the best option for a USB connection.*/
#define SERIAL_COM_SPEED 115200
/* In order to save space, it’s possibile to desactivate the LCD configuration functions */
/* comment this line only if you don’t plan to used a LCD */
//#define LCD_CONF
/* to use Cat’s whisker TEXTSTAR LCD, uncomment following line. */
/* Pleae note this display needs a full 4 wire connection to (+5V, Gnd, RXD, TXD ) */
/* Configure display as follows: 115K baud, and TTL levels for RXD and TXD, terminal mode */
/* NO rx / tx line reconfiguration, use natural pins */
//#define LCD_TEXTSTAR
/* motors will not spin when the throttle command is in low position */
/* this is an alternative method to stop immediately the motors */
//#define MOTOR_STOP
/* some radios have not a neutral point centered on 1500. can be changed here */
#define MIDRC 1500
/* experimental */
/* camera trigger function : activated via AUX1 UP, servo output=A2*/
//#define CAMTRIG
#define CAM_SERVO_HIGH 2000 // the position of HIGH state servo
#define CAM_SERVO_LOW 1020 // the position of LOW state servo
#define CAM_TIME_HIGH 1000 // the duration of HIGH state servo expressed in ms
#define CAM_TIME_LOW 1000 // the duration of LOW state servo expressed in ms
/* you can change the tricopter servo travel here */
#define TRI_YAW_CONSTRAINT_MIN 1020
#define TRI_YAW_CONSTRAINT_MAX 2000
//****** end of advanced users settings *************
Где я накосячил?
А как кусок скетча сделать в окошке с полосой прокрутки?
А как кусок скетча сделать в окошке с полосой прокрутки?
в расширенном режиме #, означает что вы вставляете код в сообщение
А у меня при загрузке в ардуино нано
Потому что надо тип платы выбрать в паршивке:
#define PROMINI //Arduino type
//#define MEGA
И потри свое громадное сообщение выше, имей совесть… или заключи в макросы [_code][/_code] (подчеркивание убрать)
Пошаманил в коде, добавил деление на аксель
Переделайте в ITG3200 и ничего не надо будет делить… wbb.multiwii.com/viewtopic.php?f=6&t=27&start=20
И потри свое громадное сообщение выше
Уже не могу:(
Переделайте в ITG3200 и ничего не надо будет делить…
Вроде не мой случай, если не ошибаюсь
У меня с гирой всё в порядке, а аксель зашкаливает не по детски, график раза в 4 больше чем от гиры, потому у акселя и поделил.
Вроде не мой случай, если не ошибаюсь
Возможно это относится не ко всем гирам на 3205, но вот почитайте про проблемку (+ след-й пост от ziss_dm), которая явно может приветси к крешу!
This is yet another bug in the WMP, you see - the rapid turnover gyro, 90 degrees per 0.5 sec, visualization GUI is not responding properly, there is no response to the lean.
ziss_dm: I have spent day trying to solve this issue using code workarounds, but was not able to find solution. Looks like WMP firmaware has mistake in code which converts 16bit signed values from the ITG3205 to the WMP’s 14bit unsigned. That is why I decided to connect ITG3205 directly to the arduino.
wbb.multiwii.com/viewtopic.php?f=6&t=27&p=752&hili…
mahowik, да суть не в этом.
Была поставлена задача запустить 2 синие платы на ITG3205 и ADXL335, так как народ пишет, что не работают они вообще.
Задача выполнена, эти Wii + NK запустились без проблем, то что надо шаманить с кодом, отдельный вопрос.
Я себе сделал на itg3205+bma020, работает.
А это эксперименты, исключительно по подключению и запуску модулей 😃
А это эксперименты, исключительно по подключению и запуску модулей
Задача выполнена, эти Wii + NK запустились без проблем, то что надо шаманить с кодом, отдельный вопрос.
Эксперименты эт хорошо! 😃 Будет полезным тогда увидеть детали: pullups ON/OFF, 100/400kHz и т.д.
Может еще чего в коде меняли?
Требования для i2c.
Пороговое напряжение затвора: VGS(th) не менее 0.1В, не более 2В
Сопротивление открытого канала: RDS(on) не более 100 Ом при токе стока ID= 3 мА, VGS= 2.5В
Входная емкость: Ciss не более 100 пФ при VDS= 1В, VGS = 0В
Время переключения: ton toff не более 50 нс
Допустимый ток стока: ID 10 мА или более
---------------------
В схеме ВМА020 для LLC используются транзисторы IRLML 2402. (по даташиту обозначение на корпусе “A” = IRLML 2402, емкость Ciss = 110 pF).
Но на плату напаяны вот такие транзисторы: “G” = IRLML 2502, Ciss = 740 pF.
---------------
Оба эти транзисторы - силовые, с очень малым сопротивлением, но большой емкостью.
Хорошо для драйверов, плохо для i2c, особенно для 400кГц. Кто знает точно, поправьте?
Эксперименты эт хорошо! Будет полезным тогда увидеть детали: pullups ON/OFF, 100/400kHz и т.д.
Может еще чего в коде меняли?
Чуть позже, вернусь с работы, фото и комменты выложу обязательно.
Собственно вот, подопытные кролики, сфотографированы с обеих сторон.
Разрисовал схему подключения.
Питание 3v3
В коде следующее:
I2C_SPEED 100kHz, на 400 один раз запустилась.
I2C_PULLUPS OFF у меня на шине стоят 4.7кОм
Про деление писал выше.
Скрин GUI и про деление показаний акселя выше в теме.
Делил из за акселя, чувствительность у него просто мегаогромная, стук пальца график зашкаливает.
Платка нунчака кастрирована, справа стоит перемычка.
Вроде ничего не напутал.
P.S.: в стране энергетический кризис, 8 раз за час свет вырубали 😃
оно всетаки взлетело, но туповатый тачскрин совершенно не дает управлять нормально, даже газ не успел сбросить (на девайсе всего 3 кнопки, одну повесил на экстренное отключение моторов)
в общем жду пультик с HK или выбираюсь на природу со своей самоделкой
кстаии он всегда в бок уходит (3 раза взлетал), но всегда в разный бок… PIDы или вибрация? датчики проложил пенистой фигней, в которой моторый были упакованы и зажал между 2мя ардуинками, моторы вибрируют, но незначительно совсем - идеальности не удалось добиться - как скотч не клей, почти одна и таже вибрация
оно всетаки взлетело
Продожение сериала “Прыгающий коптер Глеба Девяткина”!!! 😃
Наученный прошлым опытом через стекло смотрю снимал?! 😃
да, так спокойнее + снимал не я, а жена беременная - опасно =)
Олег, попробовал последнюю прошивку.
- YAW плывет.
- Если отключить аксель, работает только один двигатель.
С положительным результатом!
Смеялся долго, напоминает, как в американских фильмах, площадка для наблюдений за стеклом!)))
Подскажите чайнику как заставить работать Файлсейв? Прошивка MultiWii1_preter7. При пропадании сигнала сразу обрубает движки. Уже два раза коптер с метров 50 приземлялся как топор.
Огромное спасибо укротителю чпу и вертомноголетов непревзойденному дизайнеру Piranha за суперское, мега функциональное вместилище для мозгов и моторов, раму Fire.
Подключил аксель из нунчака к аналоговым входам (как в посте #1343). Стала греться мега на ардуине, не сильно, но греется. Так должно быть или я снова накосячил? В ГУИ все работает.