Enfoque del microcontrolador de adquisición de datos

0

Estoy creando un prototipo de un dispositivo de adquisición de datos que se interconecta con 64 entradas discretas; 32 analógicas y 32 digitales (configurables por el usuario como medición ON / OFF o medición de frecuencia / trabajo). Estoy apuntando a una frecuencia de muestreo máxima de 1000Hz por canal, por lo que 64,000 muestras por segundo en todo el dispositivo.

Actualmente estoy haciendo prototipos con un dispositivo Linux integrado genérico basado en ARM (Raspberry Pi, Beaglebone, etc.). Las entradas analógicas se leen y se serializan mediante ADC basados en SPI, las entradas digitales se interconectan directamente con los GPIO del dispositivo y se leen a través de sysfs.

Estoy descubriendo que el tiempo para medir los 64 canales dentro de un sistema operativo Linux basado en GUI es demasiado largo y presenta enormes cantidades de jitter (el tiempo de ejecución de una muestra única de los 64 canales puede variar desde < 1 ms a ~ 10ms). Actualmente estoy experimentando con diferentes enfoques de subprocesos, pero creo que el problema principal es tratar de ejecutar lecturas sensibles al tiempo dentro de un entorno sin RTOS.

Como tal, estoy contemplando la introducción de un microcontrolador DAQ dedicado en el diseño, que se interconectará con las 64 entradas, almacenará las lecturas intermedias en un búfer y luego pasará los datos de forma rutinaria al sistema operativo (a través de una de las velocidades estándar altas). interfaces).

Mis preguntas son las siguientes:

  1. ¿Hay algún punto que continúe con el enfoque de adquisición basado en Linux para un requisito de 64 cps? Incluso si pudiera administrar la frecuencia de muestreo, creo que el temblor todavía haría insostenible esta opción.
  2. Si el enfoque del microcontrolador es correcto, ¿puede recomendar una marca / modelo?
pregunta jars121

1 respuesta

1

64 ksps no es nada para un Pi, también debería ser bueno en Beagle, pero no en el espacio de usuario.

La fluctuación de fase puede ser problemática incluso en modo kernel, al menos en SPI, donde se permite que el maestro SPI sea su propia cola. En GPIO no debería ser un problema siempre y cuando lo hagas con cuidado. Sería más fácil con los DAC paralelos y GPIO, creo, pero las juntas de aficionados generalmente no tienen tantos pines.

Un enfoque viable parece ser escribir la adquisición de datos en un módulo del núcleo y reenviarlos a través del subsistema IIO. IIO tiene características que permiten reenviar un búfer circular de muestras al espacio de usuario, pero no las he utilizado yo mismo (solo lo he usado bajo petición).

Otro enfoque es SoCs que tienen tanto un Cortex-A como un microcontrolador, como el Sitara presente en Beagle Black o algunos SoCs en la serie i.MX. Eche un vistazo a PRUDAQ : el único componente activo fuera de BBB es el ADC. La ventaja de este enfoque es que los dos procesadores comparten su RAM para facilitar la transmisión.

    
respondido por el Jan Dorniak

Lea otras preguntas en las etiquetas