MultiWii

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:

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

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

nemo61
soliada:

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

Угу. Деталь от Вимоушен есть гира. Подключаю гиру к ардуинке - система работает. Далее хочу добавить акселерометр. Вот тут и не получается. земля к ардуине подключена.

soliada

Скачал последнюю версию прошивки MultiWii_dev_20111203,как оказалось открывается только в Arduino 1.0
Скачал,установил,открыл скеч…не компилируется.Выдает ошибку.Пробовал открывать предыдушие прошивки в Arduino 1.0,
тоже не компилируются по аналогичной причине.

mahowik

pereimenuyte *.ino v *.pde i vse skompilitsya v arduino-0022

sulaex
nemo61:

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

Схема

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

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

на плате резистор удалить надо, я об этом писал где то, поищите

зы rcopen.com/blogs/91496/12370

kergo
kedrikov:

они резонировать будут

Эти алюминиевые балки чуть толще фольги. Я использовал не обрезая. Короче ничего хорошего. Потом перешел на карбон. Разница большая.
А вот если падать\жестко садиться. Аллюминий согнется однозначно, карбон может еще и выдержит не сильный удар.

kedrikov

Вот как раз по вашему примеру решил делать раму.Квадраты алюминиевые меня не устраивают своим огромным по нашим меркам весом 😃 да и как-то не очень красиво.Все тогда беру карбон.

Может кому пригодится скидочка
www.hobbyking.com/buddy.asp?code=07D59091-D512-471…
www.hobbyking.com/buddy.asp?code=A6B9F649-1F93-4FB…
www.hobbyking.com/buddy.asp?code=3D622362-72FF-4CE…