Skip to main content
Visitor II
June 12, 2019
Question

Problems with temperature affecting the readings from LSM6DS3TR.

  • June 12, 2019
  • 5 replies
  • 1768 views

I'm developing a product using the LSM6DS3TR. As per the data sheet the data from the device should not be influenced by temperature more than 1.5% between -40 and +85 degrees. I see wild swings in the data for the Y-Axis Accelerometer when the temperature changes. I can actually just breath on the device and see the data skew. When placed in the sun the data really swings, but only for the Y-Axis. Any help would be greatly appreciated. Rob

    This topic has been closed for replies.

    5 replies

    ST Employee
    June 17, 2019

    Hi Rob, you are right, the device should not show strange behavior (after environmental disturbance, temperature, UV or wind), especially on a single axis (because MEMS axis are almost symmetrical). Is it possible for you to share the raw data of your acquisition? Did you test the gyro part of the module and, If so, does the Y-axis (Roll) data also show bad behavior? Which are your operation conditions (Vdd/VddIO)? Regards

    RConwAuthor
    Visitor II
    June 17, 2019

    Hi Eleon, thanks for getting back to me... Vdd and VddIO are both at 1.8 volts. That voltage level is a requirement for the device. The issue however is the same even if I supply 3.3 volts. I'm working to get you some terminal output tomorrow. Here are my register settings for the accelerometers. I will have to verify if the Gyro data is also getting skewed.

    myIMU.writeRegister(LSM6DS3_ACC_GYRO_CTRL7_G, 0x80); // CTRL7_G Register - Gyro High-Performance Mode Disabled, HPF Disabled, HP Cutoff Frequency .0081 Hz, gyro digital HP filter reset OFF, Source register rounding function Disabled.

    myIMU.writeRegister(LSM6DS3_ACC_GYRO_CTRL2_G, 0x10); // CTRL2_G Register - Enable Gyro, Low Power Mode, 13Hz Sample Rate, Max 245 Degrees/sec

    myIMU.writeRegister(LSM6DS3_ACC_GYRO_CTRL6_C, 0x10); // CTRL6_C Register - Accelerometer High-Performance Mode Disabled, Edge Trigger Disabled, Data-Level Trigger Disabled, Level Sensitive Latch Disabled.

    myIMU.writeRegister(LSM6DS3_ACC_GYRO_CTRL1_XL, 0x10); // CTRL1_XL Register - Enable Accelerometer, Low Power Mode, 13Hz Sample Rate, 2g Range, 400Hz Anti-Aliasing Filter enabled

    All other control registers are left as default.

    Robert

    Explorer
    June 18, 2019

    Is the supply voltage stable over the temperature range ?

    Did you perhaps damage the sensor (overheating while soldering) ?

    RConwAuthor
    Visitor II
    June 18, 2019

    Supply voltage is absolutely stable and filtered.

    The sensors are soldering using proper SMD reflow techniques, so, no.

    I have written some debug code and started testing the accelerometer one axis at a time.

    vdd and the vddIO are both set to 2.5v for this test, but I get the same results with 1.7, 2.5, and 3.3v

    Registers are as stated in my last message. All other registers are untouched.

    I have added a file attachment which contains the terminal output.

    At timestamp 10 I added heat from a hair dryer approximately 1 foot away from the board.

    At timestamp 20 I removed the heat.

    Code:

    if (Debug == 1) // send raw and kalman filtered Accelerometer values to the serial uart

    {

    Now = millis();

    if ((Now - Last_Debug_Update) > 125)

    {

    Serial.print("Timestamp: ");

    Serial.println(millis()/125);

    Last_Debug_Update = millis();

    }

    Est_X_Acc_Value = 0;

    Est_Y_Acc_Value = 0;

    Est_Z_Acc_Value = 0;

    for (int i = 0; i < READ_IMU_ACC_SAMPLES; i++)

    {

    //Value1 = myIMU.readRawAccelX();

    Value1 = myIMU.readFloatAccelX();

    Est_X_Acc_Value = (Est_X_Acc_Value + KalmanFilterAccX.updateEstimate(Value1));

    //Value2 = myIMU.readRawAccelY();

    Value2 = myIMU.readFloatAccelY();

    Est_Y_Acc_Value = (Est_Y_Acc_Value + KalmanFilterAccY.updateEstimate(Value2));

    //Value3 = myIMU.readRawAccelZ();

    Value3 = myIMU.readFloatAccelZ();

    Est_Z_Acc_Value = (Est_Z_Acc_Value + KalmanFilterAccZ.updateEstimate(Value3));

    delay(1);

    }

    Est_X_Acc_Value = Est_X_Acc_Value/READ_IMU_ACC_SAMPLES;

    Est_Y_Acc_Value = Est_Y_Acc_Value/READ_IMU_ACC_SAMPLES;

    Est_Z_Acc_Value = Est_Z_Acc_Value/READ_IMU_ACC_SAMPLES;

    Serial.print("Raw X= ");

    Serial.print(Value1);

    Serial.print(" ");

    Serial.print("Kalman X= ");

    Serial.print(Est_X_Acc_Value);

    Serial.print("   ");

    Serial.print("Raw Y= ");

    Serial.print(Value2);

    Serial.print(" ");

    Serial.print("Kalman Y= ");

    Serial.print(Est_Y_Acc_Value);

    Serial.print("   ");

    Serial.print("Raw Z= ");

    Serial.print(Value3);

    Serial.print(" ");

    Serial.print("Kalman Z= ");

    Serial.println(Est_Z_Acc_Value);

    return;

    } // End Debug = 1

    Visitor II
    December 14, 2019

    same problem i have.

    if you find solutins ?