Bonjour à tous
Depuis un certain temps, j'essaie de générer une fréquence de 50Hz 3V et de 30Hz 3V à l'aide de la carte NI 6251 (USB) en VB.net.
La fréquence de 50Hz 5V est générée à partir de l'ouverture de mon formulaire.
La fréquence de 30Hz 3V est générée lors de l'appui sur un bouton.
Lors de l'appui sur le bouton, la fréquence est modifiée directement mais l'amplitude du signal est mise à jour après plus de 2 secondes (Voir attachement signal oscillo).
Si on stoppe la tache avant d'écrire à nouveau dans le buffer et ensuite re-démarrer la tache, le signal de sortie reste +/- 25ms à un niveau de tension continu.
Dans mon application, je ne peux me permettre cet arrêt.
Voici mon programme en VB.net :
Imports NationalInstruments.DAQmx
Public Class Form1
Dim myTaskU12 As Task
Dim myAnalogWriterU12 As AnalogSingleChannelWriter
Dim DataSinus(99) As Double
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Crée la tache pour la gestion de la tension sinusoidale +/-5V max 50Hz
Try
myTaskU12 = New Task()
'Crée un canal virtuel pour la gestion de la tension sinusoidale
myTaskU12.AOChannels.CreateVoltageChannel("NIH3994/ao0", "", -10, 10, AOVoltageUnits.Volts)
'Verifie la tache
myTaskU12.Control(TaskAction.Verify)
'Calcul la sinusoïde avec une amplitude de 5V max
For nbCount As Integer = 0 To DataSinus.GetUpperBound(0)
DataSinus(nbCount) = 5 * Math.Sin((2 * Math.PI) * nbCount * (1 / DataSinus.GetUpperBound(0)))
Next
myTaskU12.Timing.ConfigureSampleClock("", 5000, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples, DataSinus.Length)
myAnalogWriterU12 = New AnalogSingleChannelWriter(myTaskU12.Stream)
myAnalogWriterU12.WriteMultiSample(False, DataSinus)
myTaskU12.Start()
Catch ex As DaqException
MessageBox.Show(ex.Message)
myTaskU12.Dispose()
myTaskU12 = Nothing
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'+/-3V max 30Hz
'Calcul la sinusoïde avec une amplitude de 3V max
For nbCount As Integer = 0 To DataSinus.GetUpperBound(0)
DataSinus(nbCount) = 3 * Math.Sin((2 * Math.PI) * nbCount * (1 / DataSinus.GetUpperBound(0)))
Next
myAnalogWriterU12.WriteMultiSample(False, DataSinus)
'Modifie la fréquence d'échantillonnage
myTaskU12.Timing.SampleClockRate = 3000
End Sub
End Class
Quelqu'un peut-il m'aider a résourdre se problème.
Merci
Jacky