LabVIEWForum.de
Hohe Abtastung aber nur bestimmte Werte nutzen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Hohe Abtastung aber nur bestimmte Werte nutzen (/Thread-Hohe-Abtastung-aber-nur-bestimmte-Werte-nutzen)

Seiten: 1 2 3 4


Hohe Abtastung aber nur bestimmte Werte nutzen - cb - 30.07.2009 20:41

' schrieb:ok...
du hast mir ja schon mal den tipp gegeben
dann berechne ich mir meine winkelgeschwindigkeit und rechne dies in eine Drehzahl um?! Was meinst du mit einer Mittelung von 250ms? kannst du mir ein Beispiel zeigen? (nein ich bin nicht faul aber ich würde es gerne richtig machen und denke dass du sehr sehr fit bist in LabVIEW deinen beiträgen nachWink)
bei einer winkelmessung wird doch beispielsweise bei 0° angefangen und wenn die Messwelle jetzt fröhlich vor sich her dreht wird der winkel doch irgendwann sehr sehr groß oder nicht? hat das irgendwelche auswirkungen auf eine kontinuierliche messung?

danke gruß johannes

Mittlungszeit von 250 ms aus folgendem Grund:

man hat bei entsprechender Drehzahl eine relativ hohe Frequenz der Pulse, die am Counter Eingang reinkommen, d.h. der Zähler zählt relativ schnell hoch, die Abtastrate ist aber auch relativ schnell drum kann es vorkommen, dass man einige wenige Pulse durch eine sehr kurze Zeit dividiert, was sich dann als stark schwankendes Drehzahl-Signal bemerkbar macht, weil ein Tick mehr oder weniger durch eine Millisekunde (z.B.) auf Umdrehungen pro Minute doch einiges ausmacht.

Ganz deutlich wird das wenn du dir vorstellst, deine Encoder Pulse kommen mit 500 Hz am Counter-Eingang an und du misst mit 1000 Hz. Dann ist jeder 2. Zähler-Wert um einen Encoder-Tick größer als der vorletzte gefolgt von einem Winkel der genau so groß ist wie der letzte (usw) und das bedeutet z.B. bei einem 360 Striche Encoder dass du alle Millisekunde eine Schwankung von 1° pro ms = 1000° pro Sekunde = 60000° pro Minute = 166 U/min misst, die tatsächlich gar nicht vorhanden ist ... (und das bei 500 Tics/sec ~ 83 U/min - bei einem 360' Encoder ...)

==> Auch bei einer absolut stabilen, gleichmäßigen Drehzahl bekommt man - wenn man jeden Tic durch die Zeit teilt - eine ziemliche Streuung in seine Messung und das will man ja eigenltlich nicht sehen. Darum mache ich das immer so: ich zähle alle Tics über meine Mittelungszeit (z.B. 250 ms) und dividiere diese durch die Mittelungszeit => ich bekomme 4 mal pro Sekunde einen neuen Wert für die Drehzahl und nicht pro Sekunde (z.B.) 1000 stark schwankende Drehzahlwerte.

Realisieren kann man das z.B. über einen Ring-Puffer der Mittlungszeit durch Sample-Rate Werte groß ist. Wenn der Puffer voll ist wird der neue Drehzahl-Wert berechnet ... Wenn du die Drehzahl tatsächlich mit einer sehr hohen Abtastrate ausgeben willst hilft dann eigentlich nur über die Mittelungszeit interpolieren ...

Wenn du den Encoder-Task als Winkel-Messung implementiert hast bekommst du einen Double als Wert raus. Der kann glaub ich bis irgendwas mal 10 hoch 133 groß werden oder so => bis der Zahlenwert erreicht ist hast du bestimmt entweder mal den Prüfstand ausgeschaltet oder nen Lagerschaden im EncoderBig Grin... falls du trozdem noch Angst hast kannst du den Prüfstand ja ab und zu mal rückwärts laufen lassenBig Grin


Hohe Abtastung aber nur bestimmte Werte nutzen - johannes_r - 30.07.2009 21:00

ok vielen dank schonmal...
wenn ich über 250ms mittle würde das ja heißen dass ich neue werte nur mit 4Hz bekomme oder? wenn ich nen drehzahl sprung von 0-6000 in einer sekunde habe ist das ja nicht so schön oder? eine mittelung ist schon möglich aber glaub nicht über eine "so lange" zeit. irgendwie sitz ich leider auf´n schlauch wie ich das anstellen kann...ich versuche mal umzusetzen was du geschrieben hast.
wie konfigurierst du deinen task? winkelmessung, zählermessung? vielleicht kannst du doch mal ein beispiel posten Rolleyes

bin leider nicht so tief in der LabVIEW materie drin, hoff es kommt nochWink

danke gruß
johannes


Hohe Abtastung aber nur bestimmte Werte nutzen - cb - 01.08.2009 07:21

' schrieb:ok vielen dank schonmal...
wenn ich über 250ms mittle würde das ja heißen dass ich neue werte nur mit 4Hz bekomme oder? wenn ich nen drehzahl sprung von 0-6000 in einer sekunde habe ist das ja nicht so schön oder? eine mittelung ist schon möglich aber glaub nicht über eine "so lange" zeit. irgendwie sitz ich leider auf´n schlauch wie ich das anstellen kann...ich versuche mal umzusetzen was du geschrieben hast.
wie konfigurierst du deinen task? winkelmessung, zählermessung? vielleicht kannst du doch mal ein beispiel posten Rolleyes

bin leider nicht so tief in der LabVIEW materie drin, hoff es kommt nochWink

danke gruß
johannes

wenn du tatsächlich einen sehr genauen Drehzahl-Verlauf brauchst musst du seeeeeehr schnell messen.

Die Konfiguration der AI-Tasks hab ich schon gepostet, ebenso die Konfiguration des Pulse-Out-Tasks. Zum Encoder-Task hast du ja schon was gepostet, im Prinzip mach ich das genauso, nur dass ich nicht Frequenz auswählen sondern "Circular Encoder" ...

Kann es sein dass du einen transienten Vorgang aufzeichen willst, also z.B. einen Hochlauf über 1 Sekunden von 0 auf 6000 U/min? Wieviel Striche hat dein Encoder?


Hohe Abtastung aber nur bestimmte Werte nutzen - johannes_r - 01.08.2009 09:39

ja genau. der ablauf der messung soll folgendermaßen sein...
-rampe einstellen zb hochlauf auf 6000u/min in bspw 2s.
-parallel dazu ebenfalls eine last aufbringen
-einige sekunden drehzahl halten mit entsprechneder last
-runterfahren der drehzahl...

so in etwas kann man sich die messung vorstellen.

der encoder hat eine auflösung von 360 Implusen/umdrehung.
ich hab bei ni ein beispiel gefunden "sync_ai_counter input" (glaub so hieß es) bin aber nicht so sehr zufrieden damit weil die drehzahl sehr schwankt bei höheren drehzahlen...
den versuch über die winkelmessung zu gehen hab ich versucht aber ich bin irgendwie unfähig die auswertung der daten durchzuführen:)so dass ich auf eine drehzahl komm...theoretisch weiß ich wie´s geht aber programmatisch bekomm ich´s nicht hin...

vielen dank fürs fleißige antworten:)hoff ich hab bald mal ne lösung zu meinem problem...glaub es ist garnicht so möglich zu machen was ich will:Dbzw nicht als anfängerWink

gruß johannes


Hohe Abtastung aber nur bestimmte Werte nutzen - cb - 01.08.2009 11:17

' schrieb:ja genau. der ablauf der messung soll folgendermaßen sein...
-rampe einstellen zb hochlauf auf 6000u/min in bspw 2s.
-parallel dazu ebenfalls eine last aufbringen
-einige sekunden drehzahl halten mit entsprechneder last
-runterfahren der drehzahl...

so in etwas kann man sich die messung vorstellen.

der encoder hat eine auflösung von 360 Implusen/umdrehung.

...glaub es ist garnicht so möglich zu machen was ich will:Dbzw nicht als anfängerWink

ich denke mit einem 360 Striche Encoder wirst du einen transienten Vorgang nicht wirklich gut online auswerten können, man kann sich aber durchaus einen Algorithmus vorstellen, der im Nachhinein aus den ermittelten Daten was brauchbares rausrechnet ...


Hohe Abtastung aber nur bestimmte Werte nutzen - johannes_r - 01.08.2009 13:17

also ich fasse mal zusammen...

Zitat:ich denke mit einem 360 Striche Encoder wirst du einen transienten Vorgang nicht wirklich gut online auswerten können, man kann sich aber durchaus einen Algorithmus vorstellen, der im Nachhinein aus den ermittelten Daten was brauchbares rausrechnet

würde heißen ich muss entweder irgendwie die flanken auswerten bzw die winkelposition?! Hier kann man ja die Abtastrate einstellen und und sich eine bestimmte anzahl an werten als array schicken lassen...soweit so gut...aber letzt endlich wertet eine frequenzmessung bzw perioden oder flankenabstandsmessung auch nur flanken aus, was heißt, eigentlich hab ich ja in beiden fällen nicht mehr oder weniger information...
wenn ich das mal so beurteile was ich bis jetzt so erfahren habe, ist es eigentlich schwer zu realisieren was ich vor habe oder? denkbar wäre auch die analogwerte mit bspw 50kHz zu erfassen und immer 500 werte lesen (sollte doch mit pxi möglich sein oder ist das schon grenzwertig) mit diesen einstellungen überbrücke ich 10ms. für jedes datenpaket lese ich einmal die drehzahl oder einen mittelwert dieser 10ms. ich finde nämlich die funktionen von daqmx besser als irgendwas selbst zusammen geschustertes oder?
was meint ihr dazu?oder kennt doch jemand eine möglichkeit die mich glücklich machen würdeSmile

gruß johannes


Hohe Abtastung aber nur bestimmte Werte nutzen - cb - 01.08.2009 15:04

ich würd das in dem Fall so machen:

2 Messtakte: einen schnellen für die Encoder-Abtastung, einen "langsamen" für die Analog-Werte

der "schnelle Task" sollte nicht weniger als 250 kHz haben und sollte ein vielfaches des "langsamen" Taktes sein.

Gestartet wird wie bisher auch über einen gemeinsamen Start-Trigger, nur halt mit dem Unterschied dass der Encoder-Task sehr viel schneller abgetastet wird als die analogen Eingänge.

Da deine Messung nur eine bestimmte Zeit lang läuft wird erstmal alles was so an Daten reinkommt zwischengespeichert. Wenn die Messung beendet ist rechnest du die Encoder-Daten auf die Abtastrate der Analog-Eingänge "zurück" und zwar in der Gestalt, dass du bei niedrigen Drehzahlen die Zeit zwischen 2 unterschiedlichen Encoder-Ständen berechnest und daraus die Drehzahl ermittelst (1 Tic [entspricht 1° bei einem 360 PpU Encoder] in X µs ... = Y U/min ...) und bei hohen Drehzahlen mittelst.

Aus den reduzierten Daten interpolierst du dann nochmal ein neues Drehzahl-Array - mit der gleichen Anzahl Samples wie deine analoge Messung. So kannst du IMHO aus den gegebenen Möglichkeiten das Maximum an "Genauigkeit" bei der Drehzahl-Messung rausholen.


Hohe Abtastung aber nur bestimmte Werte nutzen - johannes_r - 01.08.2009 17:17

ui ui ui...
das hört sich für mich ganz schön kompliziert anSmilewürde aber heißen ich könnte keine "live" darstellung machen oder?mit dem zwischenspeichern der daten meinst du einfach die daten solange in ein array speichern bis die messung eben fertig ist oder?ich kann mich irgendwie nicht entscheiden welchen weg ich verfolgen soll...fällt mir schwer vorschläge von euch zu beurteilen als "anfänger".

was ich mich aber noch frage ist der vorteil der hohen abtastung des counters?hab ich dadurch mehr informationen?und ich soll das ganze eben über den winkel machen, seh ich das richtig?dann versuch ich da mal was "hinzubasteln" und lad das vi mal hoch um von euch profitipps zu bekommeWink

achja noch eine frage..das mit dem abtasttakt erzeugen hab ich glaub ich schon hinbekommen. aber wenn ich an dem timing vi dann als quelle bspw pxi_trigger_0 angeben brauch ich ja trotzdem noch eine angabe welche rate ich haben möchte. du sagtest du würdest es "durchschleifen" was meintest du damit?wie kann man es so machen dass der erstellte messtakt die rate vorgibt?

danke
gruß johannes


Hohe Abtastung aber nur bestimmte Werte nutzen - cb - 02.08.2009 07:10

' schrieb:achja noch eine frage..das mit dem abtasttakt erzeugen hab ich glaub ich schon hinbekommen. aber wenn ich an dem timing vi dann als quelle bspw pxi_trigger_0 angeben brauch ich ja trotzdem noch eine angabe welche rate ich haben möchte. du sagtest du würdest es "durchschleifen" was meintest du damit?wie kann man es so machen dass der erstellte messtakt die rate vorgibt?

die Angabe der Sample-Rate ist bei externem Takt mehr oder weniger ein "Schätzeisen", die Angabe braucht DAQmx um die Puffer-Größe einzustellen sofern du das nicht selbst hinterher "manuell" machst. Mit Durchschleifen meine ich: irgendwo erstellst du ja eine Konstante oder ein Control mit dem du einstellst wie schnell dein Puls-Ausgabe-Task laufen soll. Von dieser Konstanten zweigst du einfach noch einen Draht ab und verbindest ihn mit diesem Eingang. Dann vergisst du nicht diesen Wert zu ändern, wenn du die Geschwindigkeit des Messtaktes änderst ...


Hohe Abtastung aber nur bestimmte Werte nutzen - Lucki - 02.08.2009 19:41

Da ich am Anfang mal eine nebensächliche Bemerkung in diesem Threat gemacht habe, werde ich seit Wochen mit Mails "Sie haben eine neue Nachricht.." zu diesem Thread malträtiert. Das Bemerkenswerte an diesem Thread ist ja, daß bei den 29 Beiträgen kein einziges richtiges VI dabei ist, also vor allem nicht von johannes selbst, und deshalb zieht sich alles in unendliche Länge.
Also will ich es mal mit einem VI versuchen. Dazu eine Vorbemerkung.

Es gibt zwei Arten, die Impulsfrequenz zumessen:[list=1]
[*]Zählen der Impulse über ein definierte Zeit<>
[*]Messung der Periodendauer zwischen den Impulsen<>
[st]Bei Methode 1 brauche ich innerhalb der Messzeit 100 Impulse, um die Frequenz auf 1% genau zu ermitteln. Hier beträgt die Messzeit 10ms, die Encoder-Messfrequenz ca. 36 kHz. D.h. es fallen ca. 360 Impuse an, der Messfehler ist ca. 0.3%
Bei Methode 2 stehen mir ebenfalls 10ms Messzeit zur Verfügung, obwohl eine Messzeit von ca. 1/36kHz bereits ausreichen würde. Es liegt deshalb nahe, die gesamte Messzeit zu nutzen und von allen ca. 360 gemessenen Periodendauern (innerhalb der 10ms) den Mittelwert zu bilden, so daß ich eine wesentlich größere Genauigkeit erhalte. Bei einem Masterclock von 20MHz ist die dann erreichbare Genauigkeit ca. 2 Zehnerpotenzen besser als mit der Zählmethode.
Hinzu kommt noch, daß das Erfassen der Peridendauern extrem enfach ist. Es ist die ungleich bessere Methode, ohne Routing- und Synchronisations-Komplikationen.

Hier ein ungestetes und betimmt mit etlichen Fehlern behaftetes VI, aber die Richtung müßte stimmen.

Erläuterungen zum VI:
Die Daten werden normal gelesen, Samplerate 20kHz kontinuierlich, Auslesen aus dem Puffer immer 100 Stückweise, wobei von diese Werten sofort der Mittelwert gebildet wird. Die Lesefrate in der Schleife ist 100Hz. Das VI Lesen wartet immer so lange, bis wieder 100 daten im Puffer sind.

Nach jedem Datenlesen werden Alle Daten aus dem Lesebuffer mit den Periodendauern geholt. Das ist ein Array mit ca. 360 Peridendauern. Mittelwertbildung und Umrechnung in U/min setzte ich als Verständlich voraus. Dieses VI Lesen stört die Datenerfassung der Analogen Messwerte überhaupt nicht, denn es wartet nicht. Entweder es sind Periodendauern im Buffer, dann liest es aus was drin ist ohne zu warten, oder es ist nichts im Buffer, dann wartet es bis zum Timeout. Da dieser aber Null ist, wartet es ebenfalls nicht. Der Timeout-Fehler ist abzufangen, die Impulsperiode habe ich in diesem Fall auf Inf gesetzt, d.h die angezeigte Drehzahl ist dann Null.
[attachment=20142]

Lv86_img[attachment=20143]