MultiWii

native18
Musgravehill:

В свободном падении по осям будет 0.

Спасибо.
Это что же получается, что МультиВии высоту тоже отслеживает?

kedrikov
native18:

Спасибо.
Это что же получается, что МультиВии высоту тоже отслеживает?

При помощи баро датчика или жпс,или же совмесно для большей точности

Musgravehill
native18:

МультиВии высоту тоже отслеживает?

Только проекции сил по осям. Именно так предлагается дополнить бародатчик для удержания высоты: ПИД по давлению воздуха, ПИД по оси Z: проекция F=m*(g-a). Коптер сваливается или взмывает вверх - идет возмущение по давлению воздуха, и по ускорению (g-a) по оси Z.

native18:

курс

Курс определяется только гироскопом (ДУС) и магнитометром.
Для компенсации наклона магнитометра нужен акселерометр.

native18

Еще вопрос назрел. Скачал MultiWii_1_9.
Но вот не пойму, это какая то урезанная версия? или это заплатка?
Внутри нет выбора вида коптера и пр.
Искал по теме ничего по этому поводу не нашел.
Объясните, может я не то скачал или куда это вставить, чтобы получилась полная прошивка.
Работал с файлом MultiWii_1_9.pde

devv

Внутри нет выбора вида коптера и пр.

Вроде есть.

devv
native18:

Работал с файлом

Неверно не в той папке открываете

если в MultiWiiConf_1_9 то там только MultiWiiConf_1_9.pde размером всего 47 кб

А надо в папке MultiWii_1_9 открывать любой pde, там есть всё.

native18

Спасибо, все понял, там оказывается еще куча вкладок и надо открыть вкладку config.h

soliada

Может кому нибудь будет интересно
Код для пары еще одних датчиков.Один акселерометр,другой компас-акселерометр в одном корпусе.


// ************************************************************************
// LSM303DLHC I2C Accelerometer
// ************************************************************************
#if defined(LSM303DLHC)
// I2C adress: 0x32 (8bit)

void ACC_init(){
   delay(10);
  i2c_writeReg(LSM303DLHC_ADDRESS ,0x20 ,0x27 );
  delay(5);
  i2c_writeReg(LSM303DLHC_ADDRESS ,0x23 ,0xA8 );
   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[3]<<8 | rawADC[2])/16,
                   -(rawADC[1]<<8 | rawADC[0])/16,
                   -(rawADC[5]<<8 | rawADC[4])/16);
  ACC_Common();
}
#endif



// ************************************************************************
// LIS3DH I2C Accelerometer
//  1) CS PIN must be linked to VCC to select the I2C mode
//  2) SD0 PIN must be linked to VCC to select the right I2C adress
// ************************************************************************
#if defined(LIS3DH)
// I2C adress: 0x32 (8bit)

void ACC_init(){
   delay(10);
  i2c_writeReg(LIS3DH_ADDRESS ,0x20 ,0x57 );
  delay(5);
  i2c_writeReg(LIS3DH_ADDRESS ,0x23 ,0x88 );
   acc_1G = 256;
}

void ACC_getADC(){
  TWBR = ((16000000L / 400000L) - 16) / 2; // change the I2C clock rate to 400kHz
  i2c_getSixRawADC(LIS3DH_ADDRESS,0x28+0x80); // Start multiple read at reg 0x28
  ACC_ORIENTATION(  (rawADC[3]<<8 | rawADC[2])/64,
                   -(rawADC[1]<<8 | rawADC[0])/64,
                   -(rawADC[5]<<8 | rawADC[4])/64);
  ACC_Common();
}
#endif


// ************************************************************************************************************
// I2C Compass LSM303DLHC
// ************************************************************************************************************
// I2C adress: 0x3C (8bit)
// ************************************************************************************************************
#if defined(LSM303DLHC)
void Mag_init() {
  delay(100);
  i2c_writeReg(0X3C ,0x02 ,0x00 );  //Start the first conversion
  delay(100);
}

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



mahowik
soliada:

Может кому нибудь будет интересно Код для пары еще одних датчиков.Один акселерометр,другой компас-акселерометр в одном корпусе.

в 1.9 уже добавили LSM303…
для остальних забросьте на офф форум, а то погибнут труды 😃

// ************************************************************************************************************
// I2C Accelerometer LSM303DLx
// contribution from wektorx ()
// ************************************************************************************************************
#if defined(LSM303DLx_ACC)
void ACC_init () {
  delay(10);
  i2c_writeReg(0x30,0x20,0x27);
  i2c_writeReg(0x30,0x23,0x30);
  i2c_writeReg(0x30,0x21,0x00);

  acc_1G = 256;
}

  void ACC_getADC () {
  TWBR = ((16000000L / 400000L) - 16) / 2;
  i2c_getSixRawADC(0x30,0xA8);

  ACC_ORIENTATION( - ((rawADC[3]<<8) | rawADC[2])/16 ,
                     ((rawADC[1]<<8) | rawADC[0])/16 ,
                     ((rawADC[5]<<8) | rawADC[4])/16 );
  ACC_Common();
}
#endif
soliada
mahowik:

в 1.9 уже добавили LSM303…

Это я знаю.Там код для немного другого датчика в корпусе LGA28,у меня с ним так и не заладилось,производитель или что-то намудрил с питанием или сделал ошибку в даташите.
LSM303DLHC корпус LGA14,точно такой же как у ADXL345.
Хотя по назначению и адресам регистров они практически одинаковые, есть конечно некоторые не значительные отличия.
Компасная часть аналогична компасу HMC5883,можно даже тупо раскомментировать HMC5883 и будет работать.
Огромный плюс,нет запарки с направлением осей.
Да,с Мультивийным кодом имеющиеся у меня датчики почему то не заработали.

kedrikov

Подскажите плиз…Как поведет себя коптер если плату с датчиками (алинван) сместить на 3-4 сантиметра от центра по крену.?Насколько сильео повлияет это на его поведение и стабильность?

Musgravehill
kedrikov:

плату с датчиками (алинван) сместить на 3-4 сантиметра от центра

у меня никогда по центру масс ЦМ плата с датчиками не была. Каждый раз оказывалась сбоку внутри корпуса ЛА. Проблем не замечал.
Посмотрите хотя бы на фирменных сайтах (NAZA DJI, например) ЛА на обложках, где лежат красивые коробочки с мозгами - часто сбоку. И ничего, летает.

kedrikov

Вот блин а я чет зацепился за этот центр …

Musgravehill
kedrikov:

а я чет зацепился за этот центр

5 сантиметров ничего не решают. Все-равно, акселерометр находится “рядом” с тяжелым аккумулятором в центральной части.
+_5 см - как раз, примерно такой размер имеет центральная часть, куда крепят датчики.

nemo61

Пытаюсь подключить акселерометр

Схема

При этом светодиод на плате не горит и сигналов на выходе нет.
Если делаю так

То выходные сигналы появляются, но они неизменны.
У кого нибудь такое работает?

skyrider

У меня заработал полноценно при подключении CS и SDO на VCC.

soliada
nemo61:

Пытаюсь подключить акселерометр

Пины CS и SDO в варианте МультиВи должны быть подсоединины на VCC, CS-выбор между I2C и SPI, SDO-вариант адреса датчика.
Вопрос,а питание подаете 3.3 или 5в?

nemo61
soliada:

Пины CS и SDO в варианте МультиВи должны быть подсоединины на VCC, CS-выбор между I2C и SPI, SDO-вариант адреса датчика.
Вопрос,а питание подаете 3.3 или 5в?

Спасибо. Завтра попробую. Питание подается 3,3в на пин 3,3.

nemo61
soliada:

Пины CS и SDO в варианте МультиВи должны быть подсоединины на VCC, CS-выбор между I2C и SPI, SDO-вариант адреса датчика.
Вопрос,а питание подаете 3.3 или 5в?

Сейчас у меня сделано так. Не работает…

soliada
nemo61:

Сейчас у меня сделано так. Не работает…

Что-то не понятно.Вроде вопрос был про как подключить акселерометр? На последней фото деталь от Вимоушен.
Как его подключить можно прочитать по ссылке на первой странице.
По рисунку,к ардуинке тоже надо подключить землю.