重力上升了?
我们要做的第一件事是什么?
进行健全检查!
启动器代码打印加速计测量的加速度的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
的加速度向上移动(远离地球中心)。这就是为什么适当的加速度指向上。这也意味着,
如果板处于自由下落状态,加速度计将报告正确的零加速度。请不要在家里尝试。
是的,物理很难。让我们继续。