Hallo
Ich muss für ein Studienprojekt einen Frequenzgangmesser im LabVIEW programmieren. Nun versuche ich einen möglichst exakten Nulldurchgang vom Sinussignal und den von einer PT 1 Strecke zu messen und den Zeitunterschied zwischen den beiden Nulldurchgängen, das delta T zu messen.Daraus will ich die Phasenverschiebung berechnen um am ende ein Bode-Diagramm zu plotten.
Problem der jetzigen Auswertung ist erstens die Ungenauigkeit des Nulldurchgangs, Zeitmessung misst nicht delta T und im Falle eines Offsets der Strecke versagt unser Nulldurchgang. Alternativ zum Nulldurchgang haben wir eine Andere Detektion in einem Test VI gemacht. Das Problem eines eventuellen Offsets besteht allerdings immer noch.
Eventuell läuft das VI nicht auf Anhieb. Hierfür muss im Sub VI_PT1 der Timer verändert werden (Wieso weiss ich noch nicht?).
Für andere Verbesserungen und Vorschläge bin ich natürlich immer Froh.
Hallo denzlair,
Zitat:Problem der jetzigen Auswertung ist erstens die Ungenauigkeit des Nulldurchgangs, Zeitmessung misst nicht delta T und im Falle eines Offsets der Strecke versagt unser Nulldurchgang.
- Die Ungenauigkeit des Nulldurchgangs besteht worin? Was soll daran ungenau sein?
- Das die Zeitmessung nicht deltaT misst, liegt vielleicht daran, dass ihr nicht die Zeitdaten der Waveform verwendet, sondern stattdessen irgendwelche Timings des Computers bei der Auswertung auslest? Was soll das?
- Einen Offset kann man immer durch Rechnung korrigieren...
Schau mal hier für andere Arten der Nulldurchgangsbestimmung:
[
attachment=42286]
Lest euch die Kontexthilfe zu Waveforms durch. Die enthalten schon Timing-Informationen, die man bei eurer Auswertung auch zwingend verwenden sollte!
Zum Bild eures BDs:
- Lokale Variablen und SR-FFs erzeugen immer ein ungutes Gefühl beim Betrachter...
- Was soll die Wartezeit in der Auswerteschleife bewirken?
Hallo GerdW
Besten Dank für die schnelle Antwort.
Ich bin deinem Rat gefolgt und habe meine Zeitmessung mit t0 vom Signal gemessen. Das funktioniert auch recht gut. Obwohl ich eigentlich der Meinung bin, dass es lediglich die halbe Periodendauer angezeigt werden sollte?
Die Auswertung für die Phasenverschiebung funktioniert allerdings noch nicht so wie gewünscht.
Nach Recherche im Internet bin ich auf zwei weitere Varianten zur Detektion der Phasenverschiebung gestossen.
Eine berechnet die Phase und die andere benutzt den Baustein: "extract single tone information". (beide Varianten sind im VI eingebaut).
Ich bin mir jedoch nicht sicher, welche Variante das bessere / das richtige Resultat liefert.
Da ich später das ganze Programm noch mit FFT Bausteinen programmieren muss, möchte ich nicht unbedingt den oben genannten Baustein schon in dieser Version verwenden müssen.
Hallo denzlair,
man sieht im Bild nicht, welche Timestamps du da verrechnest.
Ich bezweifle aber, dass du die Zeiten irgendwelcher Nulldurchgänge berechnest, wenn du die
Startzeiten der Waveforms subtrahierst...
Zitat:Ich bin mir jedoch nicht sicher, welche Variante das bessere / das richtige Resultat liefert.
Ausprobieren und mit Referenzdaten vergleichen...
So hab mich nochmals hingesetzt um das Programm umzubauen.
Es scheint nun soweit zu funktionieren und die detektierte Phasenverschiebung erscheint plausibel.
Den Fehler mit den Zeiten hab ich vermutlich gemacht, da dies (meiner Meinung nach!) ziemlich seltsam aufgebaut ist in LabVIEW. (Ich programmierte vorhin nur mit Matlab & Simulink wo die Zeit Information automatisch intern richtig weitergegeben werden und daher das Signal nicht jedes mal aufgesplittet werden muss).
Danke trotzdem für deine Hilfe und die Tipps.
Hallo denzlair,
Zitat:da dies (meiner Meinung nach!) ziemlich seltsam aufgebaut ist in LabVIEW
Du hast mit Waveforms gearbeitet. Um diese abzubilden, benötigt man die Startzeit, das Samplingintervall und die Daten. Effiziente Speichernutzung...
Tipp:
- In Schleifen in reinen Rechen-subVIs noch ein Timing einzupacken ist meist unnötig. Ebenso sollte man konstante Rechnungen nicht in Schleifen machen, dies dürfte in Matlab ähnlich sein.
- Ich habe ein, zwei Dinge im MainVI geändert. Leider hat die Aufräumfunktion hier nicht so schön gearbeitet, du solltest trotzdem die Änderungen bemerken. Meist kann man auch ohne lokale Variablen auskommen...