Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich verwende zum Ersten Mal eine DAQ-Karte (NI-PCI 6229) und hoffe Ihr könnt mir bei meinem Problem helfen. Ich benutze eine Kamera um Laserpulse aufzunehmen. Dazu steht ein externes Triggersignal (etwa 100Hz) zur Verfügung. Leider ist die maximale Framerate deutlich unterhalb dieser 100Hz. Nun möchte ich das externe Triggersignal mit der DAQ-Karte einlesen, die Pulsrepititionsrate verringern und wieder ausgeben. Sinn der Sache ist es also, aus einem 100Hz Trigger z.B einen 10Hz Trigger zu machen, mit dem die Kamera wieder vernünftig arbeiten kann.
Ich verwende momentan das Labview Example "Read_Dig_Chan.vi" um das Triggersignal einzulesen. Das klappt soweit auch ganz gut. Nur wie kann ich jetzt aus dem 100Hz Signal ein 10Hz machen?
Die Idee klingt schonmal recht gut. Mittlerweile kann ich auch schon den Counter-Eingang der DAQ-Karte verwenden. Wenn ich es richtig verstanden habe, soll ich den Zähler abfragen und bei jedem Vielfachen von 10 (also 10, 20, 30...) z.B eine Case-Struktur auf True schalten, die dann wiederum auf einen Digitalen Ausgang schreibt. Oder sollte ich hier besser mit einer Event-Struktur arbeiten?
Egal wie, ich scheitere allerdings schon an der Abfrage ob der Zähler gerade ein Vielfaches von 10 ist. Klingt zwar eigentlich nicht schwer, ich weiß aber wirklich nicht wie ich das anstellen soll.
Super, hat wunderbar funktioniert. Danke! Statt dem 100Hz Signal bekomme ich nun ein 10Hz Signal.
Leider ist mir aufgefallen, dass ab und zu ein Puls "verloren" geht. D.h. statt einer Periodendauer von 100ms (entspricht den 10Hz) kommt es gelegentlich vor, dass 200ms zwischen zwei Pulsen vergehen. Weiß jemand woran das liegen könnte? Sind die 100Hz Eingangsignal vielleicht zu schnell, so dass bereits da mal ein Puls nicht gezählt wird?
17.01.2012, 10:53 (Dieser Beitrag wurde zuletzt bearbeitet: 17.01.2012 10:54 von eb.)
Ich bin mir jetzt nicht 100%sicher, aber hier meine Vermutung: Der ausgelesene CounterWert ist eben nicht immer ohne Rest teilbar, weil das SoftwareTiming nicht ganz exakt ist, schon gar nicht bei 5ms-Schleifenzeit. Ich würde das "Quotient and Remainder" mal testweise so ersetzen:
ist das besser; gehen so auch noch Pulse verloren?
Gruß
Edit: Ich wollte mal loswerden, dass dein VI eine saubere Struktur hat! So lässt sich sehr schnell alles erfassen und verstehen, sehr gut!
Die Änderungen bringen leider keine Verbesserung. Es werden immernoch Pulse ausgelassen. Trotzdem vielen Dank für die Mühe, einen Versuch war es auf jeden Fall wert!
Ich habe auch schon versucht, die Wiederholrate der Schleifen (Momentan 5ms) zu ändern bzw. ganz wegzulassen: Keine Verbesserung.
Statt einer Lösung ist mir ein weiteres Problem aufgefallen:
Die Pulse des 10Hz Signals müssen genau mit denen des 100Hz Signals übereinstimmen. Wir wollen schließlich eine Kamera triggern, die relativ schnelle Laserpulse aufnimmt. Gibt es eine möglichkeit die Signale zu synchronisieren? Hab an einer anderen Stelle gelesen, dass Kanäle, die zu einem Task zusammengeführt sind, immer synchron laufen. Kann mir jeamnd dazu genaueres sagen?
standardmäßig sind alle Kanäle eines Tasks synchronisiert.
Aber: Du kannst nicht erwarten, dass das 100Hz-Signal exakt synchron mit dem 10Hz-Signal ist, wenn du das 100Hz-Signal erst misst, dann mit Software verarbeitest und dann wieder ausgibst als "Pseudo-10Hz-Signal". Wie gesagt, Software-Timing ist halt so eine Sache.
Wenn du synchron sein willst, dann würde ich vorschlagen:
Du erstellst einen Erzeuger-Task, mit Externer Triggerung (100Hz-Signal). Also bei exakt irgendeiner Flanke des 100Hz-Signals startet die AnalogeAusgabe deines 10Hz-Signals. Das ist schon ziemlich synchron dann... nach einer Weile (k.A. vllt. 1Tag) driften sie auseinander (µs-Bereich), weil die Clock der DAQ-Karte eben nicht 100% der Clk des 100Hz-Signals entspricht, weil eben auch diese Clks nicht zueinander synchronisiert sind
Es fragt sich, woher das 100Hz-Signal eigentlich kommt. Wenn es auch über dein Programm erzeugt wird, dann ließe es sich "noch synchroner" hinbekommen. (Durch Synchronisierung der Clks)