Base de tiempo del osciloscopio

1

Estoy trabajando en un proyecto personal para hacer un osciloscopio remoto usando un módulo PIC32 con 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 básico para Android.

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

Por ejemplo, en el software que he configurado un temporizador que depende de la elección del usuario, puede leer el valor ADC de la imagen en intervalos de tiempo de 1, 0.5, 0.1 y 0.01 segundos. Así que digamos que el usuario ha seleccionado una base de tiempo de 1 segundo, luego el programa solicitará el valor de 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 pasa en á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:

Básicamente, mi pregunta es, ¿cómo debo tratar el proceso de lectura de valores fuera del PIC32? ¿Debería seguir el temporizador en Java o leer tanto como sea posible los valores y dibujarlos en la pantalla? ¡¿Cómo debo manejar esto ?!

    
pregunta Sean87

3 respuestas

2

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

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

Probablemente descubriría cuál es la frecuencia de muestreo más rápida que puede admitir, y luego muestrear a esa velocidad. Si la aplicación indica que no necesita muestras tan rápido, entonces puede combinar varias muestras en una antes de enviarlas a través de la red. En ese caso, no desea realizar la decimación tradicional, que busca eliminar las frecuencias de ese alias. En su lugar, para cada punto de datos, envíe las muestras mínimas y máximas de A / D cubiertas por ese punto de datos. Cada punto de datos se debe mostrar para cubrir verticalmente el 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 de A / D y la velocidad de muestreo rápida subyacente, la pantalla será una barra horizontal con un ancho vertical que muestra los picos de la señal. Esa es una visualización mucho mejor que algo que los alias.

    
respondido por el Olin Lathrop
3

Controlando el ADC

Como enfoque general, la aplicación de control le diría 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 muestra 10 veces por segundo. El PIC32 podría transmitir muestras al instante o agruparlas en incrementos de tiempo más pequeños, como cada 3 segundos, etc. La solicitud de solicitud de cada muestra individual estará cargada de latencia innecesaria, IMO.

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 está mal y me da suficiente información para recopilar mis datos en la aplicación de control para dibujar.

Dibujando la señal

Esto depende principalmente de tu división de tiempo. Debe mantener suficientes muestras en la memoria para dibujar todo el intervalo 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 muestran, eliminar todos los valores que ahora son más antiguos que la muestra más reciente menos el intervalo de tiempo del gráfico.

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

También se pueden realizar optimizaciones, como limitar el número de valores que mantienes por división de tiempo para limitar el uso de memoria y extraer muestras que de todos modos obtendrán suavizado.

    
respondido por el Toby Lawrence
1

Está generando problemas

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

Explicación más larga para la siguiente fase, cuando decide tener un disparador real: no es una parte trivial de ningún osciloscopio, tanto para el ámbito digital como para el analógico. Es especialmente más difícil para los ámbitos digitales porque el reloj de muestreo no puede entrenarse para la fase de la señal de entrada. Considere los casos de uso más comunes: el usuario desea acoplar el activador con la CA, la CC, el disparador por el frente o la caída, el impulso o la inclinación, con algún nivel establecido, o manualmente, o con firma digital, o en sincronización con la CA principal o en sincronización con la TV Difusión, etc. No es poca cosa.

Para enfrentarlo, cada caso de uso debe ser considerado y debe tener una solución por separado. Básicamente, usted solicita describir décadas de conocimiento patentado (quizás no esté actualizado legalmente).

Lo bueno de las piezas contemporáneas, es que puede elegir soluciones de 1ra clase utilizando FGPA, numeración de punto fijo, interpolación de nivel / tiempo, splines, geometría de submuestras, memoria de puerto dual rápida en el propio FPGA e implementar cestas de muestras estadísticas, ventana Comparadores, marcas de tiempo de reloj secundario y tipo de solución de fósforo digital. Suena un poco monstruoso, pero eso es lo que muchos podrían considerar un desencadenante no final. Cualquier cosa menor que FPGA, como la solución de software pura, será muy limitada en velocidad o en alto ruido de fase.

    
respondido por el user924

Lea otras preguntas en las etiquetas