Hallo Labview-Gemeinde,
ich möchte über zwei DOs meiner USB-6221 jeweils ein PWM Signal ausgeben, deren duty cycles ich laufend ändern kann. Ich habe mich größtenteils an diesem
Beispiel orientiert bzw. bedient. Das Beispiel-VI funktioniert tadellos bis zu einer Frequenz von 5kHz.
Ich benötige für meine Anwendung allerdings eine Frequenz von mindestens 20kHz. Den Specs der USB Karte nach sollte das wohl auch
eigentlich kein Problem sein.
Bei meinem jetztigen Stand der Dinge bekomme ich aber immer nach kurzer Zeit einen Buffer-Überlauf.
Über Hilfe jedweder Art wäre ich wirklich sehr dankbar, denn um ganz ehrlich zu sein ist mir das Zusammenspiel von Sample Rate, Sample Clock, Samples per Channel etc irgendwie ein Rätsel
Ich habe meine Anwendung mal auf das Problem reduziert und angehängt, ich hoffe man kann es einigermaßen nachvollziehen.
Nicht mehr als eine Event-Struktur pro Blockdiagramm verwenden!
Dies ist ein kostenloser Ratschlag!
Ist es Absicht, dass du mit einer beim Start die Clock Frequency auf 20M setzt, dann aber später im PWW-Änder-VI fest auf 5M?
Gruß, Jens
@Achim, bisher hat das bei mir glaube ich keine Probleme verursacht - wenn es aber prinzipiell nicht zu empfehlen ist werde ich mir das in Zukunft mal zu Herzen nehmen.
@Jens, nein das ist eigentlich nicht so gedacht. Da habe ich wohl beim herumexperimentieren mit verschiedenen Werten für etwas Inkonsistenz gesorgt :/
(12.06.2013 11:33 )Achim schrieb: [ -> ] (12.06.2013 11:23 )Mace schrieb: [ -> ]@Achim, bisher hat das bei mir glaube ich keine Probleme verursacht - wenn es aber prinzipiell nicht zu empfehlen ist werde ich mir das in Zukunft mal zu Herzen nehmen.
http://zone.ni.com/reference/en-XX/help/...dtnsevnts/
Danke für den Hinweis - auch wenn ich im Fall State Machine nicht wirklich wüsste, wie ich die Anzahl der Eventstrukturen minimieren kann (im vollständigen MainVI gibts noch mehr davon...)
Davon unabhängig: Die Frequenzen im Main- & SubVI konsistent zu halten ist offensichtlich richtig (bzw. alles ander unsinnig); aber mit den für mich nicht nachvollziehbaren Buffer under-/overflow Fehlern komme ich immer noch nicht zurecht
Gruß
Mace
(12.06.2013 11:55 )Mace schrieb: [ -> ]Danke für den Hinweis - auch wenn ich im Fall State Machine nicht wirklich wüsste, wie ich die Anzahl der Eventstrukturen minimieren kann (im vollständigen MainVI gibts noch mehr davon...)
Alter Schwede...böses Foul!
Ich wüsste nicht, wie man inbesondere bei einer State Machine mehrere Eventstrukturen verwenden sollte...Guck dir DRINGEND mal folgendes Schema an:
http://www.ieee.li/pdf/viewgraphs/labvie...plates.pdf
Seite 38/39
Oder hier:
http://expressionflow.com/2007/10/01/lab...hitecture/
Ähnliche Beispiele gibts im Netz zuhauf...
Gruß
A.
Habe jetzt keine Zeit, mich in Dein VI zu vertiefen. Nur kleines Detail:
In der Hilfe zu DAQmx Timing steht:
Samples pro Kanal gibt die Anzahl der an jedem Kanal im Task zu erfassenden bzw. generierenden Samples an, wenn der Sample-Modus auf Endliche Anzahl eingestellt ist. Wenn der Sample-Modus auf kontinuierlich eingestellt ist, verwendet NI-DAQmx diesen Wert zur Bestimmung der Puffergröße.
Es ist allgemein kein gute Idee, bei kontinuierlicher Betriebsart an den dann umfunktionierten Eingang "Sample pro Kanal" etwas anzuschließen - die Intelligenz von Labview reicht meist aus, die richtige Buffergröße zu finden.
(12.06.2013 13:22 )Lucki schrieb: [ -> ]Es ist allgemein kein gute Idee, bei kontinuierlicher Betriebsart an den dann umfunktionierten Eingang "Sample pro Kanal" etwas anzuschließen - die Intelligenz von Labview reicht meist aus, die richtige Buffergröße zu finden.
Danke, das war ein guter Tipp! Offensichtlich ist es sehr tückisch, beim Lesen der Hilfe immer nach dem ersten Satz zum nächsten Punkt zu springen
Okay, es scheint ich habe mein Problem großteils gelöst. Immerhin stürzt LabVIEW nicht mehr ab und ich habe die gewünschten PWM Signale.
Im Anhang ist das modifizierte BeispielVI
, das zwei PWM Signale mit je 25kHz auf DO1&2 ausgibt. DutyCycle ist jeweils variierbar.
Das Workaround steckt zum einen in dem oben genannten Weglassen der manuellen Puffergröße und zum Anderen im SubVI
Create DO array, wo ich das Array in Zehntel aufteile.
Ich verstehe selbst nicht genau, wieso es jetzt funktioniert; aber da ich eigentlich auch gar kein Programmierer sein möchte sondern nur Anwender darf es mir zum Glück herzlich egal sein
Danke für die Hilfe!
Mace
EDIT: Das Einbauen in mein MainVI scheint ebenfalls funktioniert zu haben. Den Hinweis mit den Eventstrukturen nehme ich mir bei Gelegenheit nochmal vor, vorerst muss es so reichen.