So ihr lieben LabVIEWer,
zur Erklärung meiner Situation:
http://www.LabVIEWforum.de/Hilfe-bei-Syste...ung-t11648.html
Kurzzusammenfassung: ich muss ein Programm erschaffen, welches ein PWM-Signal für Modellbau-servos erzeugt und die Stellung der Servos in Abhängigkeit einer Spannung regelt.
gefunden hab ich mehrere VIs zur PWM-Erzeugung, allerdings scheinen die alle eher für ne Drehzahlsteuerung zu sein da sie das Tastverhältnis verändern.
Für die Modellbau-servos benötigt man aber ein Signal zw. 0,5 und 2,5s (die Länge sollte einstellbar sein da dies z.T. variiert) mit einer Frequenz von 50Hz.
gefunden hab ich über einen anderen Thread hier noch das Programm
Klick mich
dieses nutzt allerdings analoge Ausgänge, ich würde gerne die digitalen nutzen.
Kann mir jemand weiterhelfen und Tipps geben wie ich ein VI auf meine Bedürfnisse anpasse? Bin doch recht unerfahren und hatte es mir leider etwas zu leicht vorgestellt.
liebe Grüße
Steffen alias hotwheelz
Du meinst wohl eher 0,5 ms - 2,5 ms !
Und ich dachte, das haben wir schon mehr oder weniger durchgekaut!
Empfehle, ein solches Signal mit dem Counter direkt zu erzeugen. Das Beispiel hierzu im NI-Examplefinder ist z.B.
"Gen Dig Pulse Train Continous.vi".
Was du dann "on the fly" in der Loop ändern musst, ist der DutyCycle. Da musst du halt mal ein wenig rechnen.
Welche PropertyNode du da schreiben musst, öffne einfach mal das VI "DAQmx Create Channel (CO-Pulse Generation-Frequency).vi" im oben genannten Bsp.
Das obige erwähnte Bsp., entsprechende modifiziert, könnte z.B. so aussehen:
[
attachment=16810]
Gruß, Jens
Hallo,
vielen Dank für die schnelle Antwort. Natürlich meine ich ms, das m muss wohl geklemmt haben.
Das Bsp. hatte ich mir angeschaut, du hattest im anderen Thread auch nen Link zur Veränderung des duty cycle gepostet. Dort fehlten mir allerdings die Bilder und ich wusste nicht so richtig wo ich das erstellte DAQmx einfügen sollte.
Ich werd das jetzt mal nachbauen, kann ich anstatt das Signal auszugeben mir das auch in nem Oszi anzeigen lassen? Ich seh da immer nur Datenleitungen und finde keine Stelle wo ich mir das "anklemmen" kann. Naja vllt. find ich das auch mal allein raus, schaden soll sowas ja auch nicht!
ich dank dir auf jeden Fall schonmal und meld mich dann mit Erfolg (oder auch nicht) zurück.
Steffen
Klar kannst du dir das Signal erst mal am Oszi anschauen. Kann ich zum Einstieg nur empfehlen.
An welchem Pin das Counter-Signal standardmäßig anliegt (ohne dass du es woanders hin routest), dazu musst du mal in die Doku deiner Karte schauen. (Welche hast du denn jetzt?, Bsp:
USB-6210, s. 8-30)
Gruß, Jens
Nee, so meinte ich es nicht. Ich meinte auf dem Rechner anschauen, ein richtiges Oszilloskop haben wir hier glaub ich nicht.
Bin aber noch am Nachbauen, muss immer erst ewig suchen da ich ja die deutsche Version hab und da alles z.T. anders heisst. Die vielen verschiedenen Möglichkeiten machen mich da etwas wuschig.
So, da bin ich wieder. Wie immer nur Probleme.
1.:Schon im DAQmx Kanal erzeugen bekomme ich ne Fehlermeldung, Fehlercode -200371, die ich nicht wegbekomme. Der Task den ich erstellt habe ist eigentlich "original", sprich 1 Impuls beim Signalerzeugungsmodus, High und Low-Dauer jeweils 10ms. Ruhezustand low.
Der Fehler ist weg wenn ich beim Task ctr0 und beim Zähler im Frontpanel des "DAQmx Kanal erzeugen" ctr1 belege. Nur dann sind ja beide Counter schon belegt oder? Sprich zweites PWM oder Inkrementalgeber auslesen fällt flach?!
2.:In der True-Schleife bekomme ich die Knoten bzw. Tunnel nicht hin, sprich da meckert er immer was von fehlender Tunnelzuordnung. Was müsste ich in der false-Schleife verbinden bzw einfügen?
3.:die Berechnung der Stellzeit wollt ich erstmal kurz über ne Formel machen. Dazu hab ich einen Formelknoten eingesetzt der zum einen die gemessene Spannung erhält und diese dann über while-Schleifen in die Stellzeit verrechnet.
Ich hoffe mal das es überhaupt so geht. Problem ist dass ne Fehlermeldung kommt das im Formelknoten integer erforderlich ist. Die Stellzeit ist aber schon integer, mach ich die Spannung auch auf integer, meckert er auch rum?!
4.:Das mit dem von dir erwähnten PropertyNode schreiben hab ich nicht so richtig verstanden. Heisst das ich muss den DAQmx Kanal in der schleife genauso schreiben wie den ersten?
5.:Kann ich mir das Signal nun am Rechner über ein virtuelles Oszi irgendwie anschauen, wenn ja wie? So wie ich das sehe ist ja nur der Task da, nirgends aber eine richtige Datenleitung, oder?
6.:Die Verkabelung/Verstrickung von dir zur Berechnung der Stellzeit kann ich nicht so richtig nachvollziehen. Wenn ich sie in Millisekunden vorgebe, warum dann noch zweimal durch andere Zahlen dividieren bzw. streng genommen durch eine Zahl dividieren und mit der Frequenz multiplizieren (war ja der Kehrwert der Frequenz).?
Ich weiß, für eingefleischte LabVIEWer stell ich wahrscheinlich vollkommen dämliche Fragen. Aber ich will es halt verstehen.
Gruß
Steffen
*dernichtaufgebenwill*
' schrieb:So, da bin ich wieder. Wie immer nur Probleme.
1.:Schon im DAQmx Kanal erzeugen bekomme ich ne Fehlermeldung, Fehlercode -200371, die ich nicht wegbekomme. Der Task den ich erstellt habe ist eigentlich "original", sprich 1 Impuls beim Signalerzeugungsmodus, High und Low-Dauer jeweils 10ms. Ruhezustand low.
Der Fehler ist weg wenn ich beim Task ctr0 und beim Zähler im Frontpanel des "DAQmx Kanal erzeugen" ctr1 belege. Nur dann sind ja beide Counter schon belegt oder? Sprich zweites PWM oder Inkrementalgeber auslesen fällt flach?!
Schwer zu sagen, Screenshot ist nicht komplett, und zwecks DAQ-Assi ist eh nicht klar, was da gemacht wird.
Lösung: VI hochladen!!!
' schrieb:2.:In der True-Schleife bekomme ich die Knoten bzw. Tunnel nicht hin, sprich da meckert er immer was von fehlender Tunnelzuordnung. Was müsste ich in der false-Schleife verbinden bzw einfügen?
Einfach im Fals-Case Task und Error-Cluster weiterverbinden.
' schrieb:3.:die Berechnung der Stellzeit wollt ich erstmal kurz über ne Formel machen. Dazu hab ich einen Formelknoten eingesetzt der zum einen die gemessene Spannung erhält und diese dann über while-Schleifen in die Stellzeit verrechnet.
Ich hoffe mal das es überhaupt so geht. Problem ist dass ne Fehlermeldung kommt das im Formelknoten integer erforderlich ist. Die Stellzeit ist aber schon integer, mach ich die Spannung auch auf integer, meckert er auch rum?!
s. Punkt 1, VI hochladen!!!
' schrieb:4.:Das mit dem von dir erwähnten PropertyNode schreiben hab ich nicht so richtig verstanden. Heisst das ich muss den DAQmx Kanal in der schleife genauso schreiben wie den ersten?
Ich würde mal sagen, du hast die richtige PropertyNode im deutschen LV gefunden. Alles paletti.
' schrieb:5.:Kann ich mir das Signal nun am Rechner über ein virtuelles Oszi irgendwie anschauen, wenn ja wie? So wie ich das sehe ist ja nur der Task da, nirgends aber eine richtige Datenleitung, oder?
Countersignal direkt im Rechner (so wie ein simuliertes Signal), nein. Könntest natürlich den Counterausgang auf einen Analog-In legen (oder mglw. auch intern routen) und messen.
' schrieb:6.:Die Verkabelung/Verstrickung von dir zur Berechnung der Stellzeit kann ich nicht so richtig nachvollziehen. Wenn ich sie in Millisekunden vorgebe, warum dann noch zweimal durch andere Zahlen dividieren bzw. streng genommen durch eine Zahl dividieren und mit der Frequenz multiplizieren (war ja der Kehrwert der Frequenz).?
Ist doch ganz einfach: DutyCycle ist das Verhältnis "Zeitphase High" zur "Periodedauer". Periode in Sekunden ist 1/Frequenz.
Umrechnung von ms auf Sekunden ist teilen durch 1000. Dann noch DutyCycle durch Periodendauer teilen.
Kann man sicher zusammenfassen, aber hab das ja nur auf die Schnelle gemacht.
Gruß, Jens
Hallo Jens,
danke für die superschnelle Antwort.
Das mit dem Durchschleifen in der False-Schleife hab ich gemacht, Fehler behoben. Wenns denn so richtig ist?!
Hab das VI gleich geändert und angehangen. Das mit der Berechnung hab ich jetzt auch verstanden, danke!
Achso, ich glaub die Frequenz ist noch nicht eingestellt, aber das tut ja erstmal nix zur Sache, oder?
Mit dem Oszi werd ich dann sicher mal probieren, mal schauen ob es geht.
danke
Steffen
Sag mal, mit der Syntax des Formelknoten kommst du auch noch nicht zu Recht.
Ich rate mal, du wolltest wohl eher das hier? Wobei du dafür keine Formel brauchst:
[
attachment=16859]
Und vom Datenfluss her wird das auch keine Regelung/Steuerung werden!
Ablauf bei dir ist jetzt: Schleife mit DAQ-Assi startet und läuft solange, bis du Stop (F)-Taste drückst. Dann werden die letzten 100 Messwerte ausgegeben, dann gefiltert, dann eine neue Pulsbreite berechnet, diese gibst du an die Schleife weiter, in der Duty-Cycle gesetzt wird (aber es wird jetzt immer derselbe Dutycycle gesetzt!).
Gruß, Jens
Na danke das du mir sagst was ich alles nicht kann!
Wollte nur mal nen kurzen Zwischenversuch machen, ohne richtigen Regler um halt überhaupt mal ein Ergebnis zu sehen. Wenns dann geht fang ich mit dem PID an.
Hab die Spannungsmessung jetzt in einer großen Schleife, Fehler zeigt er mir zumindest keinen mehr an.
Jetzt sollte es dann doch ne Art Steuerung/Regelung sein. Im Auto beeinflusse ich ja über die Stellzeit den Servo, das Auto lenkt und die Spannung ändert sich?!
Hier jetzt erstmal das vorläufige VI (LabVIEW Vers 8.6.)
Für Anregungen und Kritik bin ich offen. Morgen häng ich alles dann mal ans Labornetzteil und schaue was passiert.
Gruß
Steffen