LabVIEWForum.de
zeitbasierte Druckverlaufsmessung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: zeitbasierte Druckverlaufsmessung (/Thread-zeitbasierte-Druckverlaufsmessung)

Seiten: 1 2


zeitbasierte Druckverlaufsmessung - jrraid - 08.05.2014 11:01

Hallo liebe Community,

im Rahmen einer Arbeit an der Uni versuche ich eine zeitbasierte Druckverlaufsmessung eines Verbrennungsmotors zu realisieren. Dazu ist ein Inkrementalgeber zur Kurbelwellenwinkel-Messung und ein Drucksensor im Zylinder verbaut.
Ich versuche nun per DAQmx das Signal des Inkrementalgebers auszulesen und es so zu interpretieren, dass ich es für meine Zwecke nutzen kann. Leider tauschen ständig irgendwelche Fehler auf. Aus diesem Grund wollte ich euch mal fragen welche Art von Messung ich am besten hernehme, um das Signal des Inkrementalgebers für meine Zwecke richig zu interpretieren. Ich hab versucht das Ganze mal auf 2 Bildern darzustellen. Bild 1 unten zeigt das Signal welches von Imkrementalgeber kommt. Bild 2 unten zeigt wie ich den Messwertarray gerne am Schluss des ganzen hätte. Die Frage, die sich mir nun stellt, wie soll ich das Signal des Inkrementalgebers auslesen. Mittels Counter oder Digital IO. Ich würde gerne die Druckmessung (in den Bildern oben zu sehen) gerne mit dem Inkrementalgeber synchronisieren, so dass ich immer eine eindeutige Zuordnun zwischen Druck und Winkel habe. Ich hoffe ihr könnt mir da einen Tip geben, wie ich das Problem angehen soll.

Vielen Dank!


RE: zeitbasierte Druckverlaufsmessung - jg - 08.05.2014 11:25

Wie viele Inkremente pro Umdrehung hast du? Zur Synchro bietet sich das Encoder-Signal als externes Taktsignal für die AI-Erfassung an - in Abhängigkeit der Möglichkeiten deiner DAQ-Hardware (welche?). Entsprechende Beispiele gibt es im NI Example Finder..

Gruß, Jens


RE: zeitbasierte Druckverlaufsmessung - jrraid - 08.05.2014 12:26

Also der Inkrementalgeber macht 3600 Inkremente pro Umdrehung. Meine Messkarte ist eine PXIe-6356. Ich hab mir das ganze in etwa wie folgt vorgestellt. (Siehe Bild im Anhang).


RE: zeitbasierte Druckverlaufsmessung - jrraid - 10.05.2014 17:52

Zitat:Zur Synchro bietet sich das Encoder-Signal als externes Taktsignal für die AI-Erfassung an

genau das möchte ich eben nicht machen, denn so ist es gerade an den Prüfständen realisiert. Diese Methose lässt eben nur eine Auflösung von 0,1° Kurbelwellenwinkel zu. Ich würde das ganze gerne Zeitbasiert machen. Sprich Druck und Drehzahl zeitbasiert machen, so dass ich auch die Druckwerte erfassen kann, die zwischen 2 Inkrementen liegen. Deshalb würde ich gern wissen wie ich das Drehzahl Signal am besten erfasse um Druckverlauf und Drehzahl (eigentlich: aktueller Kurbelwellenwinkel) übereinander legen kann.


RE: zeitbasierte Druckverlaufsmessung - GerdW - 11.05.2014 18:53

Hallo jrraid,

wenn du zwischen den 0.1°KW nicht interpolieren willst, musst du eben schneller messen…

Erstelle dir also zwei Tasks für AI und DI und lese sie mit möglichst hoher Samplerate ein. Dann suchst du im DI-Signal nach Flanken, um die Pulse selbst zu bestimmen und ordnest die entsprechenden AI-Werte diesen Pulsen zu. Die Werte dazwischen musst du zeitlich interpolieren…

Du willst dir ehrlich diesen (Rechen-)Aufwand ans Bein binden? Warum nicht mit ensprechenden (Elektronik-)Schaltungen das Signal deines Pulsgebers vervielfachen? Wenn man z.B. sowohl bei fallender als auch bei steigender Flanke triggert, kommst du schon auf 7200 Werte/Umdr. Nutzt du einen Quadraturencoder, kannst du schon auf 14400 Pulse/Umdr kommen!


RE: zeitbasierte Druckverlaufsmessung - jrraid - 12.05.2014 09:32

Hi Gerd,

vielen Dank erst mal für deine Antwort. Genau so wie du das beschrieben hast habe ich mir das auch überlegt. (siehe Anhang). Nur wie du auch schon geschrieben hast scheint der Rechenaufwand dafür viel zu hoch zu sein. Wenn ich das VI laufen lasse, dann kann mein Buffer nicht schnell genug ausgelesen werden, da die Berechnungen in der For Schleife schon so zeitintensiv sind. Wenn ich die Schleife deakiviere und die Werte einfach nur darstellen lasse ist das Ganze kein Problem. Sehe ich das so richtig?
Leider kann ich die SampleRate auch nicht viel niedriger wählen, da mir ansonsten die Auflösung nicht ausreicht um das Encoder Signal richtig darzustellen.

P.s: Ich lese mit 1 MS/s aus.


RE: zeitbasierte Druckverlaufsmessung - GerdW - 12.05.2014 09:36

Hallo jrraid,

Zitat:Wenn ich das VI laufen lasse, dann kann mein Buffer nicht schnell genug ausgelesen werden, da die Berechnungen in der For Schleife schon so zeitintensiv sind. Wenn ich die Schleife deakiviere und die Werte einfach nur darstellen lasse ist das Ganze kein Problem.
Das hört sich an, als wenn das Producer-Consumer-Schema hier hilfreich werden könnte…

Zitat:Sehe ich das so richtig?
Weiß nicht. Dafür müsstest du das VI nochmal in LV2011 anhängen…
Außerdem: Profil_ergaenzen wenn du jetzt mit LV2013 arbeitest!


RE: zeitbasierte Druckverlaufsmessung - GerdW - 12.05.2014 09:54

Hallo jrraid,

mit 1MS/s und 3600 Pulsen pro Umdrehung kannst du theoretisch bis zu 1M/2/3600 ~= 139 Umdrehungen/s = 8300 rpm erkennen/messen. Das praktische Limit dürfte eher bei 6000rpm liegen…

Aus dieser Überlegung heraus: warum willst du auf die externe Triggerung durch deinen Drehgeber verzichten?


RE: zeitbasierte Druckverlaufsmessung - jrraid - 12.05.2014 11:23

Ich will darauf verzichten, da man nicht immer einen Inkrementalgeber mit so einer guten Auflösung zur verfügung hat. Ich aber trotzdem den Druckverlauf so genau wie möglich haben muss.
Würde ich beispielsweise einen 60 Inkremente/Umdrehung Drehgeber verwenden würde ich nur eine Kurbelwellenwinkelauflösung von 360°KW/60 = 6°KW. Das sind eindeutig viel zu wenig Messwerte pro Umdrehung als dass man eine gute Aussage über die Indizierung in einem Verbrennungsmotor treffen könnte. Wenn ich das ganze nun zeitbasiert messe, hab ich nur eine Ungenauigkeit im Drehzahlsignal zwischen 2 Flanken, da ich dort linear interpolieren muss. Der Druckverlauf hingegen is sehr schön aufgelöst.

Tut mir Leid wegen dem Versionschaos. Manche Rechner am Lehrstuhl haben 2013 mache 2012 drauf. Im Anhang nochmal als 2011er Version. Momentan läuft das VI allerdings aber für Verbessrungsvorschläge bin ich sehr offen Smile


RE: zeitbasierte Druckverlaufsmessung - GerdW - 12.05.2014 11:41

Hallo jrraid,

- wenn du kontinuierlich lesen willst, musst du nur ganz ganz selten wirklich die Buffergröße über "Samples to read" am DAQmxCreateChannel festlegen. Das macht DAQmx schon selbst ganz gut.
- wenn du Daten lesen willst, dann hat es sich bewährt, feste Blockgrößen abzufragen - und nicht wie du "aufwendige" QR-Rechnungen in Statemachines durchzuführen. Einfach Blöcke mit 40k Samples abfragen und gut ist!
- Diese Blöcke dann in einer Producer-Consumer-Struktur an eine zweite Schleife zur Berechnung weiterrreichen.
- Notfalls Queue-Größe überwachen und (falls deine Rechnung nicht hinterherkommt) überzählige Blöcke verwerfen…

Zitat:Ich will darauf verzichten, da man nicht immer einen Inkrementalgeber mit so einer guten Auflösung zur verfügung hat. Ich aber trotzdem den Druckverlauf so genau wie möglich haben muss.
Wenn man eine Druckindizierung durchführen will, muss man sich um entsprechende Messtechnik (im Vorfeld) kümmern. Drehgeber mit nur 60Pulsen sollte man dafür verbieten…

Zitat:Würde ich beispielsweise einen 60 Inkremente/Umdrehung Drehgeber verwenden würde ich nur eine Kurbelwellenwinkelauflösung von 360°KW/60 = 6°KW. Das sind eindeutig viel zu wenig Messwerte pro Umdrehung als dass man eine gute Aussage über die Indizierung in einem Verbrennungsmotor treffen könnte.
Du kannst alternativ auch dein Drucksignal zwischen den Pulsen interpolieren. Ist erheblich weniger Rechenaufwand und funktioniert auch mit jedem Drehgeber!
Wir verwenden an unserem Prüfstand einen Geber mit 360Pulsen/Umdr. Meine Software interpoliert von diesen 1°KW auf <0.1°KW…