Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich bin ein Labview- Anfänger und möchte einen Servomotor mit Labview steuern.
Ich habe mich für die Hardware NI myDaQ entschieden und möchte den Servomotor darüber steuern.
Das PWM Signal möchte ich über einen Analogen Output rausgeben.
Mit dem Funktions Generator kann ich mittels eines Rechtecksignals , einer Amplitude von 5V,Offset von 2,5V 50 Hz mittels dem Duty Cycle von 2-13 % um 180 Grad bewegen.
Jedoch muss ich das jetzt mit Labview realisieren.
Wie kann man mit den Labview-Bausteinen auf den MydaQ zugreifen und sagen, dass ich das PWM Signal über den Analogen Output Port 0 herausgeben, setzen möchte?
Ich habe mir ein Beispiel herausgesucht , jedoch wurde es mit Arduino realisiert (siehe Anhang) und ich möchte es ja mit dem MyDaq versuchen.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
RE: Servomotor steuern mit Ni my DaQ
Bitte . Da steht noch LabVIEW 2011. Dein VI ist aber für LabVIEW 2012.
Zu Deinem Problem:
Hast Du schonmal im Examplefinder geschaut. Da gibt es einige Beispiele zur analogen Ausgabe über DAQmx.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
ja ich habe die Beispielsuche angeguckt und es hat mir sehr geholfen.
Danke dafür
Ich habe mir nun ein Signal erstellt und kann es nun über die Hardware zum Servomotor senden.
Soweit so gut. Wenn ich bei einem Duty Cycle von 95 habe und dann auf 96 ändere, so bewegt sich der Servomotor einen Schritt.
Insgesamt fährt der Motor von 0 bis 180 grad, also 26 Schritte ( 13 Schritte bis zur Mittelstellung von 90 grad).
Da ich ja um einen Schritt zu fahren 1 mal von 95 bis 96 Duty schalten muss und dann wieder zurück, habe ich mir etwas mit einer case schleife gebaut, um ständig einen Schritt fahren zu können.
Nun möchte ich mit LV realisieren, dass ich, wenn ich z.B ein Bedienelement von 5 habe, der Motor 5 Schritte fährt, also muss ich meine Case Operation 5 mal aktivieren.
Leider komme ich an dem Punkt nicht weiter, ich habe schon soviel probiert...ich hoffe ihr könnt mir weiterhelfen.
Zitat:Ich habe mir nun ein Signal erstellt und kann es nun über die Hardware zum Servomotor senden.
Das bezweifle ich aber stark…
Du erstellst eine Waveform mit 1000 Samples, benutzt aber DAQmxWrite in der "1Kanal 1Sample"-Variante. Wieviele Samples werden von den 1000 in der Waveform wohl ausgegeben werden?
Zitat:Soweit so gut. Wenn ich bei einem Duty Cycle von 95 habe und dann auf 96 ändere, so bewegt sich der Servomotor einen Schritt.
Echt? Der reagiert auf Duty-Änderung von 1% mit dem Fahren eines Schrittes? Geiler Motor…
Zitat:Nun möchte ich mit LV realisieren, dass ich, wenn ich z.B ein Bedienelement von 5 habe, der Motor 5 Schritte fährt, also muss ich meine Case Operation 5 mal aktivieren.
Das hört sich an, als wenn man eine FOR-Loop nutzen sollte…
Warum nutzt du eigentlich den AO, um Rechteckpulse auszugeben? Hast du keinen DO zur Verfügung?
ja ich weiss ..ein sample zurzeit <,p
Ich habe mir jetzt aus einer Case-Schleife einen Regler gebaut, damit kann ich jede Stellung anfahren...jedoch reagiert der Motor wie schon geschrieben nur bei 95 suf 96 Duty Cycle und er fährt nur in einer Richtung ...wie kann ich den Motor in die andere Richtung steuern?
MFG HC
Achja und nochmal zum AO? ...Was spricht denn dagegen? ..ja ich habe noch freie Plätze beim DO
Zitat:jedoch reagiert der Motor wie schon geschrieben nur bei 95 suf 96 Duty Cycle
Solche Motoren kenne ich bisher nicht…
Zitat:er fährt nur in einer Richtung
Was sagt denn das Handbuch des Motors dazu? Was erwartet der Motor für Signale/Pegel, um in eine beliebige Richtung zu fahren?
Zitat:wie kann ich den Motor in die andere Richtung steuern?
Steht das nicht im Handbuch/Datenblatt zum Motor?
Zitat:zum AO? ...Was spricht denn dagegen? ..ja ich habe noch freie Plätze beim DO
- Beim DO musst du dich nicht um die Signalpegel kümmern (Standard ist 5V-TTL).
- Bei besseren NI-Karten hast du auch CTR, PWM etc. zur Verfügung. Damit kann man sehr genaue PWMs erzeugen oder Pulsfolgen ausgegeben - ohne dass man diese händisch zusammenstückelt…
Hi again,
ich habe leider kein Datenblatt, da es sich um ein altes Model handelt und ich nach langer Suche nichts im Internet gefunden habe.
Es ist ein Modelcraft S-12 Servomotor.
Ich kann mit der Software Ni Elvis ein Funktionsgenerator auswählen und den Servo über Nidaq-Karte angesteuern und der Motor steuert mit meinen Werten( oben im Beitrag genannt) bei einem Duty- Cycle von 2- 13 Rückwärts und Vorwärts.
Ich weiss nicht was ich falsch mache, ich habe zwar eine Steuerung mit LV erstellt und kann in einer Richtung jeden Winkel anfahren, jedoch ist ein Schritt von 95 auf 96 Duty Cycle ja nicht der Normalfall und ich musste es wie folgt prgrammieren, da ich auf keine andere Lösung kam.
Also habe ich den einem Vorwärts- Schritt mit 2 case-schleifen erstellt und an den Duty Eingang meines LV Baustein, in dem ich das Signal erzeuge , angeshlossen.
Im Case 1: Fall1(True) erstellt ein Zahlengenerator immer 1sen und nullen gibt die diese Werte an den Eingang des case1, damit ich Dauerhaft einen Schrit fahren kann, wenn Case 1 True ist. Bei false passiert nichts
Im Case 2:Fall 1(True): 95+1, (False)Fall 2: 96-1. Hier regel ich wie eben Beschrieben den einen Schritt.
An den Eingang vom case 1 ist dann wieder ein case angeschlossen, bei dem ich mit einem selbgebauten Zälher zb. bei Schritt 90 grad in der case-Schleife 23 Schritte hochzähle und dabei eine 1 ausgäbe, sodass diese 1 in den Case 1 gelangt und fall True aufruft.
Ist er runtergezählt so bekommt der case 1 eine 0 und nicht passiert, der Motor hält die Position von 90 grad.
Das habe ich dann in 5 grad schritten realisiert und den Eingang diese Zähler case an ein Bedienellement regler angeschlossen und kann bei einer Skala von 0-180 die 36 Positionen wunderbar anfahren.
Jedoch ist die Frage , wie realisiere ich die Steuerung in die andere Richtung, wenn der Motor nur bei 95 auf 96 Dutx Cycle einen Schritt in eine bestimmte Richtung macht?
---------------------------------------------------------------------------------------------------------------------------------------
Vlt. muss ein neuer Lösungsansatz her und ich mache etwa falsch!!!!!!!!
Oder ist mein Rechtecksignal falsch ?
---------------------------------------------------------------------------------------------------------------------------------------
Im Normalfall erstellt man doch ein Signal von Länge 20 ms und bei 1- 2ms ist entweder der High oder Lowpegel erreicht.
Die Impulsdauer in der ersten Phase eines Servosignals ist zwischen 1ms und 2ms lang. Wobei das jeweils die Endstellungen des Servos sind, an denen es noch nicht mechanisch begrenzt wird. Eine Pulslänge von 1.5ms wäre dann Servomittelstellung. Für die Positionsauswertung des Servos haben die 20ms Wiederholdauer keine besondere Bedeutung, sieht man einmal davon ab, dass ein Servo bei kürzeren Zeiten entsprechend öfter Positionsimpulse bekommt und daher auch öfter die Position gegebenenfalls korrigiert, was möglicherweise in einem etwas höheren Stromverbrauch resultiert.
Und dieses Siganl verändert man dann mit dem Duty Cycle
Muss ich mir vlt. einen PID-Regler mit Ist und Sollwert bauen.ALso den Istwert mit der Servoposition und den Sollwert der Position.
Ist es denn möglich das ich das mit nidaq read (Istwert) und nidaq write (Sollwert) realisiere?
Geht das überhaupt?
Da ich eine externe Stromquelle,Netzteil 5v verwende und ich nicht für + und - die vorhandenen vorhandenen analogports der nidaq.Karteverwende, da ansonsten der Stromverbrauch zu gross wird und ein Fehler im programm angezeigt wird.
Soll ich den Spannungsverlust eventuell mit einem Kondensator ausgleichen?
Ich hoffe mir kann geholfrn werden und ich habe es einigermassen verständlich geschrieben.
Wieso kann ich denn mit dem Ni Elvis den Servomotor in beide Richtungen steuern ?
Habe den Motor an einer externen Spannungsquelle und nur das Steuersignalkabel im analog Output 0.