MultiWii

mahowik
photocanon:

акселерометр аналогово подключен на 1 2 3 порта А

ошибка тут 😃 я когда по аналогу подключал аксель давным давно, тож самое получил… причина проста АЦП ардуины работает от опорного напряжения (питания наверно)… от УСБ это 4.7- 4.8в, а при подключении например о БЕК регуля ровно 5в…, вот и разность в оцифровке… просто когда коптер автономен (без подключения по УСБ т.е.) сделайте калибровку акселя с пульта еще раз…

быстрее выкидаыте свой пиленный чак! )) сейчас сенсоры приличные уже копейки стоят, а ни как год назад ))

www.rctimer.com/index.php?gOo=goods_details.dwt&go…
www.rctimer.com/index.php?gOo=goods_details.dwt&go…

photocanon
mahowik:

ошибка тут 😃 я когда по аналогу подключал аксель давным давно, тож самое получил… причина проста АЦП ардуины работает от опорного напряжения (питания наверно)… от УСБ это 4.7- 4.8в, а при подключении например о БЕК регуля ровно 5в…, вот и разность в оцифровке… просто когда коптер автономен (без подключения по УСБ т.е.) сделайте калибровку акселя с пульта еще раз…

Да кстати верное замечание, от USB у меня 4.8 выходит со шнурка проходя шоттки падает до 4.6 там это все идет как я понял на LDO после которого на 3.3V на самом деле становится 3.2 и отсюда видимо и есть этот уход напряжения = полностью согласен.

mahowik:

быстрее выкидаыте свой пиленный чак! )) сейчас сенсоры приличные уже копейки стоят, а ни как год назад ))

www.rctimer.com/index.php?gOo=goods_details.dwt&go…
www.rctimer.com/index.php?gOo=goods_details.dwt&go…

Еслиб они стоили так в апреле взял бы не задумываясь уже просто время ушло, мне комплект обошелся в 15баксов ардуина и датчики оба в 14баксов почти вобщем тоже самое только пилить ничего не надо.
Кстати все платы разные пришли заказывал по паре моушнов и нунчаков, в диалэкстримовском очень похож по корпусу на ADXL345 или как он там не помню. гиры одинаковые только платки отличаются.
Пытался по IIC подключать аксель гонит какуюто ерунду.

к вечеру вобщем залил ваше вроде как творение 2.0.а0 покрутил стикки по кругу и о чудо… получилось с неотцентрованным коптером взлететь и повисеть секунд 5 пока он плавненько в стену не сместился…
Программка от Немца конфигуратор под винду прикольная штука, альтиметр клёво нарисовал он.

Выводы вобщем у меня такие, запитать платку отдельным напряжением когда подключена к компу в обход USB и калибрануть.

У меня цель в июле полетать с камерой, комплект весь есть для FPV. Щас подвес осталось склепать.

mahowik
photocanon:

У меня цель в июле полетать с камерой, комплект весь есть для FPV. Щас подвес осталось склепать.

камеру прилепите и срочно летать! )) лето пройдет быстро! да и если просто полетать для фана, а не снимать, народ пишет что без подвеса даже удобнее… понятней где горизонт ))

photocanon
mahowik:

камеру прилепите и срочно летать! )) лето пройдет быстро! да и если просто полетать для фана, а не снимать, народ пишет что без подвеса даже удобнее… понятней где горизонт ))

я имел ввиду что у меня щас покачто голая рама + собранное на коленке без ножек.

Felar_Furlong
photocanon:

Выводы вобщем у меня такие, запитать платку отдельным напряжением когда подключена к компу в обход USB и калибрануть.

чтобы аксель калибрануть, плату к компу подключать не обязательно:
…googlecode.com/…/MultiWii-StickConfiguration-18_v…
это можно с передатчика сделать.

Alexey_1811

Кто использовал датчик LSM330DLC поделитесь, пожалуйста, функциями инициализации и чтения данных.

gena_g
Alexey_1811:

Кто использовал датчик LSM330DLC поделитесь, пожалуйста, функциями инициализации и чтения данных.

// ************************************************************************
// LSM303DLHC I2C Accelerometer
// ************************************************************************
#if defined(LSM303DLHC_ACC)
#define LSM303DLHC_ADDRESS 0x19 // 0x32 (8bit) 0x19 (7bit)
void ACC_init(){
   delay(10);
  i2c_writeReg(LSM303DLHC_ADDRESS ,0x20 ,0x47 ); // CTRL_REG1_A   0100 0111  Pwr on, 50Hz
  delay(5);
  i2c_writeReg(LSM303DLHC_ADDRESS ,0x23 ,0xA8 ); // 1010 1000 8g hr

   acc_1G = 256;
}
void ACC_getADC(){
  TWBR = ((16000000L / 400000L) - 16) / 2; // change the I2C clock rate to 400kHz
  i2c_getSixRawADC(LSM303DLHC_ADDRESS,0x28+0x80); // Start multiple read at reg 0x28
  ACC_ORIENTATION( ((rawADC[1]<<8) | rawADC[0])/16 ,
                   ((rawADC[3]<<8) | rawADC[2])/16 ,
                   ((rawADC[5]<<8) | rawADC[4])/16 );
  ACC_Common();
}
#endif
// ************************************************************************************************************
// I2C Compass LSM303DLHC
// I2C adress: 0x3C
// ************************************************************************************************************
#if defined(LSM303DLHC_MAG)
#define LSM303DLHCMA 0x1E // 0x3C (8 bit)   0x1E (7 bit)
  void Mag_init() {
     i2c_writeReg(LSM303DLHCMA,0x00,0x10);  //CRA_REG_M 15hz data refresh
    i2c_writeReg(LSM303DLHCMA,0x01,0x60);  //CRB_REG_M +/- 2.5Ga
    i2c_writeReg(LSM303DLHCMA,0x02,0x00);  //MR_REG_M Continous conversion mode

    magInit = 1;
  }

    void Device_Mag_getADC() {
      i2c_getSixRawADC(LSM303DLHCMA,0x03);
      MAG_ORIENTATION( ((rawADC[0]<<8) | rawADC[1]) ,
                      ((rawADC[4]<<8) | rawADC[5]) ,
                      ((rawADC[2]<<8) | rawADC[3]) );
    }
 #endif
VitaliyRU

А никто не пробовал arduino pro mini 16 mHz (и ей подобных), запускать от 3.3 вольта с внешним стабилизатором?
приемник и регули запустились и работали, ардуину я похоже подпалил, ошибся при подключении в итоге мигала светодиодом как при пустой прошивке. А прошить не могу у нее serial тоже убиенный 😃)
Не понятно стоит дальше пробовать или нет.
Смысл упражнения сэкономить 2 грамма веса на мелколете.

Alexey_1811

Запустил датчики сам. В полете еще не пробовал. Может кому пригодится.

// ************************************************************************************************************
// I2C ACC+GYRO LSM330DLC
// ************************************************************************************************************
#if defined(LSM330DLC)
//ACCELEROMETR
void ACC_init () {
  delay(10);
  i2c_writeReg(0x19,0x20,0x37);
  i2c_writeReg(0x19,0x23,0x10);

  acc_1G = 256;
}

  void ACC_getADC () {
  TWBR = ((F_CPU / 400000L) - 16) / 2;
  i2c_getSixRawADC(0x19,0x28|0x80);

  ACC_ORIENTATION( ((rawADC[1]<<8) | rawADC[0])/16 ,
                   ((rawADC[3]<<8) | rawADC[2])/16 ,
                   ((rawADC[5]<<8) | rawADC[4])/16 );
  ACC_Common();
}
// GYROSCOPE
void Gyro_init () {
  delay(10);
  i2c_writeReg(0x6B, 0x20, 0xBF);
}

void Gyro_getADC () {
  TWBR = ((F_CPU / 400000L) - 16) / 2;
  i2c_getSixRawADC(0x6B,0x28|0x80);

  GYRO_ORIENTATION( ((rawADC[1]<<8) | rawADC[0])/20 ,
                   ((rawADC[3]<<8) | rawADC[2])/20 ,
                   ((rawADC[5]<<8) | rawADC[4])/20 );
  GYRO_Common();
}

#endif
SovGVD

Всетаки подохла одна из серв (тупо прокручивается где то шестеренка, до этого похрустывала, хотя на вид всё хорошо), поставил цифровую серву с трикоптера и получил вот такой странный косяк

www.youtube.com/watch?v=OimcU4twZiI

при подключении аналоговой - никаких дерганий нет… куда копать?

photocanon
VitaliyRU:

Смысл упражнения сэкономить 2 грамма веса на мелколете.

Смысла экономить 2 и 10 грамм вообще нет, просто для примера моя вот эта конструкция на 6хDT750 Gemfan 11х47 со стекловолокном жоские не хобикинговские!
4S-акк тянет на подъем в пределе 4.65 кг полезной массы с учетом того что он сам примерно 1.5весит т.е. на 1 мотор тяга около 900-1050грамм

замерял вешая на каждые два луча полторашку воды по кругу, на максимуме было уже страшно лететь с 3-мя полторахами на КК )))

SovGVD

странное поведение гексы (на трешке и квадрике такого не было)
ставлю #define YAW_DIRECTION 1 - при попытке взлететь начинает крутиться по часовой стрелке и взлететь просто не реально
ставлю #define YAW_DIRECTION -1 - всё отлично летает и никуда не крутится, но вращается в обратную сторону
как поправить? =)
зы: вернул аналоговую серву на подвес, нормально работает, но слабенькая

mahowik
SovGVD:

ставлю #define YAW_DIRECTION -1 - всё отлично летает и никуда не крутится, но вращается в обратную сторону

если долго не думать, то просто реверс на аппе вруби ))

SovGVD
mahowik:

просто реверс на аппе вруби ))

ну это какой то костыльный вариант =) у меня пока 2 варианта - поменять миксы моторов (толк, если yaw_directions еще где то используется), инвертировать Z ось на гире

upd: инвертировал ось Z у гиры - теперь нормально всё… и умудрился сломать последнюю серву на подвесе =)) теперь и она хрутистит, но хоть видно где и почему

VitaliyRU
photocanon:

Смысла экономить 2 и 10 грамм вообще нет

2 грамма это например полминуты полета. Там общий вес 80 грамм, из них акк 20 грамм.
Но это даже не главное. Он перегружен и весить больше половины суммарной тяги(140 грамм), что не очень хорошо. В планах всего выкроить 6 грамм, что 8% веса и очень не плохо.
А вообще на всем что летает, вес всегда экономили, чай не бульдозер.

Alexey_1811

Помогите настроить каналы приемника hobbyking 2.4Ghz 6ch v2 подключенного по ppm sum. Розкоментировал строку
#define SERIAL_SUM_PPM PITCH,ROLL,THROTTLE,YAW,AUX1,AUX2,AUX3,AUX4 //HK 6ch
Менял каналы местами но логики в изменениях ноль. Апа Turnigy 9ch

mataor

она у тебя вообще реагирует? да кстати… получается передатчик турниджи а приемник от т6? стыкуются?
у меня просто аналогичная аппа от FlySky (FS-CT6B-), так вот там по обычным каналам прямой сигнал, а по ппмсум инверсный - соответственно по ппмсум прерывание в обработчике не по фронту а по спаду нужно (rising на falling)

Alexey_1811

Реагирует но как то медленно. На выходе ППМСУМ между пакетами высокий уровень, выходит инверсный?
Где меняется rising на falling?

mataor

в def.h найди в разделе
/************************** atmega328P (Promini) ************************************/
строчку
#define PPM_PIN_INTERRUPT attachInterrupt(0, rxInt, RISING); //PIN 0
и там попробуй заменить RISING на FALLING

photocanon

а ктонибудь знает как включить 6-й импульс в сумматоре на спад а не на поднятие, а то таже по сути аппа HK 6калалка 2.4ггц, но после суммирования видятся только первые 5 каналов так как нет импульса после 6-го

пс. помоему вот такая модификация в файле RX.pde:

void rxInt() {
  uint16_t now,diff;
  static uint16_t last = 0;
  static uint8_t chan = 0;

  now = micros();
  diff = now - last;
  last = now;
  if(diff>3000) chan = 0;
  else {
    if(900<diff && diff<2200 && chan<8 ) {   //Only if the signal is between these values it is valid, otherwise the failsafe counter should move up
      rcValue[chan] = diff;
      #if defined(FAILSAFE)
        if(failsafeCnt > 20) failsafeCnt -= 20; else failsafeCnt = 0;   // clear FailSafe counter - added by MIS  //incompatible to quadroppm
      #endif
    }
    chan++;
    if(chan==5) attachInterrupt(0, rxInt, FALLING);    //set to falling edge to receive last channel (YAW)
    if(chan==6) attachInterrupt(0, rxInt, RISING);      //set back to rising edge and wait for another loop
  }
}