Создание собственной системы стабилизации
блин, решил поморгать светодиодиками, а работают только 2 из четырёх - обидно…
А кто что думает по поводу DMP в MPU6000/MPU6050, он по идее сам фузинит данные акселя и гиры и выдает кватернионы. Стоит с ним возится?
А кто что думает по поводу DMP в MPU6000/MPU6050, он по идее сам фузинит данные акселя и гиры и выдает кватернионы. Стоит с ним возится?
У него есть проблема с “фузинированием” данных от компаса 😃
блин, решил поморгать светодиодиками, а работают только 2 из четырёх - обидно…
разобрался, ну по крайней мере проц рабочий, плата правильная, можно извращатся дальше 😃
У него есть проблема с “фузинированием” данных от компаса
Это да, врожденный недостаток сенсора =)))
так можно только цифирку писать - AF из таблицы? а я писал везде uartX, timerX…
Это если у тебя эти имена определены, я то стандартными библиотеками пользуюсь.
А кто что думает по поводу DMP в MPU6000/MPU6050,
Для меня более интересно было бы иметь транзит данных компаса с И2Ц на МПУшный SPI.
Для меня более интересно было бы иметь транзит данных компаса с И2Ц на МПУшный SPI.
В Multiwii посмотрите, они настраивают MPU на чтение компаса, а сами потом уже читают данные из внутренних регистров MPU.
там просто транзит, а вот по 6000 бог его знает, надо чтобы мпу мастером читала компас записывала в регистры, а потом их (данные) можно было забрать через spi…
зря я кнопочку reset не сделал и место под неё как раз есть, надо будет исправить…
там просто транзит, а вот по 6000 бог его знает, надо чтобы мпу мастером читала компас записывала в регистры, а потом их (данные) можно было забрать через spi…
Там как раз так и сделано, во всяком случае в 2.2:
Чтение компаса:
//The MAG acquisition function must be replaced because we now talk to the MPU device
#if defined(MPU6050_I2C_AUX_MASTER)
void Device_Mag_getADC() {
i2c_getSixRawADC(MPU6050_ADDRESS, 0x49); //0x49 is the first memory room for EXT_SENS_DATA
#if defined(HMC5843)
....
инициализация MPU:
#if defined(MPU6050_I2C_AUX_MASTER)
//at this stage, the MAG is configured via the original MAG init function in I2C bypass mode
//now we configure MPU as a I2C Master device to handle the MAG via the I2C AUX port (done here for HMC5883)
i2c_writeReg(MPU6050_ADDRESS, 0x6A, 0b00100000); //USER_CTRL -- DMP_EN=0 ; FIFO_EN=0 ; I2C_MST_EN=1 (I2C master mode) ; I2C_IF_DIS=0 ; FIFO_RESET=0 ; I2C_MST_RESET=0 ; SIG_COND_RESET=0
i2c_writeReg(MPU6050_ADDRESS, 0x37, 0x00); //INT_PIN_CFG -- INT_LEVEL=0 ; INT_OPEN=0 ; LATCH_INT_EN=0 ; INT_RD_CLEAR=0 ; FSYNC_INT_LEVEL=0 ; FSYNC_INT_EN=0 ; I2C_BYPASS_EN=0 ; CLKOUT_EN=0
i2c_writeReg(MPU6050_ADDRESS, 0x24, 0x0D); //I2C_MST_CTRL -- MULT_MST_EN=0 ; WAIT_FOR_ES=0 ; SLV_3_FIFO_EN=0 ; I2C_MST_P_NSR=0 ; I2C_MST_CLK=13 (I2C slave speed bus = 400kHz)
i2c_writeReg(MPU6050_ADDRESS, 0x25, 0x80|MAG_ADDRESS);//I2C_SLV0_ADDR -- I2C_SLV4_RW=1 (read operation) ; I2C_SLV4_ADDR=MAG_ADDRESS
i2c_writeReg(MPU6050_ADDRESS, 0x26, MAG_DATA_REGISTER);//I2C_SLV0_REG -- 6 data bytes of MAG are stored in 6 registers. First register address is MAG_DATA_REGISTER
i2c_writeReg(MPU6050_ADDRESS, 0x27, 0x86); //I2C_SLV0_CTRL -- I2C_SLV0_EN=1 ; I2C_SLV0_BYTE_SW=0 ; I2C_SLV0_REG_DIS=0 ; I2C_SLV0_GRP=0 ; I2C_SLV0_LEN=3 (3x2 bytes)
#endif
надо что бы компас физически сидел на доп. i2c шине mpu…
Александр, но эт понятно, жаль Сергей в своей плате это не предусмотрел.
Я как-то не вижу в этом особого смысла, можно будет, если всё нормально, в доработанной версии предусмотреть перемычки как в AIO
проект скомпилировал, но он, к сожалению, не запустился 😦
сижу разбираюсь…
проект скомпилировал, но он, к сожалению, не запустился
ну дык ты его отладчиком проутюжь, хотя бы инициализацию внутренних устройств, проблема скорей всего там.
Я как-то не вижу в этом особого смысла,
Смысл есть в части упрощения процедур чтения датчиков, можно в пдп через SPI всё читать одним потоком в память, а там разбирай как хочешь. Тут смысл не в скорости, а в надёжности. Единственнный вопрос как МПУшка как мастер и2ц выводит шину из зависания.
не могу разобраться с памятью:
*** error 65: access violation at 0x40023800 : no 'read' permission
это в кеил, что дебаггер не знает такого камня?
Думаю надо начинать всё сначала, сделать периферию, а потом уже wii встраивать, ибо я уже запутался где что…
это в кеил, что дебаггер не знает такого камня?
Это ты эмулятором отлаживаешь? Если да, то не стоит, подключи JTAG.
Думаю надо начинать всё сначала, сделать периферию, а потом уже wii встраивать, ибо я уже запутался где что…
Это правильное решение, разберись где алгоритм обращается к датчикам и устройствам и от этих точек рисуй функции вниз к перефирии.
залил в GIT, то что сейчас имеется github.com/SergDoc/…/Tests_NO_flight , ибо не имею представления где сейчас копать. проект под кеил и эклипс (не хочет нормально hex собирать в эклипсе, кеил собирает)…
подключи JTAG.
на данный момент, я это - сапожник без сапог 😃
под эклипсом ошибку нашел, в макефайле, теперь hex собирается, буду переделывать периферию 😦
SRCSASM := $(wildcard src/*/startup_stm32f4xx.S)
проц не стартует вообще…
опытным путём установлено: multipilot32 лезет в мой проц, но тоже не запускается 😦 точнее родная прошивка пытается запускаться… буду изучать…
так что пока работает только моргалка светодиодами. И это на Ф4 - помоему перебор с процем 😃
а у меня dfu работает 😃 можно лить во флеш через usb code.google.com/p/multipilot32/downloads/detail?na…
намного быстрее чем через com…
оно мне определяет все 12 секторов флеши, странно…
дабы не потерялось, чтобы эклипс дружил с pde и ino файлами надобно провернуть:
Once you have Eclipse installed and running you should select ‘Help’ -> ‘Install New Software…’ from the menu bar. Click the ‘Add…’ button in the upper-right hand corner of the dialog box. Fill in the fields as follows:
Name: Processing Plug-in
Location: eclipse.processing.org/plugin/site.xml