您实际将什么值存储到“Register 0x31—DATA_FORMAT”中?
我将假设您没有将任何内容存储到该寄存器中,因此它仍处于其复位值 00 中。换句话说,当您收集数据时(来自表 16 以及ADXL345 数据表的第 17 页):
- 寄存器 0x31—DATA_FORMAT == 00。
- FULL_RES == 0。因此设备处于 10 位模式,范围位确定最大 g 范围和比例因子。
- 对齐位 == 0。因此,带有符号扩展的右对齐模式。
- 范围位 == 00。所以 +- 2g 范围。
我要做的第一件事是恢复从加速度计读取的原始 16 位值。(即,如果我不小心丢弃了原始数据,而我只剩下以“g”为单位的数字,这些数字是通过减去一些偏移量并乘以一些不正确的比例因子来计算的,我会将收集到的数据复制到电子表格并除以相同的(不正确的)比例因子,然后添加该偏移量以尝试恢复接近原始值的东西)。
然后我会将数据绘制成图表,看看它是否更像“饱和度”、“线性”或“翻转”(如下所述)。
数据表对于当传感器经历大于 2 g 的加速度时会发生什么含糊不清。
切线咆哮
我有没有告诉过你,当技术作家坚持用被动语态写作时,我有多恼火?当作者在你引用的句子中使用被动语态时,
“除了 ±16 g 范围的数据,所有数据都必须被剪裁以避免翻转。” (第 17 页)
我不知道究竟是谁应该做这个剪辑。
许多人建议使用主动语态。当我遵循这些建议时,我的文字通常会更清楚地说明谁做什么。当我写的东西更容易理解,而不是使用人们被欺骗认为听起来“更专业”或“更学术”的风格时,这不是更好吗?
自动剪裁
我最好的猜测是加速度计会自动进行这种削波。
饱和度:如果您看到加速度通过合理的值上升,然后神秘地卡在一个高原上,在 +2g 或附近饱和,那么加速度计“有用地”为您截取了数据。剪裁后,“top”值不再表示“加速度非常接近 +2g”,而是现在表示“加速度至少为 2g,并且可能更多,无法判断”。
因为它处于 10 位右对齐模式,所以当我将这些 16 位值解释为普通的 16 位有符号整数时,我希望看到的值范围为
- 0x01FF = +511,表示超过1.992g。可能更多,更多。
- 0x01FE = +510,表示 510/256 g ~= 1.992 g
- 0x01FD = +509,表示510/256 g ~= 1.988 g
- ...
- 0x0001 = +1,表示1/256 g = 0.0039 g
- 0x0000 = 0,表示0g
- 0xFFFF = -1,表示-1/256 g = 0.0039
- ...
- 0xFE02 = -510,表示-510/256 = -1.992克
- 0xFE01 = -511,表示-511/256 = -1.996克
- 0xFE00 = -512,表示更负的 -1.996 g。可能更远,更消极。
(是的,我知道这个传感器没有必要精确到小数点后 4 位)。(我已经看到一些设备在其他某个点饱和,例如 -511 或 -510。我通常可以查看数据并找出实际的饱和点)。
您可以从这个剪裁的数据集中恢复一些有用的数据。例如,您可以使用它来测量加速度至少为 1.5 g 的毫秒数。唉,当你看到这种数据集中的平台时,不可能测量最大加速度或总冲量——你能做的最好的就是说,“好吧,我们知道最大加速度至少为2g,可能更多”,并计算“好吧,我们计算出总冲量至少是(某物)牛顿*秒”。
备择方案
应该可以从数据中判断加速度计是否进行削波。(我已经在斜坡上升方面描述了“饱和度”、“线性”和“翻转”——使用一些数据集,查看斜坡下降可能会更清楚)。
线性:如果您看到加速度通过合理的值上升,然后继续上升到更高的值(值高于 512,或比 -512 更负),那么您很幸运——加速度计实际上没有进行任何削波,并且您在整个范围内都有有效数据。
翻转:如果您看到加速度通过合理值上升,并且在达到 +2 g 之前,它会立即跳到 -2 g 附近的非物理值,然后继续上升 - 可能会继续通过零,然后再次接近+2g,然后再次跳回-2g附近——然后你有翻转环绕。如果幸运的话,这些值的变化非常平滑,可以检测到每次翻转并“展开”这些值以恢复真实的 g 力。
ps:随意编辑Open Circuits: Rocket Computer。