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!
' schrieb:Für gleitende Mittelwertbildung ist in LV bestens vorgesorgt. Hab mal ein VI gemacht. Die 2 Schleifen mit Melder (seihe VI) sind nur so eine Spielerei, das läßt sich auch alles in eine einzige Schleife packen.
Es wäre natürlich besser, wenn man die Taktung (500Hz) hardwaremäßig erzeugen würde, und noch besser, wenn man, wie oben schon gesagt, die ganze Flankenzählung (hier über 100ms) überhaupt nicht mit DI, sondern mit dem jeder Messkarte eingebauten Zähler machen würde. Ich habe es aber jetzt mal so gelassen wie Du es hattest. Du kannst damit bis ca. 900U/min messen
Programm funktioniert super! Leider ist der Drehzahlmesser mit 16 Impulsen zu genau für LabVIEW. Bei einer gewissen Drehzahl veschluckt das Programm einige Impulse und die Drehzahl geht runter. Aber ich habe noch einen Drehzahlmesser mit 6 Impulsen. Der ist zwar ungenauer aber LabVIEW wird damit wohl besser zurecht kommen.
Anzeige
27.11.2007, 20:23 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2007 20:24 von imbe3m112.)
So ich habe den Drehzahlmesser, den man mir freundlicherweise zur Verfügung gestellt hatte etwas verändert bezüglich der Impulse etc. Ich habe lediglich ein paar Verständnisfragen zu dem Programm.
Warum macht man das Programm mit einer Loop-Schleife und nicht mit einer While Schleife? Soll also das Programm die letzten 50 Werte speichern und was älter als 50 ist löschen? Die obere Case-Struktur verstehe ich. Es bedeutet lediglich Simulation ein oder aus. Doch wofür ist die untere Case Struktur? Bei 0 = True gibt er eine +1 weiter. Bei 0 = False geht die Verbindung durch? Dient das zur Berechnung der Werte, damit niemals 0 Umdrehungen pro Minute vorliegen? Ich versteh das leider nicht so ganz.
Bei den Konstanten habe ich ebenfalls eine Frage. Bei Updating Intervall steht 0.1s. Das bedeutet, dass er also alle 0.1s die Impulse speichert und die natürlich weitergibt. Was bedeuet denn in der selben Reihe die Information auf das dt50?
Bei der Glättungszeit steht 2s/100ms/2. 2s ist das dt. Das ist klar. 100ms bezieht sich auf das Updating Intervall. Aber warum durch 2? Wird das gemacht um auf 1sec zu kommen um das dann auf Minute hochzurechnen?
Die Funktionsweise des Filters etc. ist alles klar und verständlich. Ich hoffe ich nerve euch nicht wegen die für euch eventuell leicht zu beantwortenen Fragen.
' schrieb:Warum macht man das Programm mit einer Loop-Schleife und nicht mit einer While Schleife?
Loop-Schleifen gibt es nicht. Das wären dann Schleifen-Schleifen. Was du sicher meinst, ist eine For-Schleife.
' schrieb:Soll also das Programm die letzten 50 Werte speichern und was älter als 50 ist löschen? Die obere Case-Struktur verstehe ich. Es bedeutet lediglich Simulation ein oder aus. Doch wofür ist die untere Case Struktur? Bei 0 = True gibt er eine +1 weiter. Bei 0 = False geht die Verbindung durch? Dient das zur Berechnung der Werte, damit niemals 0 Umdrehungen pro Minute vorliegen? Ich versteh das leider nicht so ganz.
Das ist eigentlich nur, um eine zufällige Drehzahl zu berechnen. Wenn Random True wird, dann wird eins nach oben gezählt, sonst nicht. Nach 50 Durchläufen bekommst du dann eine Zufallszahl zwischen 0 und 49. geht viel viel einfacher (Zufallszahl * 50 und dann runden), aber ich kann mich erinnern, dass der Verfasser gemeint hat, er wollte mal bissel rumspielen.
' schrieb:Bei den Konstanten habe ich ebenfalls eine Frage. Bei Updating Intervall steht 0.1s. Das bedeutet, dass er also alle 0.1s die Impulse speichert und die natürlich weitergibt. Was bedeuet denn in der selben Reihe die Information auf das dt50?
Alle 0.1s soll ein neuer Drehzahlwert ausgegeben werden. Die Berechnung danach sagt einfach: Jeder Schleifendurchlauf dauert 2ms, ich habe 0,1s Zet, also kann ich 50 Durchlaufe machen.
' schrieb:Bei der Glättungszeit steht 2s/100ms/2. 2s ist das dt. Das ist klar. 100ms bezieht sich auf das Updating Intervall. Aber warum durch 2? Wird das gemacht um auf 1sec zu kommen um das dann auf Minute hochzurechnen?
Durch 2 wegen HALF-width. Klar? Halbe Breite...
' schrieb:Die Funktionsweise des Filters etc. ist alles klar und verständlich. Ich hoffe ich nerve euch nicht wegen die für euch eventuell leicht zu beantwortenen Fragen.
Fragen in einem Forum nerven so lange nicht, so lange sie ordentlich gestellt sind. Dazu ist ein Forum ja da
' schrieb:So ich habe den Drehzahlmesser, den man mir freundlicherweise zur Verfügung gestellt hatte etwas verändert bezüglich der Impulse etc. Ich habe lediglich ein paar Verständnisfragen zu dem Programm.
monocerus84 hat ja schon geantwortet, nur scheint mir das eigentliche Prinzip, das da lautet: "Flankenzählung in kontinuierlichen Zeitintervallen" noch nicht verstanden worden zu sein. (Mit Betonung auf "Flankenzählung" und nicht "High-Pegel-Zählung")
Es wird die Frequenz der ankommenden Impuls bestimmt. Dazu werden in konstanten Zeitintervall die 0/1 Flanken gezählt. Die Anzahl der Flanken ist das Maß für die Drehzahl.
Und gemacht wird es so:
Die Impulsfolge wird mit eine Frequenz abgetastet, die höher sein muß als der Reziprokwert der minimal vorkommenden Impulsbreite im high- und low-Zustand. Günstig ist, wenn die Impulse Mäanderformig sind. Dann kann man sagen, daß die Abtastrate mindestens 2 mal so hoch wie die Impulsfrequenz sein muß.
Hier im Beispiel beträgt die Abtastrate 1/2ms = 500Hz. Damit ist klar, daß nur Impulsfrequenzen bis maximal 250Hz gemessen werden können. Jede Abtastung entpricht einem Schleifendurchlauf in der For-Schleife. Die Zeitdauer eines Flankenzähl-Intervalls entspricht der Abarbeitungszeit der For-Schleife, also bei N=50 ist das 50*2ms = 100ms.
0/1- Flankenzählung sollte man nicht verwechseln mit Zählung der Hig-Pegel bei der Abtastung! Ein Flanke hat man nur dann, wenn bei der i-ten Abtastung der Pegel true ist und be der i-1-ten Abtastung false. Das wird mit dem Shiftregister und der Vergleichsoperation gemacht.
Im Simulationmode simuliere ich keine Drehzahl, sondern die Abtastung der Impulsfolge. und was ich gemacht habe ist kein redundante Spielerei, sondern die einfachst mögliche Konvertierung einer Zufallszahll 0..1 in einen Zufalls-Bitwert. Das Simulationsergebnis ist eine Zufalls-Drehzahl, bei genügend langer Mittelwertbildung ist aber genau die Hälfte der maximal möglichen Drehzahl zu erwarten
Wenn im oberen Unterdiagramm ein True ist, dann geht dieses True in das Schieberegister und ins "größer als". Aber dann wäre doch X=Y, oder.
Somit würde nie ein True anliegen.
Pro Schleifendurchlauf braucht die Schleife 0,002sec.. Da bei der For-Schleife die 50 dran ist bekommt man eine Updateintervalle von 0,1sec.. Also bis die For-Schleife von 0-50 durch ist vergehen 0,1sec.
Man sagt also auch 500Hz, da 1sec/0,002sec = 500 ist. Zu welchem Bezug steht das? Und warum kann man dann nur 250Hz effektiv messen? Ich versteh das so, dass zwischen True-Fals-True 250Hz und zusammen 500Hz gemessen werden können.
Gibt die For-Schleife eiegntlich die Werte weiter wenn nach 0,1sec. die komplette Schleife von 0-50 durchgelaufen ist? Müsste doch eigentlich, weil sonst könnte man keine Impulse zählen, da nur 0 oder 1 vorliegen kann, wenn die Imulse in der For-Schleife nicht gespeichert werden.
Die Glättungszeit von 2sec. wurde aus einem speziellen Grund gewählt oder "willkürlich"? Könnte man somit auch folgendes als Konstante schreiben: "Glättungszeit = 1sec. ---> Halbbreite = 1sec./100ms/2 = 5" ???
Die Glättung der Werte wird dch eigentlich kontinuierlich vorgenommen und nicht wie in dem Fall bei 2sec., oder?
Konstruktionstechnik ist doch wesentlich einfacher.
28.11.2007, 16:38 (Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2007 16:44 von Lucki.)
' schrieb:Wenn im oberen Unterdiagramm ein True ist, dann geht dieses True in das Schieberegister und ins "größer als". Aber dann wäre doch X=Y, oder.
Somit würde nie ein True anliegen.
Nein, und Du weißt offensichtlich nicht mal andeutungsweise wie ein Schieberegister tickt. Wenn ein true an das Schieberegister anglegt wird, dann schiebt sich das nicht sofort, sondern erst beim nächsten Schleifendurchlauf auf die linke Seite. Oder anders ausgedrückt: Auf der linken Seite steht noch der alte Wert des vorigen Durchlaufs.
Zitat:Man sagt also auch 500Hz, da 1sec/0,002sec = 500 ist. Zu welchem Bezug steht das?
500Hz ist die die Anzahl von Abtastungen (Schnappschüssen), also die notgedrungen unvollkommene (weil nicht kontinuierlich erfolgende) Messung des Impulsverlaufes.
Zitat:Und warum kann man dann nur 250Hz effektiv messen? Ich versteh das so, dass zwischen True-Fals-True 250Hz und zusammen 500Hz gemessen werden können.
Überleg doch mal selbst: Du hast einen (idealerweise) mänderförmigen Imulsverlauf, die low-Level Breite sie gleich der High-Level Breite. Überleg doch mal selbst: Wie oft müssen Schnappschüsse geschossen werden, damit kein einziger Level verloren geht? Hilfe, ich bin am Ende meines Erklärungs-Lateins. Welcher gelernte Pädagoge springt für mich ein?
Zitat:Gibt die For-Schleife eiegntlich die Werte weiter wenn nach 0,1sec. die komplette Schleife von 0-50 durchgelaufen ist? Müsste doch eigentlich, weil sonst könnte man keine Impulse zählen, da nur 0 oder 1 vorliegen kann, wenn die Imulse in der For-Schleife nicht gespeichert werden.
Ja, und "die Werte" sind die Anzahl von Impulsflanken während der letzten 100ms.
Zitat:Die Glättungszeit von 2sec. wurde aus einem speziellen Grund gewählt oder "willkürlich"? Könnte man somit auch folgendes als Konstante schreiben: "Glättungszeit = 1sec. ---> Halbbreite = 1sec./100ms/2 = 5" ???
Die Glättung der Werte wird dch eigentlich kontinuierlich vorgenommen und nicht wie in dem Fall bei 2sec., oder?
Glättungszeit ist völlig willkürlich gewählt, Und Dein Beispiel stimmt, und es läuft kontinuierlich, mit einer Update-Rate von 0.1sec. Man könnte auch die Halbbreite oder besser die Glättungszeit als Bedienelement (in der Schleife) erstellen und dann die Auswirkung direkt sehen.
Okay damit sind einige Fragen geklärt. Ich hab mich bei dem Schieberegister etwas unglücklich ausgedrückt.
Wenn beim oberen Unterdiagramm ein True ausgeht, dann geht das untere Unterdiagramm auch in True, da X>Y.
Ist der Impuls beim oberen Unterprogramm vorbei, dann gibt er ein False weiter ans Schieberegister und ans "größer als". Das Schieberegister gibt nach Y das True vom vorherigen Schritt weiter und damit ist X<Y. Eine 0 wird weiter gegeben vom unteren Diagramm. Ja und wenn oben wieder True wird dann ist eben X>Y. Is ja loggggisch ^^