Hallo allerseits,
ich habe hier einen bipolaren Schrittmotor vor mir liegen.
Er ist sehr klein und stammt aus einem alten Drucker.
Nun ist meine Frage, wie steuere ich diesen Motor an?
Ich habe mich auf RN-Wissen über Schrittmotoren informiert, aber ich
stehe auf dem Schlauch. Ich verwende keinen Treiber für den Motor, er
hängt also direkt am Atmega16. Ich habe bis jetzt nur Beispiele
gefunden, die mit Treiber aufgebaut wurde. Im Datenblatt steht "can be
directly driven by a µ-controller".
Mein Programm sieht folgendermaßen aus und der Schrittmotor zuckt auch
hin und her.
Aber wie würde man es realisieren, dass er z.B einmal von 0-180° fährt?
Es wird doch wohl nicht so sein, dass ich jetzt jeden Schritt einzeln
definieren muss?
VG Jörg
$regfile = "m16def.dat"
$crystal = 1000000
$hwstack = 10
$swstack = 10
$framesize = 10
Dim Warten As Integer
warten = 1000
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Do
Portd.0 = 0
Portd.1 = 1
Portd.2 = 0
Portd.3 = 1
Waitms Warten
Portd.0 = 0
Portd.1 = 1
Portd.2 = 1
Portd.3 = 0
Waitms Warten
Portd.0 = 1
Portd.1 = 0
Portd.2 = 1
Portd.3 = 0
Waitms Warten
Portd.0 = 1
Portd.1 = 0
Portd.2 = 0
Portd.3 = 1
Waitms Warten
Loop
End
Jörg schrieb:> Ich verwende keinen Treiber für den Motor, er> hängt also direkt am Atmega16.
Da würde ich mich mal im Datenblatt des µC schlau machen, welcher
maximale Strom an den Ausgängen zugelassen ist. Das sollte mich sehr
wundern, wenn der bei direktem Anschluß des Schrittmotors nicht
überschritten wird.
> Im Datenblatt steht "can be directly driven by a µ-controller".
In wessen Datenblatt?
> Es wird doch wohl nicht so sein, dass ich jetzt jeden Schritt einzeln> definieren muss?
Der Schrittmotor muss nicht nur jeden Schritt, sondern für jeden Schritt
auch noch die Phasensignale wissen. Von selbst passiert das nicht.
Michael A. schrieb:> In wessen Datenblatt?
Im Datenblatt des Motors. 20mA sind als Maximalstrom des Motors
angegeben, typ. sind 15mA
Michael A. schrieb:> Der Schrittmotor muss nicht nur jeden Schritt, sondern für jeden Schritt> auch noch die Phasensignale wissen. Von selbst passiert das nicht.
Ok, dass ist scheinbar eine wichtige Info. Aber was ist ein Phasensignal
bzw wie sieht es aus?
Karl Heinz Buchegger schrieb im Beitrag #2996905:
> Schon mal was von Schleifen gehört?> Zb FOR, WHILE
Ja, dass Schleifen dafür nötig sind ist mir schon bewusst, aber ich
weiss nicht so recht wie ich das ganze verpacken soll.
Jörg schrieb:> Michael A. schrieb:>> In wessen Datenblatt?>> Im Datenblatt des Motors.
Aha.
Und woher weiß dein Datenblatt, was dein µC alles kann.
> 20mA sind als Maximalstrom des Motors> angegeben, typ. sind 15mA
ok, in diesem Fall könntest du Glück haben. 20mA kann ein Pin eines
Mega16 aufbringen. Dies deshalb, weil das so im Datenblatt des M16
steht!
Machs nicht so kompliziert.
Wieviele Drähte kommen aus deinem Motor heraus?
Bei einem Bipolar Motor sollten das eigentlich 4 Drähte sein.
WEnn das so ist, dann mach erst mal eine Vorübung.
Trenn den Motor mal vom µC und versuch den mal mit der Hand zum bewegen
zu bringen. Und das machst du so.
Du hängst alle 4 Drähte an Masse.
Danach nimmst du dir EINEN der 4 Drähte und verbindest den mal mit +5V.
Der Motor wird einen Satz machen und der Magnet im inneren richtet sich
in diese Richtung aus.
Danach klemmst du diesen Draht wieder zurück an Masse und suchst dir
einen der anderen 3 Drähte aus.
Und jetzt musst du genau schauen. Ideal ist es, wenn du dir mit einem
Klebeband ein Fähnchen an die Achse machst, so dass du die Bewegung gut
sehen und abschätzen kannst.
Wenn du die restlichen 3 Drähte durchprobierst (jeweils an +5V hängst),
dann wirst du sehen, dass der Motor bei 2-en davon einen kleinen Satz in
eine Richtung macht (wobei bei diesen beiden der Schritt jeweils in
entgegengesetzte Richtungen geht) und bei einem einen größeren Schritt.
Zwischendurch mit dem ersten Draht wieder in die Ausgangslage
zurückstellen!
Und jetzt variierst du durch.
Was du suchst ist die richtige Reihefolge, in der du einen nach dem
anderen jeweils einen Draht an +5V hängst und der Motor jeweils einen
kleinen Schritt in immer die gleiche Richtung macht. WEnn du die
Reihenfolge immer und immer wieder wiederholst macht der Motor jeweils
einen kleinen Schritt in immer dieselbe Richtung.
Das geht ganz gut, wenn man jeweils einen Draht nach dem anderen an
jeweils +5V hängt und die anderen an Masse hängen. Markier dir die
Drähte! Mit Klebeband kleine Fähnchen an die Kabel machen und mit
Filschreiber 1, 2, 3, 4 draufschreiben. Beim Durchprobieren der 3 Drähte
zwischen durch immer wieder mit dem ersten Draht in die definierte
Ausgangsposition zurückstellen lassen! Du musst immer von der gleichen
Ausgangslage ausgehen, wenn du die restlichen 3 Drähte auseinander
sortierst.
Hast du die Reihenfolge (du brauchst dazu kaum länger als 10 Minuten),
dann alles wieder an den µC hängen und ein Programm schreiben, welches
genau das gleiche was du händisch gemacht hast, mit den Portpins macht.
In einer Schleife.
Voila, der Motor dreht.
(wenn die Störungen durch den Motor nicht so hoch sind, dass sie den µC
zum Abstürzen bringen)
Karl Heinz Buchegger schrieb:> Wieviele Drähte kommen aus deinem Motor heraus?
Genau 4.
Danke für die ausführliche Beschreibung!
Der Motor fährt mit diesem Programm hier 120 Schritte vor und dann
wieder 120 Schritte zurück.
Allerdings kommt mir der Motor sehr laut vor. Kann man da Abhilfe
schaffen?
Nochmals vielen Dank für die Erklärung :)
Hier noch der Programmcode
$regfile = "m16def.dat"
$crystal = 1000000
$hwstack = 10
$swstack = 10
$framesize = 10
Dim Warten As Integer
Warten = 300
Dim X As Integer
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Spule1a Alias Portd.0
Spule1b Alias Portd.1
Spule2a Alias Portd.2
Spule2b Alias Portd.3
Spule1a = 1
Spule1b = 0
Spule2a = 0
Spule2b = 0
Do
If X < 120 Then
Spule1a = 1
Spule1b = 0
Spule2a = 0
Spule2b = 1
Waitms Warten
Spule1a = 1
Spule1b = 0
Spule2a = 1
Spule2b = 0
Waitms Warten
Spule1a = 0
Spule1b = 1
Spule2a = 1
Spule2b = 0
Waitms Warten
Spule1a = 0
Spule1b = 1
Spule2a = 0
Spule2b = 1
Waitms Warten
End If
If X > 120 Then
Spule1a = 0
Spule1b = 1
Spule2a = 0
Spule2b = 1
Waitms Warten
Spule1a = 0
Spule1b = 1
Spule2a = 1
Spule2b = 0
Waitms Warten
Spule1a = 1
Spule1b = 0
Spule2a = 1
Spule2b = 0
Waitms Warten
Spule1a = 1
Spule1b = 0
Spule2a = 0
Spule2b = 1
Waitms Warten
End If
Incr X
If X > 240 Then X = 0
Loop
End
Spiel mal mit den Zeiten zwischen den Schritten rum.
Ist die zu lang, dann bremst du dadurch den Rotor an jeder neuen
Position wieder ab und beschleunigst ihn wieder. Wenn die Zeit passt,
dann werden die Spulen genau zum richtigen Zeitpunkt weitergeschaltet,
so dass der Rotor konstant dreht. Fast so wie ein Esel, der der Karotte
nachläuft, die man ihm mit der Angel vors Maul hält.
Karl Heinz Buchegger schrieb:> Voila, der Motor dreht.> (wenn die Störungen durch den Motor nicht so hoch sind, dass sie den µC> zum Abstürzen bringen)
Warum sollte der Motor Störungen produzieren. Solange der Strom immer
schön fließen kann, entstehen keine bösen Induktionsspannungen und der
µC bleibt am Leben.
Karl Heinz Buchegger schrieb:> Spiel mal mit den Zeiten zwischen den Schritten rum.
Habe ich, bin jetzt auf 1ms runtergegangen, aber es ist immer noch recht
laut.
Aber wenn ich noch weiter runter gehe, passiert gar nichts.
Also wenn ich statt
"waitms 1"
"waitus 1000" schreibe, dann fiept der Motor nurnoch. Aber rein
theoretisch müsste es doch das gleiche sein, oder?
Jörg schrieb:> Karl Heinz Buchegger schrieb:>> Spiel mal mit den Zeiten zwischen den Schritten rum.>> Habe ich, bin jetzt auf 1ms runtergegangen, aber es ist immer noch recht> laut.>> Aber wenn ich noch weiter runter gehe, passiert gar nichts.>> Also wenn ich statt>> "waitms 1"> "waitus 1000" schreibe, dann fiept der Motor nurnoch. Aber rein> theoretisch müsste es doch das gleiche sein, oder?
Nö.
Wenn der falsche Hase auf der Hunderennbahn zu schnell ist, dann kommen
die Hunde nicht mehr hinterher. Und irgendwann kennen sie sich nicht
mehr aus, da der Hase dann von hinten kommt und sobald sie einen Schritt
drauf zu machen ist der Hase auch schon wieder mit Volldampf weg.
Du erzeugst ein magnetisches Drehfeld. Der Magnet im inneren muss auch
eine Chance haben, dieser Drehung zu folgen!
Karl Heinz Buchegger schrieb:> Du erzeugst ein magnetisches Drehfeld. Der Magnet im inneren muss auch> eine Chance haben, dieser Drehung zu folgen!
Das ist klar. Aber waitus 1000 ist doch das selbe wie waitms 1, oder
irre ich da?
Ich habe den Motor jetzt vom Vollschrittbertrieb in den
Hlabschrittbetrieb umgestellt. Es wurde dadurch schon deutlich leiser,
aber es ist mir immer noch zu laut.
Habe ich noch weitere Möglichkeiten, den Motor sanfter und ruhiger
laufen zu lassen?
Ich habe gelesen das es möglich ist, das ganze mit einer Art Sinus und
Cosinus Funktion sehr sanft laufen zu lassen, aber wie soll das
funktionieren? Also das Prinzip ist mir schon klar, dass man sozusgen
nicht hart ausschaltet sondern weich die Polung wechselt. Aber wie fasst
man das in ein Programm?
Jörg schrieb:> Karl Heinz Buchegger schrieb:>> Du erzeugst ein magnetisches Drehfeld. Der Magnet im inneren muss auch>> eine Chance haben, dieser Drehung zu folgen!>> Das ist klar. Aber waitus 1000 ist doch das selbe wie waitms 1, oder> irre ich da?
Oops. Mein Fehler. Ich hab nicht auf die Zahlen geachtet.
Spess53 schrieb:> Gar nicht. Man benutzt einen passenden Treiber.
Ok, dass klingt vernüftig. Was wäre denn ein passender Treiber?
Vllt auch einen, denn man bei den üblichen Verdächtigen wie Reichelt
oder ähnlich bekommt.
Hi
>Ok, dass klingt vernüftig. Was wäre denn ein passender Treiber?>Vllt auch einen, denn man bei den üblichen Verdächtigen wie Reichelt>oder ähnlich bekommt.
Ich weiß nicht, wer alles zu deinen üblichen Verdächtigen zählt. Der
Shop gehört bei mir mit dazu:
>http://www.watterott.com/de/Schnittstellen/Motorsteuerungen/Schrittmotor
MfG Spess
Neugieriger schrieb:> Wie das?
Ich habe zwischen den 4 Schritten, mit denen ich den Motor angesteuert
habe noch 4 Zwischenschritte hinzugefügt.
Also sind es jetzt ingesammt 8 Schritte.
Sehr anschaulich ist es hier dargestellt:
http://www.rn-wissen.de/index.php/Schrittmotoren
Unter dem Punkt "Bipolar Ansteuerung Halbschritt"
Spess53 schrieb:> Ich weiß nicht, wer alles zu deinen üblichen Verdächtigen zählt. Der> Shop gehört bei mir mit dazu:>>>http://www.watterott.com/de/Schnittstellen/Motorst...
Vielen Dank, ich habe mir mal einen bestellt und werde mich daran
versuchen :)