LabVIEWForum.de - Zeitmessung mittels Lichtschranke

LabVIEWForum.de

Normale Version: Zeitmessung mittels Lichtschranke
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
hallo!!!
ich bin Schüler an der HTL Hollabrunn (NÖ) und muss im Rahmen eines Schulprojektes eine Zeitmessung mittels Lichtschranke verwirklichen!!!
Ich arbeite mit einem Datenerfassungsgerät von National Instruments mit einer USB 6008 Schnittstelle!!

Jetzt hat sich das Poblem ergeben, dass ich zwar digitale Signale in LabVIEW einlesen kann aber keine Ahnung davon habe wie ich eine "Zeitfunktion bzw. Zeitmessung" in LabVIEW erstellen kann und wie ich die digitalen Signale in diese Zeitfunktion einbaue Sad

Kann mir vielleicht irgendjemand helfen bzw. Tipps geben weil ich brauche wirklich dringend Hilfe!!!!!!!!!!!!

Ich geb euch mal die Datei mit der Ich gerade arbeite!!!

Viele Dank bereits im Vorraus!!!! Big GrinLol

Lv71_img
zunächst einmal würde ich das nicht über einen digitalen Eingang am 6008 realisieren, sondern über einen Analog-Eingang. Die DIOs muss man nämlich in Software pollen, und da wäre die theoretisch maximale "Abtastrate" 1 kHz, was aber auch nicht das gelbe vom Ei ist, weil man dann eine Schleife in SW-getaktet mit 1000 Hz laufen lassen müsste, und das ist auf einem "normalen Desktop PC" nicht wirklich eine elegante Lösung.

Bei den analogen Eingängen kann man die Geräte-eigene Hardware Clock verwenden und das sind zumindest 12 kHz, wenn du's einfacher haben willst mit dem Rechnen kannst du eine 10 kHz Clock verwenden und hättest dann eine Auflösung für die Zeitmessung von 100 µs (=0,1 ms) und das ist ja schonmal gar nicht so schlecht.

Vorgehensweise: erstelle eine kontinuierliche analoge Erfassung mit einem Kanal, mit einer Blockgröße von 1000 Werten und einer Abtastrate von 10 kHz. Wenn du dafür ein Beispiel brauchst kannst du das hier verwenden: http://forum.ib-berger.com/index.php?showtopic=64. Aus der Abtastrate in Verbindung mit der Blockgröße ergibt sich automatisch eine Schleifen-Durchlaufzeit für deine Erfassung von 100 ms. In diesen 100 ms holst du immer einen 1000er Block Werte ab und prüfst, ob bestimmte Bedingungen eingetreten sind. Die analogen Signale kannst du dabei relativ einfach in digitale Signale umwandeln: wenn der analoge Wert kleiner 0,8 ist, ist es ein digital LOW (gem. der Spezifikation für ein TTL Signal), wenn der Wert größer 2 Volt ist, handelt es sich um ein digital HIGH. Für die Zeitmessung brauchst du noch eine Variable ("Zähler"), in der du mitzählst, wieviel Samples du bereits verarbeitet hast.

Die Zeitmessung realisierst du, in dem du dir immer den letzten Zustand des digitalen Signals merkst und bei jedem Übergang von HIGH nach LOW (und umgekehrt) die Anzahl der verarbeiteten Samples (gemäß der Variable "Zähler") mit 1/Sample-Rate multiplizierst und anschließend den Zähler zurücksetzt.

Vielleicht willst du die Signale noch entprellen, das würde ich über eine kleine Funktion realisieren, die einen gleitenden Mittelwert mit einer Länge von. z.B. 5 ms über das analoge Signal legt, dann bekommst du auf jeden Fall reproduzierbare Flankenwechsel.
Du schreibst leider überhaupt nichts über die Größenordnung der zu messenden Zeit und die geforderte Präzision der Messung. Davon hängt aber die Art der Realisierung entscheidend ab.
Mit Deinem Vorschlag, wenn man ihn denn zum Funktionieren bringt, wäre die Zeitmessung nur auf ca. 20ms genau. Wesentlich besser ist da schon der Vorschlag von i2dx.
Fast alle Iniversal-Messkarten von NI haben universell verwendbare Timer-Funktionen eingebaut, mit denen man u.a den Abstand zweier Flanken auf gleichen oder getrennten Leitungen mit bis zu 20Mhz-Genauigkeit (0.05us) ohne zusätzliche Hardware messen kann.
Die USB-6008 hat jedoch nur einen einfachen Zäher zum Zählen von Impulsen bis zu 5 MHz.
Das ist immerhin besser als gar nichts. Falls Du also noch bessere Genauigkeiten anstrebst, denn geht das schon, aber nur mit etwas zusätzlicher Hardware auf einem kleinem selbstgestrickten Platinchen. (Die 5 Volt dafür gibt es aus der USB 6008). Die Schaltung würde bestehen aus Quarzoszillator, RS-FlipFlop und Gate.
Wenn Du nlcht auf solche Basteleien eingestellt bist, dann vergiß es.
hallo!!
ich bedanke mich vielmals für eure antworten und ich habe versucht einige vorschläge von euch umzusetzen (so weit es mein "anfängerwissen" zugelassen hat ^_^
nun hat sich folgende situation ergeben das ich ein "einfaches" programm geschrieben habe und einige parts aus dateien des forums genommen habe.... jedoch ergeben sich probleme beim starten der schleife weil die schleife irgendwie willkürlich startet und ich leider das problem nicht lokalisieren kann!!
könntet ihr mir vielleicht helfen aber es steht euch natürlich frei ob ihr dazu ein statement abgeben wollt!!

ich würde mich echt über jede noch so kleine hilfe freuen und wenn euch etwas nicht klar sein sollte, fragt einfach!!

vielen, vielen dank!!!!!!

Lv71_img
Hallo xxmike888xx,
ich empfehle das Erzeugen des Kanals und das Zerstören des Tasks außerhalb der Schliefe zu machen. "Create" davor und "Destroy" danach. Desweiteren sollten die Schieberegsiter initialisiert werden. Wink

Bitte gib bei deinen VI´s die Version mit an! DANKE

Mike
' schrieb:könntet ihr mir vielleicht helfen aber es steht euch natürlich frei ob ihr dazu ein statement abgeben wollt!!
ich würde mich echt über jede noch so kleine hilfe freuen und wenn euch etwas nicht klar sein sollte, fragt einfach!!

ich hab mir dein VI mal angeschaut und mein Statement dazu ist:

nimm einfach das Beispiel, dass ich in meinem letzten Post genannt habe als Grundlage, und ersetze die Logik in der For-Schleife (die dient dazu die Abschnitte in einen Ring-Speicher einzufügen, aber das brauchst du für deine Aufgabe nicht ...) durch die Logik zum Messen der Zeit und feddich is die Laube ...
Referenz-URLs