Tengo un acelerómetro digital VTI CMA3000-D01 y lo controlo a través de SPI desde un chip Texas Instruments CC2540 usando la MCU 8051 integrada.
En la hoja de datos del CMA3000, se menciona que en el modo 2g, la frecuencia de muestreo de salida es de 400 Hz o 100 Hz (dependiendo de cómo esté configurado el acelerómetro). También hay un "Modo de detección de movimiento" que funciona a una frecuencia de muestreo de 10 Hz.
Lo que me gustaría hacer es cambiar la configuración del acelerómetro al modo de 400 Hz o al modo de 100 Hz y medir la frecuencia en un osciloscopio para verificar que realmente hice ese cambio. Esto es principalmente para mí entender mejor cómo hacer mediciones útiles con un osciloscopio y obtener una mejor comprensión de SPI.
Recientemente compré un osciloscopio Rigol DS1052E, por lo que me gustaría saber cómo conectarlo a mi acelerómetro para medir la frecuencia de salida, y qué configuraciones necesito usar en el osciloscopio para hacer tal lectura, y si es incluso posible.
Intenté conectar la sonda (con una atenuación de 10x) en el osciloscopio al cable SCK en el acelerómetro y el cable de tierra de la sonda a tierra en la placa de circuito, luego presioné el botón "Auto" en el osciloscopio, pero da una forma de onda con una frecuencia y voltaje que salta:
Esperaba ver una onda cuadrada con una frecuencia de 100 Hz (esa es la configuración actual del acelerómetro en mi software), pero obtuve una onda sinusoidal. Ahora, las imágenes anteriores pueden ser correctas, pero no sé lo suficiente para determinar si lo son, por lo que esperaba que alguien con más conocimientos sobre SPI y osciloscopios pudiera darme alguna dirección o decirme qué Necesito leer para entender mejor estas cosas.
También sería genial saber cómo leer la salida del puerto MISO en el acelerómetro para ver qué datos se envían de vuelta a la MCU. No estoy seguro de si esto es posible de hacer solo con un alcance, o si necesitaría un analizador lógico para ver estos datos. Gracias de antemano.
El problema es que está utilizando un acelerómetro digital MEMS y lo que está leyendo es el pin SCK (reloj en serie) de la interfaz en serie. Para funcionar, ese sensor debe conectarse con un microcontrolador, que lo establece para la frecuencia de muestreo, el rango, etc.
Por lo tanto, no debe esperar una onda cuadrada con una frecuencia de 100 Hz, sino un pico rápido (dependiendo de la tasa de bits del bus), correspondiente a una transmisión. Al expandir el pico, si el alcance es lo suficientemente rápido, debería ver la onda cuadrada del reloj dentro del pico.
Además, si no configuras correctamente la interfaz SPI, el uC no generará el reloj (el sensor funciona en modo esclavo) y no leerás ningún valor.
Si desea ver una señal de 100 Hz, puede sondear el pin Int, que envía una interrupción al microcontrolador cada vez que hay una medida disponible. Luego, si maneja adecuadamente la interrupción del microcontrolador, verá el pulso correspondiente a la transmisión cada 10 ms (100 Hz).
Pero asegúrese de no estar usando la detección de movimiento; en ese caso, solo cuando se mide una aceleración, generará la interrupción.
Para leer los datos en el puerto SPI, lo más sencillo es configurar la comunicación con el sensor; de lo contrario, no enviará datos en absoluto. Luego, verifique si el microcontrolador está recibiendo las interrupciones y si está leyendo los datos que proporciona el sensor; puede usar un temporizador para agregar una marca de tiempo a los valores y verificar la frecuencia con la que vienen.
(aún WIP)
Gracias por la respuesta, clabacchio, probé algunas de sus sugerencias y logré obtener algunas medidas más significativas hoy. Resulta que la aplicación de muestra que estaba usando para probar el pin SCK solo emitirá una señal cuando esté "conectado" a otro dispositivo (esta es una aplicación Bluetooth Low Energy). Una vez que me emparejé con otro dispositivo, el pin SCK en el acelerómetro comenzó a darme las medidas que esperaba.
Como explicó, no eran 100 Hz, sino la velocidad en baudios a la que se había configurado la interfaz SPI en el microcontrolador. Para verificar esto, cambié la tasa de baudios a 230,400 bps, luego tomé una medida con mi osciloscopio. Aquí hay una captura de pantalla del resultado:
Como puede ver, la frecuencia es de 230,4 kHz, exactamente lo que esperaba.
También intenté sondear el pin INT y recibí la siguiente ola:
Esta onda siguió saltando, pero en su mayoría se mantuvo entre 19 y 20 Hz. No estoy muy seguro de qué hacer con esto, ya que el acelerómetro se configuró para operar en modo de 100 Hz desde mi código, así que no sé por qué obtengo 20 Hz.
Además, aquí hay 2 capturas del puerto MISO, que mostraron una frecuencia de 20 Hz a 100 ms y 480,8 kHz a 1,0 us:
Tengo curiosidad por qué la frecuencia saltó de 20 Hz a 480,8 kHz simplemente cambiando la escala de tiempo. Pensé que la frecuencia podría volverse un poco más precisa a medida que aumentaba la granularidad de la escala de tiempo, pero no esperaba un cambio drástico de 20 Hz a 480 kHz. Estoy pensando que una de estas medidas debe ser incorrecta, pero no estoy seguro de por qué. Probablemente sea el valor de 20 Hz, ya que 480 kHz es similar a la tasa de bps que estaba usando para esa medida en particular (estaba configurada en 480 500 bps en el microcontrolador).
De todos modos, como dije, logré hacer una medición muy precisa, por lo que estoy feliz con los resultados, pero me interesaría mucho escuchar cualquier consejo que pueda tener con respecto a mis lecturas INT o MISO.
Gracias de nuevo por tu ayuda, ¡es muy apreciada!
W5VO
Kellenjb