Hallo allerseits, ich habe vor ein paar Tagen einen Schrittmotor NEMA 17 mit einen Mikrocontroller Arduino Mega und einen Steppershield Ramp 1.4 bekommen. Der Schrittmotor dient um einen Rahmen zu ziehen, mittels Zahnriemen. Der Rahmen soll dabei immer um 10 mm weitertakten. Leider bin ich ziemlich nackt was die Programmierung betrifft. Gesehen (und funktioniert auch) habe ich bis jetzt nur dass es die Möglichkeit gibt den Schrittmotor mit einer Zeit anzusteuern, gibt es vielleicht auch die Möglichkeit das ganze über Schritte zu takten? Das ist gerade mein Projekt über das Wochenende und freue mich über jede Hilfe. LG :)
> Das ist gerade mein Projekt über das Wochenende
Da hat sich schon so mancher verschätzt. Projekte mit Schrittmotoren
brauchen meist Jahre, bis sie so wirklich überzeugend funktionieren.
Noch einer schrieb: > Da hat sich schon so mancher verschätzt. Projekte mit Schrittmotoren > brauchen meist Jahre, bis sie so wirklich überzeugend funktionieren. Man kann es sich aber auch einfacher machen und hat alles in spätestens einer Stunde am laufen: https://github.com/grbl/grbl/wiki https://github.com/grbl/grbl/wiki/Connecting-Grbl
Danke ! Also das Ding bewegt sich schon einmal: Habe diesen Code gefunden
1 | #define X_STEP_PIN 54
|
2 | #define X_DIR_PIN 55
|
3 | |
4 | void setup() { |
5 | pinMode(X_STEP_PIN , OUTPUT); |
6 | pinMode(X_DIR_PIN , OUTPUT); |
7 | |
8 | }
|
9 | |
10 | void loop () { |
11 | |
12 | if (millis() %4000 <1000) { |
13 | digitalWrite(X_DIR_PIN , HIGH); |
14 | }
|
15 | else { |
16 | digitalWrite(X_DIR_PIN , LOW); |
17 | }
|
18 | |
19 | digitalWrite(X_STEP_PIN , HIGH); |
20 | |
21 | delay(1); |
22 | |
23 | digitalWrite(X_STEP_PIN , LOW); |
24 | }
|
Kann den vielleicht jemand erklären? Bin bis jetzt noch nichts fündig geworden was DIR usw eigentlich heisst
Die Schrittmotortreiber haben normalerweise nur 2 Eingänge. DIR Direction für die Drehrichtung STEP macht einen Schritt. Ja nach Karte Vollschritt, Halbschritt, Mikroschritt. Manchmal beim Wechsel von High nach Low. Manchmal umgekehrt. Diese Endlosschleife macht so ungefähr 1000 Schritte pro Sekunde. digitalWrite(X_STEP_PIN) Nebenbei schaltet sie von Zeit zu Zeit die Drehrichtung um. digitalWrite(X_DIR_PIN)
Steve Korn schrieb: > Kann den vielleicht jemand erklären? Da solltest du schon ein bisschen genauer fragen. Du wirst hier jetzt keinen persönlichen Grundkurs "in Alles" bekommen. Meist gibt es zu Arduino Komponenten Beispielcode auf der Web-Site des Anbieters, auch für deine Schrittmotorabtrennung.
Steve Korn schrieb: > Kann den vielleicht jemand erklären? Bin bis jetzt noch nichts fündig > geworden was DIR usw eigentlich heisst http://www.arduino.cc/en/Reference/HomePage DIR bedeutet Direction.
Hallo und Vielen Dank! In meinem Fall (Ramp1.4 und Nema 17) ist es anscheinend egal ob ich von Low-High oder High-Low stelle. Deine Erklärung ist die Basis für mein Projekt und ich habe 1/3 geschafft. Zwei Dinge habe ich noch zu tun. 1. Ich kümmere mich jetzt darum, wie ich ein Sensorsignal einlesen kann um damit die Drehrichtung vom Schrittmotor steuern zu können. 2. Und wie man anhand vom Drehschritt die Länge der Linearbewegung umrechnen kann. Weil ich ja mit Hilfe vom Zahnriemen immer 40 mm weitertakten möchte
Hallo ich bin nun etwas weiter! Mit folgenden Code kann ich bei der Betätigung des Schalters eine Bewegung erzeugen:
1 | void setup() {
|
2 | pinMode(X_STEP_PIN , OUTPUT); |
3 | pinMode(X_DIR_PIN , OUTPUT); |
4 | } |
5 | |
6 | void loop () |
7 | if((READ(X_MIN_PIN) == LOW)) |
8 | {
|
9 | digitalWrite(X_DIR_PIN , HIGH); |
10 | digitalWrite(X_STEP_PIN , HIGH); |
11 | delay(1); |
12 | digitalWrite(X_STEP_PIN , LOW); |
13 | delay(1); |
14 | } |
15 | } |
Angeschlossen habe ich den Endschalter auf dem Ramp wie auf dem Bild. Wenn ich nun das delay(1) auf delay(0.1) ändere, passiert leider garnichts mehr, und der Schrittmotor (Nema 17) beginnt zu surren. Ich habe mit einen anderen Code getestet und da funktioniert es ohne Probleme:
1 | if ( millis() %600000 < 30000) {
|
2 | digitalWrite(X_DIR_PIN , HIGH); |
3 | } |
4 | else {
|
5 | digitalWrite(X_DIR_PIN , LOW); |
6 | } |
7 | digitalWrite(X_STEP_PIN , HIGH); |
8 | delay(0.1); |
9 | digitalWrite(X_STEP_PIN , LOW); |
10 | delay(0.1); |
11 | } |
kann mir jemand hier vielleicht weiterhelfen ? Ich sitze schon eine Ewigkeit an diesem Problem :( LG
Ich habe nun statt delay(0.1) diesen Teil eingefügt und es funktioniert:
1 | for(int i=0; i < 50; i++) |
2 | {
|
3 | delay(0.001); |
4 | } |
Das beste Beispiel für, "Mein Code funktioniert, und ich habe KEINE Ahnung warum"
Steve Korn schrieb: > Wenn ich nun das delay(1) auf delay(0.1) ändere, passiert leider > garnichts mehr, und der Schrittmotor (Nema 17) beginnt zu surren. dann steuerst du den Motor vermutlich zu schnell an und er kann gar nicht deinen Schritten zu folgen. Stichwort dazu: Rampe ein Problem auf das du später vielleicht noch stoßen wirst: einige Controller erwarten das nach Änderung der Richtung erst ein paar usec vergehen bis ein Step kommen darf
Das dachte ich auch, es ist nur komisch dass es bei dem anderen Code (bei diesem )
1 | if ( millis() %600000 < 30000) {
|
2 | digitalWrite(X_DIR_PIN , HIGH); |
3 | } |
4 | else {
|
5 | digitalWrite(X_DIR_PIN , LOW); |
6 | } |
7 | digitalWrite(X_STEP_PIN , HIGH); |
8 | delay(0.1); |
9 | digitalWrite(X_STEP_PIN , LOW); |
10 | delay(0.1); |
11 | } |
funktioniert
Steve Korn schrieb: > Wenn ich nun das delay(1) auf delay(0.1) ändere, passiert leider > garnichts mehr, und der Schrittmotor (Nema 17) beginnt zu surren. Dazu kann man nur sagen: "RTFM" http://www.arduino.cc/en/Reference/Delay Was meinst du, was gemeint ist, wenn beim Parameter angegeben ist "ms: the number of milliseconds to pause (unsigned long)"
Das habe ich gelesen, aber anscheinend funktioniert es ja mit 0.1 ms bei dem anderen code
Steve Korn schrieb: > Das habe ich gelesen, aber anscheinend funktioniert es ja mit 0.1 ms bei > dem anderen code Wie lange braucht denn
1 | delay(0) |
und wie lange braucht der Rest auf deinem µC für die Ausführung?
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.
