Skip to main content
Visitor II
January 21, 2019
Question

I am using LIS3DH for my project. Spike in X,Y or Z axis observed in idle position.

  • January 21, 2019
  • 2 replies
  • 986 views

I have prepared an application in which I am reading accelerometer x,y,z axis data from its registers @every 2 sec. Now what i observed is that if I keep my board at stable position without disturbing board or any surroundings still I see some spike value in one of the axis data. I have kept a threshold value for each axis.

Now due to this spike one of the axis crosses the threshold value. I do not understand that in idle position why such spike is observed.

If required I can share my application in which I have configured the registers at Init time and using X,Y,Z axis registers to read.

Please guide me in this issue.

Thank You,

Arjav Parikh

    This topic has been closed for replies.

    2 replies

    Visitor II
    January 21, 2019

    Compared with a known-working reference device (accelerometer) ?

    Does the spike move with the axis when you turn the MEMS board ?

    Tried a different environment (place) ?

    In other words, what if the spike is real ?

    APari.12Author
    Visitor II
    January 22, 2019

    Hi AvaTar,

    Thank You for your response.

    Please find answers inline:

    Compared with a known-working reference device (accelerometer) ?

    Ans: No. I don't have any working reference board for LIS3DH. I am using it with QCOM APQ8009 SOC.

    Does the spike move with the axis when you turn the MEMS board ?

    Ans: When I move the board I see the change in Axis value as expected. But in ideal condition (when not rotating the board) also I see spike and then again it gets back to normal.

    Tried a different environment (place) ?

    Ans: No. What ideal environment shall I check this.

    In other words, what if the spike is real ?

    Ans: As per my project use In ideal position spike is not expected because in application I have taken a threshold value such that if threshold value is crossed then I will consider it as a theft detection case. So I need to eliminate the spike in ideal condition.

    I have not configured Interrupts in LIS3DH. I am just reading the axis values from its registers.

    Please let me know in case of any additional information required from my end.

    Visitor II
    January 22, 2019

    > Ans: No. I don't have any working reference board for LIS3DH.

    > Ans: No. What ideal environment shall I check this.

    Have you considered the "spikes" as measurement of real events in your environment ?

    Perhaps large machinery, transportation, or mining ?

    Avoid hunting phantoms.

    If the downward pointing axis measures 1g, and the measurement follows when turning the accelerometer, you are fine.

    APari.12Author
    Visitor II
    January 22, 2019

    > Have you considered the "spikes" as measurement of real events in your environment ?

    Ans: Yes. I am continuously reading value from registers.

    Current environment scenario is accelerometer is mounted on embedded board within room temperature.

    Please find below detail for current issue w.r.t application:

    At boot time when my accelerometer application starts, I have configured below registers:

    Init() {

    FIFO_CTRL_REG = 0x80 (Enable Stream Mode)

    CTRL_REG0 = 0x90 (SDO/SAO Pull Up Disconnected for I2C)

    CTRL_REG1 = 0x77 (ODR is 400 Hz H-RES Mode,X-Axis En, Y-Axis En, Z-Axis En)

    CTRL_REG4 = 0x08 (H-RES Mode)

    CTRL_REG5 = 0x40 (FIFO ENABLED)

    }

    Read() /* This function is called every 2 sec */ {

    Read : x_axis_lsb = OUT_X_L, x_axis_msb = OUT_X_H

    x_axis = (x_axis_msb << 8 | x_axis_lsb);

    Read y_axis_lsb = OUT_Y_L, y_axis_msb = OUT_Y_H

    y_axis = (y_axis_msb << 8 | y_axis_lsb);

    Read z_axis_lsb = OUT_Z_L, z_axis_msb = OUT_Z_H

    z_axis = (z_axis_msb << 8 | z_axis_lsb);

    }

    a. In read function during idle position I get below values for each axis:

    x-axis : 0x40 / 0x0, y-axis : 0x40 / 0x0, z-axis : 0x40 / 0x0

    b. In same position (no orientation/position change) after some time I get below values:

    x-axis : 0xC040 / 0xFFC0, y-axis : 0xC0 / 0x100, z-axis : 0x5780 / 0x1AC0

    My expectation is that in ideal condition I should always get values mentioned in case a. Am I doing something wrong while configuring registers?