Base de tiempo del osciloscopio

Estoy trabajando en un proyecto personal para hacer un osciloscopio remoto usando un PIC32 con módulo wifi para teléfonos Android.

Hasta ahora he hecho muchas cosas, como conectar el módulo wifi del PIC32 a Android y también desarrollar el software base para Android.

Ahora estoy en un paso para obtener valores ADC de PIC32 y mostrarlos en Android. No estoy seguro de cómo puedo hacer que esto funcione como un alcance real.

Por ejemplo, en el software configuré un temporizador que, según la elección del usuario, puede leer el valor ADC de la imagen en intervalos de tiempo de, por ejemplo, 1, 0,5, 0,1 y 0,01 segundos. Entonces, digamos que el usuario ha seleccionado una base de tiempo de 1 segundo, luego el programa solicitará el valor ADC en intervalos de 1 segundo y conectará estos puntos de datos en el gráfico para formar una señal de onda. ¿Es esto lo mismo que sucede en los ámbitos reales?

¡No tengo un generador de funciones o un alcance real en mis manos para verificar esto!

Esta es la interfaz de usuario del software que escribí para Android:ingrese la descripción de la imagen aquí

Entonces, básicamente, mi pregunta es, ¿cómo debo tratar el proceso de lectura de valores del PIC32? ¿Debería apegarme al temporizador en Java, o debería leer tantos valores como sea posible y dibujarlos en la pantalla? ¡¿Cómo debería manejar esto?!

El PIC32 en sí no tiene capacidad Wi-Fi. ¿Se refiere a la placa de demostración Wi-Fi Comm que Microchip lanzó recientemente? Antes de decidir sobre bases de tiempo específicas, debe decirnos las especificaciones del osciloscopio que está tratando de armar. Dudo que pueda mostrar mucho más que frecuencias de audio.
Sí, creo que tengo la placa de demostración multimedia en mis manos (no tengo el paquete, así que no estoy seguro de qué es... definitivamente tiene un módulo wifi :P)
No estoy apuntando a una alta especificación, quiero que funcione al menos para las frecuencias de audio como dijiste.
El tablero al que te vinculaste es mucho más elegante que el que encontré. Lindo.

Respuestas (3)

Un osciloscopio traza el voltaje en función del tiempo, por lo que su pantalla es razonable tal como la muestra. Sin embargo, el término "base de tiempo" no tiene sentido para indicar la escala del eje X. Lo que quieres es "s/div" (o ms/div o µs/div). Esto es independiente de la frecuencia de muestreo, aunque no tiene mucho sentido utilizar más de unos pocos píxeles por muestra.

Los tiempos de muestra que menciona son muy lentos para los osciloscopios comunes. Algunas señales serán razonablemente visibles a esas velocidades, pero la mayoría de las cosas que encuentre no lo serán.

Probablemente descubra cuál es la frecuencia de muestreo más rápida que puede admitir, luego muestree siempre a esa frecuencia. Si la aplicación indica que no necesita muestras tan rápido, puede fusionar varias muestras en una antes de enviarlas a través de la red. En ese caso, no desea realizar la aniquilación tradicional, que busca eliminar las frecuencias que se alias. En su lugar, para cada punto de datos envíe las muestras A/D mínimas y máximas cubiertas por ese punto de datos. Luego, cada punto de datos debe mostrarse para cubrir verticalmente ese rango mínimo/máximo. Si el usuario selecciona una frecuencia de muestreo lenta y se está muestreando una señal más rápida pero aún está dentro de la capacidad del A/D y la frecuencia de muestreo rápida subyacente, entonces la pantalla será una barra horizontal con ancho vertical que muestra los picos de la señal. Esa es una pantalla mucho mejor que algo que crea un alias.

Controlando el ADC

Como enfoque general, haría que la aplicación de control le dijera al PIC32 cuál es la frecuencia de muestreo que debe usar. Entonces, por ejemplo, selecciona un intervalo de tiempo de 0,1 segundos y el PIC32 ahora muestrea 10 veces por segundo. El PIC32 podría transmitir muestras instantáneamente o acumularlas en incrementos de tiempo más pequeños, como cada 3 segundos, etc. Hacer que la aplicación solicite cada muestra estará plagado de latencia innecesaria, en mi opinión.

Probablemente haría algo como: enviar valores de muestra a través de UDP con una marca de tiempo de cuándo se tomaron. Transmisión asíncrona para que mi aplicación de control no se asuste si el enlace es malo y me da suficiente información para almacenar mis datos en la aplicación de control para dibujar.

Dibujar la señal

Esto depende principalmente de su división de tiempo. Debe mantener suficientes muestras en la memoria para dibujar todo el período de tiempo del gráfico. Sin embargo, la frecuencia de actualización depende de usted. Simplemente puede almacenar los últimos valores en un búfer, luego, cuando sea el momento de actualizar el gráfico, agregarlos al búfer de valores que se mostrarán, eliminar todos los valores que ahora son más antiguos que la muestra más nueva menos el lapso de tiempo del gráfico.

Entonces, simplemente: si su gráfico tiene diez divisiones de 1 segundo y su última muestra tiene una marca de tiempo de 37 segundos, solo desea mostrar muestras donde la marca de tiempo sea mayor que (37 - 10) = 27 segundos.

También hay optimizaciones que se pueden hacer, como limitar la cantidad de valores que mantiene por división de tiempo para limitar el uso de la memoria y dibujar muestras que se suavizarán de todos modos.

Está desencadenando un problema

Respuesta: Para comenzar, elija el disparador manual (botón) y completará el proyecto fácilmente.

Explicación más larga para la próxima fase, cuando decide tener un disparador real: no es una parte trivial de cualquier osciloscopio, tanto para osciloscopios digitales como analógicos. Es especialmente más difícil para los osciloscopios digitales porque el reloj de muestreo no puede ajustarse a la fase de la señal de entrada. Considere los casos de uso más comunes: el usuario quiere acoplar el disparador con CA, CC, disparador por frente o caída, pulso o caída, con algún nivel establecido, o manualmente, o en firma digital, o sincronizado con CA principal o sincronizado con TV retransmisiones, etc. No es poca cosa.

Entonces, para hacerle frente, cada caso de uso debe ser considerado y debe tener una solución separada. Básicamente estás pidiendo describir décadas de conocimiento patentado (quizás legalmente desactualizado).

Lo bueno de las piezas contemporáneas es que puede elegir soluciones de primera clase usando FGPA, números de punto fijo, interpolación de nivel/tiempo, splines, geometría de submuestra, memoria rápida de puerto dual en FPGA e implementar cestas de muestras estadísticas, comparadores de ventana, sub marcas de tiempo de reloj y tipo de solución de fósforo digital. Suena un poco monstruoso, pero eso lo que muchos podrían considerar un desencadenante definitivo. Cualquier cosa menos que FPGA, como una solución de software puro, será muy limitada en velocidad o tendrá un alto ruido de fase.