# STM32 学习 # 6D sensor de aceleración mide la vibración del ventilador

1. Antecedentes:

Es necesario monitorear el arranque y la parada del ventilador, y se espera que la frecuencia de vibración pueda medirse para ayudar en la determinación.

2. Sensor:

El sensor de vibración tradicional, que se muestra en la figura siguiente, tiene dos defectos: uno es que tiene una precisión de medición baja y no es sensible a las vibraciones pequeñas, y el otro es que no puede medir la señal dividida en frecuencia.

Elija utilizar el sensor de velocidad angular / aceleración LSM6DSL. La placa donde se encuentra el sensor es X-NUCLEO-IKSO1A2. Como se muestra abajo.

 LSM6DSL puede medir la aceleración y la velocidad angular en la dirección de tres ejes, y solo necesitamos información de aceleración para monitorear la vibración.

3. Proyecto de construcción:

La primera placa de desarrollo utilizada es la oficial ST MB1136. Toda la información relevante estará vinculada a continuación.

Estoy acostumbrado a usar Stm32cubeMX para construir proyectos rápidamente. Configure de acuerdo con el modelo de chip principal de la placa de desarrollo seleccionada y los pines del enlace del sensor y los recursos ocupados. Finalmente, el proyecto se genera con un clic. (Acerca de cómo usar stm32MX, puede salvar a su madre usted mismo o puede discutirlo a continuación)

Vale la pena mencionar que:

(1) Al configurar I2C, debe utilizar el "Modo rápido" y establecer la velocidad al máximo (400000Hz), lo que puede acelerar la comunicación con el sensor de aceleración. La frecuencia de salida del sensor de aceleración también se puede aumentar tanto como sea posible. En la prueba real, se encontró que a la velocidad de comunicación IIC más rápida, la frecuencia de salida máxima que el sensor puede configurar es 3.33KHz.

(2) Configure un pin de entrada de interrupción para recibir la interrupción enviada cuando los datos del sensor estén listos. (También puede leer un cierto bit de estado usted mismo)

(3) El puerto serie que viene con el puerto de descarga ST tiene una velocidad en baudios fija de 9600. Si desea una mayor, debe cablearlo por separado. (Lo conecté por separado y lo configuré en 115200)

 

El siguiente paso es escribir código en el proyecto, creo que todos pueden escribir código que pertenezca a su propia lógica. Mi pensamiento lógico es el siguiente:

(1) Inicializar equipos y sensores

(2) El sensor se inicia, prepara un conjunto de datos de aceleración (3 datos, X, Y, Z) y genera una interrupción de pin.

(3) F401RE recibe una interrupción y lee 6 bytes (3 valores de aceleración). (La lectura directa está en forma de complemento, y el valor de aceleración es positivo o negativo, necesitamos usar int16 al definir la variable)

(4) Realice un cálculo vectorial sobre un conjunto de datos (aceleración en tres direcciones) para obtener la longitud del módulo ACC. Almacene ACC en la matriz hasta que esté lleno. (Teniendo en cuenta el espacio de almacenamiento limitado del microordenador de un solo chip, se adopta una matriz de longitud de módulo, 1024 datos dobles)

(5) Una vez que el almacenamiento está lleno, ya no hay almacenamiento, se establece como un bit de marca y realiza la transformada rápida de Fourier de FFT. Para obtener información relacionada, consulte: https://blog.csdn.net/yga_airspace/article/details/86688278   .

Hay un código en lenguaje C en este enlace, que se puede ejecutar directamente. Preste atención a la relación de los parámetros de entrada cuando utilice:

FFT necesita definir múltiples matrices del mismo tamaño que la matriz de longitud de módulo, lo que cuesta más espacio.

doble pr [NUM], pi [NUM], fr [NUM], fi [NUM];

 

(6) El resultado de la transformación se almacena en pr [1024]. Si necesita observar el resultado de la transformación, puede imprimir los datos dobles en esta matriz en el asistente de ventana y luego usar Excel para observar el resultado de la transformación. (Al imprimir, se ajustará un solo dato (\ n \ r), y una columna de datos impresos en el asistente de puerto serie se copiará directamente a Excel). El primero en la lista de datos obtenidos es el componente DC, que se puede eliminar. Además, por alguna razón, la imagen formada por los datos restantes es simétrica, por lo que solo tomamos la mitad al mostrarla. Como se muestra en la figura siguiente, el sensor se coloca en la computadora host para medir la vibración del ventilador del host. Un total de 1024 puntos de muestreo. La frecuencia de salida es de 833 Hz. (Aumente el número de puntos de muestreo, la abscisa se moverá hacia la derecha. Aumente la frecuencia de salida y la abscisa se moverá hacia la izquierda) (los mismos 1024 puntos de muestreo, la frecuencia de salida de 833Hz corresponde a 145, la frecuencia de salida de 1.66KHz corresponde a la frecuencia de salida de 72, 3.33KHz Corresponde a 35).

(7) La abscisa tiene una relación directa con la frecuencia de vibración. Observé a través de datos de entrada analógica y descubrí que cuando el número de puntos de muestreo es 1024, las coordenadas del valor máximo de pico a pico obtenido después de la transformada de Fourier son consistentes con la frecuencia real (una ligera desviación, comprensible).

 Entrada analógica pr [1024], incluidos 10Hz, 20Hz, 30Hz, 40Hz, 50Hz, 60Hz, 70Hz, 80Hz, 90Hz. (Relación entre frecuencia de referencia y velocidad angular)

for (i = 0; i <1024; i ++) { pr [i] = cos (2 * PI * 0.001 * y * 10) + cos (2 * PI * 0.001 * y * 20) + cos (2 * PI * 0.001 * y * 30) + cos (2 * PI * 0.001 * y * 40) + cos (2 * PI * 0.001 * y * 50) + cos (2 * PI * 0.001 * y * 60) + cos (2 * PI * 0.001 * y * 70) + cos (2 * PI * 0.001 * y * 80) + cos (2 * PI * 0.001 * y * 90); }

La siguiente figura usa solo los puntos 1 a 128 para hacer la imagen (el número de puntos de muestreo sigue siendo 1024)

4. Escriba la computadora host

El proceso de visualización anterior es un poco engorroso, así que considere escribir una computadora host para la depuración en tiempo real.

Después de la conversión, el dispositivo informático inferior envía datos a la computadora directamente a través del puerto serie. (Cada número doble se convierte primero en una cadena y se envía en forma de cadena. Después de que se envía cada dato, se agrega un carácter de nueva línea \ n, y después de que se envían todos los datos, se envía un '#')

 

La computadora host está escrita usando Qt y C ++. Los zapatos para niños interesados ​​en la implementación específica y el código fuente pueden solicitarme.

Mi mejor plan es una matriz de 1024 puntos de muestreo y una frecuencia de salida de 3,33 KHz desde el sensor. La frecuencia de la computadora host se mide como 35 Hz (2100 revoluciones por minuto).

 

Es puramente un resumen de la experiencia personal, si hay errores, ¡discuta!

 

 

Supongo que te gusta

Origin blog.csdn.net/Kshine2017/article/details/100916640
Recomendado
Clasificación