Counter/Timer

cancel
Showing results for 
Search instead for 
Did you mean: 

two-edge sep avec 2 sources aléatoires (PCI 6601)

Bonjour,

 

Je doit mesurer le temps entre deux détecteurs tout en ne sachant pas lequel va intervenir en premier.

 

J'ai essayé d'utiliser la fonction DAQmxCreateCITwoEdgeSepChan afin de ne pas avoir de problème avec les rebonds des détecteurs.

Le problème est que je dois alors définir au départ quelle est la source du start et la source du stop.

(je pourrais utiliser 2 fonctions DAQmxCreateCITwoEdgeSepChan avec les sources inversées mais je n'ai pas assez de compteur disponible).

 

Pourriez-vous m'aider.

Merci par avance

 

 

 

 

 

 

0 Kudos
Message 1 of 12
(5,420 Views)

Bonjour,

Pouvez vous nous donner plus d'informations sur les signaux( fréquence, temps d'écart entre les deux, ... ).

Cela nous permettrait d'avoir une meilleure vision du problème.

Pouvez vous aussi nous dire ce que vous utilisez comme logiciel( LabWindows/CVI, Measuremet Studio, ...).

Merci

Cordialement 

Yann C.

France

0 Kudos
Message 2 of 12
(5,409 Views)

Merci de votre réponse,

 

J'utilise actuellement Daqmx en C sous linux.

Le temps entre les deux détecteurs vont de 5s à 1500s.

 

Cordialement

0 Kudos
Message 3 of 12
(5,406 Views)

Bonjour,

C'est plutôt lent, vous n'êtes pas obligé d'utiliser les compteurs. 

Voici une autre solution:

Vous faites une acquisition de vos deux signaux sur des entrée numériqueq, avec une fréquence de 10 Hz par exemple.

Puis en lisant les échantillons, vous pouvez savoir si un front est présent sur une voie et scrutter l'autre voie en attendant l'autre front.

Après pour mesurer l'écart de temps entre les deux signaux, soit on compte le nombre d'échantillons que l'on a reçu entre les deux front ou on utilise l'horodatage de l'OS.

Cela dépend de la précision que vous souhaitez avoir.

 

 

chrono.PNG

Pouvez vous me dire que vos x au minimum pour vos signaux. 

Merci

Cordialement

 

Yann C.

France

0 Kudos
Message 4 of 12
(5,403 Views)

Le problème se pose comme ceci :

 

Nouvelle image Bitmap.jpg

On ne sait pas quel détecteur va intervenir en premier,

La précision de la mesure du temps entre les deux pulses doit être meilleure que 50µs.

Le front montant de l'impulsion est propre, mais des rebonds interviennent par la suite pendant moins de deux secondes.

 

Cordialement

 

0 Kudos
Message 5 of 12
(5,398 Views)

Re,

Malheureusement sur votre carte les ligne numériques sont gérés logiciellement, donc impossible d'utiliser ces lignes si on veut respecter les 50µs de précision.

I l faut donc voir pour utiliser les compteurs mais je ne sais pas si cela est réalisable. 

Je vais faire quelques recherches.

Cordialement

 

Yann C.

France

0 Kudos
Message 6 of 12
(5,385 Views)

Bonjour,

Vous avez une PCI 6601 qui posséde 4 compteurs, une tâche de mesure de type Two-Edge Separation n'utilise qu'un compteur( voir KB).

Donc vous devez pouvoir faire deux tâche en échangeant les voies.

Voici un sreenshot d'exemple LabVIEW, en espérant qu'il vous aide.

Cordialement

 

Yann C.

France

0 Kudos
Message 7 of 12
(5,370 Views)

Merci de votre réponse.

Est-il pas possible d'utiliser 1 seule tâche :

 

- PFI37 : Contacteur A AND Contacteur B

- PFI0 : Contacteur A

- PFI1 : Contacteur B

 

//Création d'un tâche "compteur"

DAQmxCreateCICountEdgesChan(Task, "Dev1/ctr0" ,"" ,DAQmx_Val_Rising , 0, DAQmx_Val_CountUp );

//  Source 20MHz

DAQmxSetChanAttribute(Task, "Dev1/ctr0", "20MHzTimebase");

 

// L'entrée PFI37 contrôle le rythme des échantillons 

DAQmxCfgSampClkTiming(Task, "Dev1/PFI37",rate , DAQmx_Val_Rising, DAQmx_Val_ContSamps, 10000);


// Callback tous les 1 sample : il peut ne pas y avoir de rebond sur un contacteur.

DAQmxRegisterEveryNSamplesEvent( Task,DAQmx_Val_Acquired_Into_Buffer, 1, Option=0, CALLBACK, &CALL_DATA);

 

Le CALLBACK:

 

- lire la première valeur dans le buffer

- lire l'état de PFI0 et PFI1 sur une tâche entrée digitale

- assigner le résultat à Tstart si une des entrées PFI0 ou PF1 n'a pas encore été activée

- assigner le résultat à Tstop si une des entrées PFI0 ou PF1 n'a pas encore été activée

 

la lecture entre les deux événements aléatoires est alors T = (Tstop-Start) / 20.10E6.

 

Cette solution a l'air de marcher, mais j'ai des doutes quant à la précision de la mesure et la robustesse de la méthode?

( Le mécanisme utilisé est-il de type latch ? Comment être sûr de lire les entrées digitales au bon moment et Quel est le délai du CALLBACK, DMA<IRQ? )

 

Merci.

 

 

0 Kudos
Message 8 of 12
(5,351 Views)

Bonjour,

Avec cette méthode votre lecture de PFI0 et PF1 est logicielle, votre précision va fortement de votre OS et de sa charge de travail. 

Le cadencement logiciel a généralement une précision de 1ms avec un OS temps réel.

Hors je ne pense pas que votre OS soit temps réel, donc vous risquez d'avoir un fort jitter en fonction de la charge de votre OS.

Cordialement 

Yann C.

France

0 Kudos
Message 9 of 12
(5,345 Views)

Bonjour et merci pour l'intérêt que vous portez à ce problème.

 

Malheureusement le nombre de tâches compteur est limitée à 4 et je dois réaliser de nombreuses mesures au même moment :

 

- Mesure du temps entre les deux contacteurs.

- Mesure sur un codeur incrémental entre les deux contacteurs.

- Mesure du temps entre

  • la première impulsion du codeur suivant le premier contacteur,
  • la première impulsion du codeur suivant le deuxième contacteur.

- ...

 

Le but est de réaliser une interpolation des impulsions du codeur,

afin d'augmenter la résolution de l'acquisition du codeur entre les deux contacteur.

 


 

0 Kudos
Message 10 of 12
(5,339 Views)