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"?
@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.
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.
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?
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