Несколько mpu9250 с использованием tca9548a с esp32
Я использую ESP32 и 1 датчик mpu9250(только для тестирования) с tca9548a, соединения:
TCA <-> ESP
VIN - VCC
GND - GND
ПДД - GPIO21
SCL - GPIO22
TCA <-> MPU
SD2 - ПДД
SC2 - SCL
ВИН - ВИН
GND - GND
И мой код здесь:
#include <SparkFunMPU9250-DMP.h>
#include <Wire.h>
#define TCAADDR 0x70
void tcaselect(uint8_t i) {
if (i > 7) return;
Wire.beginTransmission(TCAADDR);
Wire.write(1 << i);
Wire.endTransmission();
}
MPU9250_DMP imu;
void setup()
{
Serial.begin(115200);
Wire.begin();
tcaselect(2);
if (imu.begin() != INV_SUCCESS)
{
while (1)
{
Serial.println("Unable to communicate with MPU-9250");
Serial.println("Check connections, and try again.");
Serial.println();
delay(5000);
}
}
imu.dmpBegin(DMP_FEATURE_6X_LP_QUAT | // Enable 6-axis quat
DMP_FEATURE_GYRO_CAL, // Use gyro calibration
10); // Set DMP FIFO rate to 10 Hz
delay(10000);
}
void loop()
{
tcaselect(2);
imu.dmpUpdateFifo();
float q0 = imu.calcQuat(imu.qw);
float q1 = imu.calcQuat(imu.qx);
float q2 = imu.calcQuat(imu.qy);
float q3 = imu.calcQuat(imu.qz);
Serial.println("Q: " + String(q0, 4) + ", " +
String(q1, 4) + ", " + String(q2, 4) +
", " + String(q3, 4));delay(10);
}
Мне нужно получить кватернионы от датчика MPU, но я получаю только нули на выходе.
Библиотека, которую я использовал: https://github.com/rupin/SparkFun_MPU-9250-DMP_Arduino_Library
Что может быть не так, моя связь или библиотека?
@TryHack Channel, 👍0
Обсуждение1 ответ
Лучший ответ:
Решение заключается в том, что я просто удалил tca9548a из схемы. Затем я подключил каждый вывод AD0 к соответствующим выводам GPIO ESP32, чтобы включить датчик, я посылаю ему низкий сигнал и высокий сигнал всем остальным. Таким образом, библиотека работает только с датчиком, адрес которого равен 0x68.
Есть пример функции из моего скетча:
#include <SparkFunMPU9250-DMP.h>
/*INIT SENSORS*/
MPU9250_DMP imu;
MPU9250_DMP imu1;
const int sensor1 = 18;
const int sensor2 = 19;
String IMU_1Update(){
String res;
digitalWrite(sensor1, LOW); // 1st sensor enable - 0x68
digitalWrite(sensor2, HIGH); // 2nd sensor disable - 0x69
if ( imu1.fifoAvailable() ){
if ( imu1.dmpUpdateFifo() == INV_SUCCESS){
float q0 = imu1.calcQuat(imu1.qw);
float q1 = imu1.calcQuat(imu1.qx);
float q2 = imu1.calcQuat(imu1.qy);
float q3 = imu1.calcQuat(imu1.qz);
Serial.print("G1|");
Serial.print(q0);
Serial.print("|");
Serial.print(q1);
Serial.print("|");
Serial.print(q2);
Serial.print("|");
Serial.print(q3);
Serial.println("|");
}
}
return res;
}
- Считывание нескольких датчиков MPU 9250 с помощью мультиплексора TCA9548A
- Синхронизация нескольких MPU9250
- Использование MPU6050 с ESP32 Cam - MPU Не обнаружено
- LILYGO TTGO T-Display не может обнаружить акселерометр, гироскоп и датчик температуры MPU 6050
- Трудности получения значений угла от MPU6050.
- Подключение катода диода к выходу мультиплексора
- Можно ли получить значения только во время вибрации/движения с акселерометра (ADXL335/MPU6050)?
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
вы читали ответ на этот вопрос? https://arduinoprosto.ru/q/70834/multiple-mpu9250-synced, @Juraj
Вы можете попробовать адаптировать скетч сканера I2C для использования TCA9548a, как вы это делаете. Затем вы можете проверить, действительно ли MPU виден на автобусе. Я бы подумал, что Arduino не может достичь MPUn, поэтому выдает только нули, @chrisl
@Juraj да, я попробую этот метод позже. Но теперь я хотел бы выяснить, почему мой метод не работает, @TryHack Channel
@Juraj Это работает, спасибо!, @TryHack Channel
@chrisl Это правда, сканер TCA не может найти никаких адресов MPU9250. Похоже на растяжение часов(idk). Но теперь я использую метод изменения адреса MPU, который я использую в 1 тике., @TryHack Channel