Schönen guten Morgen,
ich verzweifle hier gerade ein bisschen mit der Ansteuerung eines
Schrittmotors. Der Motor soll den Bewegungen eines Linearpotentiometers
aus einem alten Mischpult folgen.
Bei sehr niedrigen Geschwindigkeiten funktioniert das sehr gut, aber
wenn ich den Motor schneller anfahren möchte, verliert er natürlich
einige Schritte beim Richtungswechsel.
Meine erste Idee ist es jetzt, die eingelesenen ADC-Werte des Potis in
eine Art "Pufferarray" zu laden und den Motor mit etwas Verzögerung
fahren zu lassen. So könnte er wissen, wann ein Richtungswechsel
erfolgen muss um vorher abzubremsen.
Bevor ich das Rad jetzt aber neu erfinde, frage ich mich ob vielleicht
jemand ein bisschen Lektüre oder Code-Schnipsel zu diesem Thema
("Echtzeitsteuerung von Schrittmotoren?") parat hat. CNC Fräsen
Joysticksteuerung oder diese "Stepper Gauges" z.B. dürften ja z.B.
ähnliche Probleme haben.
Herzlichen Dank!
Ich wuerde da eine Positionierung machen.
Gas Poti gibt ueber den ADC die anzufahrende Position vor. Ein anderer
Programmteil sorgt dafuer, dass der Motor dorthinfaehrt.
citb
Pill Collins schrieb:> aber> wenn ich den Motor schneller anfahren möchte, verliert er natürlich> einige Schritte beim Richtungswechsel.
Du darfst auch nicht direkt die Richtung umdrehen.
Ich würde erst die Bremsrampe abfahren. Ggf. noch ein Päuschen einlegen
bis sich der Motor beruhigt hat, und dann wieder die
Beschleunigungsrampe in die andere Richtung abfahren.
Gruß Anja
Das ist mir ja auch klar, aber mein Richtungswechsel kommt ja
"unvorhersehbar", anders als im Standardbetrieb einer Fräse z.B., wo ein
Set von vordefinierten Positionen angefahren wird.
Ich frage mich, wie man so etwas mit minimaler Verzögerung realisieren
kann. Ich schätze mal bis 20-30ms dürfte die Motorbewegung hinter der
Faderbewegung hinterher hinken, ohne dass es unangenehm auffällt.
Würden eurer Meinung nach diese 20/30ms ausreichen, für eine Ent- und
neue Beschleunigung in die andere Richtung?
//edit:
Nicht wundern, habe gerade mein Account-Passwort wieder rausgefunden :)
Pill Collins schrieb:> verliert er natürlich> einige Schritte
Ein Schrittmotor, der natürlich Schritte verliert, wird vielleicht
suboptimal elektrisch angesteuert.
MfG Klaus
Ηanspeter ĸadel schrieb:> Das ist mir ja auch klar, aber mein Richtungswechsel kommt ja> "unvorhersehbar"
Was heißt "unvorhersehbar"? Das Poti macht doch keine Sprünge und den
Bedienknopf reißt beim Richtungswechsel auch keiner ab.
Wenn aus den gemessenen Potipositionen und der aktuellen Geschwindigkeit
des Motors die Beschleunigung ausrechnest, diese begrenzt und das als
Limit für die Pause zum nächsten Schritt in die Rechnung einfließen
läßt, kann der Motor auch sauber folgen.
Ηanspeter ĸadel schrieb:> Würden eurer Meinung nach diese 20/30ms ausreichen, für eine Ent- und> neue Beschleunigung in die andere Richtung?
Das kannst nur Du beantworten: Die Brems und Beschleunigungsparameter
stehen im Datenblatt des Schrittmotors.
Ich würde die Motorgeschwindigkeit in Abhängigkeit der Weg-Differenz zum
Ziel regeln um minimales Überschwingen zu erhalten.
Im Auto haust Du ja auch nicht den Rückwärtsgang rein bloß weil die
Ampel plötzlich auf "ROT" springt.
Gruß Anja
Danke euch!
Also der Motor, den ich hier zur Verfügung habe ist ein VEXTA
PK264M-01A. Ich habe folgende Dokumente dazu auftreiben können:
— http://www.orientalmotor.com/products/pdfs/opmanuals/HM-601-13JECK.pdf
—
http://ftp.cnchungary.com/Varsanyi_Peter/CNC%20vezerles%20-%20PLC/50VEXTASTEP.pdf
Komischerweise, decken sich die Angaben nicht mit dem, was auf dem Motor
hinten draufsteht: 12V / 1A. In den Datenblättern ist die Rede von 8.1V
und 0.71A/Phase. (Geben die auf dem Motor die empfohlene Dimensionierung
der Spannungsquelle an – was ja auch Quatsch wäre, zumindest bei der
Stromstärke…)
Im zweiten PDF finden sich Torque/Speed Graphen. Hier verstehe ich
nicht, warum zwei Kurven eingezeichnet sind: 24V / 48 V
Wonach ich aber eigentlich gesucht habe, waren ja empfohlene Be- und
Entschleunigungen. Kann man die irgendwie von den Graphen ableiten?
Hansi
Jede brauchbare Schrittmotorsteuerung beachtet die maximale
Beleunigung/Abbremsung und Schrittfrequenz des Motors.
Dazu ist kein "Pufferarray" nötig, sondern schlicht die
Beachtung der Start/Stop-Rampe.
http://www.s-line.de/homepages/schweikert/SMCtrl/Program/code.htm
>Wonach ich aber eigentlich gesucht habe, waren ja empfohlene Be- und>Entschleunigungen. Kann man die irgendwie von den Graphen ableiten?
Die sind natürlich lastabhängig. Stichwort Trägheitsmoment
Ich kann die Last leider nicht genau bestimmten. Deshalb hoffe ich, dass
es eine Art Faustregel gibt, mit der man mal anfangen kann zu
experimentieren.
MaWin schrieb:> Jede brauchbare Schrittmotorsteuerung beachtet die maximale> Beleunigung/Abbremsung und Schrittfrequenz des Motors.
Ich habe hier so einen Chopper-Driver von Allegro: A3967. Das zählt wohl
nicht als Schrittmotorsteuerung, oder? :)
> Dazu ist kein "Pufferarray" nötig, sondern schlicht die> Beachtung der Start/Stop-Rampe.>> http://www.s-line.de/homepages/schweikert/SMCtrl/Program/code.htm
Das klingt sehr sehr gut:
1
Berechnung der Start/Stop Rampen:
2
[…]Für einen interaktiven Betrieb, bei dem ein Benutzereingriff (z.B. über Vorwärts-
3
/Rückwärtstasten oder gar Digitaldrehgeber) jederzeit möglich sein soll, ist dieses
4
Verfahren ungeeignet.
5
Stattdessen wird hier bei jedem Berechnungszyklus (in 'Main' mit 300Hz) aufgrund der
6
aktuellen Geschwindigkeits-, Positions- und Zieldaten neu ermittelt, ob ein Motor
7
beschleunigt, abgebremst oder die aktuelle Geschwindigkeit beibehalten werden soll.[...]
Danke vielmals. Ich versuche das mal in C umzusetzen
Hallo Hansi!
> Also der Motor, den ich hier zur Verfügung habe ist ein VEXTA> PK264M-01A. Ich habe folgende Dokumente dazu auftreiben können:>> — http://www.orientalmotor.com/products/pdfs/opmanuals/HM-601-13JECK.pdf> —> http://ftp.cnchungary.com/Varsanyi_Peter/CNC%20vezerles%20-%20PLC/50VEXTASTEP.pdf>> Komischerweise, decken sich die Angaben nicht mit dem, was auf dem Motor> hinten draufsteht: 12V / 1A. In den Datenblättern ist die Rede von 8.1V> und 0.71A/Phase.
Die 1A beziehen sich auf den unipolaren Betrieb, die 0,71A auf den
bipolar seriellen Betrieb.
http://www.schrittmotor-blog.de/?p=12> (Geben die auf dem Motor die empfohlene Dimensionierung> der Spannungsquelle an – was ja auch Quatsch wäre, zumindest bei der> Stromstärke…)
Nein. Das ist die Spannung, die verwendet werden muss, wenn man die
Wicklungen direkt schaltet, ohne Stromregler.
http://www.schrittmotor-blog.de/?p=23> Im zweiten PDF finden sich Torque/Speed Graphen. Hier verstehe ich> nicht, warum zwei Kurven eingezeichnet sind: 24V / 48 V
Weil die Drehmomentkennlinie von der Versorgungsspannung des Treibers
abhängt. Wie man deutlich sehen kann, erreicht der Motor bei höheren
Spannungen im obreren Drehzahlbereich mehr Drehmoment und gibt damit
mechanisch mehr Leistung ab.
> Wonach ich aber eigentlich gesucht habe, waren ja empfohlene Be- und> Entschleunigungen. Kann man die irgendwie von den Graphen ableiten?
Ja, aber nur, wenn man die Lastmomente kennt.
Mit freundlichen Grüßen
Thorsten Ostermann
Hallo Pill Collins,
du hast nichts darüber geschrieben was du als Schrittmotortreiber
(Schrittmotorendstufe) verwendest und mit welcher Spannung du diese
betreibst.
Thorsten Ostermann hat Dir eigentlich schon alles wesentliche erklärt.
Die angegebene Spannung ist die Spannung bei der ohne Stromregelung der
Nennstrom in der Motorwicklung fließt, hängt dann vom Innenwiderstand
der Wicklung ab. U=RxI -> R=U/I D.h. bei Deinen Angaben 12V 1A, hat
der Motor 12 Ohm. Das ist für einen Schrittmotor schon ein recht hoher
Innenwiderstand. Der entsteht durch einen relativ langen dünnen Draht in
der Wicklung. Einher mit diesem langen dünnen Draht geht nahezu eine für
einen Schrittmotor schon recht hohe Induktivität.
Wenn Du Dir mal z.B. auf der Nanotec Seite Drehzahl/Drehmomenttabellen
ansiehst (die haben da zu jedem Motor ein ausführliches Datenblatt),
wirst du feststellen, das mit wachsendem Widerstand automatisch die
Induktivität zunimmt und die maximale Drehzahl ganz gewaltig in den
Keller geht!!!
Ausserdem wirst du feststellen das mit sinkender Betriebsspannung die
Drehzahl ebenfalls ganz gewaltig sinkt. Das ist auch völlig logisch, da
ein zünftiges Magnetfeld erst dann entsteht wenn ein Strom fließt und
das ist erst der Fall wenn die Induktivität in Sättigung geht. Und da
ist die Betriebsspannung mit ausschlaggebend.
Ich betreibe normalerweise 2V Motore an 48V, dann kommen die auch "in
Gang"! Dazu bedarf es dann natürlich einer Stromregelung. Es gibt da auf
dem Markt ganz tolle IC´s mit denen man super Schrittmotorendstufen
bauen kann. Nur z.B. den L6208.
Mit dem teste ich gerade rum...
Siehe:
http://www.youtube.com/watch?v=TDBFL_EKElQ&list=UU-5HTdaSo9iAf0idu_llidQ&index=2&feature=plcp
und
http://www.youtube.com/watch?v=1QAYDF5bQRQ&list=UU-5HTdaSo9iAf0idu_llidQ&index=1&feature=plcp
Die kannst du mit einem Microcontroller super mit Takt und
Richtungssignal ansteuern.
Des Weiteren hat der Motor einen Rotor. Dieser hat eine gewisse Masse
und somit ein sogenanntes Massenträgheitsmoment. Kommst du dem nun
unmittelbar mit der von Dir gewünschten Taktfrequenz, dann kommt die
Masse des Rotors so schnell nicht hinterher und du verlierst
Zwangsläufig Schritte, schlimmstenfalls dreht sich der Motor gar nicht
sondern quikt nur vor sich hin. Also, erst mal rausfinden bei welcher
Drehzahl er überhaupt ohne Beschleunigungsrampe noch anläuft (die
sogenannte Start-Stop-Drehzahl) und ab da geht ohne Rampe sowieso nichts
mehr.
Fazit:
1.) Schneller Motor (kleine Induktivität, kleiner Innenwiderstand)
2.) Hohe Betriebsspannung (um die Induktivität schnell zu laden)
3.) Vernünftige Schrittmotorendstufe mit Stromregelung.
4.) Falls die gewünschte Drehzahl über der Start Stopp Drehzahl liegt
brauchst du Rampen
...dann klapts auch...
Gruß, Andreas