Schrittmotor mit EasyDriver bewegen

Hallo!

Irgendwie möchte meine Kombination aus Schrittmotor (NEMA 17 von Watterott) und EasyDriver 4.3 (auch von Watterott) sich nicht bewegen.

Ich habe das Ganze aufgebaut wie auch hier gezeigt, aber da tut sich nichts.

Ich habe den Beispielcode verwendet und auch eine gekürzte Version von mir, aber alles was passiert ist, dass die Achse blockiert, sich aber nirgendswo hinbewegt...

int DIR = 3;
int STEP = 2;
int MS1 = 13;
int MS2 = 9; 
int SLEEP = 12;


void setup() {
  pinMode(DIR, OUTPUT);
  pinMode(STEP, OUTPUT);
  pinMode(MS1, OUTPUT); 
  pinMode(MS2, OUTPUT); 
  pinMode(SLEEP, OUTPUT);
  
  digitalWrite(DIR, LOW);
  digitalWrite(MS1, HIGH); 
  digitalWrite(MS2, HIGH); 
  digitalWrite(SLEEP, HIGH);
}

void loop() { 
  while(1)
    {
      digitalWrite(STEP, LOW);
      digitalWrite(STEP, HIGH);
      delay(100);
    } 
}

Woran könnte das liegen, was gibt´s so an "Standard-Gründen"?

Spannungsversorgung ist 12 V DC mit maximal 1A.

Besten Dank im Voraus!

Ähm, mag sein daß ich was übersehe....

Aber das While(1) macht keinen Sinn.... oder irre ich mich da?

teste es mal ohne while(1) { .... }... also nur im loop....

Lieber Gruß ChrisS

@ChrisS: Macht keinen Sinn, schadet aber auch nicht! Die Arduino main-Funktion macht nichts anderes!

Wenn die Achse "blockiert" sind die Ausgangstreiber intakt und enabled! Soweit so gut!

Das einzige was mir auffällt, ist die direkte Abfolge von step->low step->high. Versuch mal ein delay(1) dazwischen zu hängen. Die Doku ist vom Mai letzten Jahres und ich meine die Implementierung von digitalWrite wurde danach erheblich optimiert.

Der Pin für step ist mit Sicherheit richtig und intakt? Du könntest mal testen die Verbindung zwischen Arduino und Easy-Step->step zu lösen, einen 10K Widerstand zwischen Easy-Step->step und 5V (Pull-up) zu hängen und dann mit einem Draht zwischen dem Pin und Masse manuell zu steppen. Wenn das geht, liegt es am Programm oder am Arduino, sonst am Easy-Step.

Gruß, Lupus

Hast du die Signal-Masse vom Easy-Driver mit der vom Arduino verbunden?

Gruß, Lupus

Hey! Die while(1)-Schleife ist noch vom Ausprobieren übrig...

Ich hab den Motor mittlerweile gedreht bekommen, indem ich EasyDriver->step und 5V vom Arduino kurz verbunden hab. Da hat er einen (Mikro)Schritt gemacht. Wenn man das wiederholt, dann schreitet er auch voran, das geht also ist von Hand aber etwas kompliziert.

Mein Testcode sieht mittlerweile so aus:

void loop() { 
  while(1)
    {
      digitalWrite(STEP, LOW);
      delay(10);
      digitalWrite(STEP, HIGH);
      delay(100);
    } 
}

(Rest unverändert)

Welches wäre denn die Signal-Masse vom EasyDriver? Ich hab Masse vom Netzteil als auch Masse vom Arduino miteinander verbunden und alle Massen am EasyDriver mit darauf gelegt... Vielleicht ist das auch das Problem?

Update! :-)

Habe jetzt den 2N2222a der bei meinem Einsteigerset dabei war mit eingebaut.

Pin 2 auf die Basis, 5 Volt vom Arduino auf den Kollektor und EasyDriver->step auf den Emitter.

Läuft fröhlich im Kreis das Gerät, warum bekomm ich das nicht direkt hin?

Kannst du mal testen was passiert wenn du den delay(10) erhöhst... vielleicht auch mal auf 100?

Lieber Gruß Chris

PS: Grundsätzlich sollte man überflüssigen Code entfernen, auch wenn er nicht "schadet". :fearful:

Interessant! Wenn ich den delay zwischen LOW und HIGH auf 100 setze funktioniert es auch... Dubios, dubios...

g

Schön, ja, bei mir klappts auch nur bis etwa 25… :slight_smile:

Ich versuchs mal mit meiner unqualifizierten Erklärung…

Der Schrittmotor hat eine “eigene” Anlaufträgheit… ist der Puls zu schnell schafft der Motor es nichtmehr rechtzeitig die Stellung zu erreichen die er haben müßte um weiter zu drehen…
du hast quasi Schrittverluste… Du bist schlichtweg für das Anfahren zu schnell… wenn der motor bereits dreht kann man etwas schneller werden…

Man kann wohl (da müßte sich mal ein echter Profi äußern) Strom und Spannung anheben, um im Mikroschrittbetrieb das Laufverhalten zu stabilisieren und so auch zu verbessern.

Aus meiner Warte (mit meinem Wissen) ist es Sinnvoll beide Zustände gleich lang zu schalten… LOW/HIGH … ein Schrittmotor ist kein Servo… (bei einem Servo ist das mit den unterschiedlichen flanken in der Tat so… bei einem Schrittmotor meines Wissens nicht…

Da der Mikroschrittbetrieb sowieso die Spulen möglichst weich “interpolieren” soll und tut, sind unterschiedlich lange Flanken eher kontraproduktiv… er soll ja gerade möglichst gleichmäßig drehen…

Lieber Gruß
ChrisS

PS: Du mußt für dich austesten was du an minimal delay sauber ohne verlust fahren kannst… hängt mit vielen Faktoren zusammen… Trägheit, Gegengewicht etc…

Generalerklärung: Der Easydriver benutzt einen A3967 von Allegro als Treiberbaustein. Dieser Treiber ist ein Stromtreiber für Schrittmotore. Der Easydriver hat eine Potentiometer um den Strom zu limitirern und zwar von 150 bis 750mA. Damit der Treiber den Strom bestimmen kann muß die Versorgungspannung so groß gewählt werden daß weder der Windungswiderstand noch die Windungsinduktion den Strom limitiert. Dies ist gegeben wenn die Versorgungsspannung das 2 bis 3-fache der Nennspannung beträgt. Der beschriebene Motor ( 12 V 0,33 A, 35 Ohm, 46 mH) braucht also 24 bis 36 V damit die Microschritte richtig funktionieren und der Motor weich läuft. Der Easydriver verkraftet max 30V also versuchs mit etwas zwischen 24 und 30V. Das Potentiometer muß fast ganz auf minimum gedreht sein. Um die Microschritte zu steuern steuert der Treiber den Strom durch die Spulen des Motors. Der Strom darf nicht durch den Motor begrenzt werden da ansonsten der Motor nicht die Microschritte macht.

Ein Schrittmotor muß jede Drehzahl von 0 bis zur maximalen Drehzahl machen können. Wenn er, wenn er langsam drehen sollte, nicht gleichmäßig dreht dann ist die Ansteuerung falsch. Grüße Uwe

Besten Dank für eure guten Erklärungen! :-D

Schönes Wochenende wünsch ich.