重力上升了?

我们要做的第一件事是什么?

进行健全检查!

启动器代码打印加速计测量的加速度的X、Y和Z分量。这些值已经"缩放",单位为g 其中1 g等于重力加速度,约为9.8米/秒。

#![deny(unsafe_code)]
#![no_main]
#![no_std]

#[allow(unused_imports)]
use aux16::{entry, iprint, iprintln, prelude::*, I16x3, Sensitivity};

#[entry]
fn main() -> ! {
    let (mut lsm303dlhc, mut delay, _mono_timer, mut itm) = aux16::init();

    // extend sensing range to `[-12g, +12g]`
    lsm303dlhc.set_accel_sensitivity(Sensitivity::G12).unwrap();
    loop {
        const SENSITIVITY: f32 = 12. / (1 << 14) as f32;

        let I16x3 { x, y, z } = lsm303dlhc.accel().unwrap();

        let x = f32::from(x) * SENSITIVITY;
        let y = f32::from(y) * SENSITIVITY;
        let z = f32::from(z) * SENSITIVITY;

        iprintln!(&mut itm.stim[0], "{:?}", (x, y, z));

        delay.delay_ms(1_000_u16);
    }
}

在静止的情况下,该程序的输出如下:

$ # itmdump console
(..)
(0.0, 0.0, 1.078125)
(0.0, 0.0, 1.078125)
(0.0, 0.0, 1.171875)
(0.0, 0.0, 1.03125)
(0.0, 0.0, 1.078125)

这很奇怪,因为开发板没有移动,但它的加速度不为零。这是怎么回事?这一定跟重力有关吧?因为重力加速度是1 g。 但是重力将物体向下拉,所以沿Z轴的加速度应该是负的而不是正的...

程序是否使Z轴向后?不,您可以测试旋转板以将重力与X或Y轴对齐,但加速度计测量的加速度始终指向上方。

这里发生的是加速度计正在测量电路板的适当加速度,而不是您正在观察的加速度。这个适当的加速度是 从自由落体的观察者看到的板的加速度。 自由落体的观察者以1g的加速度向地心移动;从它的角度来看, 电路板实际上以1g的加速度向上移动(远离地球中心)。这就是为什么适当的加速度指向上。这也意味着, 如果板处于自由下落状态,加速度计将报告正确的零加速度。请不要在家里尝试。

是的,物理很难。让我们继续。