Schrittmotor Probleme

Hallo zusammen

Ich bin dabei ein paar Schrittmotoren mit meinem Arduino Mega anzusteueren und hab ein paar Probleme dabei:

Folgendes Setup hab ich:

Arduino Mega
Stepper Driver: Pololu A4988: http://www.pololu.com/catalog/product/1183
Stepper Motor: Nanotec ST2818L1006-A http://de.nanotec.com/downloads/pdf/1199/ST2818L1006.pdf
Power Supply: sunpower S-100F-24 http://www.sunpower-uk.com/product/S-100F-24/S-100F-24/default.htm

Ich hab mir zuerst die ganze Schaltung und das Arduinoprogramm mit zwei alten Steppermotoren zusammengebastelt
und eingehend getestet und ausprobiert. (Die alten Schrittmotoren sind mercury motor SM-42BYG011-25)

Das hat alles wunderbar funktioniert, ich konnte beide Motoren mit der AccelStepper Library ansteuern und zum Drehen
bringen.

Dann hab ich versucht, genau das gleiche Patch, mit genau derselben Schaltung aber mit den Nanotecmotoren laufen
zu lassen, und da kamen die Probleme.

Der nanotec Motor beginnt nur zu wackeln und zittern, sobald ich den Pololutreiber mit Strom versorge.
Wenn ich ihn drehen lasse, tut er das zwar irgendwie, aber einfach ziemlich ruckelig und wackelig.
Ich habe den Motor laut Datenblatt bipolar seriell angeschlossen.

Bei der Strombegrenzung bin ich mir nicht ganz sicher, wie ich die am besten Messen soll, vielleicht hat da jemand
ein paar Tipps?

Könnte es an der Strombegrenzung liegen? Kriegt der Motor vielleicht zu wenig / zu viel Strom? Oder hab ich beim Anschliessen
was falsch gemacht? Muss ich die beiden übrigen Kabel (Am Motor sinds ja 6, der Treiber hat nur 4 Anschlüsse) irgendwie noch
mit anderen verbinden? Hab sie bis jetzt einfach frei gelassen.

Hoffe es kann mir jemand helfen...
Merci und Gruss
t

Die Mittelanzapfungen der beiden Wicklungen sind frei und zu allem isoliert zu halten.
Ansonsten finde ich keinen Fehler.
Wenn Du dem Motor zuwenig Strom gibst, hat er keine Kraft, dreht aber gut. Wenn Du einen zu hohen Strom einstellst, dann kann der Schrittmotortreiber einige Microschritte nicht richtig auflösen, der Motor dreht aber auch wenn etwas ruckelig und laut.

Das einzige was mir einfällt ist, daß Du 2 Kabel verwechselt hast und nicht Wicklung A mit dem Ausgang A und Wicklung B mit den Ausgang B verbunden hast (a1-a1; a2-a2, b1-b1- b2-b2 ) sondern gemischt.(a1-a1, a2-b1, b1-a2, b2-b2).
1 mit Ausgang 1 (1A und 1B) und Wicklung 2 mit Ausgang 2 (2A und 2B) verbunden hast
Wicklung A: Schwarz-Grün, Wicklung B: rot Blau.

Den Strom einzustellen wähle Full Step und lasse den Motor stehen. Je nach Position des Motors mißt Du an der Spannungsversorgung hast Du 70% oder 140 % vom Nennstrom.
Siehe http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Robotics/4983.pdf Seite 11

Siehe http://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pdf Seite 14

Viele Grüße Uwe

[EDIT]
War mal wieder zu schlampig beim recherchieren.
[/EDIT]

Hallo,
wackeln ist doch super...
Bei mir war die Ursache, dass die Drehrichtung nicht beschaltet war.
Du musst den Pin auf GND oder VCC legen ( rechts oder links-Lauf )

den Stepper würde ich wie folgt anschließen:
die COM Anschlüsse frei lassen ( gelb und weiß ) die brauchst Du nur für unipolaren Betrieb
Der Pololu ist für bipolaren Betrieb gedacht. ( Google ist Dein Freund )
schwarz und grün = eine Spule z.B. 1A - 1B
rot und blau = die andere Spule z. B 2A - 2B

wenn Du die Platine mit Spannungsreglern hast:
Spannungsversorgung an VMot und GND
Brücke von 5 V nach VDD = Spannungsversorgung Pololu mit 5 Volt
dann das Blink-Beispiel auf den Arduino = Takt auf Pin 13, LED blinkt
Pin 13 mit STEP verbinden
GND Arduino mit GND Pololu verbinden damit beide Platinen ein gemeinsames Bezugspotenzial haben

dann sollte sich der Stepper drehen

MS 1, MS 2, MS 3 haben interne Widerstände für definierte Zustände auch ohne Beschaltung
mit diesen Pins kannst Du die Schrittweite wählen

Datenblatt beachten

Der Trimmer dient der Strombegrenzung, die Einstellung steht auch im Datenblatt

ich habe auch im Thread
http://arduino.cc/forum/index.php/topic,69094.0.html
ähnlich geantwortet

Gruss
Kurti

Danke euch beiden für die rasche Antwort

Ich habe jetzt alle Anschlüsse nochmals durchgecheckt und hab alles genau so angeschlossen wie ihr das vorgeschlagen habt.
Bis auf die zusätzliche Groundverbindung von Arduino zu Pololu hatte ich bereits alles so verkabelt.
Allerdings ist mein Problem immer noch dasselbe...

Auch mit dem Stepper-Beispiel-Sketch passiert dasselbe. Sobald ich den Motortreiber mit Strom versorge beginnt der Motor
an zu ruckeln und wackeln und ist dabei auch nicht gerade leise..

Drehen tut er zwar, wenn ich ihm das über mein Sketch befehle, aber wie gesagt, rucklig und wackelig.

Mit dem anderen Steppermotor den ich hab funktionierts prima. Ich sehe allerdings nicht, worin der Unterschied liegt.
Klar, der andere Motor ist etwas anders dimensioniert, und hat nur vier Anschlusskabel, aber sonst ist ja alles genau
dasselbe...

Könnte es evtl. sein dass die Kabel am Motor irgendwie vertauscht sind? Wie finde ich denn raus, welches Kabel zu welcher
Wicklung gehört? (Falls wir mal annehmen, dass da bei der Proguktion was vertauscht wurde)

Den Strom begrenzen konnte ich jetzt wie Uwe beschrieben hat... Hab ihn jetzt auf 1.34A eingestellt, was 2x 0.69A bedeutet.
(Im Datenblatt steht pro Phase 0.69A. Ich nehm mal an, dass die Begrenzung dann doppelt so hoch sein muss, da ich ja zwei Phasen ansteuere?!)

Andere Ideen?

danke und gruss,t

Nein , Die Stromeinstellung ist nicht so einfach.

Den Strom begrenzen konnte ich jetzt wie Uwe beschrieben hat... Hab ihn jetzt auf 1.34A eingestellt, was 2x 0.69A bedeutet.
(Im Datenblatt steht pro Phase 0.69A. Ich nehm mal an, dass die Begrenzung dann doppelt so hoch sein muss, da ich ja zwei Phasen ansteuere?!)

Du mußt den Schrittmodus berücksichtigen. Bei Full Step Modus limitiert der A4988 auf 70% des Nennstroms pro Wicklung. Also mußt Du auf 966mA einstellen ( 690mA *2 * 70%)

Könnte es evtl. sein dass die Kabel am Motor irgendwie vertauscht sind? Wie finde ich denn raus, welches Kabel zu welcher
Wicklung gehört? (Falls wir mal annehmen, dass da bei der Proguktion was vertauscht wurde)

Einfach durchmessen. Zwischen schwarz und grün bzw rot und blau mußt Du 9,2 Ohm beim Nanotec ST2818L1006-A messen.

Viel Grüße Uwe

Hallo,
wie hast Du denn den Strom eingestellt ?
Hast Du ein Meßgerät ?
Wenn Du den Strom in einer Wicklung mißt, darfst Du natürlich nicht den doppelten Strom einstellen.
Damit zerstörst Du den Motor.

Der Pololu liefert ohne Takt-Signal 70 % vom Nennstrom, um den Stepper im Stillstand festzuhalten.
Du mußt also den Strom auf 0,69 A * 70/100 einstellen = 0,483 A

Die Wicklungen kannst Du mit dem Widerstandsbereich Deines Meßgerätes überprüfen.
Sie müssen niederohmig sein ( wenige Ohm ) und beide ziemlich den gleichen Widerstand haben.

Zur Ansteuerung des Motors brauchst Du kein Programm.
Es reicht den Takt-Eingang abwechselnd auf GND und VDD zu legen.
Dann muß sich der Motor Schrittweise bewegen.

Gruss
Kurti

Edit: die Finger waren wieder schneller als die Rechtschreibung
@uwefed: bitte überprüfe Deine Stromberechnung

Hallo kurti

kurti:
@uwefed: bitte überprüfe Deine Stromberechnung

Bin mir ziemlich sicher richtig gerechnet zu haben.
Im Full Step Modus sind immer beide Wicklungen stromdurchflossen und auf 70,71% des Nennstroms. (Seite 14 des Datenblatts).

tstritt schrieb

Den Strom begrenzen konnte ich jetzt wie Uwe beschrieben hat... Hab ihn jetzt auf 1.34A eingestellt, was 2x 0.69A bedeutet.

Darum nehme ich an, er mißt den Strom an der Stromversorgung und nicht an eine Phase des Motors.

Bin aber gewillt meine Meinung zu ändern, falls ich etwas falsch verstanden habe.

Grüße Uwe

Hallo,
wenn Du den Strom der Stromversorgung angegeben hast = 2* I-Wicklung 966mA und
ich den Strom pro Wicklung 0,483 A, dann haben wir beide recht.

Gruss
Kurti

Ja, 2 Sieger.
Grüße Uwe

Erstmal danke für eure Antworten!

Also ich hab nun den Strom auf 0.483A begrenzt, indem ich das Multimeter in Serie zwischen Treiber und Motor auf
einer Spule geschaltet hab. (Ich denke, dass ich vorher kurz auf 0.69A begrenzt hab, hat den Motor nicht gleich zerstört, oder?)

Ich hab dann nochmals versucht den Motor drehen zu lassen und hab jetzt festgestellt,
dass der Motor nur ruckelig läuft, wenn er das langsam tut.
Sobald er eine gewisse Geschwindigkeit erreicht, räuft er schön rund!

Nun frage ich mich natürlich, ob ich vielleicht bei der Ansteuerung noch nicht alles optimal eingestellt hab.
Wie gesagt benütze ich die AccelStepper Library und steuere den Motor wie folgt an:

#include <AccelStepper.h>

#define motor1Pin1 30      // Step Pin
#define motor1Pin2 31      // Direction Pin
#define button1 3         //Schutz L
#define button2 4         //Schutz *

AccelStepper stepper1(1, motor1Pin1, motor1Pin2);      //Generiere AccelStepper

// Variablen deklarieren
boolean initialisierung;

//Setup Funktion
void setup() {
  pinMode(button1, INPUT);                  // button1 ist input
  pinMode(button2, INPUT);                  // button2 ist input
  stepper1.enableOutputs();                 // set motorpins OUTPUT
  stepper1.setMaxSpeed(200);               // Set Speed and Acceleration
  stepper1.setAcceleration(50);
  
  initialisieren();                        // Rufe Initialisierungsvorgan auf
}
//Ende Setup

//Begin Loop
void loop() {

//Start Mechanischer Schutz (wenn schalter 1 oder 2 gedrückt dann...)
if (digitalRead(button1) == HIGH || digitalRead(button2) == HIGH) {   						  
  stepper1.moveTo(stepper1.currentPosition());    // Schrittmotor stoppen. Targetposition => CurrentPosition
  Serial.println("STOP Stepper 1");
  delay(10);                                      // warte 10 ms
  
  if (initialisierung == false) {
    stepper1.setCurrentPosition(0);              // falls Initialisierung lief, dann setzte nun Position 0
    stepper1.setMaxSpeed(200);
    stepper1.setAcceleration(50);
    Serial.println("Stepper 1 ist auf Position 0");
    initialisierung = true;
  }
} 
//Ende mechanischer Schutz

//Ist was zu tun bei stepper 1?
if (stepper1.currentPosition() != stepper1.targetPosition()) {    //ist target nicht currentposition
stepper1.run();                                                                       //drehen
Serial.print("run...");
Serial.print(stepper1.currentPosition());
Serial.print("...");
Serial.println(stepper1.targetPosition());
}
//Ende ist was zu tun bei stepper 1
}
//Ende Loop

//Initialisierungsprozedur
void initialisieren(){
  initialisierung = false;
  Serial.println("Initialisierung beginnen");
  stepper1.setMaxSpeed(100);               //langsame geschwindigkeit bei initialisierung
  stepper1.setAcceleration(20);
  delay(2000);                                        //ein bisschen warten
  stepper1.setCurrentPosition(0);
  stepper1.moveTo(-40000);                    //drehe bis irgendwann der Schutzschalter gedrückt wird...
}
//Ende Initialisierungsprozedur

Wie gesagt. Das Patch läuft eigentlich und macht auch das was ich will. Vielleicht habt ihr Erfahrung was die
Werte bei den beiden Angaben MaxSpeed und Acceleration betrifft?

Wenn ich ihn drehen lasse, dann ruckellt er ca. 3-4Sekunden bis er dann schön beginnt zu drehen. Was könnte das sein?

Muss ich da überhaupt vorsichtig sein? Kann ich den Motor zerstören, wenn ich ihn zu schnell drehen lassen will?

Ach ja, ich betreibe den Motor momentan im Fullstep-Modus. Würde das aber vielleicht später gerne ändern.
Aber dazu müsste ich ja nur beim Treiber die richtigen MS auf HIGH setzen und im Patch die Anzahl Schritte
verdoppeln oder vervierfachen, jenach dem natürlich.. Oder müsste ich da noch was anderes anpassen?

danke und gruss, t

Das "ruckelig laufen" kann auch auf Probleme mit der Verarbeitung großer Zahlen in der Bibiothek zurückzuführen sein, weil ein Überlauf auftritt und die Zahl kleiner ist als sie sein sollte.
Dafür mußt Du die Bibliothek analysieren.
Viele Grüße Uwe

Moin Moin,

warum versuchst Du es nicht ersteinmal ohne spezielles Programm.
Dadurch kannst Du herausfinden, ob es an der Hardware oder am Programm liegt.
Du legst am besten einen variablen Takt an den Pololu an und schaust, ob Dein Motor sich wie gewünscht dreht.

Meine Empfehlung bleibt: Blink Programm, Delay = durch Poti veränderbar, fertig

Jumper-Wire für Schrittweite, Richtung und die weiteren Signale.
Wenn Du damit ausgiebig gespielt hast, ist Dir völlig klar wie der Treiber funktioniert und Du kannst Dich auf das Programm konzentrieren.

Gruss
Kurti

Kurti, guter Vorschlag
Uwe