Vielen Dank für dein Sketch aber es blieb genau so wie es war also ohne Veränderung.
Ja kann man kontinuierlich auch machen Hauptsache es fängt langsam an und zum Schluss dreht er mit 8-9 u/sec
Dann spiel mal mit den Parametern:
unsigned int d = 10000;
unsigned int delta = 1;
Irgendwann muß sich was ändern.
Also wenn ich mit d=1 mache dann kommt zuerst komische er dreht mit komischen Geräusch ca. 2 sec dann Geräusch weg. Mit d=10 Geräusch ca. 3 sec.
Dann vermute ich mal, dass Du einen UNO verwendest? Die Meisten fangen ja mit dem Board an. Da hast Du ja schon das Probleme mit deiner gewünschten Steprate. Die ist für einen UNO schon recht ambitioniert. Großartig rechnen solltest Du daher in deinem loop() nicht.
Um eine vernünftige Beschleunigung zu erreichen, funktioniert das mit einfachen Differenzen leider nicht. Das geht am Anfang zu langsam, und am Ende zu schnell. Man kommt da um eine Division nicht herum - und die kostet Zeit, vor allem auf dem UNO. Ich habe das mal nach der Berechnungsmethode der MobaTools gemacht. Da komme ich nicht über eine Stepzeit von 45µs hinaus ( bedeutet bei dir max ca. 3,5 Umdr/Sec ).
Brauchst Du eigentlich dieses 1/32 Microstepping ( 6400 step/Umdr) oder geht das auch mit weniger? Bei 1/16 Microstepping brauchst Du nur die halbe Steprate und bist mit 7 Umdr/sec schon fast am Ziel.
Wenn Du die Geschwindigkeit nur stufenweise erhöhen willst, ist das Berechnen im loop nicht notwendig. Da kannst Du die entsprechenden Schrittraten vorberechenen und in einem Array ablegen ( damit wirst Du dich dann beschäftigen müssen, was ein Array ist.
Hier der Sketch mit der 'MobaTools'-Berechnung:
const int STEP_PIN = 5;
const int Enable_PIN = 6;
const int DIR_PIN = 4;
const byte ups = 8; //Gewünschte Drehzahl/Sekunde
const unsigned long ramplen = 32000; // Steps von Start bis Maximalgeschw.
unsigned int rampCnt = 0; // Stepzähler während der Beschleunigung
const unsigned int startoffset = 16;
constexpr unsigned int sollZeit = 1000000UL / (ups * 6400UL);
const unsigned long accParam = sollZeit * ( ramplen + startoffset ); // Beschleunigungsparameter
const unsigned int korrektur = 15; // Korrekturfaktor für loopzeit ( darf nicht größer als sollZeit sein!))
unsigned int tStep;
void setup()
{ Serial.begin(115200);
pinMode(STEP_PIN, OUTPUT);
pinMode(Enable_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
digitalWrite(STEP_PIN, LOW);
digitalWrite(Enable_PIN, LOW);
digitalWrite(DIR_PIN, HIGH);
Serial.print( "Soll-stepzeit: " ); Serial.println (sollZeit);
Serial.print( "accParam: "); Serial.println( accParam );
}
void loop()
{ // Berechnung der Steplänge in Abhängigkeit der Schritte in der Rampe
tStep = accParam / ( rampCnt + startoffset );
if ( rampCnt < ramplen ) rampCnt++;
digitalWrite(STEP_PIN, HIGH);
//delayMicroseconds(3); // Beim UNO ist dauert digitalWrite ca 5µs
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(tStep - korrektur);
}
Sorry mein Fehler mit 1= läuft er viel ruhiger aber weniger Drehzahl und ca. erste Sekunde läuft er langsamer und dann schneller. Es tut mir leid konnte nicht antworten war als Neubenutzer 2 St. gesperrt.
Ok Probiere gleich aus ich bin in 10 min zuhause.
Es funktioniert sehr gut nur ca. Nach ca. 18 Sekunden ist ein komischer Geräusch und nach weiteren 3 Sekunden Motor aus. Motor Fehler.
Brauchst Du eigentlich dieses 1/32 Microstepping ( 6400 step/Umdr) oder geht das auch mit weniger?
Ich kann auch auf 800 runter gehen
Nach 18 Sekunden sollte doch die Beschleunigungsphase längst abgeschlossen sein? D.h. da müsste er schon eine Weile mit Endgeschwindigkeit gelaufen sein.
Du solltest mal ein bisschen mehr zu deiner HW sagen. Datenblätter und wie alles verschaltet ist - vielleicht auch ein Bild.
Das würde das Ganze wesentlich entspannen.
Nicht wirklich. Du solltest die Fragen beantworten ( überall wo ein '?' dahinter steht
).
Datenblätter zur HW fehlen ( Treiber, Motor, Netzteil ... ), und ein Schaltbild wie das ganze verschaltet ist. Und dann vielleicht ein Bild vom großen ganzen.

[Nema 34-4,8Nm.pdf|attachment]
Geschaltet habe ich einfach
STEP- Pin 5
DIR - Pin 4
Enable - Pin 6
Sorry hat etwas länger gedauert ich vermute dein Sketch ist in Ordnung es liegt bestimmt an Motor er ist bestimmt zu schwach. Ich habe jetzt einen stärkeren bestellt soll bis Donnerstag ankommen mal schauen wie es dann aussieht.
Gerade ohne Last ausprobiert das Programm läuft zu 100% sauber. Vielen vielen Dank für dein Sketch.
Hast Du am Treiber den Strom für den Stepper richtig eingestellt?
Was soll da denn eigentlich angetrieben werden und weshalb nutzt Du einen Stepper dazu? Stepper sind sehr ineffiziente Motore und speziell für Positionierantriebe gedacht.
Einfach nur zum Drehen sind 'klassische' Motore wesentlich unproblematischer und effizienter.
Ich habe den Strom auf 50v eingestellt. Der Motor soll einen Generator antreiben um Strom erzeugen. Die klassische Motoren sind lauter und verbrauchen mehr Strom meiner Meinung nach. Mal schauen ob es klappt.
50V ist kein Strom sondern eine Spannung.
Wieso willst Du einen Generator mit einem Elektromotor antreiben??
Grüße Uwe
Wind oder Wasser geht es bei mir schlecht.
Strom mit Strom erzeugen? Wozu soll das gut sein?
Das Gegenteil ist richtig.
Muss ich noch Vergleichen.
.
Brauchst du gar nicht....
Schrittmotore, ohne besondere Vorkehrungen, haben ihre höchste Stromaufnahme und ihr größtes Dreh-/Haltemoment, im Stillstand, auch unbelastet.
fast vergleichbar mit einem Reihenschluss Motor.
Das Drehmoment sinkt stark mit steigender Drehzahl.
Wenn du einen Generatorprüfstand bauen willst, rate ich dir zu einem Nebenschluss oder BLDC Motor.












