Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

Schrittmotor mit Ramps 1.4 ansteuern

geschrieben von shIxx 
Schrittmotor mit Ramps 1.4 ansteuern
06. October 2016 04:56
Hallo Comunity,

vorweg, ich bin totaler Noob in sachen Programmieren, also bitte nicht zu streng sein smiling smiley

Für mein kleines Projekt benötige ich ein Heizelement, einen Temperatursensor, eine Anzeige (für die Temperatur) und zwei Schrittmotoren.
Da dachte ich mir, mit einem Ramps-Kit aus China kommt man am billigsten weg auch wenn das etwas zu überdimensioniert ist, da ich ja keine 5 Motoren und auch keinen LCD brauche, eine 8-Segment Anzeige würde auch reichen etc.,.. aber egal das nur als kurze Info.

Zusammengefasst:
- Power: ATX Netzteil
- Controler: Arduino Mega 2560 mit Raps 1.4
- Driver: A4988
- Motor. Nema 17 (200 Steps pro Umdrehung)

Alle 3 Jumper sind angesteckt, somit müsste (falls ich das richtig verstanden habe) der Motor 128 *200 Schritte für eine volle Umdrehung machen.
Quote

jumper Yes/No step size
1 2 3
no no no full step
yes no no half step
no yes no 1/4 step
yes yes no 1/8 step
no no yes 1/16 step
yes no yes 1/32 step
no yes yes 1/64 step
yes yes yes 1/128 step


Nun möchte ich z.B. den Motor für die X-Achse über den Arduino ansteuern. Nach reichlicher recherche im Netz, glaube ich der folgende Code sollte klappen:


#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38

#include "AccelStepper.h" // Nebenbei, wo ist eigentlich der Unterschied, ob man  oder"AccelStepper.h" schreibt ??

AccelStepper stepper(1, X_STEP_PIN, X_DIR_PIN); 

void setup()
{
  stepper.setEnablePin(X_ENABLE_PIN);
  stepper.setPinsInverted(false, false, true);    //invert logic of enable pin
  stepper.enableOutputs();

// Alternativ müssten die folgenden Zeilen auch funktionieren, weis nur nicht sicher was mehr Sinn macht!!
  //pinMode(X_ENABLE_PIN , OUTPUT);
  //digitalWrite(X_ENABLE_PIN , LOW);

  stepper.setMaxSpeed(400*128);
  stepper.setSpeed(100*128);
  stepper.setAcceleration(1000);
}

void loop()
{  
   stepper.runSpeed();
}

Der motor sollte also mit 100 Schritten pro Sekunde laufen, sprich mit einer Drehzahl von 0,5 1/s.
Er läuft aber nur total langsam!

Da dachte ich mir, man könnte zum testen doch einfach die Repetier Firmware draufspielen und im Repetier Host manuell die X-Achse ansteuern.
Und tatsächlich er läuft mit den 200 Steps pro sekunde, so wie es in der Firmware eingestellt ist.

Ich google mich schon seit 2 Tagen dämlich und komm einfach nicht dahinter.

Danke schonmal für jede konstruktive Antwort.

Grüße, Tom

2-mal bearbeitet. Zuletzt am 06.10.16 04:59.
Re: Schrittmotor mit Ramps 1.4 ansteuern
06. October 2016 06:46
AccelStepper (wenn ich die richtige Version auf die Schnelle gefunden habe) benutzt digitalWrite und digitalRead aus der Arduino-Library. Das ist nicht besonders schnell. Bei direktem Registerzugriff (so wie Repetier das macht) könntest du die Motorgeschwindigkeit um ca. den Faktor 50 steigern.


--
Microsoft MVP in den Kategorien DirectX/XNA * Visual C++ * Visual Studio and Development Technologies seit 2011

  • Mein Erster (RAMPS 1.4, Selbstbau WolfStrap-Derivat mit Linearführungen, Wade Extruder und E3D lite6 Hotend)
  • Cub44 (Selbstbau Dual Wire Gantry Derivat mit Zahnriemen und Linearschienen, RADDS 1.5 und DUE, Custom Hotend - E3D like, Compact Bowden Extruder)
  • HexMax (sechseckiger Delta (eigenes Design) mit Druckraum 300mm Durchmesser und >=400mm Höhe, RADDS 1.5, 24V, Custom Hotend, Compact Bowden Extruder)
  • P3Steel Toolson MK2 - Keine Zeit zum selbst planen ;-)

Andere Projekte: FSR Board (ABL-Sensor-Platine inkl. Firmware) * ThirtyTwo (32Bit RepRap-Firmware)
Re: Schrittmotor mit Ramps 1.4 ansteuern
06. October 2016 07:46
Die A4988 gehen nur bis 1/16 Schritt. Schau dir noch einmal die Jumper Belegung an. Zum Rest kann ich nix sagen da ich kein Arduino verwende.


LG
Siegfried

My things
Re: Schrittmotor mit Ramps 1.4 ansteuern
06. October 2016 09:37
Hi,

@Glatzemann:
Mit "sehr langsam" meine ich, dass er gerade mal 3 Umdrehungen pro Minute macht. Das sollte mit digitalWrite und digitalRead schon schneller gehen denk ich.
Es kommt mir nicht so sehr darauf an die Höchstgeschwindigkeit zu erreichen, sondern einfach nur eine genaue Drehzahl einzustellen. Denn für mein Projekt ist es notwendig, die beiden Motoren mit einer einstelbaren Drehzahl zu betreiben. Ich denke irgendwas stimmt mit dem Code nicht. Oder es liegt aran, dass es ein China-Clon ist, aber dann würde das Ramps Shield mit der Repetier Firmware auch nicht gehen.

@Said:
Danke für die Aufklärung. Ich war mir nicht sicher, weil in der Produktbeschreibung stand 16 mycrosteps aber auf der Wiki seite von Ramps stand die von mir im ersten Post zitierte Jumperstellung.


Grüße, Tom

1-mal bearbeitet. Zuletzt am 06.10.16 09:46.
Re: Schrittmotor mit Ramps 1.4 ansteuern
06. October 2016 11:02
Die Schritte hängen nicht vom board ab.

Und nur um klar zu sein: Alle 3 Jumper aufgesteckt bedeutet bei A4988 Treibern 1/16 Schritt.


LG
Siegfried

My things
Re: Schrittmotor mit Ramps 1.4 ansteuern
07. October 2016 05:50
Ok hab jetz alle Jumper abgesteckt,.. also Full Step.
Wenn ich ihn jetzt beobachte, macht er eine stotternde, langsam rotierende Bewgunge.

Stimmt was am Code nicht?
Wie würde der Code mit der Library "stepper.h" aussehen?


Grüße, Tom

Nachtrag:

Hab ihn nun mit folgenden Code zum laufen gebracht:
#include "AccelStepper.h"

AccelStepper stepper(1, 54, 55);


int pos = 10000;

void setup() {
  
  stepper.setMaxSpeed(100);
  stepper.setAcceleration(1000);

  stepper.setEnablePin(38);
  stepper.setPinsInverted(false, false, true); //invert logic of enable pin
  stepper.enableOutputs();
}

void loop() {

  stepper.move(pos);
  stepper.runSpeed();
}

Zunächst hatte ich pos=1, damit er bei jedem Loopdurchlauf einen Step macht. (Zur Ergäzung: Ich möchte einfach nur eine konstante,einstellbare Drehzahl fahren)
Auf pos=1 ruckelte er aber stark. Also pos= 10000 und er läuft super flüssig und leise.
Eigenartig ist, wenn ich pos = 100000 setze, dreht er in die andere Richting. confused smiley

Es muss doch eine elegantere lösung geben!!!
Wie gesagt, ich kenn mich mit dem programmieren nicht sehr gut aus.

Nachtrag 2:
Nachdem ich mir nochmal das Example "constantSpeed" angesehen habe, hab ich es nochmal ohne dem stepper.move (pos) versucht und es läuft.
Echt komisch da es eigentlich der selbe Code ist, wie der in meinem ersten Post, nur mit einer anderen geschwindigkeit.
confused smiley

2-mal bearbeitet. Zuletzt am 07.10.16 09:50.
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen