Proyecto práctico [7] Parámetros de precisión y conversión de unidades de sensores inerciales MEMS

1. Introducción

  1. Muchos amigos a menudo se enfrentan al problema de convertir los datos sin procesar de acelerómetros y giroscopios en otras unidades cuando trabajan en proyectos. Este artículo lo resolverá y deducirá. 1) Las unidades de conversión comunes utilizadas en la aplicación de los datos sin procesar del acelerómetro son: g, m/s^2, ángulo 2) Las unidades de conversión comunes utilizadas en la aplicación de los datos sin procesar del giroscopio son: °/s , rojo/s, ángulo

  2. Esta es una actualización del documento "Comparación de varios parámetros de detección de aceleración de uso común". En este artículo, la comparación de los parámetros del sensor y los parámetros de precisión de diferentes participantes se escriben juntos. Este artículo se centra en los parámetros de precisión y la conversión de unidades.

2 Rango de medición y precisión

El rango de medición y la precisión de la medición de acelerómetros y giroscopios se proporcionan en las hojas de datos de detección MEMS. La precisión de la medición se puede calcular en función del rango de medición. Ya sea aceleración o giroscopio, el registro de datos es de 16 bits. Dado que el bit más alto es el bit de signo, el rango de salida del registro de datos es -7FFF-7FFF (-32767 ~ 32767). Giroscopio: Si elegimos que el rango de medición del giroscopio sea ±2000, en la hoja de datos 16.4 LSB/(°/s) es 32767/2000 = 16.4, entonces se calcula la relación correspondiente entre el número de registro y el rango de medición: por ejemplo
Insertar descripción de la imagen aquí, el valor del giroscopio leído a través del registro es 1000, luego encontramos la
Insertar descripción de la imagen aquí
velocidad angular Correspondencia entre el número en el registro y el rango de medición:
Insertar descripción de la imagen aquí
Por ejemplo, si el valor del giroscopio leído desde el registro es 1000, entonces encontramos la aceleración de la gravedad XX = 1000/2048 = 0,49g

3 Conversión de unidades de cálculo

Insertar descripción de la imagen aquí

  1. Cálculo de la precisión en diferentes rangos. El rango del acelerómetro es: ±2 g. Los datos adquiridos del acelerómetro se dividen por 16384. El rango del acelerómetro es: ±4 g. Los datos adquiridos del acelerómetro se dividen por 8192. El rango del acelerómetro es: ±8 g. Acelerómetro adquirido Divida los datos entre 4096. El rango del acelerómetro es: ±16 g. Divida los datos obtenidos del acelerómetro entre 2048.

2. Se puede convertir a datos con unidades físicas, unidad: g(m/s^2)
Insertar descripción de la imagen aquí
2. Se puede convertir en ángulo mediante una relación trigonométrica

float tanalpha = 0,tanbeta = 0,tangamma = 0;
tanalpha = (float)data->rawx / sqrt( ((float)data->rawy * (float)data->rawy + (float)data->rawz * (float)data->rawz) );
data->anglex = (float)atan(tanalpha)*57.3;
tanbeta = (float)data->rawy / sqrt( ((float)data->rawx * (float)data->rawx + (float)data->rawz * (float)data->rawz)  );
data->angley = (float)atan(tanbeta)*57.3;
tangamma = (float)data->rawz / sqrt( ((float)data->rawy * (float)data->rawy + (float)data->rawx * (float)data->rawx) );
data->anglez = (float)atan(tangamma)*57.3;

Insertar descripción de la imagen aquí

  1. Cálculo de precisión bajo diferentes rangos. El rango del giroscopio es: ±250 dps. Los datos adquiridos del giroscopio se dividen por 131. El rango del giroscopio es: ±500 dps. Los datos adquiridos del giroscopio se dividen por 65,5. El rango del giroscopio es: ±1000dps. Divida los datos del giroscopio por 32,8. El rango del giroscopio es: ±2000 dps. Divida los datos del giroscopio obtenidos por 16,4 2. Se puede convertir a datos con unidades físicas, unidad: rad/s
    Insertar descripción de la imagen aquí
//原始数据
raw_data[AXIS_X] = (buf[0] << 8) | buf[1];
raw_data[AXIS_Y] = (buf[2] << 8) | buf[3];
raw_data[AXIS_Z] = (buf[4] << 8) | buf[5];
//坐标map转换
remap_data[icm_dev.cvt.axis[AXIS_X]] = icm_dev.cvt.sign[AXIS_X] * raw_data[AXIS_X];
remap_data[icm_dev.cvt.axis[AXIS_Y]] = icm_dev.cvt.sign[AXIS_Y] * raw_data[AXIS_Y];
remap_data[icm_dev.cvt.axis[AXIS_Z]] = icm_dev.cvt.sign[AXIS_Z] * raw_data[AXIS_Z];
//重力加速度计算 unit: m/s2
data->x = (float)remap_data[AXIS_X] * KSCALE_ACC_16G_RANGE;
data->y = (float)remap_data[AXIS_Y] * KSCALE_ACC_16G_RANGE;
data->z = (float)remap_data[AXIS_Z] * KSCALE_ACC_16G_RANGE;
//red/s
data->x = (float)remap_data[AXIS_X] * KSCALE_GYRO_2000_RANGE;
data->y = (float)remap_data[AXIS_Y] * KSCALE_GYRO_2000_RANGE;
data->z = (float)remap_data[AXIS_Z] * KSCALE_GYRO_2000_RANGE;

4. Verificación sencilla de la exactitud de los datos

Por lo que tengo entendido, si la sensibilidad del acelerómetro se establece en 16 g, el valor es 2048 = 1 g. Cuando el dispositivo está sobre una mesa, espero ver los valores del acelerómetro xey cerca de cero, y z alrededor de 1g (es decir, 2048 valores brutos), que es lo que he visto en otros dispositivos, pero no este nuevo equipo. Vea el ejemplo en la captura de pantalla adjunta.

Reimpreso en: Reimpreso 1
Reimpreso en: Reimpreso 2

Supongo que te gusta

Origin blog.csdn.net/zhi_Alanwu/article/details/127987674
Recomendado
Clasificación