Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Transfert de données FPGA - RT rapide

Résolu !
Accéder à la solution

Bonjour à tous,

 

Je suis actuellement en train de développer une application devant acquérir plusieur signaux à un instant donné.

Le but étant qu'un moteur tourne à une vitesse variable, et les acquisition de mes signaux se font en synchronisation avec le moteur :

A chaque front montant du signal codeur du moteur, je prend une acquisition sur deux voies analogique et une voie numérique.

Pour ce faire, j'utilise un CompactRIO avec un module NI 9411 pour récupérer les signaux codeurs, un NI 9222 pour les acquisitions analogiques et un NI 9375 pour les E/S numériques.

 

Pour synchroniser mes acquisitions avec le signal codeur, j'utilise la structure suivante afin de détecter les front montant sur l'entrée numérique du signal codeur et ensuite acquérir mes données et les transferer au coté RT via une FIFO :Sans titre.png

 

J'ai programmé le variateur du moteur afin d'avoir 2048 front montant sur un tour du moteur, je dois donc obtenir 2048 points d'acquisition à la fin.

Cependant, je n'ai pas toujours 2048 points sur touutes mes données. Des fois ( de manière aléatoire) j'en ai moins, et pas le meme nombre pour chaque signaux...

Je soupsonne l'écriture dans les FIFOS de prendre trop de temps pour pouvoir détecter tous les front montant du signal codeur.

 

Vous trouverez mon programme en pièce jointe.

 

Je cherche donc une solution qui rendrait mon acquisition 100% sûr.

Quelqu'un aurait-il une idée, un conceil ?

 

Cordialement,

Nathan

0 Compliments
Message 1 sur 11
4 675 Visites

J'ai également voulu essayer de stocker les données dans des tableaux avant de les envoyer dans la FIFO :Sans titre.png

Sans titre2.png

Mais la compilation FPGA ne marche m'indiquant qu'il n'y a pas assez de place dans le FPGA...

0 Compliments
Message 2 sur 11
4 665 Visites

N'est il pas possible de câbler physique ton trig à la carte d'acquisition pour avoir une détection "physique" plutôt que "software" ?

 

Cdt,

Michael

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
0 Compliments
Message 3 sur 11
4 665 Visites

C'était mon idée première, mais je n'ai pas pu trouver de carte d'acquisition analogique disposant d'une entrée trigger. Et quand un commerciale de national instrument est venu pour discuter de mon projet, il m'as conceiller le version software.

0 Compliments
Message 4 sur 11
4 663 Visites

Bonjour,

 

Quel est le plus petit delta t (entre 2 fronts montants du signal codeur du moteur) auquel vous pouvez être confronté avec ce moteur?

Avez-vous benchmarké votre code pour mesurer les temps d'executions des différents noeuds d'entrée/sortie utilisés dans votre diagramme?

 

Observez-vous de plus en plus de points manquants à mesure que la vitesse de rotation du moteur augmente?

La lecture de la voie numérique se fera nécessairement sur moins de ticks que la lecture de la voie analogique. Observez-vous des données manquantes uniquement sur la voie analogique?

 

 

 

 

Pierre-Emmanuel BELLES
Certified LabVIEW Developper
Certified TestStand Architect

Message 5 sur 11
4 643 Visites

Bonjour,

 

Je fais tourner mon moteur à 10tr/s, soit un tour en 100ms. Les 2048 impulsion réparties sur un tour donne donc une impulsion toutes les 48us environs.

Je ne sais malheureusement pas comment benchmarké un programme FPGA, auriez vous un exemple à me proposez ?

 

J'ai fais des tests en augmentant et en diminuant la vitesse du moteur, mais je n'ai pas trouvé de logique dans le manque de points...

A vitesse élevée je parvenais des fois à avoir mes 2048 points et d'autres fois il m'en manquait quelque uns, mais rien de régulier...

Nan j'ai également noté un manque de points sur l'entrée numériques en meme temps que les entrée analogiques.

 

Cdt,

Nathan

0 Compliments
Message 6 sur 11
4 639 Visites

Utilisez simplement la fonction "tick count" et mettez-la dans les frames d'une structure séquence intercallées entre les opérations dont vous voulez mesurer le temps. Exemple en pièce jointe.

Voir Figure 1 de http://www.ni.com/example/30439/en/ pour mesure du temps de boucle.

 

Pierre-Emmanuel BELLES
Certified LabVIEW Developper
Certified TestStand Architect

0 Compliments
Message 7 sur 11
4 634 Visites

Et bien l'ensemble des acquisition ainsi que l'écriture dans les FIFOs ne prennent que 5us...

Ca ne me semle donc pas logique qu'il puisse me manquer des acquisitions...

0 Compliments
Message 8 sur 11
4 625 Visites

Quelles sont les tailles de FIFO ? Est-ce qu'elles entrent parfois en timeout?

 

Notes:

1. Il ne sert à rien de lire le trigger à 120MHz vu le temps de rafraichissement du module.

2. Depuis 2014 il est possible de grouper plusieurs données dans un seul noeud d'écriture DMA (propriétés de la FIFO DMA). Il est toujours bon d'économiser les canaux DMA en FPGA 🙂

 

Cdt,

--Eric

Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.

0 Compliments
Message 9 sur 11
4 622 Visites

Pour les FIFO j'ai demandé 2048 points mais la taille réel est de 4095. Et non, meme quand il me manque des points, les FIFO ne passent jamais en time out.

 

J'ai donc repasser l'horloge des boucle à 40MHz, et est ce que tu pourrais m'envoyer un exemple de comment grouper des données ?

 

Cdt,

Nathan

0 Compliments
Message 10 sur 11
4 615 Visites