19.11.2007, 16:41
Beitrag #1
|
monoceros84
LVF-Stammgast
Beiträge: 445
Registriert seit: Oct 2006
2011
2006
EN
Deutschland
|
AI und DI synchronisieren
Hallo,
ich habe eine entscheidende Hürde zu meistern. Ich muss analoge und digitale Messungen synchronisieren. Hintergrund: Es sind mehrere Tests zu automatisieren, die ähnlich zum Folgenden aussehen. Die Spannung eines Potentiometers (das von einem konstanten Strom durchflossen ist), was an einem Motor befestigt ist, soll über einer kompletten Motorumdrehung geloggt werden. Die Motorposition bekomme ich von einem Encoder, der mittels eines Counters und Position -> Angular Encoder oder wahlweise auch Edge Counting ausgelesen wird.
Nun muss ich also die analoge Messung nicht mit einer Zeit synchronisieren, sondern mit einem Ort. Einer konstanten Umdrehungsgeschwindigkeit (die eine Zeit/Ort-Zuordnung ermöglichen würde) kann ich nicht ausreichend genau trauen. Deswegen muss das irgendwie ander vonstatten gehen.
Meine Idee wäre zunächt mal, die analogen Messungen mit den Encoder-Pulsen zu triggern. Nachteil: Ich habe keine Ahnung, wie ich das Anstellen soll. Die einzige Triggermöglichkeit, die ich bisher kenne ist, mit Hilfe des DAQmx Trigger.vi eine Messung zu starten. Danach kann man stoppen und mit Start auf den nächsten Trigger warten (oder alternativ einfach das Read.vi nochmal aufrufen). Dieses Software Stop/Start ist aber mit Sicherheit viiieeel zu langsam. Die Encoderauflösung liegt immerhin bei 12bit nach 4-Flanken-Auswertung. Eine entsprechend langsame Verfahrgeschwindigkeit ist auch keine Option. Gibt es die Möglichkeit, mit jedem Triggerpuls automatisch ein Sample zu messen, ohne zwischendurch per Software einzugreifen?
Zweite Möglichkeit, bei der ich aber ebenfalls nicht weiterkomme. AI wird mit fester Rate gemacht, das Auslesen des Counterwertes erfolgt im gleichen Takt, so dass ich ebenfalls synchrone Daten habe. Bedingung hier auch wieder: Kein Eingreifen der Software (wie z.B. indem die Read-Funktionen parallel in einer software-getimten Schleife liegen), weil zu langsam und ungenau.
Kann mir hier einer weiterhelfen? Kann man Sample Clock auf Counter-Read anwenden oder Implicit auf Analog-Read...??? Oder gibt es eine ganz andere Möglichkeit?
Danke für Ideen!
|
|
|
19.11.2007, 16:56
Beitrag #2
|
|
|
19.11.2007, 19:48
(Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2007 19:49 von jg.)
Beitrag #4
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
AI und DI synchronisieren
' schrieb:Dein erster Vorschlag interessiert mich aber mehr: Synchronisieren auf Externe Clock geht, hab ich auch schon gefunden. Das macht man mit dem DAQmx Timing (Sample Clock) und Anlegen eines Signales an den Input dieses VIs. Das Clock-Signal könnte dann das Encoder-Signal sein. ABER: Das erfordert ebenfalls ein Anschließen des Rate-Eingangs. Meines Erachtens versucht das VI dann nur, die unter Rate spezifizierte Zeit mit Hilfe der externen Clock einzuhalten. Ich möchte aber nunmal keine Zeit, sondern einfach alle Pulse. Die Zeit soll sich nach der externen Clock richten. Wenn man das irgendwie einstellen könnte, wäre ich glücklich
NEIN!!! Hast du schon ausführliche Hilfe zum Timing-VI gelesen?
' schrieb:rate - specifies the sampling rate in samples per channel per second. If you use an external source for the Sample Clock, set this input to the maximum expected rate of that clock.
Das dient nur dazu, die DAQ-Karte auf entsprechende Timings vorzubereiten. Die Daten werden bei externer Clock wirklich erst gewandelt, wenn du einen Impuls bekommst. Man kann sogar noch weiter gehen, und meinetwegen mit Hilfe der Counter auf einer DAQ-Karte nur bei jedem 10. Puls eine AD-Wandlung durchführen. Mach ich dauernd, funktioniert.
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
20.11.2007, 09:25
Beitrag #5
|
monoceros84
LVF-Stammgast
Beiträge: 445
Registriert seit: Oct 2006
2011
2006
EN
Deutschland
|
AI und DI synchronisieren
Natürlich habe ich die Hilfe gelesen. Das Problem war nur, wenn ich es so gemacht habe, hat er zwar mit der ersten Messung gewartet, bis ein Impuls kam, aber danach ging es unabhängig vom Signal mit hoher Rate und kontinuierlich weiter, selbst wenn ich Finite Samples=2 gewählt habe...
Trotzdem danke für's nochmal drauf stoßen, Ich habe jetzt mal den Sample Mode 'Hardware Timed Single Point' probiert, der tut's. Irgendwie kam ich vorher nicht auf die Idee, das zu verwenden, weil dazu in der Hilfe was von kontinuierlicher Messung und bufferlos steht, was für meine Zwecke ungeeignet klang. Aber kontinuierlich ist hier so zu verstehen, dass beliebig viele Messwerte aufgenommen werden können - das warten auf die Clocksignale geschieht immer wieder, bis man den Task beendet.
|
|
|
12.02.2008, 22:29
Beitrag #6
|
BRX
LVF-Neueinsteiger
Beiträge: 8
Registriert seit: Feb 2008
8.5
2008
kA
8915
Schweiz
|
AI und DI synchronisieren
' schrieb:NEIN!!! Hast du schon ausführliche Hilfe zum Timing-VI gelesen?
Das dient nur dazu, die DAQ-Karte auf entsprechende Timings vorzubereiten. Die Daten werden bei externer Clock wirklich erst gewandelt, wenn du einen Impuls bekommst. Man kann sogar noch weiter gehen, und meinetwegen mit Hilfe der Counter auf einer DAQ-Karte nur bei jedem 10. Puls eine AD-Wandlung durchführen. Mach ich dauernd, funktioniert.
MfG, Jens
Daten erfassen mit externem Takt ist mir gelungen, aber wie ich den counter brauche, um den externen Takt zu untersetzen (was bei Dir offenbar funktioniert), ist mir noch unklar: welcher Task braucht welche Einstellungen? (LabVIEW 8.5, USB-6218).
Vielen Dank!
Windows XP, LabView 8.5, DAQ USB-6218
|
|
|
13.02.2008, 07:32
Beitrag #7
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
AI und DI synchronisieren
Die Methode den AI auf eine Spur des Encoders zu triggern verwende ich in Real Life relativ selten, denn dabei geht die Zeit-Information des AI-Kanals verloren bzw. wird mehr oder weniger stark verschleiert. Wenn man die Zeit-Information nicht braucht, ist das okeh aber wenn ich die Zeit brauche, dann mache ich folgendes (entsprechende Hardware vorausgesetzt):
ich erzeuge mit mit einem Counter meinen eigenen Mess-Task und route den auf einen RTSI/PXI-Pin, z.B. 1000 Hz auf RTSI0. Die Wahl des Messtaktes hängt stark von der höchsten Frequenz der Encoder-Pulse ab, wenn man für jeden Puls später ein Sample haben will sollte die Abtastfrequenz min. Faktor 3 betragen
meinen Messtakt verwende ich als externen Takt für meinen AI und Encoder task, beide Tasks werden z.B: über den Z-Impuls des Encoders gemeinsam gestartet und erfassen ab da continuierlich Messdaten bis zum Abbruch der Erfassung.
Aus den so erfassten Daten kann mann man dann wiederum auf "Sample on Tic" zurückrechnen, in dem man beide Arrays (Zählerstand und AI-Samples) durch eine For-Schleife jagt, die das AI-Array so dezimiert, dass nur die Samples übrig bleiben, bei denen sich der Zählerstand geändert hat ...
|
|
|
13.02.2008, 19:16
Beitrag #8
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
AI und DI synchronisieren
Hallo,
das Bsp. aus dem NI-Examplefinder hierzu sind die Digital Pulse Trains:
Die muss man nur entsprechend umbauen, z.B. etwas in der folgenden Art:
Dann noch beim AI-Read als Zeitbasis den InternalCounterOutput des entsprechenden Counters nehmen, fertig.
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
14.02.2008, 12:39
Beitrag #9
|
BRX
LVF-Neueinsteiger
Beiträge: 8
Registriert seit: Feb 2008
8.5
2008
kA
8915
Schweiz
|
AI und DI synchronisieren
' schrieb:Hallo,
das Bsp. aus dem NI-Examplefinder hierzu sind die Digital Pulse Trains:
[attachment=38279:Image01.png]
Die muss man nur entsprechend umbauen, z.B. etwas in der folgenden Art:
[attachment=38280:Image02.png]
Dann noch beim AI-Read als Zeitbasis den InternalCounterOutput des entsprechenden Counters nehmen, fertig.
MfG, Jens
Vielen Dank, das hat mir sehr geholfen.
B
Windows XP, LabView 8.5, DAQ USB-6218
|
|
|
15.02.2008, 14:29
(Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2008 14:31 von abrissbirne.)
|
|
|
| |