注:本篇为翻译内容,原文来自https://www.hobbytronics.co.uk/accelerometer-info
加速度计可测量加速度。那就是由于运动引起的加速度,也由于重力引起的加速度。加速度计通常用于计算倾斜角。他们只有在静止不动时才能可靠地执行此操作。为了获得准确的倾斜角度,通常将它们与一个或多个陀螺仪组合在一起,并使用数据的组合来计算角度。
数字加速度计将使用I2C,SPI或USART等串行协议为您提供信息,而模拟加速度计将输出预定义范围内的电压电平,您必须使用ADC(模数转换器)模块将其转换为数字值。
在本教程中,我们将简要说明加速度计的功能,如何将其用于测量倾斜角并最终提供一些示例代码。另请参阅有关结合使用加速度计和陀螺仪数据以为动态系统提供更好的倾斜角度的教程。
加速度计可以测量什么
加速度计可测量加速度。对于静态物体,即由于重力(1g)而产生的加速度。还要注意,加速度计的输出不是线性的而是正弦波,因此您不能将直接输出作为基于重力的倾斜角度的比例表示。
通常,当测量零g时,加速度计的x和y输出电压将是电源电压的一半(即设备垂直于重力-水平)。倾斜一种方式,电压将增加,倾斜另一种方式,电压将降低。使用三轴加速度计时,设备水平时z轴的测量值为1g。加速度计的输出是所测量加速度的正弦波。加速度计垂直于重力时,对倾斜的微小变化更为敏感。即,在水平时,倾斜的微小变化会产生有用的读数。超过大约45度的倾斜度后,它们变得越来越不敏感。因此,在确定倾斜角度时通常使用一个以上的轴值,如下所示。
使用一轴测量倾斜角度
如果要使用2轴加速度计测量x和y轴的倾斜度,则可以简单地使用sin-1(a),其中a是加速度计的一个轴的输出。
使用三轴测量倾斜角度
因此,为了准确测量x和y平面中的倾斜度,我们需要一个3轴加速度计。我们可以使用上面的公式来计算角度,其中x和z为x轴,y和z为y轴。但是,我们可以通过使用所有三个输出来计算每个角度来进一步改善情况。使用以下公式可以完成此操作。
让我们开始一些编码
希望我们现在对这些原则已经很清楚了,但是让我们看看在实践中是如何完成的。我们将使用3轴加速度计,计算出滚动(x)和俯仰(y)的角度。
我们将假定,根据所使用的加速度计的类型,您已经读取了x,y和z的值,并且当加速度计处于静止状态且处于水平状态时,还具有x,y和z的基线值。
void calc_xy_angles(void){
// Using x y and z from accelerometer, calculate x and y angles
float x_val, y_val, z_val, result;
unsigned short long x2, y2, z2; //24 bit
// Lets get the deviations from our baseline
x_val = (float)accel_value_x-(float)accel_center_x;
y_val = (float)accel_value_y-(float)accel_center_y;
z_val = (float)accel_value_z-(float)accel_center_z;
// Work out the squares
x2 = (unsigned short long)(x_val*x_val);
y2 = (unsigned short long)(y_val*y_val);
z2 = (unsigned short long)(z_val*z_val);
//X Axis
result=sqrt(y2+z2);
result=x_val/result;
accel_angle_x = atan(result);
//Y Axis
result=sqrt(x2+z2);
result=y_val/result;
accel_angle_y = atan(result);
}
好的,就是这样。一般而言,关于加速度计的几点注意事项。它们非常敏感,因此很容易振动。如果您在带有电机或其他振动源的系统中使用本机,我强烈建议您使用某种形式的泡沫阻尼。同样,从加速度计中读取多个读数并取平均值,以滤除任何噪声。