LabVIEWForum.de - Probleme PWM Schaltung

LabVIEWForum.de

Normale Version: Probleme PWM Schaltung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich bin Neuling in LabVIEW Angel_not und habe mich schon tagelang dumm und dusselig gesucht Ahrg1 und hoffe hier von euch erfahrenen Usern ein wenig Hilfe zu bekommen.

a)
Und zwar habe ich mir eine PWM-Modulation anhand des Beispiels von NI zusammengebastelt. Nun habe ich das Problem, das ich die PWM z.B. mit einem mir gesetzten Default-Wert von 1000Hz starte. Ändere ich nun die Frequenz auf einen beliebigen anderen Wert z.B. 2000Hz klappt das auch wunderbar. Auch das mit dem Puls-Pause-Verhältnis funktioniert. Ich kann allerdings nicht wieder auf 1000Hz zurück! Der Wert wird irgendwie nicht wieder angenommen wenn ich ihn eingebe. Die Zahl steht dann zwar in dem Eingabefeld, aber auf dem Oszi ändert sich absolut nichts. Ich kann aber auf 1000,01Hz springen. Im Prinzip ist das für mich von der Funktion her egal, aber ich wundere mich schon. Wahrscheinlich übersehe ich da einfach nur etwas – die Frage ist nur was. Sad

b)
Die PWM wird ja mit Countern realisiert (wie es in dem NI-Beispiel ja ist und in vielen anderen Foren-Beiträgen auch gepriesen wird. Gibt es eine Möglichkeit das auch ohne Counter zu machen? Ich frage, weil, also ich hätte gerne das PWM-Bild, was am Digitalausgang ankommt gerne auf einem Graphen in LabVIEW angezeigt. Das kann ich aber nur machen, wenn ich mir intern eine Logik bastele und dann Digitalausgang und Graph parallel ansteuere. Klappt auch, aaaaaber: Mache ich das so, so habe ich auf dem Oszi irgendwie ein nicht wirklich stabiles Verhalten. Die Pulsbreite zuckelt immer ein bisschen nach links oder rechts, was mich nicht wirklich begeistert das es kein stabiles Verhalten ist. Dass der PC am Ende ist, kann ich mir nicht vorstellen, da die CPU-Last unter 10% liegt. Hier benötigte ich vielleicht auch noch einen Denkanstoß… Blink

Für eure hilfreichen Kommentare bin ich euch wirklich sehr dankbar. LabVIEW ist zwar jetzt nicht der Hauptteil dieser studentischen Tätigkeit hier, aber die Funktion soll eben damit realisiert werden.

Falls das noch einer braucht: LabVIEW 2012 (offenbar 32 Bit) auf Windows 7 64 Bit. Core i7 mit 2,x GHz und 8GB RAM. Die Karte ist eine High-Speed TTL DIO Karte mit 4 BNC Ports. Welche jetzt genau, weiß ich gerade nicht, aber die soll laut Doku 20MHz können wenn man bis zu zwei Ein/Ausgänge nutzt (16MHz wenn man alle vier nutzt). Als Baugruppenträger liegt jedenfalls ein NIcDAQ-9178 vor.
Das das „Zittern“ bei b) an der verwendeten Hardware liegen soll, kann ich mir nicht vorstellen. Bei a) läuft das absolut stabil.

Vielen Dank vorab und beste Grüße
Alejandro
2hands
Hallo Alejandro,

Das Timing (Bis zum nächsten Vielfachen von ms warten) gehört in die While-Schleife, sonst bringt es dir nichts. Warum du nicht auf 1000 Hz zurück, aber auf 1000.01 Hz kannst, erschliesst sich mir gerade noch nicht. Hast du mal Sonden an die Linie gelegt?

Gruss Sundypha

Edit: Im Anhang eine mir persönlich besser gefallende Lösung, evtl auch mehr Design-Regel-Orientierter.
@Sundypha:
Keine Verwendung von Propertynodes in zeitkritischen Tasks, um die Werte eine Controls zu lesen oder zu schreiben.

PropertyNodes laufen im UI-Task und sind um Längen langsamer als lokale Variablen, die in diesem Fall durchaus erlaubt sind!

Gruß, Jens
Danke Jens, das wusste ich noch nicht.

Im Anhang die verbesserte Version
Hallo zusammen,

vielen Dank für eure Hilfestellungen und Korrekturen! Big Grin Ich glaube das mit dem Thema Propertynodes hab ich noch nicht ganz gerafft … kommt hoffentlich mit der Zeit.

Jedenfalls hab ich mir mal die Schaltung erweitert, damit ich das PWM-Signal jetzt schön moduliere und auch schön automatisch den Duty-Cycle wechseln kann. Also eine bestimmte Frequenz, die in einen On- und einen Off-Teil zerlegt ist und im Anteil variabel ist. Schaut euch doch mal bitte die Schaltung an. Für Tipps und Verbesserungen bin ich gerne offen. Bestimmt geht einige eleganter, aber so scheint es erstmal zu klappen.

Eine Macke, die ich nicht weg bekomme ist, dass das Ding irgendwie seltsam anläuft. Schau ich mit das Signal auf dem Oszi an, so dauert es ca. 3 Sekunden bis exakt das Verhalten da ist, welches ich erwarte. Davor ist kurz gar nichts da, dann man etwas nur High und dann kommt eben das was ich möchte.

Sonst wäre noch eine Sache: Zwei While-Schleifen mit einem Stopp-Button abschalten. Ich habs nicht hinbekommen. Im Internet und auch hier im Forum habe ich mehrfach etwas mit lokalen Variablen gelesen, oder einfach das Stopp-Signal durchverbinden oder auch was mit Propertynodes. Nichts funktioniert.
Verbinde ich den einen Button einfach durch, so kommt es mir vor, als würde die zweite Schleife gar nicht anlaufen. Mit einer lokalen Variable klappts auch irgendwie nicht und mit den Propertynode (Create-Protertynode-Value) kann ich den Bool gar nicht erst anschließen. Ich hab mal beide Versionen angehangen damit ihr direkt das Bild vor Augen habt, was ich gemacht habe. Bahn
Auch hier wäre ich für eine Hilfe super dankbar.

Ach, mir fällt noch was ein: Gibts denn eine Möglichkeit das Signal, was der Counter-Ausgang raus gibt auch graphisch in LabVIEW zu sehen? Das ist mir nämlich auch nicht nicht gelungen Blush

So, mal langsam an Feierabend denken Smile Beer

Beste Grüße und vielen Dank vorab
Alejandro
Hallo EFAN,

Zitat:Verbinde ich den einen Button einfach durch, so kommt es mir vor, als würde die zweite Schleife gar nicht anlaufen.
THINK DATAFLOW! LabVIEW ist eine Datenfluss-basierte Programmiersprache...
Hast du dir dein Programm schon mal mit ExecutionHighlighting angeschaut?
Referenz-URLs