Ich bin neu hier und auch neu im Arduino Universum. Daher also zu Beginn schon mal sorry, wenn ich dumme Fragen stellen sollte.
Ich möchte gerne einen Stepper Motor nutzen, um eine Linearbewegung umzusetzen. Das erste Ziel wäre das Anfahren einer beliebigen Position, nachdem man die Gewünschte Länge eingegeben hat.
Bei mir auf der Arbeit gibt es eine Kreissäge, die mit einer automatischen Längenverstellung ausgestattet werden soll. Links von der Säge gibt es bereits einen Schlitten mit einer Aufnahme, die manuell verstellt werden kann. Der Bediener soll also in Zukunft über einen kleinen Display eine Länge eingeben und der Schlitten in die gewünschte Position fahren.
Ich habe bereits einen Motor einen Driver einen Arduino UNO R3 ein, ein Netzteil und eine Spindel gekauft.
Nach langem hin und her habe ich es bereits geschafft (dank YouTube) den Motor, Netzteil und Driver anzuschließen. Mit einem Code aus dem Internet war ich auch in der Lage den Motor anzusteuern. Aktuell dreht er sich aber nur dauerhaft, sobald ich das Netzteil einstecke.
Den Code kann ich gerne gleich noch nachliefern.
Mir ist bewusst, dass ich über die Anzahl der Umdrehungen bzw. Steps und der Steigung der Spindel eine genaue x-Bewegung erzielen kann. Nur die Umsetzung und Herangehensweise fehlt mir noch.
Meine Frage wäre also jetzt wie ich im Idealfall weiter vorgehe. Hilfreiche Anlaufstellen und Tipps sind gerne gesehen. Aber wie gesagt - vieles verstehe ich einfach noch nicht. Ich habe in meinem Maschinenbau Studium leider keinerlei Berührungspunkte gehabt und ich will diese Lücke endlich schließen.
Damit ein Schrittmotor sich bewegt, muss schon einiges richtig laufen. Glückwunsch!
Dass er sich nicht mehr dreht, ist einfacher. Zeig mal.
Der nächste Schritt ist übrigens erstmal, rauszukriegen wo dein Schlitten steht, bzw bis in eine Grundstellung zu fahren, von wo aus du Schritte zählen kannst.
// Defin pins
int driverPUL = 7; // PUL- pin
int driverDIR = 6; // DIR- pin
// Variables
int pd = 500; // Pulse Delay period
boolean setdir = LOW; // Set Direction
void setup() {
pinMode (driverPUL, OUTPUT);
pinMode (driverDIR, OUTPUT);
}
void loop() {
pd = (0,1023,2000,50,0);
digitalWrite(driverDIR,setdir);
digitalWrite(driverPUL,HIGH);
delayMicroseconds(pd);
digitalWrite(driverPUL,LOW);
delayMicroseconds(pd);
}
Das ist der aktuelle Code den ich verwende. In dem Code war ursprünglich noch ein Poti verbaut den ich allerdings nicht brauche. Die entsprechenden Zeilen habe ich also gelöscht. Ich verstehe nur zum Teil was da so alles passiert, da bin ich ehrlich.
Der nächste Schritt ist übrigens erstmal, rauszukriegen wo dein Schlitten steht, bzw. bis in eine Grundstellung zu fahren, von wo aus du Schritte zählen kannst.
Den Schlitten bzw. die Spindel habe ich noch gar nicht angeschlossen. Ich wollte erstmal den Motor an sich zum Laufen bringen und im nächsten Schritt den Code weiter ausbauen.
Welchen Arduino verwendest Du ?
Du tust dich wesentlich leichter, wenn Du für die Ansteuerung des Steppers eine Bibliothek verwendest. Da könntest Du z.B. meine MobaTools verwenden, die enthalten auch eine Klasse um Stepper anzusteuern. Vor allem ist es bei Steppern wichtig, sie mit einer Anfahr- und Bremsrampe zu betreiben. Stepper können nicht von null auf gleich mit höherer Geschwindigkeit betrieben werden.
Es sind auch einige Beispiele dabei - z.B. auch für die bereits angesprochene Referenzfahrt am Anfang.
Hallo,
du solltest eine Lib verwenden die nimmt Dir eine Menge Arbeit ab. Dann gibst Du eine absolute Position vor und der Motor fährt dahin. Die ganze Rechnerei macht die Lib für Dich.
MobaTools oder AccelStepper
bei beiden gibt es Beispiele wie man sowas macht. Fang mit den einfachen Beispielen an zu üben.
dann benötigst Du noch einen Endschalter oder Sensor als Referenzpunkt dient damit Du die Null Position ermitteln kannst wenn das System eingeschaltet wird.
Letztlich benötigst Du ja auch noch ein Display und die Möglichkeit die Sollwerte einzugeben, da gingen zwei Taster oder ein Drehencoder.
Vor einiger Zeit, etwa 1 Jahr , da gabs hier sowas schon mal , dabei ging es auch um eine Säge.
Ich habe mittlerweile große Fortschritte gemacht. Der Motor ist über eine Spindel an den Schlitten der Maschine verbunden und läuft. Das ist übrigens mein erstes Projekt jemals und ich habe bei Null angefangen. Daher entschuldigt bitte wenn ich etwas nicht direkt verstehe oder mein Code eventuell diverse Fehler enthält.
Über den Code unten und ein Python Programm kann ich bereits Werte eingeben und die gewünschten Positionen anfahren. Das funktioniert alles wunderbar. ABER:
Wenn ich bestimmte Positionen anfahre passieren manchmal Dinge die ich mir nicht erklären kann. Ich habe nur mal ein paar Werte zur Verdeutlichung in einer Tabelle zusammengefasst. Das Problem ist, dass manche Werte die ich eingebe zwar angefahren werden, aber im LCD Screen meistens mit einer Differenz von 2 angezeigt werden. Die Eingabe und Position des Schlittens passt IMMER. Nur die Ausgabe weicht ab.
Hierfür mal eine Tabelle
|Eingabe | Ausgabe | Position Motor (bzw. Schlitten)|
Habe die Rechnung angepasst. Es scheint wirklich was bewirkt zu haben.
Dafür schon mal vielen Dank!
Ich werde die nächsten Tage weitere Tests durchführen und mich dann nochmal melden.