2018-01-02 06:59 AM
HI everybody,
I'm working with the LIS2DH for a motion sensor, and I'm using the embbeded functions of motion detection for drive the state machine of my MCU.
The operation is simple, but I have some trouble with the sensor.
I want to detect a movement if the duration is min 5sec, and I want to detect End of movement if the duration is 5sec.
So I use the IA1 funtion with INT1 output for detection movement.
And IA2 function with INT2 output for End of movement detection.
Both INT output are OK with the detection, but I have non stable operation. Sometimes the INT1 toggles witout reason, sometime it's INT2.....
So if you run with the sensor in your hand, the INT1 output is high after 5sec. And if you put the sensor on the floor, the INT2 output is high after 5sec.
Sample is 1Hz ,Range is 2G.
High filter is set.
INT1_CFG is set to High level detection on X, Y , Z. OR condition
INT2_CFG is set to Low level
detection on X, Y , Z. OR conditionINT1_duration & INT2_duration are set to 0x05 in order to have 5sec of time detection.
INT1_threshold & INT2_threshold are set to 0x02, in order to have high sensivity.
Below the setting of the LIS2DH:
status_t LIS2DH_Init(void)
{ SPI1_Initialize(); CS_LIS1_SetHigh(); CS_LIS2_SetHigh(); LIS2DH_WriteReg(LIS2DH1,LIS3DH_CTRL_REG1,0x1F); LIS2DH_WriteReg(LIS2DH1,LIS3DH_CTRL_REG2,0x03); LIS2DH_WriteReg(LIS2DH1,LIS3DH_CTRL_REG3,0x40); LIS2DH_WriteReg(LIS2DH1,LIS3DH_CTRL_REG4,0x80); LIS2DH_WriteReg(LIS2DH1,LIS3DH_CTRL_REG5,0x00); LIS2DH_WriteReg(LIS2DH1,LIS3DH_CTRL_REG6,0x20); //START detection LIS2DH_WriteReg(LIS2DH1,LIS3DH_INT1_CFG,0x02); LIS2DH_WriteReg(LIS2DH1,LIS3DH_INT1_THS,0x02); LIS2DH_WriteReg(LIS2DH1,LIS3DH_INT1_DURATION,0x05); //STOP detection LIS2DH_WriteReg(LIS2DH1,LIS3DH_INT2_CFG,0x15); LIS2DH_WriteReg(LIS2DH1,LIS3DH_INT2_THS,0x02); LIS2DH_WriteReg(LIS2DH1,LIS3DH_INT2_DURATION,0x05); return MEMS_SUCCESS;}Could you please help to understant and solve this problème?
Thanks a lot for your support.
wilfried
Solved! Go to Solution.
2018-02-27 02:20 AM
Hi Miroslav,
I'm validated your first proposal. So I toggle the CS of the opposite sensor after a writing or a reading on the first sensor. Just a last question, I put a delay à 50us for the toggle of the CS.:
CS_LIS2_SetLow();__delay_us(50);CS_LIS2_SetHigh();
This delay is working on my board. Do you think it's a good delay for get a stable working ?
Thanks a lot for your support.
wilfried
2018-01-04 12:50 AM
First of all the value of INT1_CFG register is not correct, it should be 0x2A (not 0x02).
I think using 1Hz is difficult because the high-pass filter has a decay and it will influence the timing.
I would recommend you to try ODR 10Hz, adjust the Duration register accordingly and also increase the threshold little bit to increase noise immunity.
Please see below my configuration, it seems to me it works well.
2018-01-09 09:52 AM
Dear Miroslave,
Thanks for your feedback.
For the first point, you're right, it's a mistake from my side, the real value is 0x2A.
I have increased the detection threshold for interrupts 1 & 2, from 0x02 to 0x05, and the operation is stable now.
I need also support for the high pass filter, it's not clear for me. The goal of the high pass filter is to delete the continus value on the Z axe (-1g).
If I walk with the sensor on my hand with the last setting, the values of the X,Y and Z axes will be not constant, the values will move from -500mg to 500mg, and the mean value is around 0g. So according to the sample frequency ODR, it's possible to have a low value, under the threshold INT1_THS. so if I put 0x32 for INT1_DURATION and only one point is under the threshold, what's about the INT1_output ? is it set or not set?
Does the high pass filter have action for the case of detection? What's will be the best filter mode for this situation?.
Another question: I plan to buy the dev board
STEVAL-MKI109V2 with LIS2DH sensor
in order to fully understand the features.
Is it possible to record and export curve and data point during long timing ( 15min)?
Best regards
and thanks for your help.
wilfried
2018-01-10 02:51 AM
If even only one sample will be under the threshold the interrupt won't be triggered, basically in your case each sample bellow the threshold will reset the duration counter. I don't know what is your exact target, but usually these detections are not 100% accurate, the threshold is different for each activity like for example working on PC, walking, sitting in car, ... and it can vary person by person, also it depends on the position of the sensor (on wrist, in pocket, ...)
STEVAL-MKI109V2 or STEVAL-MKI109V3 cooperate with Unico application, which is able to record data and store them into text file. 15 minutes is not a problem.
2018-01-10 03:57 AM
Hi,
My final application is a sensor for asset tracking ( truck and railway wagon), we plan to start the mass prod this year.
The sensor have to detect beginning of movement with INT1 , and end movement with INT2.
Beginning movement must be detected from 10sec of vibration.
End of movement must be detected from 120sec of no-vibration.
The 2 INT functions are runnng in same time, so I have to put ODR to 1HZ in order to have a long time of stop detection (120sec).
According to your last response, I have a doubt concerning the faisability of the movement detection.
What do think about this kind of detection?
Do I have to use a post treatment with my MCU for manage the detection.
Regards.
2018-01-10 04:33 AM
I'm using LIS2DH , not DE.
2018-01-10 05:29 AM
Yes, I think using MCU for data processing is better approach which will be needed.
With LIS2DE12 accelerometer the only parameter which you can change is threshold as the duration is given, which is not flexible.
Good approach is to collect data in real situation (on track or wagon) and then evaluate them offline, you can the simulate your detection and see if the simple solution would work on not.
2018-01-10 08:09 AM
Sure, but the interrupt features are the same.
2018-02-21 10:53 AM
Hi Miroslav,
My sensor is working fine now. Detection of activity/ no activity is ok with embedded functions.
But I have a strange running on the SPI bus when I use 2 LIS2DH,
When I connect and use only one LIS2DH, all are OK, but on my final board I have 2 LIS2DH connected to the same SPI bus. I drive the CS pin on each sensor for set parameters on the selected sensor.
I can't write the value 0x32 into the register LIS3DH_INT1_DURATION(0x33), when I read after the write operation the value is 0xFF. I have no problem with the value 0x31 and 0x33, but only with the value 0x32.
If I disconnect the 2nd LIS2DH, the writing operation is OK with the value 0x32.
I checked my schematic (see below). All it's OK.
Is very crazy, I havn't explanation. Do you I have an idea?
thanks a lot for your support!
wilfried
2018-02-21 12:35 PM
I think, I have an explantion, the second sensor which has CS=1 is actually expecting I2C command and the 0x32 is write address of the sensor on I2C bus. So it interract with your SPI comunication. Can you please capture the comunication on the SPI bus by scope or logic analyzer? You should not create I2C start condition with the SPI communication.