I have two of BTT’s USB accelerometers. One is ADXL345 and the other is LIS2DW. I actually owned the latter first but after watching a negative review about it and then later confirming for myself anomalies in the PSD graphs for it, I bought the ADXL version too and did some comparisons.
TLDW: the video above is from the Klippain community and essentially talks about the lis2dw’s 200Hz Nyquist limit due to an internal (chip level) filter at 400Hz. The datasheet itself confirms something like it it in Table 41, which basically says there is a bandwidth filter on the output, and it is at most 400Hz.
So imagine my surprise when I actually looked at the output.csv doing an ACCELEROMETER_MEASURE and found that the ODR itself is limited to 400Hz, not just the bandwidth. This plot below is instantaneous data rate versus time, which is about 5 seconds of measure. I used a macro to do measure, G4P5000, then measure again. After that I did a diff/lag between the time rows and then just reciprocated it to get the instantaneous ODR. I could have left y axis as the original timestamp but I did the conversion just to see the actual number in Hz.
Short story long, its just under 400 data points per second. Around 390, which is reasonable but what I found unreasonable was the irregularity of the output intervals. Not only is there ±10% variation, there is also periodicity on the order of 0.5-2 seconds. This can’t be good for FFT.
I spent the $10 and got the ADXL345 version and it is much better. Not only is the ODR over 3000Hz, it is ±0.3%
OK. Now how is the bad ODR behavior of lis2dw going to affect us. Take a look at the actual PSD plot from graph_accelerometer.py/shaper_calibrate.py:
That low frequency peak 20x over background is solely from the time misbehavior of the lis2dw. You should trust me when I say I don’t live in a geography that has earthquakes. Or just look at this…I select the least offensive part of the raw data where the ODR seems most regular, like this:
Then I cut out that 1-second section and only PSD plot that section:
What do you know, 5 & 15 hz disappears into background. But now I have 85 hz. Am I going crazy? Well it turns out there is irregularity even there:
Umm..that looks like there is time modulation even at this level. I am not going there.
Ok now the ADXL345 is looking cleaner. There is a peak at 185 Hz 5x over background. Not as bad is lis2dw 20x fake peak. No fans are running. Motors are off.
Btw this is what it looks like when the hotend fan is running:
That 130hz is from the lower harmonic of a mosquito 2510 running at 13k rpm. It is loud as fuck. So at this point I’m thinking 185Hz could be another fake peak. It would be audible if it was real. So I look deeper into the time intervals for adxl345:
Okay, maybe the first second looks like there is some periodic modulation. I cut off the first 1 second and replot:
Oh FFS. It’s still there, it just shifted down to 150 Hz. Correct me if I’m wrong, but real vibrations do not shift in spectrum when you just delete the first 20% of it. This has to be because of the irregular time intervals. Unless adxl is also doing some internal filtering shenanigans which I doubt.
Ok here’s Klippain Shake n Tune plots. First is lis2dw, second is adxl:
The lis2dw has wideband noise below 50hz and is contributing to the higher psd at 5-20hz. It also has spurious peaks all around the main real one, not to mention one that is decending with time (resonant frequency decreasing while calibration excitation resonance is increasing? what??).
Ok sorry for the novella. But has there been a discussion about the shaper_calibrate.py having some sort of interval regularization instead of assuming it is regular i.e. dt = T/N_samples?
I hope this can be improved by code. But if not, I’m just happy to get this off my chest. At the very least I hoped i managed to convince people away from lis2dw given how lis2dw is being marketed by BTT to be superior in so many ways, yet is hot garbage.






















