I am struggling to calibrate an Mpu 6050 specifcially it is a;
Adafruit MPU-6050 6-DoF Accel and Gyro Sensor - STEMMA QT Qwiic
which is connected to a Raspberry Pi 2.
When I try to call the .CalibrateGyroscopeAccelerometer(); method I get the error;
System.IO.IOException: Can set GyroscopeBandwidth, desired value Bandwidth0184Hz, stored value Bandwidth0250Hz
public HardwareAccelerometerController(
ILogger<HardwareAccelerometerController> logger,
int i2cAddress,
int recalibrationIntervalMinutes,
int i2cBusId = 1)
{
_logger = logger;
try
{
var i2cSettings = new I2cConnectionSettings(i2cBusId, i2cAddress);
var i2cDevice = I2cDevice.Create(i2cSettings);
_mpu6050 = new Mpu6050(i2cDevice); // Initialize the MPU6050
_logger.LogInformation($"MPU6050 initialized with I2C address {i2cAddress} on bus {i2cBusId}.");
}
catch (Exception ex)
{
_logger.LogError(ex, $"Failed to initialize MPU6050 with I2C address {i2cAddress} on bus {i2cBusId}. Check connections and configuration.");
throw new InvalidOperationException("MPU6050 initialization failed. Ensure the device is connected and configured correctly.", ex);
}
_recalibrationIntervalMinutes = recalibrationIntervalMinutes;
_lastCalibrationTime = DateTime.Now;
}
/// <summary>
/// Calibrate the accelerometer and gyroscope.
/// </summary>
public async Task CalibrateAsync()
{
if (_mpu6050 == null)
{
_logger.LogError("Cannot calibrate MPU6050 because it is not initialized.");
throw new InvalidOperationException("MPU6050 is not initialized.");
}
await Task.Run(() =>
{
_logger.LogInformation("Calibrating MPU6050...");
try
{
_mpu6050.CalibrateGyroscopeAccelerometer();
_logger.LogInformation("Calibration complete.");
}
catch (IOException ex)
{
_logger.LogError(ex, "Failed to set the GyroscopeBandwidth. Proceeding with default bandwidth.");
}
});
}
From the logger the device is initilised;
MPU6050 initialized with I2C address 104 on bus 1.
From running sudo i2cdetect -y 1 on the pi I get
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
So the unit is present - i have also tried the a python sript which is returning data from the unit.
I have also tested
_logger.LogInformation($"MPU6050: Accelerometer X:{_mpu6050.GetAccelerometer().X}, Y:{_mpu6050.GetAccelerometer().Y}, Z:{_mpu6050.GetAccelerometer().Z}");
_logger.LogInformation($"MPU6050: Gyroscope X:{_mpu6050.GetGyroscopeReading().X}, Y:{_mpu6050.GetAccelerometer().Y}, Z:{_mpu6050.GetAccelerometer().Z}");
Prior to calling the CalibrateGyroscopeAccelerometer() method which return values. attmepting after the exception leads to 0,0,0 being returned.
I cannot find any detail on this specific error? Can anyone tell me how to debug this and what I may be doing wrong please?
I am struggling to calibrate an Mpu 6050 specifcially it is a;
Adafruit MPU-6050 6-DoF Accel and Gyro Sensor - STEMMA QT Qwiicwhich is connected to a Raspberry Pi 2.
When I try to call the .CalibrateGyroscopeAccelerometer(); method I get the error;
System.IO.IOException: Can set GyroscopeBandwidth, desired value Bandwidth0184Hz, stored value Bandwidth0250HzFrom the logger the device is initilised;
MPU6050 initialized with I2C address 104 on bus 1.From running sudo i2cdetect -y 1 on the pi I get
So the unit is present - i have also tried the a python sript which is returning data from the unit.
I have also tested
Prior to calling the
CalibrateGyroscopeAccelerometer()method which return values. attmepting after the exception leads to 0,0,0 being returned.I cannot find any detail on this specific error? Can anyone tell me how to debug this and what I may be doing wrong please?