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
Ohh, da fehlt noch was sehe ich gerade. Spule 1a an Portd.0 Spule 1b an Portd.1 Spule 2a an Portd.2 Spule 2b an Portd.3
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?
Hi
> Aber wie fasst man das in ein Programm?
Gar nicht. Man benutzt einen passenden Treiber.
MfG Spess
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
Jörg schrieb: > Ich habe den Motor jetzt vom Vollschrittbertrieb in den > Hlabschrittbetrieb umgestellt. Wie das?
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 :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.