EDIT : I didn't post my message on the French Forum as I wanted to do, sorry for that. I've asked a moderator to delete this message.
Bonjour,
Cela fait deux jours que je bloque sur un problème, je me tourne donc vers le forum pour trouver une solution.
Contexte : J’utilise un châssis cDAQ-9188, avec un module d’écriture analogique (AO) NI-9264, et un module de Communication CAN XNET NI-9862. Le module d’écriture analogique est câblé vers un calculateur embarqué (ECU), pour le commander, à l’aide d’un signal carré 0-5 V qui varie en fréquence (signal PWM).
L’ECU lis le signal carré, et extrait sa fréquence. Cette fréquence lue par l’ECU est ensuite transmise par l’ECU sur le BUS CAN.
J’utilise LabView 2014, et DAQmx v14.
Mon problème : Je veux générer le signal carré avec une fréquence que je pourrai contrôler en face avant de mon VI. La gamme de fréquence s’étend de 0 Hz à 1600 Hz.
J’utilise donc le VI DAQmx Write, sur une tâche AO Tension, dans une boucle while, avec le VI Générateur de fonction élémentaire qui me génère mon signal à chaque itération.
En guise d’indicateur, je lis le signal sur le bus CAN et je l’affiche sur un Graphe XY qui défile avec le temps (voir VI ci-joint).
Comme vous pourrez le voir sur le screenshot n°1, mes points de mesure de la fréquence varient entre deux valeurs, alors que ma commande de fréquence est fixe … A noter que plus on se rapproche d’une commande en fréquence haute, plus l’écart est grand.
Je précise que l'ECU lis parfaitement la fréquence et retourne une seule valeur de fréquence constante quand j'utilise un GBF pour générer mon signal carré.
Je pense que ceci vient du fait de l’échantillonnage : certaines fréquences ne peuvent pas être échantillonnées correctement suivant la fréquence d’échantillonnage.
Exemple : Echantillonnage à 10 Khz donc chaque échantillon sera séparé par un temps dt = 0.1 ms. Pour un signal à 1.6 Khz, donc de période T = 0.625 ms, j’aurais 6 échantillons par période (3 échantillon à 5 V et 3 à 0 V), et j’aurais donc 0.025 ms qui « ne seront pas échantillonnés ».
Est-ce que c’est bien la source de mon problème ici ?
En première solution, je me suis dit que j’allais échantillonner à une fréquence d’échantillonnage Fe = 10 * f, avec f la fréquence voulue de mon signal carré, ce qui m’assurera toujours un échantillonnage parfait. En appliquant ce principe je réduis très significativement l’écart de fréquence lu sur mon graphe (voir screenshot 2).
Evidemment, faire varier ma fréquence d’échantillonnage me pose un autre problème : quand je dois générer une fréquence basse, ma fréquence d’échantillonnage devient également basse, et la génération prend du temps. Ainsi je perds en réactivité, il faut attendre plusieurs secondes pour qu’une nouvelle commande de fréquence soit prise en compte, et ceci ne sera pas compatible pour la suite de mon projet.
Avez vous des piste à me proposer pour corriger la génération du signal carré tout en gardant un temps de réponse < 0.5 seconde ?
Merci d'avance.