Nema34 und Endstufe

Hallo liebe Forumsgemeinde,

ich bin absoluter Neuling und habe jetzt zu Weihnachten ein Arduino UNO REV3 Board samt Einsteigerkit angeschafft.

Parallel dazu hab ich eine Fräsmaschine für die Werkstatt gekauft die ich mit einem Vorschub ausrüsten möchte.

Jetzt natürlich ein paar Fragen bei denen ich mir euere Hilfe erwarte.

Ich hab einen Schrittmotor (NEMA34 6.6A 1.8grad) dazu eine Endstufe DM860, das ganze soll einige Funktionen kriegen die ich mir nach und nach selbst erarbeiten will.

Größstes Problem ist, wie ich diese Mikrostep Endstufe passend einstell und wie viel Steps dann wirklich im Sketch angegeben werden müssen für eine volle Umdrehung.

Ich hoffe ihr könnt mir da weiterhelfen?

Weihnachtliche Grüße

Christoph

Das steht doch auf dem Teiber. Wenn du z.B. 6400 am Treiber einstellst, dann sind das 6400 Schritte für eine Umdrehung.

Franz

Kramerfreak:
ich bin absoluter Neuling ...

Dann erarbeite Dir am besten erst einmal ein paar Grundkenntnisse und lies hier mit. Sofort ohne ein paar Grundlagen auf ein Ziel hinzuarbeiten führt nicht selten in ein undurchschaubares Chaos und reichlich Zeitverschwendung. Am Ende kommt man dann darauf, dass es mit ein paar Grundlagen schneller und besser gegangen wäre.

Sieh Dir die Beispiele der IDE an. Dann bekommst Du schon einmal einen Eindruck davon, worum es beim Programmieren geht. Und gewöhne Dir vom Start weg an, Deinen Code übersichtlich und „hübsch“ zu halten. Gerade bei der Fehlersuche ist das Gold wert.

Gruß

Gregor

Danke euch Beiden für die Antworten.

Ich hab einige Beispiele angeschaut und nachgebaut auf dem Breadboard.

Anschließend die AccelStepper.lib installiert damit ich meinen Stepper betreiben kann.

Mein Code wird aber leider nicht vom Arduino akzeptiert und ich kann die Fehlermeldung nicht deuten. Ich stell euch einfach mal den Code rein und hoff das ihr mir konstruktiv helfen könnt.

Der Motor soll sich einfach nur drehen und nicht mehr.

#include <AccelStepper.h> // Bibliothek installieren
#include <MultiStepper.h> // warum taucht hier Multistepper auf?

int SPU = 400; //eingestellte Stepzahl laut Endstufe
Stepper Motor(SPU, 8,9); //pins für Step und Direction

void setup() {
Motor.setSpeed(60); // RPM festgelegt

}

void loop() {
Motor.step(1); // 1 Step damit der Motor in Dauerschleife dreht.

}

Hi

Sketch bitte zukünftig in Code-Tags - ist der Buttoe </>.
Mit 'akzeptiert Er nicht' können wir leider 'nich um'.
Aktiviere in den Optionen noch die ausführlichen Meldungen beim Kompilieren UND beim Hochladen (2 Haken setzen) - Diese sind standardmäßig - warum auch immer - aus.

Sofern die Fehlermeldung nicht 2037x das Gleiche wiederholt, gerne die kompletten Meldungen. (ebenfalls in Code-Tags, dort wird z.B. 8) zu 8_) und nicht zu einem Smiley)

MfG

PS: Die MultiStepper.h ist dafür da, daß beide Stepper zusammen laufen - Du sagst, welchen Endwert Du an allen Steppern gerne hättest - die Library kümmert sich darum, daß ALLE Stepper Zeitgleich Da ankommen.
Ohne würden alle Stepper mit maximaler (eingestellter) Geschwindigkeit zu IHRER Soll-Position laufen.
Für G1 (G-Code, Arbeits-Fahrt) wäre Das ... blöd :wink:

MfG²

Hallo,

mein Motor läuft jetzt mit AccelStepper.h ohne Multistepper.h, ich hab ja nur einen Stepper.

Der Stepper wird allerdings jetzt ziemlich warm? Ist das normal?

Die Programmierung ist mir neu, ich denk ich kann aber schnell Info´s aufnehmen und umsetzten. Es wäre nur nett wenn ihr mir auf die gestellten Fragen antworten könntet. Ich stell euch jetzt einfach nochmal den aktuellen Code ein.

Warum kann ich hier keine Steps/Rev angeben?
Warum wird der Motor warm mit diesem Sketch? Gibt es da Unterschiede?
Unter AccelStepper stepper(1,8,9); geb ich bei 8 und 9 an welche Pin für Puls und Direction verantwortlich sind, wozu dient die 1?

#include <AccelStepper.h>

AccelStepper stepper(1,8,9); // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5

void setup()
{  
   stepper.setMaxSpeed(2500);
   stepper.setSpeed(2500); 
}

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

Vielen Dank im Vorraus!

Christoph

Der Stepper wird allerdings jetzt ziemlich warm? Ist das normal?

Datenblatt schauen, da steht die maximal Temperatur drin.
Sollten so ca 80 - 100°C sein.
Dann entweder Lüfter dran, oder Strom runter stellen.

Klar wird der Motor heiß, er muss ja auch im Stand das gewünschte Haltemoment aufbauen.

Vielleicht mal den Treiber auf den Motor anlernen lassen
Siehe hier
Und nur mit halben Strom im Stand betreiben.


wozu dient die 1?

Lesestoff

Kramerfreak:
Der Stepper wird allerdings jetzt ziemlich warm? Ist das normal?

Ich kenne keinen Motor, der nicht warm wird, wenn er läuft.

Solange er nicht verdächtig riecht oder qualmt, würde ich mir keine Sorgen machen.

Gruß

Gregor

Hallo Christoph,

Kramerfreak:
Warum kann ich hier keine Steps/Rev angeben?

Weil das der AccelStepper egal ist. Die arbeitet ausschließlich mit Steps/sec. Wieviel Umdrehungen der Motor dabei macht, ist ihr egal. Das musst Du im Sketch berücksichtigen.

Kramerfreak:
Unter AccelStepper stepper(1,8,9); geb ich bei 8 und 9 an welche Pin für Puls und Direction verantwortlich sind, wozu dient die 1?

Die AccelStepper kann verschiedene Steppertreiber bedienen. Mit der '1' gibst Du an, dass es ein Treiber mit Step- und Dir- Eingang ist.

Du hättest statt der '1' auch

AccelStepper stepper(AccelStepper::DRIVER,8,9); // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5

schreiben können.
Die verschiedenen Treiber-Typen haben Namen ( aus AccelStepper.h):

    typedef enum
    {
	FUNCTION  = 0, ///< Use the functional interface, implementing your own driver functions (internal use only)
	DRIVER    = 1, ///< Stepper Driver, 2 driver pins required
	FULL2WIRE = 2, ///< 2 wire stepper, 2 motor pins required
	FULL3WIRE = 3, ///< 3 wire stepper, such as HDD spindle, 3 motor pins required
        FULL4WIRE = 4, ///< 4 wire full stepper, 4 motor pins required
	HALF3WIRE = 6, ///< 3 wire half stepper, such as HDD spindle, 3 motor pins required
	HALF4WIRE = 8  ///< 4 wire half stepper, 4 motor pins required
    } MotorInterfaceType;

:

Nema34
Das Muss schon eine Größere Fräse sein.
die 4Nm Stepper Nema24 ziehen bei 1/4des Stroms schon mächtig was vom Tisch
und bei einer SFU2005 Kugelumlauf reicht das für eine 10mm Fräser in Messing dicke aus!

die Kleine 8Euro BreakOutBoards 5Achsen sind für Hobbycnc,ler eine Echte Bereicherung
nur als Anmerkung der ESP32 hat Realtime Task

Am Rande bemerkt Linuxcnc ist ein mächtiges Werkzeug- für CNC Maschine

bmbbsr:
Am Rande bemerkt Linuxcnc ist ein mächtiges Werkzeug- für CNC Maschine

Läuft allerdings nicht soo gut unter Windows.

Das soll ja auch nur auf einem Echtzeit System Laufen.
Ich bin mal gespannt wann die ersten den ESP32 mit 2 RT Task Kernels an die CNC Bauen.
Bei dem Preis mit all den netten Anbauten schon werksseitig sollte das doch ein Renner im 3D Bereich werden

Hallo,

kurze Rückmeldung meinerseits und ein paar Kommentare auf euere Rückmeldungen.

Der Stepper läuft jetzt zufriedenstellend mit der AccelStepper.libary.
Betreibe den Stepper jetzt mit 1/8 Schritteinstellung damit er auch bei geringen Drehzahlen sauber läuft.

Einige Sachen sind mir noch unklar, zumindest wie ich die Funktionen umsetzen kann. Ich hoffe ich darf noch weiter Fragen?

Wenn ich eine If-Funktion programmiere, dann dauert es nach betätigen des Tasters ca 1-2 Sekunden bis die Else-Funktion greift und die LED an PIN13 wieder deaktiviert. Wodran liegt das ?! Ich nehme an weil das Board eine gewisse Verzögerung hat? Kann man das einfach umgehen?

int Taster=5; //Tasterausgang, durchgeschaltes 5V von Taster auf Pin5 
int Led=13; //Eingebaute Led auf dem Board
int tasterstatus=0; //Tasterstatus für digitalReadabfrage
int Strom=6; //Tastereingang, beaufschlagte 5V von Board von Pin6


void setup() {
  pinMode(Taster,INPUT); //Taster wird als messbarer INPUT beschrieben
  pinMode(Led,OUTPUT); //Led auf Board wird als OUTPUT beschrieben
}

void loop() {
  digitalWrite(Strom,HIGH); //Pin6 wird beaufschlagt
  tasterstatus=digitalRead(Taster); //Pin5 wird ausgelesen
  if (tasterstatus == HIGH) //Tasterstatus (Pin5) wird verglichen
   {
    digitalWrite(Led,HIGH); //Falls 5V anliegen schaltet er die Led PIN13 an
   }
  else 
  {
    digitalWrite(Led,LOW); //Falls keine 5V anliegen schaltet er nicht ein, bzw wieder aus.
  }
}

Die Maschine wiegt ca 500kg und kann mit einem 16mm HSS-Schruppfräser durchaus volle ae und ca 15-20mm ap in Stahl (Qualität entsprechend 16MnCr5) verkraften ohne merklich zu vibrieren.

Der Vorschub soll nur die X-Achse bedienen. Ein Umbau auf CNC ist nicht geplant, ich möchte mir nur den Vorteil von Stepper-Motoren zu gute machen und die Enable-Funktion nutzen. Ansonsten müsste ich schaltbare Kupplungen einbauen, deutlich zuviel mechanischer Aufwand.

Funktionen meiner "Steuerung" sollen sein, sobald ich weit genug bin um sie auf diesen Stand zu bringen, Verfahren mit variabler Geschwindigkeit, Eilgang, Enablen um einen normalen Handbetrieb zu ermöglichen, evtl eine Positionieranzeige (ist mir grad beim Schreiben eingefallen.)

Auf jeden Fall schon mal vielen Dank für euere Tips, ich hab mir dadurch schon einige kleine Details erlesen können und selber programmieren dank der guten Hilfestellungen durch das Forum und die Beiträge.

Grüße

Christoph

Wodran liegt das ?

Magie:
Weil du den Pullup/Pulldown vergessen hast.


If-Funktionen gibt es übrigens nicht.
Vermutlich meinst du den bedingten Anweisungsblock.
(geraten)

Darf ich dich noch fragen wie ich den Pullup und Pulldown benutze?
Gerne auch ein Link oderso zum nachlesen.

Vielen Dank

Christoph

Was soll das mit dem

int Strom=6; //Tastereingang, beaufschlagte 5V von Board von Pin6

bewirken. Zeig da mal ein Schaltbild. Im loop benutzt Du den als Ausgang, ohne in vorher als OUTPUT zu setzen.

Kramerfreak:
wie ich den Pullup und Pulldown benutze?

Das dient dazu, einem ansonsten unbeschaltetem Eingang ein festes Potential zu geben. Wenn Du nur einen Taster anschließt, und der ist nicht gedrückt ist der Eingang ja offen. Wenn der gedrückte Taster 5V auf den Eingang gibt, musst Du mit einem Pulldown Widerstand dein Eingang bei offenem Taster auf Gnd ziehen. Schließt der gedrückte Taster nach Gnd, muss bei offenem Taster mit einem Pullup 5V auf den Eingang gegeben werden. Einen PullUp Widerstand hat der Prozessor eingebaut und den kann man aktivieren. Deshalb ist die 2. Variante einfacher ( sie braucht keinen externen Widerstand.

Wie gesagt, ein Schaltbild deines Aufbaus wäre wichtig.

Kramerfreak:
... Funktionen meiner "Steuerung" sollen sein, ...

Das und was Du über verzögertes if schreibst klingt nach einem Programm, das mehrere Dinge quasi gleichzeitig erledigt (Stepper steuern, Knopf abfragen ...). Um so etwas zu erreichen, musst Du Deine „Programmierstrategie“ ändern - Stichwort „endlicher Automat“. Vielleicht hilft das hier. Mit dem Entprellen eines Knopfes wirst Du sicher auch noch zu tun bekommen. Stichwort hierfür: debounce.

Gruß

Gregor

Hallo,

da scheint mir doch tatsächlich beim kopieren was durch die Finger gerutscht zu sein.
Ich wollte einfach vom PIN6 Strom abnehmen um durch den Taster auf PIN5 zu gehen, diesen dann auslesen.
Mir ist bewusst dass ich das weglassen kann und direkt an den 5V am Board anschließen kann. Wollte das einfach in dieser Weise machen weils mir in dem Moment "gefallen" hat.

Die Sache mit den Pullup und Pulldown versteh ich nicht so ganz, an welcher Stelle sollte ich diese aktivieren um die Funktion zu erzielen, leider konnte ich auf die schnelle nichts finden das mir die Funktion in diesem Fall erläutert.

int Taster=5; //Tasterausgang, durchgeschaltes 5V von Taster auf Pin5
int Led=13; //Eingebaute Led auf dem Board
int tasterstatus=0; //Tasterstatus für digitalReadabfrage
int Strom=6; //Tastereingang, beaufschlagte 5V von Board von Pin6


void setup() {
  pinMode(Taster,INPUT); //Taster wird als messbarer INPUT beschrieben
  pinMode(Led,OUTPUT); //Led auf Board wird als OUTPUT beschrieben
  pinMode(Strom,OUTPUT); //Strom auf Schaltung legen
}

void loop() {
  digitalWrite(Strom,HIGH); //Pin6 wird beaufschlagt
  tasterstatus=digitalRead(Taster); //Pin5 wird ausgelesen
  if (tasterstatus == HIGH) //Tasterstatus (Pin5) wird verglichen
   {
    digitalWrite(Led,HIGH); //Falls 5V anliegen schaltet er die Led PIN13 an
   }
  else
  {
    digitalWrite(Led,LOW); //Falls keine 5V anliegen schaltet er nicht ein, bzw wieder aus.
  }
}

Pullup Pulldown

Pullup Pulldown

Pullup Pulldown

Pullup Pulldown

Na, habe ich dir auch schön das Googeln abgenommen?

Kramerfreak:
Die Sache mit den Pullup und Pulldown versteh ich nicht so ganz, an welcher Stelle sollte ich diese aktivieren um die Funktion zu erzielen, leider konnte ich auf die schnelle nichts finden das mir die Funktion in diesem Fall erläutert.

Ein Pullup/-downwiderstand bewirkt, dass der betreffende Pin quasi eine Level-Vorgabe erhält - er ist, wenn sonst grad kein Knopf dazwischenfunkt, entweder definitiv high oder low.
Da so eine Level-Vorgabe wichtig sein kann (z. B. wenn man garantiert etwas Bestimmtes feststellen will, wenn ein Taster nicht gedrückt ist), gibt es diese Widerstände auch Controller-intern.

HTH

Gregor