24.04.2014, 12:02
Beitrag #1
|
Hydrogencarbonat
LVF-User
Beiträge: 187
Registriert seit: Apr 2014
2013,2014
2014
DE
XXXXX
Deutschland
|
Servomotor steuern mit Ni my DaQ
Hallo,
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.
Ich hoffe ihr könnt mir weiterhelfen.
Labview File for DC Motor Control.vi (Größe: 40,05 KB / Downloads: 337)
|
|
|
24.04.2014, 12:35
Beitrag #2
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
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 !!
--------------------------------------------------------------------------
|
|
|
15.05.2014, 21:37
Beitrag #3
|
Hydrogencarbonat
LVF-User
Beiträge: 187
Registriert seit: Apr 2014
2013,2014
2014
DE
XXXXX
Deutschland
|
RE: Servomotor steuern mit Ni my DaQ
Hey,
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.
Herzliche Grüße HC
PWM.vi (Größe: 29,87 KB / Downloads: 324)
|
|
|
16.05.2014, 07:58
Beitrag #4
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Servomotor steuern mit Ni my DaQ
Hallo chemische Formel,
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?
|
|
|
16.05.2014, 17:56
(Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2014 18:03 von Hydrogencarbonat.)
Beitrag #5
|
|
|
18.05.2014, 17:34
Beitrag #6
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Servomotor steuern mit Ni my DaQ
Hallo Carbonat,
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…
|
|
|
19.05.2014, 12:16
Beitrag #7
|
Hydrogencarbonat
LVF-User
Beiträge: 187
Registriert seit: Apr 2014
2013,2014
2014
DE
XXXXX
Deutschland
|
RE: Servomotor steuern mit Ni my DaQ
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.
MFG HC
|
|
|
19.05.2014, 12:23
Beitrag #8
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Servomotor steuern mit Ni my DaQ
Per Counter (falls bei MyDAQ vorhanden) würde ich das so lösen wie hier gezeigt.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
19.05.2014, 20:24
Beitrag #9
|
|
|
20.05.2014, 08:07
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Servomotor steuern mit Ni my DaQ
Laut Doku hat das myDAQ einen Counter, dessen Output du auf PFI 3 routen kannst.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
| |