Técnicas avanzadas de adquisición de datos con hardware de E/S reconfigurable multifunción

Información general

Los dispositivos de E/S reconfigurables multifunción (RIO), anteriormente denominados dispositivos de la serie R, cuentan con un procesamiento integrado definido por el usuario para una flexibilidad completa de la sincronización y activación del sistema. En lugar de un ASIC fijo para controlar la funcionalidad del dispositivo, los dispositivos de E/S reconfigurables multifunción utilizan un controlador de temporización del sistema basado en FPGA para hacer que todas las E/S analógicas y digitales sean configurables para el funcionamiento específico de la aplicación. Puede implementar tareas de adquisición de datos (DAQ) completamente flexibles y personalizadas utilizando hardware de E/S reconfigurable multifunción y el NI LabVIEW FPGA Module.

Contenido

Introducción

Con LabVIEW FPGA, los desarrolladores de sistemas DAQ tienen total flexibilidad a la hora de programar una aplicación para cualquier tipo de operación de entrada/salida. Sin tener ningún conocimiento previo de herramientas de diseño de hardware como VHDL, puede integrar código LabVIEW en un chip FPGA y lograr una verdadera velocidad y confiabilidad cronometradas por hardware.

Comencemos abordando los componentes comunes del hardware de DAQ. Suponiendo que tenga convertidores de analógico a digital (ADC), convertidores de digital a analógico (DAC) y líneas de entrada/salida digitales, todas las E/S deben temporizarse y controlarse de alguna manera para el funcionamiento real. Los dispositivos DAQ multifunción típicos utilizan un ASIC rico en características que incorpora la mayoría de las necesidades en funcionalidad. Los dispositivos reconfigurables se diferencian de todos los demás dispositivos DAQ del mercado porque en lugar de un ASIC fijo para controlar la funcionalidad del dispositivo, utilizan un controlador de temporización del sistema basado en FPGA para hacer que todas las E/S analógicas y digitales sean configurables para el funcionamiento específico de la aplicación. El chip FPGA reconfigurable está programado con el LabVIEW FPGA Module, donde todavía se aplica el paradigma de flujo de datos LabVIEW, pero con un nuevo conjunto de funciones que controlan la E/S del dispositivo al nivel más bajo. En lugar de abstraer tareas y funciones comunes con las funciones NI-DAQmx, los nodos de E/S FPGA LabVIEW trabajan en el nivel más fundamental con total flexibilidad en todos los canales. En las siguientes secciones, examine ejemplos específicos de NI-DAQmx y explore cómo personalizar varias tareas de adquisición de datos utilizando hardware reconfigurable.

Temporización y disparo

El uso más común de E/S reconfigurable para la adquisición avanzada de datos es la sincronización y activación personalizadas. A continuación se muestra un diagrama de bloques de ejemplo de una tarea de entrada analógica activada usando NI-DAQmx.

Figura 1: Entrada analógica activada con NI-DAQmx

En lugar de utilizar diferentes funciones para la configuración de canales, como se muestra en la Figura 1, este hardware utiliza funciones llamadas nodos de E/S FPGA para la lectura y escritura de todos los canales analógicos y digitales. Veamos exactamente la misma funcionalidad usando nodos de E/S en LabVIEW FPGA.

Figura 2: Entrada analógica activada con serie R y LabVIEW FPGA

Puede ver que no hay funciones de configuración para canales globales, relojes de muestra, activadores o tareas de inicio, detención y borrado. Todo ha sido reemplazado por una simple lectura de E/S analógica, y todo el tiempo está controlado por estructuras nativas LabVIEW como While Loops y Case structures. Debido a que todo el diagrama de bloques se ejecuta en hardware FPGA, el código LabVIEW se ejecuta con velocidad y confiabilidad cronometradas por hardware. Veamos un poco más a fondo cómo funciona este diagrama de bloques. En lugar de especificar una frecuencia de muestreo particular, el nodo de E/S analógica utiliza el bucle For para adquirir cada muestra. El ADC correspondiente digitaliza realmente la señal de entrada cuando se llama al nodo de E/S FPGA, y por lo tanto es sincronizado por el bucle For. Si desea muestrear una señal a 100 kHz, el retardo especificado para ese bucle debe establecerse en 10 μs. La función de temporizador de bucle garantiza un retardo específico en el tiempo, comenzando con la segunda iteración de bucle, por lo que hemos utilizado una estructura de secuencia para garantizar el período de tiempo especificado entre muestras. La estructura Case en LabVIEW FPGA es potente, porque esencialmente representa un desencadenante de hardware para todo el código que encapsula. Con todas las funciones y estructuras ejecutándose en hardware con puertas de lógica, la estructura Case garantiza que el muestreo comience en el momento correcto, dentro de los 10 μs de precisión. Por último, no hay necesidad de borrar el ID de la tarea o liberar memoria, porque ahora estamos trabajando a nivel de hardware con pocas capas de abstracción.

Los verdaderos beneficios del uso de hardware basado en FPGA es la capacidad de personalizar todos los tiempos y disparos, así como implementar el procesamiento de señales y la toma de decisiones en hardware. Ahora veamos lo que se necesita para modificar nuestro disparador de entrada analógica para alguna aplicación personalizada. ¿Qué pasaría si quisiéramos activar la adquisición si cualquiera de los dos canales de entrada analógica superara un cierto umbral? Esto es bastante simple de implementar en LabVIEW FPGA.

 
Figura 3: Entrada analógica activada personalizada con serie R y LabVIEW FPGA
 
Se puede ver que hemos añadido un segundo nodo de E/S FPGA y una segunda función de comparación, así como una función O booleana al diagrama de bloques. Las placas de la serie R tienen ADC dedicados en cada canal de entrada analógico, por lo que ambos canales se muestrean simultáneamente, y si cualquiera de esos excede el límite especificado, la estructura de Case ejecuta el caso verdadero y comienza la adquisición dentro de los mismos 10 μs de precisión. Ten en cuenta que no es posible generar un trigger como este en hardware habilitado por NI-DAQmx. Podría implementar este tipo de disparador en software, pero esto requeriría una toma de decisiones programada por software con una latencia mucho mayor. Si quisiéramos expandir esto de monitorear dos canales a los ocho canales, o incluso agregar activadores digitales, el código personalizado no sería más complicado. Agregar escaneos de predisparo implicaría muestrear constantemente el canal de entrada y pasar los datos a una memoria intermedia de primero en entrar primero en salir (FIFO). Una vez leído el disparador, el buffer FIFO y las muestras subsiguientes se pasarían al host a través de un canal DMA.


Si quisiéramos muestrear un segundo canal de entrada analógico usando el controlador NI-DAQmx, el diagrama de bloques no sería muy diferente de lo que se muestra en la Figura 1. Sin embargo, seguiría habiendo limitaciones porque ambos canales se verían obligados a hacer referencia al mismo disparador y muestra a la misma frecuencia de reloj. Veamos las diferentes opciones para muestrear múltiples canales usando E/S reconfigurables y LabVIEW FPGA.

Figura 4: Entrada analógica simultánea activada con la serie R

La Figura 4 (arriba) nos muestra cómo muestrear simultáneamente desde dos canales de entrada analógicos diferentes, basados en un disparador analógico del canal de entrada analógico 0 (AIO). Dado que todos los dispositivos de E/S reconfigurables multifunción tienen ADC independientes, se muestrean dos canales dentro de un nodo de E/S en el mismo instante exacto. Los dispositivos DAQ multifunción típicos multiplexan todos los canales a través de un solo ADC y, por lo tanto, todos los canales deben compartir el mismo reloj de muestra y las mismas líneas de activación. La Figura 5 (abajo) muestra que los dispositivos de E/S reconfigurables multifunción pueden muestrear diferentes canales de entrada analógicos a velocidades independientes. Al colocar los nodos de entrada analógica de E/S dentro de bucles independientes, cada canal puede muestrear a velocidades completamente diferentes, y luego transmitir datos de forma independiente a través de dos canales DMA.


Figura 5: Entrada analógica multivelocidad activada con hardware de E/S reconfigurable multifunción

Por último, si quisiéramos que ambos canales tuvieran velocidades de muestreo independientes, así como Start Triggers independientes, podríamos colocar cada nodo de E/S en estructuras de bucle paralelo como se muestra en la Figura 6. Esto aprovecha al máximo el paralelismo de la FPGA, donde cada tarea utiliza sus propios recursos dedicados y se ejecuta completamente independiente de cualquier otra tarea de adquisición.


Figura 6: Entrada analógica multivelocidad activada de forma independiente con hardware de E/S reconfigurable multifunción

Sincronización

Hay muchas opciones de sincronización incorporadas en el controlador NI-DAQmx para correlacionar entradas y salidas en el tiempo. A continuación se muestra el diagrama de bloques de un canal de entrada analógico y un canal de salida analógico sincronizados con un disparador de inicio digital, hecho especificando un disparador digital para la entrada analógica y utilizando la señal de disparador de inicio de entrada analógica para disparar la generación de salida analógica.


Figura 7: Entrada y salida analógica sincronizada con NI-DAQmx

Implementar el mismo esquema de sincronización con hardware de E/S reconfigurable multifunción es bastante simple sin necesidad de ID de tarea y enrutamiento de señal a bordo. Así es como se vería esto en el diagrama de bloques LabVIEW FPGA.

Figura 8: Entrada y salida analógica sincronizada con la serie R

Una vez más estamos utilizando la estructura Case para implementar un activador de hardware en el chip FPGA, y un borde ascendente en el canal digital 0 inicia el código en el caso real. Los nodos de entrada y salida analógicos se llaman simultáneamente dentro de la estructura de secuencia casi sin fluctuación, y si quisiéramos que tuvieran tasas independientes, podríamos colocar fácilmente los nodos de E/S analógicos en sus propios bucles while separados. También es importante tener en cuenta que la función de generador de senos que se muestra en este diagrama de bloques es un VI expreso con el que puede configurar interactivamente los valores de seno en una tabla de búsqueda.

El diagrama de bloques mostrado en la Figura 8 tiene la misma funcionalidad que el NI-DAQmx VI de la Figura 7, pero si quisiéramos personalizar esta tarea, solo un dispositivo de E/S reconfigurable proporcionaría la flexibilidad para hacerlo. Si necesitáramos agregar un activador de pausa, por ejemplo, se podría lograr fácilmente agregando una estructura de caso dentro del bucle while interno y usando otro nodo de E/S digital para seleccionar un caso verdadero o falso. El poder de programar hardware proporciona infinitas posibilidades para la sincronización y sincronización de E/S.

Otro ejemplo de sincronización multifunción es la generación de pulsos finitos con los contadores a bordo y el uso de la salida del contador como el reloj de muestra de entrada analógica. Este proceso es el enfoque común para implementar una adquisición de muestras finitas reactivable. A continuación se muestra el código NI-DAQmx requerido para dicha adquisición.

Figura 9: Entrada analógica finita reactivable con NI-DAQmx

Ahora vamos a comparar esto con un diagrama de bloques LabVIEW FPGA con la misma funcionalidad.


Figura 10: Entrada analógica finita reactivable con serie R y LabVIEW FPGA

Es obvio en la Figura 10 que hay muchos menos pasos de configuración del controlador debido al hecho de que el código LabVIEW se ejecuta en hardware. Con una simple línea de entrada digital y una estructura For Loop, hemos creado una adquisición finita activable por hardware. El diagrama de bloques anterior en la Figura 9 utiliza dos contadores integrados para crear el tren de pulsos finito redisparable, y los dispositivos DAQ multifunción típicos tienen solo cuatro contadores con los que trabajar. Los dispositivos de E/S reconfigurables multifunción, sin embargo, pueden configurar cualquier línea digital para que sea un contador usando LabVIEW FPGA. En una sección posterior trataremos más sobre implementaciones de contadores/temporizadores.

Podríamos dar un paso más con la flexibilidad cronometrada de hardware de los dispositivos de E/S reconfigurables con una adquisición activada por frecuencia. Si bien esto no es posible con un dispositivo DAQ multifunción típico, la toma de decisiones a bordo de alta velocidad se puede utilizar para calcular la frecuencia de una señal de entrada y luego seleccionar el código deseado dentro de una estructura Case. Para la sincronización de múltiples dispositivos, los dispositivos de E/S reconfigurables multifunción también pueden usar el bus RTSI para placas PCI/PCI Express o el bus de activación PXI para módulos PXI. Estas líneas externas de sincronización y temporización también se pueden acceder a través de nodos de E/S de FPGA en el diagrama de bloques.

Generación de forma de onda analógica

Muchos dispositivos DAQ multifunción tienen canales de salida analógicos que implementan un buffer FIFO para la generación continua de formas de onda analógicas. La forma de onda que se está generando puede usar la FIFO como un buffer circular, y regenerar continuamente una serie de valores analógicos sin más actualizaciones del host. Esto depende menos de la disponibilidad del bus de comunicaciones porque los datos no se transmiten constantemente al dispositivo. Sin embargo, si la forma de onda necesita modificarse, la tarea de salida debe reiniciarse para escribir nuevos datos en la FIFO. La otra opción es transmitir continuamente datos al FIFO de hardware, lo que puede conducir a latencias en su tarea de salida. Los dispositivos de E/S reconfigurables multifunción le brindan la capacidad de almacenar las salidas de formas de onda en hardware, e incluso usar el disparo de hardware para cambiar las formas de onda, creando así un generador de formas de onda arbitrarias.

A continuación se muestra un ejemplo de un generador de funciones que utiliza líneas de entrada digitales para desencadenar cambios en la forma de onda de salida. Basándonos en la combinación de las líneas de E/S digitales 0 y 1, obtenemos cuatro estados diferentes, o casos para la salida analógica.


Figura 11a: Generador de funciones con caja 0 de la serie R: salida cero


Figura 11b: Generador de funciones con caja de la serie R 1 - onda sinusoidal

Si ambas líneas son bajas, se ejecuta el Caso 0 y como se muestra en la Figura 11a, la salida es un valor constante de 0 V. Si la línea DIO 0 es alta y la línea DIO 1 es baja, el Caso 1 ejecuta y genera una onda sinusoidal en la salida analógica 0. Este caso de generación de senos (Figura 11b) utiliza el generador de senos Express VI con el que puede configurar interactivamente una forma de onda sinusoidal con los valores enteros requeridos en LabVIEW FPGA.


Figura 11c: Generador de funciones con caja de la serie R 2 - onda cuadrada

Caso 2 (Figura 11c) simplemente alterna un valor Booleano en cada iteración del bucle While. Si el valor es bajo, el número entero 15000 se escribe en la salida analógica 0, que corresponde al valor 15000 en el registro de salida de un DAC de 16 bits. Un entero de 16 bits con signo puede tener valores entre -32768 y 32767. Con un rango de salida de -10 a 10 V, escribir -32768 en la salida analógica 0 genera -10 V, y escribir 32767 genera 10 V. En este ejemplo, estamos escribiendo 15000, que emite poco menos de 5 V. (Estas son las matemáticas: 15000/32767 * 10 V = 4.5778 V) Básicamente, el Caso 2 emite una onda cuadrada que alterna entre 0 y 4.578 V.

Figura 11d: Generador de funciones con caja de la serie R 3-onda de diente de sierra

El último caso (Figura 11d) se ejecuta si tanto DIO 0 como DIO 1 son altos, y esto utiliza una tabla de búsqueda para generar continuamente una onda en diente de sierra. La tabla de consulta VI es otra Express VI con la que puede almacenar valores de forma de onda arbitraria e indexar a través de ellos mediante programación. En este ejemplo, hemos configurado una onda en diente de sierra para que se genere en el canal de salida analógico 0.

Al almacenar todos los valores en la FPGA, elimina la dependencia de la disponibilidad del bus, así como garantiza la velocidad y fiabilidad cronometradas por hardware en las actualizaciones de forma de onda. Toda la flexibilidad de activación y sincronización descrita con la entrada analógica en secciones anteriores también se aplica a la salida analógica; y con los dispositivos de E/S reconfigurables multifunción, puede actualizar diferentes canales de salida analógica a diferentes velocidades, completamente independientes entre sí. Esto significa que puede modificar la frecuencia de una única forma de onda periódica sin afectar las salidas de otros canales. Tenga en cuenta que esta funcionalidad no es posible en la mayoría del hardware de adquisición de datos.

Operaciones de contador/temporizador

Como se mencionó anteriormente, los dispositivos DAQ multifunción típicos tienen solo cuatro contadores integrados, mientras que los dispositivos de E/S reconfigurables multifunción pueden implementar la funcionalidad de contador en cualquier línea digital disponible. Los nodos de E/S digitales pueden aprovechar la estructura especializada denominada bucle temporizado de ciclo único en LabVIEW FPGA, con la que se puede ejecutar código a velocidades especificadas que van desde 2,5 a 200 MHz. Usando un reloj de 40 MHz, por ejemplo, puede usar un bucle temporizado de un solo ciclo para crear un contador de 40 MHz en cualquier línea digital. La Figura 12 (abajo) es un ejemplo de cómo puede ser el diagrama de bloques.

Figura 12: Contador de eventos simple con la serie R

Debido a que el valor de recuento se envía a un indicador con un tipo de datos de U32 (números enteros de 32 bits), este código produciría un contador de 32 bits de 40 MHz en el chip FPGA. Podría copiar y pegar esto varias veces para obtener múltiples contadores, todos funcionando en diferentes líneas digitales completamente paralelas entre sí. El valor real con el uso de dispositivos de E/S reconfigurables multifunción, sin embargo, está en la personalización de las operaciones de contador. Puede elegir incrementar el contador cada tres bordes ascendentes, o incluso activar una adquisición analógica basada en el valor del registro de recuento. Muchas operaciones complejas de contadores, como la generación de trenes de pulsos finitos o el recuento de eventos en cascada requieren el uso de dos contadores, lo que generalmente significa todos los contadores a bordo para dispositivos multifunción típicos. Con hasta 160 líneas digitales, el número máximo de contadores en hardware reconfigurable rara vez está limitado por la disponibilidad de E/S y generalmente está determinado por el tamaño del chip FPGA. Debido a que el código LabVIEW se ejecuta en silicio, no hay necesidad de “armar” o “rearmar” contadores de propósito general, y obtienes control total sobre la operación del contador.

La Figura 13 (abajo) es un ejemplo de uso de contadores para generar un tren de pulsos continuo con un disparador de pausa en NI-DAQmx.

 
Figura 13: Generación continua de trenes de pulsos y activación de pausa con NI-DAQmx
 

En LabVIEW FPGA, el disparador de pausa no necesita configuración, porque una estructura Case simple puede implementar la misma funcionalidad en silicio. Así es como se ve la misma funcionalidad cuando se implementa con un dispositivo de E/S reconfigurable multifunción (Figura 14).

 
Figura 14: Generación de trenes de pulsos continuos y activación de pausa con la serie R
 
En este caso, la línea de E/S digital 0 es el activador de pausa, y el pulso se genera en la línea de E/S digital 1. El bucle temporizado de un solo ciclo se utiliza para obtener una resolución de 25 ns en cada pulso, ya que ese será el valor de un solo tick utilizando la fuente de temporización de 40 MHz.

Métodos de transferencia de datos

Una diferencia importante entre el DAQ multifunción tradicional con el controlador NI-DAQmx y el hardware reconfigurable es la forma en que se implementa la transferencia de datos. El controlador NI-DAQmx extrae todas las transferencias del dispositivo al equipo host. Esto debe estar completamente programado en LabVIEW para todo el hardware basado en FPGA. Hay varias formas de almacenar en búfer los datos a bordo del dispositivo y utilizar diferentes métodos de transferencia de datos, como canales DMA y solicitudes de interrupción.

Un buffer FIFO en LabVIEW FPGA está configurado en el LabVIEW Project Explorer, y se puede implementar usando memoria integrada o lógica de hardware. La Figura 18 muestra cómo configurar un buffer FIFO de números enteros en la memoria de bloques integrada desde el Explorador de proyectos LabVIEW.

 
Figura 18: Configuración FIFO en LabVIEW FPGA
 
Una vez creado el FIFO, se puede utilizar para transferir datos entre múltiples bucles en un diagrama de bloques LabVIEW FPGA. El ejemplo de la Figura 19 muestra los datos que se escriben en la FIFO en el bucle de la izquierda, y luego los datos que se leen de la FIFO en el bucle de la derecha.

 
Figura 19: Diagrama de bloques FPGA LabVIEW con FIFO y múltiples bucles
 
Los canales DMA, que también se implementan con FIFOs LabVIEW FPGA, se configuran de manera similar en el Explorador de proyectos LabVIEW.

Figura 20: Configuración de DMA FIFO en LabVIEW FPGA

Figura 21: Diagrama de bloques de LabVIEW FPGA con DMA FIFO y empaquetamiento de bits

Todas las transferencias DMA FIFO son de 32 bits, por lo que al pasar datos desde un canal de entrada analógico de 16 bits, a menudo es más eficiente combinar muestras y pasar datos dos canales, o muestras, a la vez. Esto se conoce como empaquetamiento de bits, que se muestra en la Figura 21. Cuando los datos se pasan directamente a la memoria del PC host, se pueden leer utilizando las funciones de interfaz host de LabVIEW ejecutadas en el entorno Windows (Figura 22).


Figura 22: Código de interfaz de host con lectura FIFO DMA y desempaquetado de bits

Como se muestra en la Figura 22, el diagrama de bloques de la interfaz de host hace referencia al objetivo VI de FPGA y luego lee continuamente la FIFO de DMA en un bucle de tiempo. Los datos de 32 bits se dividen en los dos canales de 16 bits que se muestrearon y representaron en un gráfico de forma de onda. La interfaz de host VI también puede leer y escribir en cualquier indicador o control del panel frontal de la FPGA VI, y en este caso también se está escribiendo en el control del botón de detención.

Conclusión

Si bien los ASIC fijos como el NI-STC3 cumplen con la mayoría de los requisitos de adquisición de datos, la flexibilidad y personalización completas solo se pueden lograr con la sincronización de E/S reconfigurable basada en FPGA y el control de la serie R. Con LabVIEW FPGA, las tareas de activación y sincronización se vuelven tan simples como dibujar gráficamente el diagrama de bloques para hacer exactamente lo que necesita; y con líneas de E/S analógicas y digitales independientes, las placas de la Serie R pueden aprovechar el verdadero paralelismo que ofrecen las FPGA. Ya se trate de muestreo multivelocidad, operación de contador personalizada o toma de decisiones a bordo a 40 MHz, los dispositivos de la serie R han revolucionado las posibilidades de adquisición de datos multifunción.