08-04-2009 07:29 AM
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
08-05-2009 03:11 AM
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
08-05-2009 03:58 AM
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
08-05-2009 04:32 AM
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.
Pouvez vous me dire que vos x au minimum pour vos signaux.
Merci
Cordialement
Yann C.
France
08-05-2009 05:18 AM
Le problème se pose comme ceci :
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
08-05-2009 08:54 AM
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
08-06-2009 04:07 AM
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
08-06-2009 05:40 PM
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);
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.
08-07-2009 02:48 AM
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
08-07-2009 04:44 AM
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
- ...
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.