Techniques avancées d’acquisition de données avec matériels d’E/S multifonctions reconfigurables

Aperçu

Les matériels d'E/S reconfigurables multifonctions (RIO), précédemment appelés matériels de la Série R, incluent un traitement embarqué défini par l'utilisateur pour une flexibilité totale du cadencement et du déclenchement du système. Au lieu d'un ASIC fixe pour contrôler la fonctionnalité du périphérique, les matériels d'E/S reconfigurables multifonctions utilisent un contrôleur de cadencement système basé sur FPGA pour rendre toutes les E/S analogiques et numériques configurables pour un fonctionnement spécifique à l'application. Vous pouvez implémenter des tâches d'acquisition de données (DAQ) entièrement flexibles et personnalisées en utilisant du matériel d'E/S reconfigurable multifonction et le LabVIEW FPGA Module

Contenu

Introduction

En utilisant LabVIEW FPGA, les développeurs de systèmes DAQ disposent d'une flexibilité totale lors de la programmation d'une application pour tout type d'opération d'entrée/sortie. Sans aucune connaissance préalable des outils de conception de matériel tels que VHDL, vous pouvez intégrer du code LabVIEW sur une puce FPGA et atteindre une vitesse et une fiabilité réelles à cadencement matériel.

Commençons par aborder les composants communs du matériel DAQ. En supposant que vous disposiez de convertisseurs analogiques/numériques (C A/N), de convertisseurs numériques/analogiques (C N/A) et de lignes d’entrée/sortie numériques, toutes les E/S doivent être cadencées et contrôlées pour un fonctionnement réel. Les périphériques DAQ multifonctions typiques utilisent un ASIC riche en fonctionnalités qui intègre la majorité des besoins en fonctionnalités. Les périphériques reconfigurables se différencient de tous les autres périphériques DAQ du marché car au lieu d’un ASIC fixe pour contrôler la fonctionnalité du périphérique, ils utilisent un contrôleur de cadencement système basé sur FPGA pour rendre toutes les E/S analogiques et numériques configurables pour un fonctionnement spécifique à l’application. La puce FPGA reconfigurable est programmée avec le LabVIEW FPGA Module, où le paradigme de flux de données LabVIEW s'applique toujours, mais avec un nouvel ensemble de fonctions qui contrôlent les E/S du périphérique au niveau le plus bas. Au lieu d'exclure les tâches et fonctions courantes avec les fonctions NI-DAQmx, les nœuds d'E/S LabVIEW FPGA fonctionnent au niveau le plus fondamental avec une flexibilité totale sur toutes les voies. Dans les sections suivantes, examinez des exemples NI-DAQmx spécifiques et découvrez comment personnaliser diverses tâches d'acquisition de données à l'aide de matériel reconfigurable.

Cadencement et déclenchement

L'utilisation la plus courante des E/S reconfigurables pour l'acquisition de données avancée est le cadencement et le déclenchement personnalisés. Vous trouverez ci-dessous un exemple de diagramme d'une tâche d'entrée analogique déclenchée utilisant NI-DAQmx.

Figure 1 : Entrée analogique déclenchée avec NI-DAQmx

Au lieu d'utiliser différentes fonctions pour la configuration des voies, comme le montre la figure 1, ce matériel utilise des fonctions appelées nœuds d'E/S FPGA pour la lecture et l'écriture de toutes les voies analogiques et numériques. Examinons exactement la même fonctionnalité en utilisant des nœuds d’E/S dans LabVIEW FPGA.

Figure 2 : Entrée analogique déclenchée avec Série R et LabVIEW FPGA

Vous pouvez voir qu'il n'y a pas de fonctions de configuration pour les voies globales, les horloges d'échantillonnage, les déclenchements ou les tâches de démarrage, d'arrêt et d'effacement. Le tout a été remplacé par une simple lecture d’E/S analogiques, et tout le cadencement est contrôlé par des structures LabVIEW natives telles que les boucles While et les structures Condition. Comme tout le diagramme s'exécute dans du matériel FPGA, le code LabVIEW s'exécute avec une vitesse et une fiabilité à cadencement matériel. Examinons un peu plus en profondeur le fonctionnement de ce diagramme. Au lieu de spécifier une fréquence d'échantillonnage particulière, le nœud d'E/S analogique utilise la boucle For pour acquérir chaque échantillon. Le C A/N correspondant numérise le signal en entrée lorsque le nœud d'E/S FPGA est appelé et est donc cadencé par la boucle For. Si vous voulez échantillonner un signal à 100 kHz, le délai spécifié pour cette boucle doit être défini à 10 μs. La fonction timer de boucle garantit un délai spécifique, en commençant à la deuxième itération de la boucle, nous avons donc utilisé une structure Séquence pour assurer la période de temps spécifiée entre les échantillons. La structure Condition dans LabVIEW FPGA est puissante, car elle représente essentiellement un déclenchement matériel pour tout le code qu'elle encapsule. Avec toutes les fonctions et structures s'exécutant dans du matériel avec des portes logiques, la structure Condition garantit que l'échantillonnage commence au bon moment dans le temps, à moins de 10 μs de la précision. Enfin, il n’est pas nécessaire de vider l’ID de tâche ou de libérer de la mémoire, car nous travaillons maintenant au niveau matériel avec peu de couches d’abstraction.

Le véritable avantage de l’utilisation de matériel basé sur FPGA est la possibilité de personnaliser tout le cadencement et le déclenchement, ainsi que d’implémenter le traitement du signal et la prise de décision dans le matériel. Voyons maintenant ce qu’il faut faire pour modifier notre déclenchement d’entrée analogique pour une application personnalisée. Et si nous voulions déclencher l’acquisition si l’une des deux voies d’entrée analogique dépassait un certain seuil ? C'est assez simple à implémenter dans LabVIEW FPGA.

 
Figure 3 : Entrée analogique à déclenchement personnalisé avec Série R et LabVIEW FPGA
 
Vous pouvez voir que nous avons ajouté un deuxième nœud d’E/S FPGA et une deuxième fonction de comparaison, ainsi qu’une fonction OU booléenne au diagramme. Les cartes de la Série R ont des C A/N dédiés sur chaque voie d’entrée analogique, de sorte que les deux voies sont échantillonnées simultanément, et si l’une d’elles dépasse la limite spécifiée, la structure Condition exécute la condition vraie et commence l’acquisition avec la même précision de 10 μs. Gardez à l’esprit qu’il n’est pas possible de générer un déclenchement comme celui-ci sur du matériel activé par NI-DAQmx. Vous pourriez implémenter ce type de déclenchement dans un logiciel, mais cela nécessiterait une prise de décision à cadencement logiciel avec une latence beaucoup plus élevée. Si nous voulions ensuite étendre la surveillance de deux voies aux huit voies, ou même ajouter des déclenchements numériques, le code personnalisé ne serait pas plus compliqué. L'ajout de balayages de pré-déclenchement impliquerait d'échantillonner constamment la voie d'entrée et de transmettre les données dans un buffer premier entré, premier sorti (FIFO). Une fois le déclenchement lu, le buffer FIFO et les échantillons suivants seraient ensuite transmis à l'hôte via une voie DMA.


Si nous voulions échantillonner une deuxième voie d’entrée analogique en utilisant le driver NI-DAQmx, le diagramme ne serait pas très différent de ce qui est illustré à la figure 1. Il y aurait cependant des limites, car les deux voies seraient forcées de référencer le même déclenchement et la même horloge d'échantillonnage. Examinons les différentes options d'échantillonnage de plusieurs voies à l'aide d'E/S reconfigurables et LabVIEW FPGA.

Figure 4 : Entrée analogique simultanée déclenchée avec Série R

La Figure 4 (ci-dessus) montre comment échantillonner simultanément à partir de deux voies d’entrée analogique différentes, en fonction d’un déclenchement analogique à partir de la voie d’entrée analogique 0 (AIO). Comme tous les matériels d'E/S reconfigurables multifonctions ont des C A/N indépendants, deux voies d'un nœud d'E/S sont échantillonnées exactement au même instant. Les périphériques DAQ multifonctions typiques multiplexent toutes les voies via un seul C A/N ; par conséquent, toutes les voies doivent partager la même horloge d'échantillonnage et les mêmes lignes de déclenchement. La figure 5 (ci-dessous) montre que les matériels d’E/S reconfigurables multifonctions peuvent réellement échantillonner différentes voies d’entrée analogique à des fréquences indépendantes. En plaçant les nœuds d'E/S d'entrée analogique dans des boucles indépendantes, chaque voie peut échantillonner à des fréquences complètement différentes, puis diffuser des données indépendamment via deux voies DMA.


Figure 5 : Entrée analogique multifréquence déclenchée avec matériel d'E/S reconfigurable multifonction

Enfin, si nous voulions que les deux voies aient des fréquences d’échantillonnage indépendantes, ainsi que des déclenchements de démarrage indépendants, nous pourrions placer chaque nœud d’E/S dans des structures de boucle parallèles comme le montre la figure 6. Cela tire pleinement parti du parallélisme FPGA, où chaque tâche utilise ses propres ressources dédiées et s’exécute indépendamment de toute autre tâche d’acquisition.


Figure 6 : Entrée analogique multifréquence à déclenchement indépendant avec matériel d’E/S reconfigurable multifonction

Synchronisation

De nombreuses options de synchronisation sont intégrées au driver NI-DAQmx pour corréler les entrées et les sorties dans le temps. Vous trouverez ci-dessous le diagramme d'une voie d'entrée analogique et d'une voie de sortie analogique synchronisées avec un déclenchement de démarrage numérique, en spécifiant un déclenchement numérique pour l'entrée analogique et en utilisant le signal de déclenchement de démarrage d'entrée analogique pour déclencher la génération de sortie analogique.


Figure 7 : Entrées et sorties analogiques synchronisées avec NI-DAQmx

Implémenter le même schéma de synchronisation avec du matériel d'E/S reconfigurable multifonctions est assez simple sans avoir besoin d'ID de tâche et de routage de signal embarqué. Voici ce que cela donnerait sur le diagramme LabVIEW FPGA.

Figure 8 : Entrées et sorties analogiques synchronisées avec la série R

Encore une fois, nous utilisons la structure Condition pour implémenter un déclenchement matériel sur la puce FPGA, et un front montant sur la voie numérique 0 initialise le code dans la condition vraie. Les nœuds d'entrée et de sortie analogiques sont appelés simultanément dans la structure Séquence sans presque aucun jitter, et si nous voulions qu'ils aient des fréquences indépendantes, nous pourrions facilement les placer dans leurs propres boucles While distinctes. Il est également important de noter que la fonction de générateur de sinus représentée sur ce diagramme est un VI Express avec lequel vous pouvez configurer de manière interactive les valeurs de sinus dans une table de correspondance.

Le diagramme de la figure 8 a les mêmes fonctionnalités que le VI NI-DAQmx de la figure 7, mais si nous voulions personnaliser cette tâche, seul un périphérique d'E/S reconfigurable offrirait la flexibilité nécessaire. Si nous devions ajouter un déclenchement de pause, par exemple, cela pourrait être facilement réalisé en ajoutant une structure Condition dans la boucle While interne et en utilisant un autre nœud d’E/S numérique pour sélectionner une condition Vrai ou Faux. La puissance de programmation du matériel offre des possibilités infinies de cadencement et de synchronisation des E/S.

Un autre exemple de synchronisation multifonction est la génération d'impulsions finies avec les compteurs embarqués et l'utilisation de la sortie compteur comme horloge d'échantillonnage d'entrée analogique. Ce processus est l’approche courante pour implémenter une acquisition d’échantillon fini redéclenchable. Vous trouverez ci-dessous le code NI-DAQmx requis pour une telle acquisition.

Figure 9 : Entrée analogique finie redéclenchable avec NI-DAQmx

Comparons maintenant cela à un diagramme LabVIEW FPGA avec la même fonctionnalité.


Figure 10 : Entrée analogique finie redéclenchable avec Série R et LabVIEW FPGA

Il est évident dans la figure 10 qu’il y a beaucoup moins d’étapes de configuration de driver car le code LabVIEW s’exécute dans le matériel. Avec une ligne d’entrée numérique simple et une structure de boucle For, nous avons créé une acquisition finie redéclenchable par le matériel. Le diagramme précédent de la figure 9 utilise deux compteurs intégrés pour créer le train d’impulsions fini redéclenchable, et les périphériques DAQ multifonctions typiques n’ont que quatre compteurs pour fonctionner. Les matériels d'E/S reconfigurables multifonctions, cependant, peuvent configurer n'importe quelle ligne numérique pour qu'elle soit un compteur en utilisant LabVIEW FPGA. Nous aborderons plus en détail les implémentations de compteur/timer dans une section ultérieure.

Nous pourrions pousser plus loin la flexibilité à cadencement matériel des matériels d’E/S reconfigurables avec une acquisition à déclenchement de fréquence. Bien que cela ne soit pas possible avec un périphérique DAQ multifonction typique, la prise de décision embarquée haute vitesse peut être utilisée pour calculer la fréquence d’un signal en entrée puis sélectionner le code souhaité dans une structure Condition. Pour la synchronisation de plusieurs périphériques, les matériels d'E/S reconfigurables multifonctions peuvent également utiliser le bus RTSI pour les cartes PCI/PCI Express ou le bus de déclenchement PXI pour les modules PXI. Ces lignes de cadencement et de synchronisation externes sont également accessibles via des nœuds d'E/S FPGA sur le diagramme.

Génération de signaux analogiques

De nombreux matériels DAQ multifonctions ont des voies de sortie analogique qui implémentent un buffer FIFO pour la génération de waveform analogique en continu. La waveform générée peut utiliser la FIFO comme buffer circulaire et régénérer en continu une série de valeurs analogiques sans autre mise à jour de l'hôte. Cela dépend moins de la disponibilité du bus de communication car les données ne sont pas constamment transmises au périphérique. Cependant, si la waveform doit être modifiée, la tâche de sortie doit être redémarrée pour pouvoir écrire de nouvelles données dans la FIFO. L'autre option consiste à transférer en continu des données vers la FIFO matérielle, ce qui peut entraîner des latences dans votre tâche de sortie. Les matériels d'E/S reconfigurables multifonctions vous permettent de stocker les sorties de waveform dans du matériel, et même d'utiliser le déclenchement matériel pour changer des waveforms, créant ainsi un générateur de signaux arbitraires.

Vous trouverez ci-dessous un exemple de générateur de fonctions qui utilise des lignes d'entrée numérique pour déclencher des changements dans la waveform en sortie. En combinant les lignes d'E/S numériques 0 et 1, nous obtenons quatre états différents, ou conditions pour la sortie analogique.


Figure 11a : Générateur de fonctions avec condition 0 de la Série R — Sortie zéro


Figure 11b : Générateur de fonctions avec condition de la Série R 1 — Signal sinusoïdal

Si les deux lignes sont basses, la condition 0 est exécutée et comme le montre la figure 11a, la sortie est une valeur constante de 0 V. Si la ligne DIO 0 est haute et la ligne DIO 1 est basse, la condition 1 s'exécute et génère un signal sinusoïdal sur la sortie analogique 0. Cette condition de génération de sinus (figure 11b) utilise le VI Express générateur de sinus avec lequel vous pouvez configurer de manière interactive une waveform sinusoïdale avec les valeurs entières requises dans LabVIEW FPGA.


Figure 11c : Générateur de fonctions avec condition de la Série R 2 — Signal carré

La condition 2 (figure 11c) fait simplement basculer une valeur booléenne à chaque itération de la boucle While. Si la valeur est basse, l'entier 15000 est écrit sur la sortie analogique 0, ce qui correspond à la valeur 15000 dans le registre de sortie d'un C N/A 16 bits. Un entier 16 bits signé peut avoir des valeurs comprises entre -32768 et 32767. Avec une gamme de sortie de -10 à 10 V, l’écriture de -32768 sur la sortie analogique 0 génère -10 V, et l’écriture de 32767 génère 10 V. Dans cet exemple, nous écrivons 15000, qui produit un peu moins de 5 V. (Voici le calcul: 15000/32767 * 10 V = 4,5778 V) Essentiellement, la condition 2 émet un signal carré qui bascule entre 0 et 4,578 V.

Figure 11d : Générateur de fonctions avec condition de la Série R 3 — Signal en dents de scie

La dernière condition (figure 11d) s'exécute si DIO 0 et DIO 1 sont hauts, et ceci utilise une table de correspondance pour générer en continu un signal en dents de scie. Le VI de table de correspondance est un autre VI Express qui vous permet de stocker des valeurs de signaux arbitraires et de les indexer par programmation. Dans cet exemple, nous avons configuré un signal en dents de scie pour qu’il soit généré sur la voie de sortie analogique 0.

En stockant toutes les valeurs sur le FPGA, vous éliminez la dépendance de la disponibilité du bus et assurez la vitesse et la fiabilité du cadencement matériel des mises à jour de waveform. Toute la flexibilité de déclenchement et de synchronisation décrite avec l’entrée analogique dans les sections précédentes s’applique également à la sortie analogique ; et avec les matériels d’E/S reconfigurables multifonctions, vous pouvez mettre à jour différentes voies de sortie analogique à différentes fréquences, complètement indépendantes les unes des autres. Cela signifie que vous pouvez modifier la fréquence d’une seule waveform périodique sans affecter les sorties d’autres voies. Gardez à l'esprit que cette fonctionnalité n'est pas possible sur la plupart des matériels d'acquisition de données.

Opérations compteur/timer

Comme mentionné précédemment, les matériels DAQ multifonctions typiques n’ont que quatre compteurs intégrés, alors que les matériels d’E/S reconfigurables multifonctions peuvent implémenter la fonctionnalité de compteur sur n’importe quelle ligne numérique disponible. Les nœuds d'E/S numériques peuvent tirer parti de la structure spécialisée appelée boucle cadencée à un cycle dans LabVIEW FPGA, avec laquelle vous pouvez exécuter du code à des fréquences spécifiées allant de 2,5 à 200 MHz. En utilisant une horloge 40 MHz, par exemple, vous pouvez utiliser une boucle cadencée à un cycle pour créer un compteur 40 MHz sur n'importe quelle ligne numérique. La figure 12 (ci-dessous) est un exemple de ce à quoi le diagramme peut ressembler.

Figure 12 : Compteur d'événements simple avec Série R

Comme la valeur de comptage est envoyée à un indicateur avec un type de données U32 (entiers 32 bits), ce code produirait un compteur 32 bits 40 MHz sur la puce FPGA. Vous pourriez copier et coller cela plusieurs fois pour obtenir plusieurs compteurs, tous fonctionnant sur différentes lignes numériques complètement parallèles entre elles. La valeur réelle de l'utilisation de matériels d'E/S reconfigurables multifonctions, cependant, est dans la personnalisation des opérations de compteur. Vous pouvez choisir d'incrémenter le compteur tous les trois fronts montants, ou même de déclencher une acquisition analogique en fonction de la valeur du registre de comptage. De nombreuses opérations de compteur complexes, telles que la génération de trains d'impulsions finis ou le comptage d'événements en cascade nécessitent l'utilisation de deux compteurs, ce qui signifie généralement tous les compteurs embarqués pour les matériels multifonctions typiques. Avec jusqu'à 160 lignes numériques, le nombre maximal de compteurs sur du matériel reconfigurable est rarement limité par la disponibilité des E/S et est généralement déterminé par la taille de la puce FPGA. Comme le code LabVIEW s’exécute en silicium, il n’est pas nécessaire d’« armer » ou de « réarmer » les compteurs polyvalents, et vous obtenez un contrôle total sur le fonctionnement du compteur.

La figure 13 (ci-dessous) est un exemple d'utilisation de compteurs pour générer un train d'impulsions continu avec un déclenchement de pause dans NI-DAQmx.

 
Figure 13 : Génération continue de trains d'impulsions et déclenchement de pause avec NI-DAQmx
 

Dans LabVIEW FPGA, le déclenchement de pause n'a besoin d'aucune configuration, car une simple structure Condition peut implémenter la même fonctionnalité dans le silicium. Voici à quoi ressemble la même fonctionnalité lorsqu’elle est implémentée avec un matériel d’E/S reconfigurable multifonction (Figure 14).

 
Figure 14 : Génération continue de train d'impulsions et déclenchement de pause avec la Série R
 
Dans ce cas, la ligne d'E/S numériques 0 est le déclenchement de pause, et l'impulsion est générée sur la ligne d'E/S numériques 1. La boucle cadencée à un cycle est utilisée pour obtenir une résolution de 25 ns sur chaque impulsion car ce sera la valeur d'un top unique en utilisant la source de cadencement 40 MHz.

Méthodes de transfert de données

Une différence majeure entre le DAQ multifonction traditionnel avec le driver NI-DAQmx et le matériel reconfigurable est la manière dont le transfert de données est implémenté. Le driver NI-DAQmx élimine tous les transferts du périphérique vers le PC hôte. Ceci doit être complètement programmé dans LabVIEW pour tout le matériel basé sur FPGA. Il existe plusieurs façons de buffériser les données à bord du périphérique et d'utiliser différentes méthodes de transfert de données telles que les voies DMA et les requêtes d'interruption.

Un buffer FIFO dans LabVIEW FPGA est configuré dans l'Explorateur de projet LabVIEW et peut être implémenté en utilisant la mémoire embarquée ou la logique matérielle. La figure 18 montre comment configurer un buffer FIFO de nombres entiers en bloc de mémoire embarqué à partir de l'Explorateur de projet LabVIEW.

 
Figure 18 : Configuration de FIFO dans LabVIEW FPGA
 
Une fois la FIFO créée, elle peut être utilisée pour transférer des données entre plusieurs boucles sur un diagramme LabVIEW FPGA. L'exemple de la figure 19 montre des données écrites dans la FIFO de la boucle de gauche, puis lues dans la FIFO de la boucle de droite.

 
Figure 19 : Diagramme LabVIEW FPGA avec FIFO et boucles multiples
 
Les voies DMA, qui sont également implémentées avec des FIFO LabVIEW FPGA, sont configurées de la même manière dans LabVIEW Project Explorer.

Figure 20 : Configuration de FIFO DMA dans LabVIEW FPGA

Figure 21 : Diagramme LabVIEW FPGA avec FIFO DMA et emballage de bits

Tous les transferts de FIFO DMA sont 32 bits, donc lors du transfert de données d’une voie d’entrée analogique 16 bits, il est souvent plus efficace de combiner des échantillons et de transmettre des données deux voies, ou échantillons, à la fois. C’est ce qu’on appelle le bit-packing, illustré à la figure 21. Lorsque les données sont transmises directement à la mémoire du PC hôte, elles peuvent ensuite être lues à l'aide des fonctions d'interface hôte de LabVIEW fonctionnant dans l'environnement Windows (figure 22).


Figure 22 : Code d'interface hôte avec lecture de FIFO DMA et décompactage de bits

Comme le montre la figure 22, le diagramme de l'interface hôte fait référence au VI cible FPGA puis lit continuellement la FIFO DMA dans une boucle While. Les données 32 bits sont divisées en deux voies 16 bits qui ont été échantillonnées et tracées sur un graphe déroulant. Le VI d'interface hôte peut également lire et écrire sur n'importe quel indicateur ou commande de la face-avant du FPGA VI, et dans ce cas, la commande bouton Stop est également en cours d'écriture.

Conclusion

Bien que les ASIC fixes tels que le NI-STC3 répondent à la majorité des exigences d’acquisition de données, une flexibilité et une personnalisation complètes ne peuvent être obtenues qu’avec le cadencement et le contrôle d’E/S reconfigurables basés sur FPGA de la Série R. Avec LabVIEW FPGA, les tâches de déclenchement et de synchronisation deviennent aussi simples que de tracer graphiquement le diagramme pour faire exactement ce dont vous avez besoin; et avec des lignes d'E/S analogiques et numériques indépendantes, les cartes de la Série R peuvent tirer parti du véritable parallélisme qu'offrent les FPGA. Qu’il s’agisse d’échantillonnage multifréquence, d’opérations de compteur personnalisées ou de prise de décision embarquée à 40 MHz, les matériels de la Série R ont révolutionné les possibilités d’acquisition de données multifonctions.