Hallo Zusammen, ich brauche Hilfe bei einem Sketch der Motor soll bei Start langsam beschleunigen. Wie kann ich in dieses Sketch diese Funktion einfügen?
const int STEP_PIN = 5;
const int Enable_PIN = 6;
const int DIR_PIN = 4;
float val = 8; //Gewünschte Drehzahl/Sekunde
int d = 0; //Pulszahl/Umdrehung
Mit dem Sketch da oben läuft er ohne Last ganz gut mit MobaTools Geschwindigkeit 2000 ist maximal einzige was mir fehlt ist ein Befehl zum langsamen Start.
Dieser "Befehl" könnte Subtrahieren sein. Du fängst bei sagen wir d=1000 an und subtrahierst einen Wert, bis Du bei d<999997/(val*6400) ankommst, dann setzt Du d=999997/(val*6400);
Falsche Kommentare sind noch schlimmer als gar keine.
Wenn ich deinen Sketch anschaue, dürften die 6400 die Pulszahl / Umdrehung sein: d = 999997/(val*6400);
und 'd' eher die Zeit zwischen 2 Steps. Wenns genauer werden soll. musst Du dann aber noch die anderen Zeitverzögerungen im loop berücksichtigen, z.B. die delay(Microscond(3). Dein 999997 hilft dir da nichts, die 3µs darfst Du erst vom Ergebnis abziehen.
Du kommst dabei auf eine Steprate von >50kHz. Das ist schon sehr ambitioniert. Auf einem UNO geht das weder mit Accelstepper noch mit MobaTools.
Welchen Prozessor verwendest Du? Soll der am Ende auch noch was anderes machen, als nur die Stepimpulse erzeugen?
P.S. benutze bite Codetags, wenn Du Programmcode postest.
P.P.S Auch float-Berechnungen kosten auf einem UNO viel Zeit. Das fällt in deinem bisherigen Sketch nicht auf, da der Compiler das wegoptimiert ( weil 'val' sich nicht ändert ). Ansonsten braucht allein die Berechnung von 'd' schon mehr Zeit, als Du Verzögerung zwischen den Steppulsen haben willst.
Wenn sich val nicht ändert und d ein Interger ist, könnte man den Wert doch zu Beginn Konstant festlegen. Da braucht es dann keine Rechnung mehr, was die Laufzeit stört.
Naja, das ist ja die Frage ob das auch in Zukubft so bleibt. Ich nehme mal an, dass der Sketch noch erweitert werden soll. Derzeit erkennt der Compiler ja schon, dass sich val nicht ändert und macht die Berechnung von 'd' zur Compilezeit. Wenn 'val' immer eine ganzzahlige Konstante bleiben sollte, macht es eh keinen SInn, die als 'float' zu definieren.
P.S: wenn val kein float ist, muss man dem Compiler aber anders klarmachen, dass er die Berechnung von 'd' als 'long machen muss ( wegen dem 999997 ). z.B. d = 999997UL/(val*6400);
D.h. auch in dem 'Mini-Sketch' gibt's noch einiges zu klären
Kann man den Sketch so schreiben dass der Motor z.B. erste 10 Umdrehungen mit 0,5 u/s dann die nächste 20 Umdrehungen mit 3 u/s und dann als letztes mit 9 u/s. Es soll zum Schluss mit 8-9 u/s konstant bleiben. Ich bin ganz neu auf dem Gebiet und verstehe es noch nicht ganz wie die ganzen Sketch funktionieren.
Und nach welchen Vorgaben? Einfach vom Einschalten dann mit konstanter Geschwindigkeit? Wann Beschleunigen? nur beim Einschalten? Ändert sich die Drehzahl nie?
Erzähl mal ein bisschen mehr über dein Projekt, sonst ist das alles nur raten. Wir können weder auf deinen Basteltisch, noch in deinen Kopf schauen.
Es soll direkt beim einschalten langsam anfangen zudrehen sagen wir erste 10 sec mit 0,5 U/sec, dann 20 sec mit 2 u/sec, dann 20 sec mit 5/sec und als letztes auf Dauer mit 8-9 u/sec. Zwischendurch soll er nicht anhalten. Dass Problem der Motor wird verwendet als Antrieb und wenn ich direkt mit 8 u/sec anfange dann stoppt der Motor weil er kommt auf seine Umdrehungen nicht. Wenn ich einstelle 0,5/sec dann kein Problem er seht,aber es ist Zuwenig Umdrehungen.