Discussions au sujet des autres produits NI

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

Mesure de la fréquence d'un signal dans Labview

Bonjour,
 
Je suis débutant avec Labview. J'utilise un compactrio 9002 avec le module 9215. Je dois calculé la fréquence du signal entrant. Je nettoie le signal en utilisant Relay.vi. Comment puis-je procéder ?
 
J'ai tenté plusieurs approche mais sans succès. Je tente présentement d'utiliser Zero crossings.vi mais je ne sais pas comment calculé les changements d'états.
 
Merci
 
0 Compliments
Message 1 sur 6
7 681 Visites
Bonjour,

Au niveau du FPGA, vous n'obtiendrez pas l'information de fréquence directement. Vous n'avez en effet pas accès à toutes les fonctions mathématiques; vous ne pourrez faire une division que par l'intermédiaire du VI Quotien et Reste ou des divisions par un multiple de deux, en utilisant le VI Multiplier par une puissance de 2. L'idée est donc de relever le nombre d'itération de boucle entre deux front de même nature (montant ou descendant), en connaissant le temps de boucle. L'opération d'inversion est ensuite effectuée au niveau du contrôleur.
  
Si vous disposez du module LabVIEW FPGA 8.20, vous pourrez faire cette détection avec le VI Express Analog period measurment; il existe un exemple prévu pour des carte de la série R, Measuring Signal Period.lvproj,  qui devrait constituer une bonne base pour réaliser votre mesure. Vous le trouverez dans l'outil de recherche d'exemple, dans la rubrique E/S matérielles >> Série R >> Fondamentaux FPGA >> Analyse et contrôle.

Sinon, votre démarche me semble correcte; éviter les rebond avec le Relay, puis attendre le Zero crossing (attention à ne comptabiliser qu'un sens). Reste à determiner temps écoulé entre deux "crossing".

Cordialement,

Message Edité par Mathieu R. le 12-15-2006 03:02 PM

Message Edité par Mathieu R. le 12-15-2006 03:10 PM

0 Compliments
Message 2 sur 6
7 669 Visites
bonjour,

si votre signal est sinusoidal, vous pouvez utiliser l'estimateur de frequence de Buneman.
qui se trouve dans le menu functions>>Analyze>>Signal processing>>frequency domain

en entree, il y a le tableau de donnees et en sortie il y a le facteur bêta
il faut multiplier ce dernier par la fréquence d'échantillonnage
et le diviser par la taille du tableau pour obtenir la frequence estimee de la sinusoide

cordialement

adeline
0 Compliments
Message 3 sur 6
7 662 Visites
Reste à determiner temps écoulé entre deux "crossing".
 
Quelle façon est la mieux approprié pour déterminer cette valeur ?
 
Et ensuite, j'additionne cette valeur sur 256 périodes et je divise par 2¨16 pour avoir un résultat de meilleur précision ?
 
Merci
 
Daniel
0 Compliments
Message 4 sur 6
7 644 Visites
Effectuer une moyenne tel que vous l'indiquez me semble une bonne méthode. La façon la plus simple de le programmer est d'accumuler la différence de temps entre deux zero crossing 256 fois avant de fournir le résultat de la division. Cela vous amène à ne rafraîchir la valeur moyennée de période qu'une fois tous les 256 périodes.

D'autre part, votre acquisition peut être cadencée avec un module cRIO-9215 à un taux d'échantillonnage maximal de 100kS/s, ce qui vous impose une résolution de 10µs. Le VI Tick Count en mode µs conviendra tout à fait à mon avis. Si vous considérez 256 périodes, multipliez ensuite par 2^(-8) pour obtenir votre moyenne.

Il est bon de noter que la multiplication par une puissance de deux correspond à un décalage des bits, vers la droite dans le cas d'une division (puissance de deux négative) et que dans notre cas, les huit bits de poids faible sont tronqués, purement et simplement.

Sans le VI Relay, le diagramme pourrait ressembler à ceci:



Cordialement,

Message Edité par Mathieu R. le 12-18-2006 10:24 AM

Message 5 sur 6
7 616 Visites

J'utilise présentement cette schématique avec deux signaux d'entrée : un est de forme sinusoidale avec une fréquence variant entre 6 et 32 Hz et l'autre est de forme carré variant de 0 à 56 Hz. Le circuit est fonctionnelle avec un loop timer supérieur à 500us mais la vitesse de réponse est très lente (et c'est très long entre deux valeurs). En dessous de 500us, la valeur de la période est inférieur à ce qui devrait être, elle change plus rapidement mais ce ne sont pas les bonnes valeurs.

Est ce que vous pouvez me lancez sur une piste pour corriger ce problème ? 

 

Et pour afficher un graphique instantanné de ces valeurs dans le host.vi, qu'elle est la meilleur façon de procéder ? J'ai mis présentement les valeurs dans un cluster au niveau FPGA mais je ne retrouve pas les valeurs dans le host.vi.

Merci

Daniel Boulay

0 Compliments
Message 6 sur 6
7 478 Visites