Вообще период таймера не важен, главное чтобы перед заходом в MPU9250_Process() мы имели в uSec актуальное значение в микросекундах.
Я калибровку не делаю. А надо ли? Вызываю MPU9250_Init() на этапе инициализации и MPU9250_Process() в главном цикле скетча. Крен и тангаж по данным от магнетометра получаются хорошо. А вот рыскание почему-то одно и то же число 6.00. Интересно чего не хватает?
@mihayk Для магнетометра точно нужна калибровка будет... Надо под отладчиком посмотреть, откуда это число в итоге получается, какие там значения в формулах.
Вот так делаю калибровку для магнетометра:
MPU9250_Init(); MPU9250_CalibrationStart(MPU9250_MAG_SENSOR); while (MPU9250_CalibrationStep() == 0){;} MPU9250_CalibrationFinish();
Но ожидание функции MPU9250_CalibrationStep() бесконечно, т.к. внутри нее не выполняется условие:
if(readByte(MPU9250_MAGN_I2C_ADDRESS, ST1) & 0x01) { }
MPU9250_MAGN_I2C_ADDRESS = 0х0С.
И здесь магнетометр приказывает долго жить! Не пойму, специально с SPI перескочил на I2C, чтоб он заработал. Ну не может быть, чтоб 2 MPU9250 были с бракованными магнетометрами! Что делать?
@mihayk А в принципе readByte() возвращает что-то или HAL из I2C драйвера ошибку возвращает?
Нашел одну статью на русском языке.
Там автор утверждает что магнетометр AK8963 на MPU9250 надо включить, иначе он не работает.
Для этого он подключает датчик MPU-9250 по I2C в качестве ведомого к микросхеме FT2232H (т.е. по сути микроконтроллер). С ее помощью читает все регистры датчика MPU-9250 по I2C. При помощи программы чтения в регистр под номером 0x37 (INT_PIN_CFG) записывает значение 0x02. И утверждет, что после этого магнитометр оживает.
Не знаю, почему нельзя это сделать из STM32 командами записи в регистры, но у меня командой не получилось включить магнитометр.
writeByte(MPU9250_I2C_ADDRESS, INT_PIN_CFG, 0x02);
А вот возврат readByte() я посмотрю (к вопросу на ваше сообщение).
@mihayk хм, интересно. Я всегда запаивал просто в плату и сразу функционировало.
readByte(MPU9250_MAGN_I2C_ADDRESS, ST1)
возвращает 0х72
@mihayk хм, интересно. Я всегда запаивал просто в плату и сразу функционировало.
Где брал MPU9250? Если на али, то у какого продавца? Хочу попробовать заказ 3-ий раз у проверенных поставщиков!
Да у разных брал, кто попадется ) Вот в архиве заказов висят три позиции, но там страницы товаров уже недоступны, поэтому скрином кидаю просто:
Большие партии в Электронщике брал.