Создание собственной системы стабилизации
А кто что думает по поводу 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
опытным путём установлено: multipilot32 лезет в мой проц, но тоже не запускается
Сергей, без отладчика пересаживать прошивку это жёстко. Единственный вариант это ставить маячки на прошождение инициализации. Но тогда нужно очень внимательно глазами проверить инициализацию счёчика команд и стека. Для начала инициализировать в майне вывод на светодиод, и потихньку перемещать его включение ниже по программе.