Библиотека MPU-6050 (I2C)

Juanpintom
Вт 23 июня 2015 г., 11:04
Привет всем, я пытаюсь заставить его работать MPU6050 на Maple Mini, я начал с этой библиотеки:
https: // github.com/jrowberg/i2cdevlib/t ... Нет/MPU6050

На Arduino PIN -код подключен на D2 (прерывание № 0), но я не знаю, что такое PIN -код на Maple Mini, я попробовал с PIN 2 и PIN -контактом 0.
Я прочитал эту ссылку: http: // Leaflabs.com/docs/внешнее интернет ... свет = exti Вот почему я попробовал с PIN -кодом 0.

Я работал без проблем, используя пример DMP6 на Arduino.

На Maplemini устройство I2C обнаружено, но дает ошибку при запуске DMP (код 1) из этой строки на Setup ()
https: // github.com/jrowberg/i2cdevlib/b ... 6.INO#L228

Я не знаю, может ли это быть связано с этой проблемой:
https: // github.com/rogerclarkmelbourne/ ... 2/проблемы/5

Я попробовал с примером RAW и получил странные значения, мне нужно получить ускорение силы G.

Завтра я сделаю больше тестов, у кого -нибудь есть этот датчик?

Действительно спасибо.

С уважением.

Rogerclark
Пт, 3 июля 2015 г. 1:58
Я посмотрел на MPU9150 некоторое время назад, но я помню, что были проблемы, даже в AVR.

Я использовал rtimulib, но, казалось, он использовал специальную версию i2Cdev, и когда я использовал обычную версию i2Cdev rtimulib, не будет работать :-(

Если вы планируете использовать MPU для чего -либо полезного, я бы посоветовал вам использовать использование Rtimulib, поскольку он обрабатывает все сложные математики, которые необходимы для использования MPU (есть много сложных математиков)

https: // github.com/rtimulib/rtimulib-arduino

Однако я думаю, что Ричард отказался от всей поддержки в Arduino's и даже прекратил поддержку Teensy и теперь просто использует RPI.

Средственно, использование MPU было тем, почему я изначально смотрел на использование STM32, так как я обнаружил, что AVR Arduino был слишком медленным, а единственная точная математика (даже если вы используете двойной тип данных), не было точным, чтобы сделать пригодным для использования MPU полезной MPU.

Однако в итоге я потратил все время, поддерживая различные аспекты STM32 и размещение репо и т. Д

Juanpintom
Пн 13 июля 2015 г., 18:29
Извините за поздний ответ! :( Я забываю включить уведомления: s

Я все еще работаю над этим, моя идея состоит в том, чтобы создать датчик G с MPU6050.

Я посмотрю на rtimulib-arduino

Действительно спасибо за вашу работу!, И спасибо за обмен!

Бдбелл
Чт 16 июля 2015 г. 13:42
У меня есть MPU9150, работая с Maple Mini - оба прикрепленных эскиза работают для меня. Эскиз DMP6 настроен для демонстрации чайника, которая работала хорошо - на самом деле оставил его на моем столе весь день, и он отлично работал.

MPU6150 должен работать так же, как для обоих эскизов, хотя вам, возможно, придется изменить файл MPU9150_RAW, чтобы он работал на MPU6150.

Первоначально у меня возникла проблема с тем, чтобы заставить его работать, потому что настройка адаптера программирования, которую я использовал для тестирования MPU9150. Я подключен к контакту 0, а светодиод мигает.

Juanpintom
Чт 16 июля 2015 г. 14:05
Ты потрясающий! Тай так много! Я попробую эту ночь и дам вам знать !

С уважением!

Juanpintom
Чт 16 июля 2015 г. 11:25
С примером DMP6 я получаю ту же (код 1) ошибку :( Я протестировал сырой пример и работает хорошо, но я не знаю, как я могу получить силу G от этих значений.
Я сделаю больше теста завтра.

Тай снова : P

С уважением

Rogerclark
Чт 16 июля 2015 г. 11:31
Ребята,

Если вам просто нужны очень основные данные с этих устройств, вам почти наверняка потребуется использовать rtimu.

Ну, если у вас нет степени по математике, которая.

Я изучил эту область, и это было далеко за пределами любой математики, которую я делал в школе до 12 -х годов, и мы не покрывали математику такого рода вещей на моем курсе степени.

Так.. Если вы не знакомы с кодированием фильтров Калмана и работой с Quaterions, я думаю, что вы будете обречены на неудачу, пытаясь кодировать это сами.

Бдбелл
Пт 17 июля 2015 г., 3:47
Juanpintom написал:С примером DMP6 я получаю ту же (код 1) ошибку :( Я протестировал сырой пример и работает хорошо, но я не знаю, как я могу получить силу G от этих значений.

Rogerclark
Пт 17 июля 2015 г., 5:11
@bdbell

Я помню, что у меня были некоторые первоначальные проблемы, потому что rtimulib использовал какую-то странную версию нестандартной версии i2dev, но, возможно, он фиксирован сейчас.

Я немного поработал над AVR, используя LIB около 9 месяцев назад, но обнаружил, что нормальная точность плавающей точки на AVR была слишком низкой, и использование Double на STM32 было бы лучше,

Кроме того, чем больше образцов в секунду вы можете получить от устройства IMU, тем больше точности при интеграции ускорения в скорость и т. Д.
Следовательно, STM32 был бы лучше для этого, чем AVR, но я подозреваю, что вам нужно изменить некоторые настройки в Rtimu, чтобы сообщить устройству IMU, чтобы он попробовал быстрее

Я действительно хотел бы вернуться к тому, чтобы посмотреть на это, так как у меня есть несколько IMU9150, а также купил около 9250, которые, как предполагают, более точные, но они все еще находятся в своих антистатических пакетах ;-(-(

Бдбелл
Пт 17 июля 2015 г. 10:19
@Rogerclark

В папке библиотеков была копия i2CDEV.

Есть настройки в "rtimusettings.CPP "для MPU9150 GyroaccelsAmplerate и MPU9150CompassSampleter - дефолты были 50/25. Я тестировал с помощью моего IMU на базе Arduino (бег 2.7 В @ 8 МГц) - максимальная скорость дискретизации, которую я могу получить, составляет ~ 64. С Maple Mini я могу получить ~ 330 : D - Придется больше играть с этим, чтобы увидеть, что работает лучше всего, но определенно выглядит хорошо!

Пожалуйста, дайте мне знать, если у вас есть возможность посмотреть на это и выяснить USSerial Erry, которую я получаю от эскиза Rtardulinkimu.

Rogerclark
Пт 17 июля 2015 г. 10:33
Re; 'Hardwareserial*' В задании
Hardport = &Серийный;


Это потому, что USBSerial не является примером жесткой

Вам нужно будет изменить rtimulib, попробуйте изменить определение rtardulinkhal_port на Usserial вместо жесткой

На самом деле, как жесткие, так и USBSerial унаследованы от класса потока, поэтому вы можете попытаться изменить файл библиотеки, чтобы указать порт как поток, а не твердый, и он может работать для обоих. Или, возможно, в качестве экземпляра печати

На самом деле, мне нужно было скачать и посмотреть на код, но в основном найти код, который жестко кодирован для использования жестких и изменить его ;-)

Бдбелл
Пт 17 июля 2015 г. 11:08
Rogerclark написал:Вам нужно будет изменить rtimulib, попробуйте изменить определение rtardulinkhal_port на Usserial вместо жесткой

астер
Пн, 1 мая 2017 г. 13:40
привет! Так что эта библиотека работает с STM32F103C8? Может ли кто -нибудь прислать мне рабочую копию?

Финголин
Ср 17 мая 2017 г. 13:34
Эта тема все еще активна?
Я текущий работаю над Prjoject с четырехлетным, где я хочу разработать контроллер полета и т. Д.
Поскольку большая скорость и STM32 я переключился на эту плату, однако я кровавый начинающий.
Но я сделал библиотеку MPU6050, которая работает для Arduino, которую я в настоящее время перенес в STM32103C8T.
Библиотека еще не работает так же, как на Arduino, но я ищу в фору, чтобы поделиться своими результатами и получить дополнительные входные данные/советы/помогать что угодно, так как я новичок в STM32!

астер
Пт 19 мая 2017 г. 13:37
Финголин написал:Эта тема все еще активна?
Я текущий работаю над Prjoject с четырехлетным, где я хочу разработать контроллер полета и т. Д.
Поскольку большая скорость и STM32 я переключился на эту плату, однако я кровавый начинающий.
Но я сделал библиотеку MPU6050, которая работает для Arduino, которую я в настоящее время перенес в STM32103C8T.
Библиотека еще не работает так же, как на Arduino, но я ищу в фору, чтобы поделиться своими результатами и получить дополнительные входные данные/советы/помогать что угодно, так как я новичок в STM32!

Гариндо
Солнце 21 мая 2017 г. 14:03
Финголин написал:Эта тема все еще активна?
Я текущий работаю над Prjoject с четырехлетным, где я хочу разработать контроллер полета и т. Д.
Поскольку большая скорость и STM32 я переключился на эту плату, однако я кровавый начинающий.
Но я сделал библиотеку MPU6050, которая работает для Arduino, которую я в настоящее время перенес в STM32103C8T.
Библиотека еще не работает так же, как на Arduino, но я ищу в фору, чтобы поделиться своими результатами и получить дополнительные входные данные/советы/помогать что угодно, так как я новичок в STM32!

Гариндо
Солнце 21 мая 2017 г. 14:45
STM32F103RT6
Изображение

STM32F103C8T6
Изображение

Финголин
Солнце 21 мая 2017 г. 14:47
Привет, Гариндо,
Я работаю над аналогичным вопросом и был бы очень рад поделиться!
В настоящее время у меня есть автоматическая работа с Arduino, но у меня проблемы с переходом на доску STM32.
Если ты хочешь, я могу написать тебе свой код? (или опубликуйте это, конечно)

AG123
Солнце 21 мая 2017 г. 15:04
Я не знаком с беспилотниками, с точки зрения беспилотников, кажется, есть много беспилотников STM32F405 на основе досок
http: // www.STM32duino.com/viewtopic.PHP?F = 39&T = 1977
http: // www.eBay.com/sch/i.HTML?_ODKW = DR ... 4&_SACAT = 0
они, кажется, являются разнообразием CC3D или Betaflight
http: // www.Dronetrest.com/t/cc3d-flight ... -Гид/830
https: // github.com/betaflight/betaflight
Эти платы, специфичные для беспилотников, часто имеют на борту акселерометр / гироскоп MEMS, булавки также, по -видимому, были направлены на цели управления дронами / двигателем
Эти доски беспилотных летательных аппаратов STM32F405, вероятно, не сделают хороших общих досок разработчиков, так как слишком немногие из штифтов GPIO разбиты, но, вероятно, могут быть хорошие доски для дронов
Я думаю, что STM32F405 обычно имеет (колоссальный) 1M на FIRS Flash

Бдбелл
Пн 22 мая 2017 г. 15:43
Я был занят другими проектами, но, наконец, получил возможность посмотреть на это сегодня вечером. Я прикрепляю как оригинальный эскиз DMP6/Teapot, так и последний рабочий Rtimulib и библиотеки для них. Я использую их с небольшим BT 4.0 Контроллер движения, разработанный с использованием STM32, MPU9150/9250 и датчика Altimeter/MS5611 (прикрепленные эскизы выводя. Я использовал MPU9250 в последнее время, но также проверял оба их в прошлом с MPU9150 - у меня нет MPU6050 для тестирования, но должен быть в порядке, так как они оба также написаны для него.

Прошло много времени с тех пор, как я изменил rtimulib для работы с STM32, поэтому я не могу точно вспомнить, что я сделал, но если вы сравниваете файлы в папке библиотеков с оригиналами, вы можете видеть, что в каждом файле есть небольшие изменения в 2 файла библиотека.

Обратите внимание, что они в настоящее время настроены для MPU9250 по адресу I2C 0x69, поэтому вам нужно будет изменить их, чтобы соответствовать вашей конфигурации.

Надеюсь, это поможет!

Гариндо
Пн 22 мая 2017 г. 11:44
Привет, Финголин, для меня нет проблем в обмене, я очищаю свой код и загружаю его, в Arduino Autolevel Это работает для меня.

Гариндо
Пн 22 мая 2017 г. 11:47
Bdvell, очень спасибо.

Финголин
Вторник 23 мая 2017 г. 6:34
Теперь наступает мой код:
это мое гирокласс.час: #include class Gyro{ private: float AccelMultipl=2*9.81; // float AngleMultipl=250; float correction[3]={0.9890, 0.9920,0.9844}; //correction factor for Acceleration float bias[3]={-0.3713,-0.0095,0.6367}; //Offset factor für Acceleration float Offset[3]={ 0.86433,0.99755,-0.07829}; //Offsett faktor der Drehwinkelgeber (-Mittelwert des Stillstands) //Offset for Angular Rate ~Mean if the Gyro is not Moving (minimizes drift) public: //Werte mit _accel wurden aus beschleunigungen berechnet (wird zur Sensorfusion genutzt) //Raw Angular-Rates: (just scaled) float Roll_rate=0; float Gier_rate=0; float Nick_rate=0; float Gier_angle=0; //Angles from acceleration: float Roll_accel=0; float Nick_accel=0; //Angles after Sensor funsion: float Roll_filtered=0; float Nick_filtered=0; float Gier_filtered=0; //"FILTERED" for a real filtering we actually need something like a compass which is not implemented! //Acceleration (Raw and Integrated) (Werte sind bis für Sensorfusion eig Nutzlos, insbesondere die Integrierten, diese sollten (hier fehlt Gravity-Offset) den Geschwindigkeiten entsprechen. float x_accel=0; float Ix_accel=0; float y_accel=0; float Iy_accel=0; float z_accel=0; float Iz_accel=0; float temperature; // LastSampleTime is used for integrating correctly float LastSampleTime=0; int Adress=0x68; void init(int Adress) { /* * Init Function, sets Adress Wakes up the MPU and sets the LowPassFilter -> LowPass is set pretty High if the chip is dampened maybe set it lower */ this->Adress=Adress; Wire.begin(); Wire.beginTransmission(Adress); Wire.write(0x6B); // PWR_MGMT_1 register Wire.write(0); // set to zero (wakes up the MPU-6050) Wire.endTransmission(); Wire.beginTransmission(Adress); Wire.write(0x1A); // CONFIG register byte val=B00000110; // Wire.write(val); // Set the LowPassFilter Wire.endTransmission(); } void setConfig(int mode) { //Set the mode / range (not yet tested!) byte bMode; switch (mode){ case 0: bMode=B00000000; this->AccelMultipl=2*9.81; this->AngleMultipl=250; break; case 1: bMode=B00001000; this->AccelMultipl=4*9.81; this->AngleMultipl=500; break; case 2: bMode=B00011000; this->AccelMultipl=8*9.81; this->AngleMultipl=1000; break; case 3: bMode=B00011000; this->AccelMultipl=16*9.81; this->AngleMultipl=2000; break; default: bMode=B00000000; this->AccelMultipl=2*9.81; this->AngleMultipl=250; break; } //Serial.println(bMode); Wire.beginTransmission(this->Adress); Wire.write(0x1B); // starting with register 0x1B () Wire.write(bMode); //1->+-500°/s Wire.endTransmission(); Wire.write(0x1C); // starting with register 0x1C () Wire.write(bMode); //1->+-4g°/s Wire.endTransmission(); } void getConfigs() //Not Tested! { Wire.beginTransmission(this->Adress); Wire.write(0x1B); // starting with register 0x1B (GYRI CIBFUG) Wire.endTransmission(); Wire.beginTransmission(this->Adress); Wire.requestFrom(this->Adress,2); // request a total of 2 registers short conf=Wire.read()<<8|Wire.read(); // Serial.println(conf,BIN); } void grabData()//grabs Data from Gyro and processes it (filteres it) { // First Get Times for the integrating stuff that happenes later float T_now=micros()*0.000001; //Jetzt Zeit in s float dT=T_now-(this->LastSampleTime); //Time that has run by (integration span) this->LastSampleTime=T_now; //Reading & Saving Raw-Values: Wire.beginTransmission(this->Adress); Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(); Wire.requestFrom(this->Adress,14); // request a total of 14 registers this->x_accel=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) this->y_accel=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L) this->z_accel=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) this->temperature=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L) this->Roll_rate=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L) this->Nick_rate=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L) this->Gier_rate=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)} //Preprocessing: //1. Scaling works by an affin function x_scaled=a * x_raw +b this->x_accel=(float)this->x_accel*this->AccelMultipl/32767*this->correction[0] + this->bias[0]; this->y_accel=(float)this->y_accel*this->AccelMultipl/32767*this->correction[1] + this->bias[1]; this->z_accel=(float)this->z_accel*this->AccelMultipl/32767*this->correction[2] + this->bias[2]; //2. Integrate acceleration (useless so far) //maybe used later by integrating it (twice) to determine position (should be pretty uncertain) this->Ix_accel+= this->x_accel*dT; this->Iy_accel+= this->y_accel*dT; this->Iz_accel+= this->z_accel*dT; //3. Temperature this->temperature=(float) this->temperature/340.00+36.53; //4.Scale Angular Rates: (Angular Rates are just adjusted by an Offset, which is determined by the mean and minimizes drift) this->Roll_rate=(float)this->Roll_rate*this->AngleMultipl/32767+Offset[0]; this->Nick_rate=(float)this->Nick_rate*this->AngleMultipl/32767+Offset[1]; this->Gier_rate=(float)this->Gier_rate*this->AngleMultipl/32767+Offset[2]; //Roll und Nicktwerte aus Beschleunigungen: this->Roll_accel=RAD_TO_DEG*(atan2(-this->y_accel,-this->z_accel)); //NICK this->Nick_accel=RAD_TO_DEG*(atan2(this->x_accel,sqrt(this->z_accel*this->z_accel+this->y_accel*this->y_accel)));//ROLL //Sensor fusion is here //Sensor fusion uses just a complementary filter, however works pretty solid (maybe use a kalman filter later) this->Roll_filtered=0.994 *(this->Roll_filtered+this->Roll_rate*dT) + 0.006*this->Roll_accel ; this->Nick_filtered=0.994 *(this->Nick_filtered+this->Nick_rate*dT) + 0.006*this->Nick_accel ; //this->Roll_filtered -=Nick_filtered*sin(this->Gier_rate); //this->Nick_filtered +=Roll_filtered*sin(this->Gier_rate); this->Gier_angle+=Gier_rate*dT; //Gier_filtered is not filtered since for that a compass would be needed! this->Gier_filtered=0.98*this->Gier_angle; } void dispData(){ //Winkelbeschleunigungen: //Serial.print(" aX: "); Serial.print(this->x_accel); Serial.print(" aY: "); Serial.print(this->y_accel); Serial.print(" aZ: "); Serial.print(this->z_accel); //Nick& Roll aus Acceleration: //Serial.print(" Nick_acc; ");Serial.print(this->Nick_accel); //Serial.print(" Roll_acc: ");Serial.print(this->Roll_accel); //NICK&ROLL-ANGLE-Rates // Serial.print(" Roll_rate: ");Serial.print(this->Roll_rate); //Serial.print(" Gier_filtered: ");Serial.print(this->Gier_rate); //NICK&ROLL ANGLES Serial.print(" Roll_filtered: ");Serial.print(this->Roll_filtered); Serial.print(" Nick_filtered: ");Serial.print(this->Nick_filtered); Serial.print(" GierAngle: "); Serial.print(this->Gier_filtered); //TEMPERATUR: // Serial.print(" Tmp: "); Serial.print(this->temperature); // //NULL-Linie zur Orientierung: //Serial.print(" Null: "); Serial.print(0); //Serial.print(" GasMax: "); Serial.print(60); //Serial.print(" -GasMax: "); Serial.print(-60); } };

Финголин
Ср 24 мая 2017 г. 10:04
Кто -нибудь знает, как я меняю булавки i2c? Чтобы я мог подключить ИМУ на другие булавки?

Гариндо
Ср 31 мая 2017 г. 18:29
Привет, Финолин, в проводе файла.CPP, Line Line:

SCL, SDA
TwoWire Wire (PB6, PB7, Soft_Standard);

Однажды, проблема в STM32 с MPU6050 может быть скоростью чтения I2C, 2000 микросекунд в подпрограмме для чтения MPU6050 против 600 -й проволоки с двойной проволокой (PB6, PB7, Soft_Fast);

// #define no_global_instantiation
#включать<Проволока.час>
TwoWire Wire2 (PB6, PB7, Soft_Fast);

const int mpu_addr = 0x68; // адрес I2C MPU-6050
int16_t acx, acy, acz, tmp, gyx, gyy, gyz;
void setup () {
/// SCL, SDA


Провод2.начинать();

Провод2.begintransmission (mpu_addr);
Провод2.написать (0x6b); // pwr_mgmt_1 регистр
Провод2.написать (0); // Установить ноль (разбудить MPU-6050)
Провод2.endtransmission ();
}
void loop () {

//// Читать данные

}

Гариндо
SAT 03 июня 2017 г. 16:44
Привет...Через много часов AutoLevel в STM32 работает правильно.

https: // www.YouTube.com/watch?v = jkp9divsno8

Rogerclark
SAT 03 июня 2017 г. 22:39
Отличная работа.

Кстати, вы можете встроить Vidoes, используя кнопку YouTube только с кодом идентификатора видео


Финголин
Солнце 04 июня 2017 11:45
Привет, Гардино,
Спасибо за тип!
Хорошая работа, мне нравится, и вы используете ту же кадр, что и я :)
Кстати, что вы используете как пульт?

Гариндо
Sun 04, 2017, 18:33
Очень спасибо, Рогерларк, за следующее видео.
Финголин, система TXRX Radiolink AT10 или AT9, а вы ?

Финголин
Пн июня 05, 2017 10:55
У меня еще нет удаленного : D Вот почему я спрашиваю..

Squonk42
Пн, 05 июня 2017 г., 11:50 утра
Я написал запись в блоге по предмету Sensor Fusion несколько месяцев назад, если это может быть полезно для кого -то:
http: // www.Wi -Fi4things.com/motion-sensor-fusion/

Rogerclark
Пн июня 05, 2017 22:19
Squonk42 написал:Я написал запись в блоге по предмету Sensor Fusion несколько месяцев назад, если это может быть полезно для кого -то:
http: // www.Wi -Fi4things.com/motion-sensor-fusion/

Squonk42
Вт, 06 июня 2017 г., 5:20 утра
Rogerclark написал:Я использовал Rtimu Lib несколько лет назад с MPU9150, но он не включал фильтрацию (я не уверен, что она была обновлена, чтобы включить фильтрацию, но я думаю, что библиотека была заброшена сейчас его автором).

Rogerclark
Вт, 06 июня 2017 г., 7:53 утра
ХОРОШО.

Я не думаю, что вернусь к тому же проекту, но приятно знать, что есть обновленная версия библиотеки

Ахулл
Ср 16 августа 2017 г., 21:14
Я не уверен, что кто -то на форуме является Joop Brokking, который выпустил это видео, но я оставлю это здесь только для полноты.


rsc
Пн 18 сентября 2017 г. 12:56 утра
Код в этом видео не работает (для моего) : | : | : |

астер
Пт 06 октября 2017 г. 16:55
Squonk42 написал: Вт, 06 июня 2017 г., 5:20 утра

астер
Пн, 09 октября 2017 г. 11:33
Я нашел эту библиотеку: https: // github.com/sparkfun/sparkfun_mp ... no_library
И я использую дешевые датчики от Aliexpress, как это:
Изображение

Прямо сейчас я тестирую его только с I2C (SPI позже), и я нашел ошибку:
Регистр WHO_AM_I_MPU9250 может быть как 0x71, так и 0x73 (моя 0x73 может это означает, что мои датчики являются фальшивыми? БОХ)

Та же проблема с магнитометром:
WHO_AM_I_AK8963 Регистр должен быть 0x48, но похоже, что у моего IMU нет этих регистров!

В любом случае я заставил IMU провести тест с библиотекой, и я получаю:
AK8963 Mag Biases (Mg)
-56.29
193.08
339.12
AK8963 Mag Scale (Mg)
1.17
0.77
1.17

Пример вывода данных бассейна без перемещения IMU X-acceleration: -43.70 mg Y-acceleration: 0.31 mg Z-acceleration: 999.94 mg X-gyro rate: 0.046 degrees/sec Y-gyro rate: 0.031 degrees/sec Z-gyro rate: 0.000 degrees/sec X-mag field: 1.82 mG Y-mag field: 0.00 mG Z-mag field: 49.20 mG Temperature is 26.3 degrees C X-acceleration: -46.94 mg Y-acceleration: 1.22 mg Z-acceleration: 1001.34 mg X-gyro rate: 0.015 degrees/sec Y-gyro rate: 0.168 degrees/sec Z-gyro rate: 0.008 degrees/sec X-mag field: 5.45 mG Y-mag field: -7.29 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -45.04 mg Y-acceleration: 0.31 mg Z-acceleration: 999.02 mg X-gyro rate: -0.114 degrees/sec Y-gyro rate: 0.130 degrees/sec Z-gyro rate: -0.107 degrees/sec X-mag field: 3.63 mG Y-mag field: -9.11 mG Z-mag field: 33.38 mG Temperature is 26.3 degrees C X-acceleration: -44.49 mg Y-acceleration: 1.22 mg Z-acceleration: 1004.39 mg X-gyro rate: -0.053 degrees/sec Y-gyro rate: 0.206 degrees/sec Z-gyro rate: -0.008 degrees/sec X-mag field: 5.45 mG Y-mag field: -3.64 mG Z-mag field: 45.68 mG Temperature is 26.3 degrees C X-acceleration: -44.37 mg Y-acceleration: 0.37 mg Z-acceleration: 999.27 mg X-gyro rate: -0.008 degrees/sec Y-gyro rate: 0.038 degrees/sec Z-gyro rate: 0.069 degrees/sec X-mag field: 5.45 mG Y-mag field: -10.93 mG Z-mag field: 17.57 mG Temperature is 26.3 degrees C X-acceleration: -45.53 mg Y-acceleration: 1.22 mg Z-acceleration: 1001.40 mg X-gyro rate: -0.008 degrees/sec Y-gyro rate: 0.092 degrees/sec Z-gyro rate: -0.008 degrees/sec X-mag field: 7.26 mG Y-mag field: -5.46 mG Z-mag field: 36.90 mG Temperature is 26.3 degrees C X-acceleration: -45.17 mg Y-acceleration: 0.92 mg Z-acceleration: 998.23 mg X-gyro rate: -0.053 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: 0.053 degrees/sec X-mag field: 9.08 mG Y-mag field: 10.93 mG Z-mag field: 17.57 mG Temperature is 26.3 degrees C X-acceleration: -48.77 mg Y-acceleration: -1.95 mg Z-acceleration: 999.02 mg X-gyro rate: -0.061 degrees/sec Y-gyro rate: 0.069 degrees/sec Z-gyro rate: 1.144 degrees/sec X-mag field: -12.71 mG Y-mag field: -14.57 mG Z-mag field: 38.66 mG Temperature is 26.3 degrees C X-acceleration: -46.02 mg Y-acceleration: 0.61 mg Z-acceleration: 1004.82 mg X-gyro rate: 0.038 degrees/sec Y-gyro rate: 0.183 degrees/sec Z-gyro rate: -0.046 degrees/sec X-mag field: 21.79 mG Y-mag field: -9.11 mG Z-mag field: 36.90 mG Temperature is 26.3 degrees C X-acceleration: -44.86 mg Y-acceleration: 0.18 mg Z-acceleration: 1000.06 mg X-gyro rate: -0.046 degrees/sec Y-gyro rate: 0.130 degrees/sec Z-gyro rate: 0.099 degrees/sec X-mag field: 5.45 mG Y-mag field: -10.93 mG Z-mag field: 45.68 mG Temperature is 26.3 degrees C X-acceleration: -48.22 mg Y-acceleration: 2.50 mg Z-acceleration: 1003.78 mg X-gyro rate: -0.099 degrees/sec Y-gyro rate: 0.069 degrees/sec Z-gyro rate: -0.076 degrees/sec X-mag field: 3.63 mG Y-mag field: -1.82 mG Z-mag field: 29.87 mG Temperature is 26.3 degrees C X-acceleration: -46.94 mg Y-acceleration: 0.43 mg Z-acceleration: 1002.20 mg X-gyro rate: -0.023 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: 0.206 degrees/sec X-mag field: -3.63 mG Y-mag field: -12.75 mG Z-mag field: 47.44 mG Temperature is 26.3 degrees C X-acceleration: -48.71 mg Y-acceleration: 1.34 mg Z-acceleration: 1000.18 mg X-gyro rate: -0.038 degrees/sec Y-gyro rate: 0.046 degrees/sec Z-gyro rate: -0.046 degrees/sec X-mag field: 3.63 mG Y-mag field: -1.82 mG Z-mag field: 36.90 mG Temperature is 26.3 degrees C X-acceleration: -44.98 mg Y-acceleration: 0.85 mg Z-acceleration: 1002.38 mg X-gyro rate: -0.061 degrees/sec Y-gyro rate: 0.168 degrees/sec Z-gyro rate: 0.130 degrees/sec X-mag field: 1.82 mG Y-mag field: 3.64 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -45.65 mg Y-acceleration: -0.31 mg Z-acceleration: 1001.71 mg X-gyro rate: -0.046 degrees/sec Y-gyro rate: 0.145 degrees/sec Z-gyro rate: -0.084 degrees/sec X-mag field: -1.82 mG Y-mag field: -18.22 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -47.61 mg Y-acceleration: 2.56 mg Z-acceleration: 1001.16 mg X-gyro rate: -0.061 degrees/sec Y-gyro rate: 0.145 degrees/sec Z-gyro rate: -0.046 degrees/sec X-mag field: 7.26 mG Y-mag field: -1.82 mG Z-mag field: 33.38 mG Temperature is 26.3 degrees C X-acceleration: -45.53 mg Y-acceleration: 2.26 mg Z-acceleration: 997.31 mg X-gyro rate: 0.000 degrees/sec Y-gyro rate: 0.160 degrees/sec Z-gyro rate: 0.069 degrees/sec X-mag field: 5.45 mG Y-mag field: -10.93 mG Z-mag field: 42.17 mG Temperature is 26.3 degrees C X-acceleration: -46.75 mg Y-acceleration: 1.40 mg Z-acceleration: 1001.16 mg X-gyro rate: -0.053 degrees/sec Y-gyro rate: 0.221 degrees/sec Z-gyro rate: -0.069 degrees/sec X-mag field: 9.08 mG Y-mag field: 7.29 mG Z-mag field: 28.11 mG Temperature is 26.3 degrees C X-acceleration: -44.98 mg Y-acceleration: -1.04 mg Z-acceleration: 997.38 mg X-gyro rate: -0.084 degrees/sec Y-gyro rate: 0.130 degrees/sec Z-gyro rate: -0.053 degrees/sec X-mag field: 25.42 mG Y-mag field: 9.11 mG Z-mag field: 26.36 mG Temperature is 26.3 degrees C X-acceleration: -46.08 mg Y-acceleration: 1.10 mg Z-acceleration: 1002.50 mg X-gyro rate: -0.107 degrees/sec Y-gyro rate: 0.069 degrees/sec Z-gyro rate: 0.053 degrees/sec X-mag field: 12.71 mG Y-mag field: -18.22 mG Z-mag field: 31.63 mG Temperature is 26.3 degrees C X-acceleration: -46.75 mg Y-acceleration: 0.92 mg Z-acceleration: 1003.66 mg X-gyro rate: -0.107 degrees/sec Y-gyro rate: 0.069 degrees/sec Z-gyro rate: -0.038 degrees/sec X-mag field: 10.89 mG Y-mag field: 1.82 mG Z-mag field: 40.41 mG Temperature is 26.3 degrees C X-acceleration: -45.47 mg Y-acceleration: 1.46 mg Z-acceleration: 1000.98 mg X-gyro rate: 0.053 degrees/sec Y-gyro rate: 0.183 degrees/sec Z-gyro rate: -0.038 degrees/sec X-mag field: 1.82 mG Y-mag field: -7.29 mG Z-mag field: 28.11 mG Temperature is 26.3 degrees C X-acceleration: -48.95 mg Y-acceleration: 4.33 mg Z-acceleration: 1000.67 mg X-gyro rate: -0.053 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: -0.038 degrees/sec X-mag field: 23.60 mG Y-mag field: -10.93 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -46.51 mg Y-acceleration: 0.79 mg Z-acceleration: 997.25 mg X-gyro rate: -0.076 degrees/sec Y-gyro rate: 0.069 degrees/sec Z-gyro rate: -0.015 degrees/sec X-mag field: -7.26 mG Y-mag field: -5.46 mG Z-mag field: 57.98 mG Temperature is 26.3 degrees C X-acceleration: -47.91 mg Y-acceleration: 0.12 mg Z-acceleration: 1000.18 mg X-gyro rate: 0.008 degrees/sec Y-gyro rate: 0.099 degrees/sec Z-gyro rate: -0.092 degrees/sec X-mag field: 1.82 mG Y-mag field: -21.86 mG Z-mag field: 49.20 mG Temperature is 26.3 degrees C X-acceleration: -46.81 mg Y-acceleration: 1.46 mg Z-acceleration: 996.95 mg X-gyro rate: -0.031 degrees/sec Y-gyro rate: 0.107 degrees/sec Z-gyro rate: 0.046 degrees/sec X-mag field: 1.82 mG Y-mag field: 10.93 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -47.55 mg Y-acceleration: 0.43 mg Z-acceleration: 999.94 mg X-gyro rate: -0.130 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: -0.008 degrees/sec X-mag field: 0.00 mG Y-mag field: -20.04 mG Z-mag field: 40.41 mG Temperature is 26.3 degrees C X-acceleration: -49.56 mg Y-acceleration: 0.12 mg Z-acceleration: 1002.26 mg X-gyro rate: -0.069 degrees/sec Y-gyro rate: 0.114 degrees/sec Z-gyro rate: 0.008 degrees/sec X-mag field: -5.45 mG Y-mag field: -7.29 mG Z-mag field: 42.17 mG Temperature is 26.3 degrees C X-acceleration: -44.92 mg Y-acceleration: 1.77 mg Z-acceleration: 1003.11 mg X-gyro rate: 0.015 degrees/sec Y-gyro rate: 0.107 degrees/sec Z-gyro rate: 0.015 degrees/sec X-mag field: 7.26 mG Y-mag field: -9.11 mG Z-mag field: 36.90 mG Temperature is 26.3 degrees C X-acceleration: -50.72 mg Y-acceleration: 0.92 mg Z-acceleration: 1000.92 mg X-gyro rate: -0.023 degrees/sec Y-gyro rate: 0.099 degrees/sec Z-gyro rate: 0.816 degrees/sec X-mag field: 29.05 mG Y-mag field: -20.04 mG Z-mag field: 40.41 mG Temperature is 26.3 degrees C X-acceleration: -48.77 mg Y-acceleration: 0.12 mg Z-acceleration: 999.63 mg X-gyro rate: 0.038 degrees/sec Y-gyro rate: 0.160 degrees/sec Z-gyro rate: -0.191 degrees/sec X-mag field: 19.97 mG Y-mag field: -10.93 mG Z-mag field: 21.09 mG Temperature is 26.3 degrees C X-acceleration: -47.30 mg Y-acceleration: 2.38 mg Z-acceleration: 1003.48 mg X-gyro rate: 0.000 degrees/sec Y-gyro rate: 0.092 degrees/sec Z-gyro rate: -0.122 degrees/sec X-mag field: 19.97 mG Y-mag field: -18.22 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -46.94 mg Y-acceleration: 2.01 mg Z-acceleration: 1003.11 mg X-gyro rate: -0.053 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: -0.061 degrees/sec X-mag field: 7.26 mG Y-mag field: -16.39 mG Z-mag field: 36.90 mG Temperature is 26.3 degrees C X-acceleration: -47.00 mg Y-acceleration: 0.98 mg Z-acceleration: 1000.12 mg X-gyro rate: -0.015 degrees/sec Y-gyro rate: 0.084 degrees/sec Z-gyro rate: -0.084 degrees/sec X-mag field: 10.89 mG Y-mag field: -5.46 mG Z-mag field: 33.38 mG Temperature is 26.3 degrees C X-acceleration: -43.21 mg Y-acceleration: 1.22 mg Z-acceleration: 1000.67 mg X-gyro rate: -0.038 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: 0.061 degrees/sec X-mag field: 18.16 mG Y-mag field: -12.75 mG Z-mag field: 36.90 mG Temperature is 26.3 degrees C X-acceleration: -45.59 mg Y-acceleration: 0.24 mg Z-acceleration: 998.23 mg X-gyro rate: -0.031 degrees/sec Y-gyro rate: 0.114 degrees/sec Z-gyro rate: -0.046 degrees/sec X-mag field: -9.08 mG Y-mag field: -18.22 mG Z-mag field: 38.66 mG Temperature is 26.3 degrees C X-acceleration: -49.01 mg Y-acceleration: 2.38 mg Z-acceleration: 1000.92 mg X-gyro rate: -0.061 degrees/sec Y-gyro rate: 0.099 degrees/sec Z-gyro rate: -0.046 degrees/sec X-mag field: -5.45 mG Y-mag field: -18.22 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -46.94 mg Y-acceleration: 0.06 mg Z-acceleration: 1003.17 mg X-gyro rate: -0.023 degrees/sec Y-gyro rate: 0.137 degrees/sec Z-gyro rate: 0.046 degrees/sec X-mag field: -7.26 mG Y-mag field: -12.75 mG Z-mag field: 57.98 mG Temperature is 26.3 degrees C X-acceleration: -47.97 mg Y-acceleration: 0.31 mg Z-acceleration: 997.19 mg X-gyro rate: -0.046 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: -0.168 degrees/sec X-mag field: 3.63 mG Y-mag field: -16.39 mG Z-mag field: 43.93 mG Temperature is 26.3 degrees C X-acceleration: -46.20 mg Y-acceleration: 2.69 mg Z-acceleration: 1001.83 mg X-gyro rate: -0.114 degrees/sec Y-gyro rate: 0.191 degrees/sec Z-gyro rate: -0.053 degrees/sec X-mag field: 0.00 mG Y-mag field: -1.82 mG Z-mag field: 43.93 mG Temperature is 26.3 degrees C X-acceleration: -50.29 mg Y-acceleration: 1.53 mg Z-acceleration: 1002.93 mg X-gyro rate: -0.038 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: 0.038 degrees/sec X-mag field: -3.63 mG Y-mag field: -5.46 mG Z-mag field: 40.41 mG Temperature is 26.3 degrees C X-acceleration: -45.72 mg Y-acceleration: -0.18 mg Z-acceleration: 1002.01 mg X-gyro rate: -0.069 degrees/sec Y-gyro rate: 0.076 degrees/sec Z-gyro rate: 0.015 degrees/sec X-mag field: 1.82 mG Y-mag field: -21.86 mG Z-mag field: 24.60 mG Temperature is 26.3 degrees C X-acceleration: -47.79 mg Y-acceleration: 0.55 mg Z-acceleration: 999.88 mg X-gyro rate: -0.130 degrees/sec Y-gyro rate: 0.183 degrees/sec Z-gyro rate: -0.015 degrees/sec X-mag field: 0.00 mG Y-mag field: 1.82 mG Z-mag field: 15.81 mG Temperature is 26.3 degrees C X-acceleration: -47.06 mg Y-acceleration: 3.23 mg Z-acceleration: 1003.54 mg X-gyro rate: -0.046 degrees/sec Y-gyro rate: 0.008 degrees/sec Z-gyro rate: -0.092 degrees/sec X-mag field: 27.24 mG Y-mag field: -7.29 mG Z-mag field: 28.11 mG Temperature is 26.3 degrees C X-acceleration: -48.22 mg Y-acceleration: 0.18 mg Z-acceleration: 1000.00 mg X-gyro rate: -0.084 degrees/sec Y-gyro rate: 0.130 degrees/sec Z-gyro rate: -0.069 degrees/sec X-mag field: 3.63 mG Y-mag field: 1.82 mG Z-mag field: 29.87 mG Temperature is 26.3 degrees C X-acceleration: -46.20 mg Y-acceleration: 1.95 mg Z-acceleration: 998.84 mg X-gyro rate: 0.015 degrees/sec Y-gyro rate: 0.092 degrees/sec Z-gyro rate: -0.053 degrees/sec X-mag field: 3.63 mG Y-mag field: 5.46 mG Z-mag field: 29.87 mG Temperature is 26.3 degrees C X-acceleration: -46.57 mg Y-acceleration: 1.65 mg Z-acceleration: 998.47 mg X-gyro rate: 0.015 degrees/sec Y-gyro rate: 0.214 degrees/sec Z-gyro rate: -0.046 degrees/sec X-mag field: 1.82 mG Y-mag field: 0.00 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -48.71 mg Y-acceleration: -0.43 mg Z-acceleration: 998.29 mg X-gyro rate: -0.092 degrees/sec Y-gyro rate: 0.046 degrees/sec Z-gyro rate: -0.099 degrees/sec X-mag field: 5.45 mG Y-mag field: -10.93 mG Z-mag field: 52.71 mG Temperature is 26.3 degrees C X-acceleration: -46.14 mg Y-acceleration: 2.08 mg Z-acceleration: 997.25 mg X-gyro rate: -0.069 degrees/sec Y-gyro rate: 0.015 degrees/sec Z-gyro rate: -0.084 degrees/sec X-mag field: -7.26 mG Y-mag field: -5.46 mG Z-mag field: 47.44 mG Temperature is 26.3 degrees C X-acceleration: -46.26 mg Y-acceleration: 1.95 mg Z-acceleration: 1003.97 mg X-gyro rate: -0.015 degrees/sec Y-gyro rate: 0.114 degrees/sec Z-gyro rate: -0.008 degrees/sec X-mag field: -25.42 mG Y-mag field: -20.04 mG Z-mag field: 40.41 mG Temperature is 26.3 degrees C X-acceleration: -46.69 mg Y-acceleration: 2.38 mg Z-acceleration: 1000.18 mg X-gyro rate: -0.092 degrees/sec Y-gyro rate: 0.107 degrees/sec Z-gyro rate: -0.107 degrees/sec X-mag field: 7.26 mG Y-mag field: -23.68 mG Z-mag field: 40.41 mG Temperature is 26.3 degrees C X-acceleration: -45.96 mg Y-acceleration: -0.98 mg Z-acceleration: 1000.43 mg X-gyro rate: -0.092 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: -0.031 degrees/sec X-mag field: -9.08 mG Y-mag field: -14.57 mG Z-mag field: 42.17 mG Temperature is 26.3 degrees C X-acceleration: -46.08 mg Y-acceleration: 0.18 mg Z-acceleration: 999.27 mg X-gyro rate: 0.023 degrees/sec Y-gyro rate: 0.221 degrees/sec Z-gyro rate: -0.008 degrees/sec X-mag field: 9.08 mG Y-mag field: -7.29 mG Z-mag field: 24.60 mG Temperature is 26.3 degrees C X-acceleration: -46.94 mg Y-acceleration: 2.01 mg Z-acceleration: 999.88 mg X-gyro rate: -0.023 degrees/sec Y-gyro rate: 0.092 degrees/sec Z-gyro rate: -0.053 degrees/sec X-mag field: 19.97 mG Y-mag field: 7.29 mG Z-mag field: 28.11 mG Temperature is 26.3 degrees C X-acceleration: -44.25 mg Y-acceleration: 1.71 mg Z-acceleration: 1000.61 mg X-gyro rate: -0.061 degrees/sec Y-gyro rate: 0.046 degrees/sec Z-gyro rate: -0.084 degrees/sec X-mag field: 21.79 mG Y-mag field: -12.75 mG Z-mag field: 29.87 mG Temperature is 26.3 degrees C X-acceleration: -47.06 mg Y-acceleration: 1.16 mg Z-acceleration: 1001.77 mg X-gyro rate: 0.015 degrees/sec Y-gyro rate: 0.092 degrees/sec Z-gyro rate: 0.000 degrees/sec X-mag field: 25.42 mG Y-mag field: 1.82 mG Z-mag field: 12.30 mG Temperature is 26.3 degrees C X-acceleration: -44.19 mg Y-acceleration: 0.92 mg Z-acceleration: 1001.89 mg X-gyro rate: 0.046 degrees/sec Y-gyro rate: 0.191 degrees/sec Z-gyro rate: 0.008 degrees/sec X-mag field: -1.82 mG Y-mag field: 0.00 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -46.08 mg Y-acceleration: 0.67 mg Z-acceleration: 999.39 mg X-gyro rate: -0.015 degrees/sec Y-gyro rate: 0.046 degrees/sec Z-gyro rate: -0.008 degrees/sec X-mag field: 1.82 mG Y-mag field: 0.00 mG Z-mag field: 38.66 mG Temperature is 26.3 degrees C X-acceleration: -46.88 mg Y-acceleration: 1.65 mg Z-acceleration: 1001.22 mg X-gyro rate: 0.069 degrees/sec Y-gyro rate: 0.137 degrees/sec Z-gyro rate: -0.069 degrees/sec X-mag field: 3.63 mG Y-mag field: 1.82 mG Z-mag field: 33.38 mG Temperature is 26.3 degrees C X-acceleration: -46.63 mg Y-acceleration: 3.36 mg Z-acceleration: 1000.43 mg X-gyro rate: 0.000 degrees/sec Y-gyro rate: 0.122 degrees/sec Z-gyro rate: 0.023 degrees/sec X-mag field: 3.63 mG Y-mag field: -16.39 mG Z-mag field: 50.96 mG Temperature is 26.3 degrees C X-acceleration: -48.71 mg Y-acceleration: 2.38 mg Z-acceleration: 997.86 mg X-gyro rate: -0.023 degrees/sec Y-gyro rate: 0.168 degrees/sec Z-gyro rate: -0.137 degrees/sec X-mag field: -3.63 mG Y-mag field: -20.04 mG Z-mag field: 47.44 mG Temperature is 26.3 degrees C X-acceleration: -43.09 mg Y-acceleration: 2.14 mg Z-acceleration: 1002.87 mg X-gyro rate: -0.076 degrees/sec Y-gyro rate: 0.191 degrees/sec Z-gyro rate: -0.069 degrees/sec X-mag field: -3.63 mG Y-mag field: -23.68 mG Z-mag field: 40.41 mG Temperature is 26.3 degrees C X-acceleration: -46.08 mg Y-acceleration: 1.77 mg Z-acceleration: 999.02 mg X-gyro rate: -0.008 degrees/sec Y-gyro rate: 0.153 degrees/sec Z-gyro rate: 0.832 degrees/sec X-mag field: 3.63 mG Y-mag field: -12.75 mG Z-mag field: 33.38 mG Temperature is 26.3 degrees C X-acceleration: -49.56 mg Y-acceleration: 1.89 mg Z-acceleration: 1002.08 mg X-gyro rate: -0.046 degrees/sec Y-gyro rate: 0.099 degrees/sec Z-gyro rate: 0.015 degrees/sec X-mag field: 1.82 mG Y-mag field: -7.29 mG Z-mag field: 31.63 mG Temperature is 26.3 degrees C X-acceleration: -46.51 mg Y-acceleration: 2.32 mg Z-acceleration: 998.17 mg X-gyro rate: -0.076 degrees/sec Y-gyro rate: 0.191 degrees/sec Z-gyro rate: -0.114 degrees/sec X-mag field: 27.24 mG Y-mag field: 0.00 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -46.57 mg Y-acceleration: 2.99 mg Z-acceleration: 1003.42 mg X-gyro rate: -0.153 degrees/sec Y-gyro rate: 0.206 degrees/sec Z-gyro rate: -0.046 degrees/sec X-mag field: 16.34 mG Y-mag field: -7.29 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -44.31 mg Y-acceleration: 2.44 mg Z-acceleration: 999.39 mg X-gyro rate: 0.000 degrees/sec Y-gyro rate: 0.137 degrees/sec Z-gyro rate: -0.015 degrees/sec X-mag field: 18.16 mG Y-mag field: 9.11 mG Z-mag field: 12.30 mG Temperature is 26.3 degrees C X-acceleration: -43.76 mg Y-acceleration: 1.34 mg Z-acceleration: 1000.31 mg X-gyro rate: -0.031 degrees/sec Y-gyro rate: 0.183 degrees/sec Z-gyro rate: -0.008 degrees/sec X-mag field: 10.89 mG Y-mag field: -1.82 mG Z-mag field: 15.81 mG Temperature is 26.3 degrees C X-acceleration: -47.97 mg Y-acceleration: 1.59 mg Z-acceleration: 999.82 mg X-gyro rate: 0.053 degrees/sec Y-gyro rate: 0.099 degrees/sec Z-gyro rate: -0.038 degrees/sec X-mag field: 1.82 mG Y-mag field: -10.93 mG Z-mag field: 31.63 mG Temperature is 26.3 degrees C X-acceleration: -46.69 mg Y-acceleration: 1.53 mg Z-acceleration: 996.34 mg X-gyro rate: -0.084 degrees/sec Y-gyro rate: 0.244 degrees/sec Z-gyro rate: 0.000 degrees/sec X-mag field: -14.53 mG Y-mag field: -20.04 mG Z-mag field: 43.93 mG Temperature is 26.3 degrees C X-acceleration: -47.79 mg Y-acceleration: 1.83 mg Z-acceleration: 1000.67 mg X-gyro rate: -0.114 degrees/sec Y-gyro rate: 0.099 degrees/sec Z-gyro rate: -0.038 degrees/sec X-mag field: -5.45 mG Y-mag field: -29.14 mG Z-mag field: 49.20 mG Temperature is 26.3 degrees C X-acceleration: -48.65 mg Y-acceleration: -0.24 mg Z-acceleration: 1002.08 mg X-gyro rate: -0.015 degrees/sec Y-gyro rate: 0.168 degrees/sec Z-gyro rate: -0.038 degrees/sec X-mag field: -7.26 mG Y-mag field: -9.11 mG Z-mag field: 43.93 mG Temperature is 26.3 degrees C X-acceleration: -47.79 mg Y-acceleration: 1.34 mg Z-acceleration: 1001.04 mg X-gyro rate: -0.008 degrees/sec Y-gyro rate: 0.252 degrees/sec Z-gyro rate: -0.061 degrees/sec X-mag field: -3.63 mG Y-mag field: -12.75 mG Z-mag field: 33.38 mG Temperature is 26.3 degrees C X-acceleration: -46.08 mg Y-acceleration: -1.83 mg Z-acceleration: 998.96 mg X-gyro rate: 0.008 degrees/sec Y-gyro rate: 0.084 degrees/sec Z-gyro rate: -0.053 degrees/sec X-mag field: -7.26 mG Y-mag field: -16.39 mG Z-mag field: 47.44 mG Temperature is 26.3 degrees C X-acceleration: -44.80 mg Y-acceleration: 1.34 mg Z-acceleration: 998.35 mg X-gyro rate: -0.061 degrees/sec Y-gyro rate: 0.107 degrees/sec Z-gyro rate: -0.015 degrees/sec X-mag field: -1.82 mG Y-mag field: -18.22 mG Z-mag field: 24.60 mG Temperature is 26.3 degrees C X-acceleration: -48.95 mg Y-acceleration: 2.32 mg Z-acceleration: 998.72 mg X-gyro rate: -0.092 degrees/sec Y-gyro rate: 0.046 degrees/sec Z-gyro rate: -0.061 degrees/sec X-mag field: 10.89 mG Y-mag field: -1.82 mG Z-mag field: 15.81 mG Temperature is 26.3 degrees C X-acceleration: -47.12 mg Y-acceleration: 1.46 mg Z-acceleration: 999.51 mg X-gyro rate: -0.038 degrees/sec Y-gyro rate: 0.214 degrees/sec Z-gyro rate: -0.099 degrees/sec X-mag field: -1.82 mG Y-mag field: -18.22 mG Z-mag field: 35.14 mG Temperature is 26.3 degrees C X-acceleration: -45.23 mg Y-acceleration: 1.77 mg Z-acceleration: 1002.93 mg X-gyro rate: -0.092 degrees/sec Y-gyro rate: 0.069 degrees/sec Z-gyro rate: -0.015 degrees/sec X-mag field: 7.26 mG Y-mag field: -1.82 mG Z-mag field: 40.41 mG Temperature is 26.3 degrees C X-acceleration: -46.88 mg Y-acceleration: 1.10 mg Z-acceleration: 999.39 mg X-gyro rate: -0.023 degrees/sec Y-gyro rate: 0.015 degrees/sec Z-gyro rate: 0.031 degrees/sec X-mag field: 9.08 mG Y-mag field: -3.64 mG Z-mag field: 21.09 mG Temperature is 26.3 degrees C X-acceleration: -46.26 mg Y-acceleration: -0.18 mg Z-acceleration: 996.58 mg X-gyro rate: -0.061 degrees/sec Y-gyro rate: 0.191 degrees/sec Z-gyro rate: -0.069 degrees/sec X-mag field: 0.00 mG Y-mag field: -16.39 mG Z-mag field: 50.96 mG Temperature is 26.3 degrees C X-acceleration: -45.23 mg Y-acceleration: 1.77 mg Z-acceleration: 1002.75 mg X-gyro rate: -0.069 degrees/sec Y-gyro rate: 0.214 degrees/sec Z-gyro rate: -0.069 degrees/sec X-mag field: -3.63 mG Y-mag field: 5.46 mG Z-mag field: 54.47 mG Temperature is 26.3 degrees C X-acceleration: -45.53 mg Y-acceleration: 0.24 mg Z-acceleration: 998.60 mg X-gyro rate: -0.092 degrees/sec Y-gyro rate: 0.092 degrees/sec Z-gyro rate: 0.031 degrees/sec X-mag field: -9.08 mG Y-mag field: -18.22 mG Z-mag field: 49.20 mG Temperature is 26.3 degrees C X-acceleration: -46.51 mg Y-acceleration: 0.49 mg Z-acceleration: 1000.79 mg X-gyro rate: -0.122 degrees/sec Y-gyro rate: 0.137 degrees/sec Z-gyro rate: -0.099 degrees/sec X-mag field: -3.63 mG Y-mag field: -16.39 mG Z-mag field: 57.98 mG Temperature is 26.3 degrees C X-acceleration: -47.67 mg Y-acceleration: 2.14 mg Z-acceleration: 1002.08 mg X-gyro rate: -0.099 degrees/sec Y-gyro rate: 0.046 degrees/sec Z-gyro rate: 0.031 degrees/sec X-mag field: 0.00 mG Y-mag field: -20.04 mG Z-mag field: 43.93 mG Temperature is 26.3 degrees C X-acceleration: -46.81 mg Y-acceleration: 0.73 mg Z-acceleration: 1000.37 mg X-gyro rate: 0.000 degrees/sec Y-gyro rate: 0.168 degrees/sec Z-gyro rate: 0.000 degrees/sec X-mag field: 14.53 mG Y-mag field: -20.04 mG Z-mag field: 36.90 mG Temperature is 26.3 degrees C X-acceleration: -47.73 mg Y-acceleration: 1.22 mg Z-acceleration: 1003.36 mg X-gyro rate: 0.008 degrees/sec Y-gyro rate: 0.031 degrees/sec Z-gyro rate: -0.069 degrees/sec X-mag field: 7.26 mG Y-mag field: -5.46 mG Z-mag field: 36.90 mG Temperature is 26.3 degrees C

астер
Пн, 09 октября 2017 г. 12:37
О SPI: Прежде чем переехать в STM, я тестирую его с Arduino Uno
Соединения:
MPU9250 - Arduino
VCC-5V
GND-GND
SCL- 13
AD0-12
SDA-11
NCS-10

Я не убежден этим кодом: uint8_t MPU9250::readBytesSPI(uint8_t registerAddress, uint8_t count, uint8_t * dest) { SPI.beginTransaction(SPISettings(SPI_DATA_RATE, MSBFIRST, SPI_MODE)); select(); SPI.transfer(registerAddress | READ_FLAG); uint8_t i; for (i = 0; i < count; i++) { dest[i] = SPI.transfer(0x00); #ifdef SERIAL_DEBUG Serial.print("readBytesSPI::Read byte: 0x"); Serial.println(dest[i], HEX); #endif } SPI.endTransaction(); deselect(); delayMicroseconds(50); return i; // Return number of bytes written}

Стивестронг
Пн, 09 октября 2017 г. 13:27
[астер - Пн, 09 октября 2017 г. 12:37] - Почему это начинается и заканчивает коммуникацию SPI на каждые несколько байтов? или это нормально? :?:
Ну, сначала определите «нормальный»... ;)
Можно сделать это, если порт SPI используется с другими периферийными устройствами. В противном случае не требуется, достаточно, чтобы сделать это один раз в Setup () или Begin ().

астер
Пн, 09 октября 2017 г. 13:51
Я собирался использовать его только с устройством, чтобы я мог удалить все эти запуска/остановка!

В любом случае я провел последние 3 часа, пробуя интерфейс SPI, но он все еще не работает
Проблема заключается в коммуникации с магнитометром AK8963. Библиотека хороша при использовании I2C, но часть SPI плохо написана
Если кто -нибудь это исправить, напишите здесь!

Стивестронг
Пн, 09 октября 2017 г. 14:04
Я не вижу ни одного примера кода, который вы пробовали при использовании SPI. Пожалуйста, опубликуйте здесь.
В противном случае мы не можем знать, что и почему не работает.

астер
Пн, 09 октября 2017 г. 14:18
Я использовал пример внутри библиотеки: https: // github.com/sparkfun/sparkfun_mp ... Rs_spi.Ино (Измените, кто я с 0x71 до 0x73)
И это не сработало
Поэтому я начал модифицировать его, разрезая все не необходимые вещи, но я все равно не мог работать /* MPU9250 Basic Example Code by: Kris Winer date: April 1, 2014 license: Beerware - Use this code however you'd like. If you find it useful you can buy me a beer some time. Modified by Brent Wilkins January 9, 2016 Demonstrate basic MPU-9250 functionality including parameterizing the register addresses, initializing the sensor, getting properly scaled accelerometer, gyroscope, and magnetometer data out. Added display functions to allow display to on breadboard monitor. Addition of 9 DoF sensor fusion using open source Madgwick and Mahony filter algorithms. Sketch runs on the 3.3 V 8 MHz Pro Mini. */ #include "quaternionFilters.h" #include "MPU9250.h" #include "Streaming.h" #define AHRS true // Set to false for basic data read #define SERIAL_DEBUG false // Set to true to get Serial output for debugging MPU9250 myIMU = MPU9250(10); // Using digital pin to for chip select in demo void setup() { Serial.begin(115200); myIMU.begin(); Serial << "is in i2c mode? " << myIMU.isInI2cMode() << newl; Serial.println("Testing MPU9250::readBytesSPI..."); byte c = 0; myIMU.readBytes(MPU9250_ADDRESS, WHO_AM_I_MPU9250, 1, &c); Serial.println(c, HEX); //should be 0x73 if (c == 0x73) { Serial.println(F("MPU9250 is online...")); // Start by performing self test and reporting values myIMU.MPU9250SelfTest(myIMU.selfTest); Serial.print(F("x-axis self test: acceleration trim within : ")); Serial.print(myIMU.selfTest[0], 1); Serial.println("% of factory value"); Serial.print(F("y-axis self test: acceleration trim within : ")); Serial.print(myIMU.selfTest[1], 1); Serial.println("% of factory value"); Serial.print(F("z-axis self test: acceleration trim within : ")); Serial.print(myIMU.selfTest[2], 1); Serial.println("% of factory value"); Serial.print(F("x-axis self test: gyration trim within : ")); Serial.print(myIMU.selfTest[3], 1); Serial.println("% of factory value"); Serial.print(F("y-axis self test: gyration trim within : ")); Serial.print(myIMU.selfTest[4], 1); Serial.println("% of factory value"); Serial.print(F("z-axis self test: gyration trim within : ")); Serial.print(myIMU.selfTest[5], 1); Serial.println("% of factory value"); // Calibrate gyro and accelerometers, load biases in bias registers myIMU.calibrateMPU9250(myIMU.gyroBias, myIMU.accelBias); myIMU.initMPU9250(); // Initialize device for active mode read of acclerometer, gyroscope, and // temperature Serial.println("MPU9250 initialized for active data mode...."); //now lets work with the magnetometer myIMU.ak8963WhoAmI_SPI(); // Set slave address of AK8963 and set AK8963 for read //myIMU.writeByteSPI(I2C_SLV0_ADDR, AK8963_ADDRESS); // Set address to start read from //myIMU.writeByteSPI(I2C_SLV0_REG, WHO_AM_I_AK8963); byte fd = 0; myIMU.readBytes(AK8963_ADDRESS, WHO_AM_I_AK8963, 1, &fd); Serial.println(fd, HEX); // Read the WHO_AM_I register of the magnetometer, this is a good test of // communication byte d = myIMU.readByte(AK8963_ADDRESS, WHO_AM_I_AK8963); Serial.print("AK8963 "); Serial.print("I AM 0x"); Serial.print(d, HEX); Serial.print(" I should be 0x"); Serial.println(0x48, HEX); /* if (d != 0x48) { // Communication failed, stop here Serial.println(F("Communication failed, abort!")); Serial.flush(); abort(); } // Get magnetometer calibration from AK8963 ROM myIMU.initAK8963(myIMU.factoryMagCalibration); // Initialize device for active mode read of magnetometer Serial.println("AK8963 initialized for active data mode...."); #ifdef SERIAL_DEBUG // Serial.println("Calibration values: "); Serial.print("X-Axis factory sensitivity adjustment value "); Serial.println(myIMU.factoryMagCalibration[0], 2); Serial.print("Y-Axis factory sensitivity adjustment value "); Serial.println(myIMU.factoryMagCalibration[1], 2); Serial.print("Z-Axis factory sensitivity adjustment value "); Serial.println(myIMU.factoryMagCalibration[2], 2); #endif // SERIAL_DEBUG // Get sensor resolutions, only need to do this once myIMU.getAres(); myIMU.getGres(); myIMU.getMres(); // The next call delays for 4 seconds, and then records about 15 seconds of // data to calculate bias and scale. myIMU.magCalMPU9250(myIMU.magBias, myIMU.magScale); Serial.println("AK8963 mag biases (mG)"); Serial.println(myIMU.magBias[0]); Serial.println(myIMU.magBias[1]); Serial.println(myIMU.magBias[2]); Serial.println("AK8963 mag scale (mG)"); Serial.println(myIMU.magScale[0]); Serial.println(myIMU.magScale[1]); Serial.println(myIMU.magScale[2]); delay(2000); // Add delay to see results before serial spew of data #ifdef SERIAL_DEBUG Serial.println("Magnetometer:"); Serial.print("X-Axis sensitivity adjustment value "); Serial.println(myIMU.factoryMagCalibration[0], 2); Serial.print("Y-Axis sensitivity adjustment value "); Serial.println(myIMU.factoryMagCalibration[1], 2); Serial.print("Z-Axis sensitivity adjustment value "); Serial.println(myIMU.factoryMagCalibration[2], 2); #endif // SERIAL_DEBUG } // if (c == 0x71) else { Serial.print("Could not connect to MPU9250: 0x"); Serial.println(c, HEX); // Communication failed, stop here Serial.println(F("Communication failed, abort!")); Serial.flush(); abort(); } */ } } void loop() { /* // TODO: Fix these comments not interrupt pin used // If intPin goes high, all data registers have new data // On interrupt, check if data ready interrupt if (myIMU.readByte(MPU9250_ADDRESS, INT_STATUS) & 0x01) { myIMU.readAccelData(myIMU.accelCount); // Read the x/y/z adc values // Now we'll calculate the accleration value into actual g's // This depends on scale being set myIMU.ax = (float)myIMU.accelCount[0] * myIMU.aRes; // - myIMU.accelBias[0]; myIMU.ay = (float)myIMU.accelCount[1] * myIMU.aRes; // - myIMU.accelBias[1]; myIMU.az = (float)myIMU.accelCount[2] * myIMU.aRes; // - myIMU.accelBias[2]; myIMU.readGyroData(myIMU.gyroCount); // Read the x/y/z adc values // Calculate the gyro value into actual degrees per second // This depends on scale being set myIMU.gx = (float)myIMU.gyroCount[0] * myIMU.gRes; myIMU.gy = (float)myIMU.gyroCount[1] * myIMU.gRes; myIMU.gz = (float)myIMU.gyroCount[2] * myIMU.gRes; myIMU.readMagData(myIMU.magCount); // Read the x/y/z adc values // Calculate the magnetometer values in milliGauss // Include factory calibration per data sheet and user environmental // corrections // Get actual magnetometer value, this depends on scale being set myIMU.mx = (float)myIMU.magCount[0] * myIMU.mRes myIMU.factoryMagCalibration[0] - myIMU.magBias[0]; myIMU.my = (float)myIMU.magCount[1] * myIMU.mRes myIMU.factoryMagCalibration[1] - myIMU.magBias[1]; myIMU.mz = (float)myIMU.magCount[2] * myIMU.mRes myIMU.factoryMagCalibration[2] - myIMU.magBias[2]; } // if (readByte(MPU9250_ADDRESS, INT_STATUS) & 0x01) // Must be called before updating quaternions! myIMU.updateTime(); // Sensors x (y)-axis of the accelerometer is aligned with the y (x)-axis of // the magnetometer; the magnetometer z-axis (+ down) is opposite to z-axis // (+ up) of accelerometer and gyro! We have to make some allowance for this // orientationmismatch in feeding the output to the quaternion filter. For the // MPU-9250, we have chosen a magnetic rotation that keeps the sensor forward // along the x-axis just like in the LSM9DS0 sensor. This rotation can be // modified to allow any convenient orientation convention. This is ok by // aircraft orientation standards! Pass gyro rate as rad/s MahonyQuaternionUpdate(myIMU.ax, myIMU.ay, myIMU.az, myIMU.gx * DEG_TO_RAD, myIMU.gy * DEG_TO_RAD, myIMU.gz * DEG_TO_RAD, myIMU.my, myIMU.mx, myIMU.mz, myIMU.deltat); if (!AHRS) { myIMU.delt_t = millis() - myIMU.count; if (myIMU.delt_t > 500) { #ifdef SERIAL_DEBUG // Print acceleration values in milligs! Serial.print("X-acceleration: "); Serial.print(1000 * myIMU.ax); Serial.print(" mg "); Serial.print("Y-acceleration: "); Serial.print(1000 * myIMU.ay); Serial.print(" mg "); Serial.print("Z-acceleration: "); Serial.print(1000 * myIMU.az); Serial.println(" mg "); // Print gyro values in degree/sec Serial.print("X-gyro rate: "); Serial.print(myIMU.gx, 3); Serial.print(" degrees/sec "); Serial.print("Y-gyro rate: "); Serial.print(myIMU.gy, 3); Serial.print(" degrees/sec "); Serial.print("Z-gyro rate: "); Serial.print(myIMU.gz, 3); Serial.println(" degrees/sec"); // Print mag values in degree/sec Serial.print("X-mag field: "); Serial.print(myIMU.mx); Serial.print(" mG "); Serial.print("Y-mag field: "); Serial.print(myIMU.my); Serial.print(" mG "); Serial.print("Z-mag field: "); Serial.print(myIMU.mz); Serial.println(" mG"); myIMU.tempCount = myIMU.readTempData(); // Read the adc values // Temperature in degrees Centigrade myIMU.temperature = ((float) myIMU.tempCount) / 333.87 + 21.0; // Print temperature in degrees Centigrade Serial.print("Temperature is "); Serial.print(myIMU.temperature, 1); Serial.println(" degrees C"); #endif // SERIAL_DEBUG myIMU.count = millis(); } // if (myIMU.delt_t > 500) } // if (!AHRS) else { // Serial print and/or display at 0.5 s rate independent of data rates myIMU.delt_t = millis() - myIMU.count; // update LCD once per half-second independent of read rate if (myIMU.delt_t > 500) { #ifdef SERIAL_DEBUG Serial.print("ax = "); Serial.print((int)1000 * myIMU.ax); Serial.print(" ay = "); Serial.print((int)1000 * myIMU.ay); Serial.print(" az = "); Serial.print((int)1000 * myIMU.az); Serial.println(" mg"); Serial.print("gx = "); Serial.print(myIMU.gx, 2); Serial.print(" gy = "); Serial.print(myIMU.gy, 2); Serial.print(" gz = "); Serial.print(myIMU.gz, 2); Serial.println(" deg/s"); Serial.print("mx = "); Serial.print((int)myIMU.mx); Serial.print(" my = "); Serial.print((int)myIMU.my); Serial.print(" mz = "); Serial.print((int)myIMU.mz); Serial.println(" mG"); Serial.print("q0 = "); Serial.print(*getQ()); Serial.print(" qx = "); Serial.print(*(getQ() + 1)); Serial.print(" qy = "); Serial.print(*(getQ() + 2)); Serial.print(" qz = "); Serial.println(*(getQ() + 3)); #endif // SERIAL_DEBUG // Define output variables from updated quaternion---these are Tait-Bryan // angles, commonly used in aircraft orientation. In this coordinate system, // the positive z-axis is down toward Earth. Yaw is the angle between Sensor // x-axis and Earth magnetic North (or true North if corrected for local // declination, looking down on the sensor positive yaw is counterclockwise. // Pitch is angle between sensor x-axis and Earth ground plane, toward the // Earth is positive, up toward the sky is negative. Roll is angle between // sensor y-axis and Earth ground plane, y-axis up is positive roll. These // arise from the definition of the homogeneous rotation matrix constructed // from quaternions. Tait-Bryan angles as well as Euler angles are // non-commutative; that is, the get the correct orientation the rotations // must be applied in the correct order which for this configuration is yaw, // pitch, and then roll. // For more see // http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles // which has additional links. myIMU.yaw = atan2(2.0f * (*(getQ() + 1) * *(getQ() + 2) + *getQ() * *(getQ() + 3)), *getQ() * *getQ() + * (getQ() + 1) * *(getQ() + 1) - * (getQ() + 2) * *(getQ() + 2) - * (getQ() + 3) * *(getQ() + 3)); myIMU.pitch = -asin(2.0f * (*(getQ() + 1) * *(getQ() + 3) - *getQ() * *(getQ() + 2))); myIMU.roll = atan2(2.0f * (*getQ() * *(getQ() + 1) + * (getQ() + 2) * *(getQ() + 3)), *getQ() * *getQ() - * (getQ() + 1) * *(getQ() + 1) - * (getQ() + 2) * *(getQ() + 2) + * (getQ() + 3) * *(getQ() + 3)); myIMU.pitch *= RAD_TO_DEG; myIMU.yaw *= RAD_TO_DEG; // Declination of SparkFun Electronics (40°05'26.6"N 105°11'05.9"W) is // 8° 30' E ± 0° 21' (or 8.5°) on 2016-07-19 // - http://www.ngdc.noaa.gov/geomag-web/#declination myIMU.yaw -= 8.5; myIMU.roll *= RAD_TO_DEG; #ifdef SERIAL_DEBUG Serial.print("Yaw, Pitch, Roll: "); Serial.print(myIMU.yaw, 2); Serial.print(", "); Serial.print(myIMU.pitch, 2); Serial.print(", "); Serial.println(myIMU.roll, 2); Serial.print("rate = "); Serial.print((float)myIMU.sumCount / myIMU.sum, 2); Serial.println(" Hz"); #endif // SERIAL_DEBUG // With these settings the filter is updating at a ~145 Hz rate using the // Madgwick scheme and >200 Hz using the Mahony scheme even though the // display refreshes at only 2 Hz. The filter update rate is determined // mostly by the mathematical steps in the respective algorithms, the // processor speed (8 MHz for the 3.3V Pro Mini), and the magnetometer ODR: // an ODR of 10 Hz for the magnetometer produce the above rates, maximum // magnetometer ODR of 100 Hz produces filter update rates of 36 - 145 and // ~38 Hz for the Madgwick and Mahony schemes, respectively. This is // presumably because the magnetometer read takes longer than the gyro or // accelerometer reads. This filter update rate should be fast enough to // maintain accurate platform orientation for stabilization control of a // fast-moving robot or quadcopter. Compare to the update rate of 200 Hz // produced by the on-board Digital Motion Processor of Invensense's MPU6050 // 6 DoF and MPU9150 9DoF sensors. The 3.3 V 8 MHz Pro Mini is doing pretty // well! myIMU.count = millis(); myIMU.sumCount = 0; myIMU.sum = 0; } // if (myIMU.delt_t > 500) } // if (AHRS) */ }

Стивестронг
Пн, 09 октября 2017 г. 15:45
Я до сих пор не вижу, где вы используете порт SPI.
И что именно не работает? Подключили ли вы чип MPU к контактам порта SPI?

астер
Пн, 09 октября 2017 г., 17:07
Я использую SPI каждый раз, когда называю «readbytes»
В любом случае проблема заключается в самой библиотеке не с помощью связи SPI

Степпер.час

Пидж