AccelStepper/ MoBaTools Speed anzeigen lassen

Hallo liebes Forum!
Ich experimentiere gerade mit AcaellStepper und MoBatools.
Unter anderen mit seeehr langsamen Anfahrrampen.

Meine Frage:
Kann man mit einer der Bibliotheken über den Serial Monitor die aktuelle Geschwindigkeit anzeigen lassen?
Also nicht die angestrebte Endgeschwindigkeit, sondern z.B. die aktuelle Geschindigkeit innerhalb der Rampe.

Liebe Grüße
Das Tiff

Hallo Tiff :wink:

Das geht derzeit bei beiden Libs nicht.

Es ist aber kein großes Problem das 'nachzurüsten'. Bei den MobaTools habe ich das mal eben 'auf die Schnelle' gemacht. Könnten natürlich noch Fehler drin sein, aber wenn Du magst, kannst Du es mal ausprobieren.
Die Variante liegt in GitHub in einem eigenen Branch 'getSpeedSteps'.

Die Methode heißt dementsprechend 'getSpeedSteps'.

   uint16_t getSpeedSteps(); // returns actual speed in steps/10sec ( even in ramp )

Eine Funktion extra für MICH!!!
Ich freue mich riesig!

Dankeschööööön!

MicroBahner:
Hallo Tiff :wink:

Das geht derzeit bei beiden Libs nicht.

Es ist aber kein großes Problem das 'nachzurüsten'. Bei den MobaTools habe ich das mal eben 'auf die Schnelle' gemacht. Könnten natürlich noch Fehler drin sein, aber wenn Du magst, kannst Du es mal ausprobieren.
Die Variante liegt in GitHub in einem eigenen Branch 'getSpeedSteps'.

Die Methode heißt dementsprechend 'getSpeedSteps'.

   uint16_t getSpeedSteps(); // returns actual speed in steps/10sec ( even in ramp )

Wäre das so richtg?

#include <MobaTools.h>

byte pinStep = 12;
byte pinDir = 13;
uint16_t RPM = 0;

Stepper4 Nema(400, A4988);         


void setup() {
 
 Serial.begin(9600);
 Nema.attach(pinStep, pinDir);
 Nema.setSpeed(2000);       // = 30 U/Min 
 Nema.setRampLen(2000);
 Serial.println("Los gehts");
 Nema.rotate(1);
 }

void loop() {
Nema.getSpeedSteps(RPM);
Serial.println(RPM);
 }

Falls ja, der Compiler wirft:

no matching function for call to 'Stepper4::getSpeedSteps(uint16_t&)'

aus...

Tiff48317:
Wäre das so richtg?

Nein, richtig wäre

RPM=Nema.getSpeedSteps();

Gruß

Gregor

Hallo,
das Problem beim Aufruf der Methode hat dir Gregor ja schon geschrieben.
Die Ausgabe im loop ist aber so schnell, dass Du da kaum etwas siehtst. Ein kleines delay() wäre da angebracht und/oder nur ausgeben,wenn sich auch was ändert. Dann hört die Ausgabe zumindest auf, wenn die Endgeschwindigkeit erreicht ist.
Bei deinem kleine Sketch habe ich dann noch gemerkt, dass die Geschwindigkeit im oberen Bereich der Rampe nicht monoton steigt. Ob das tatsächlich so ist, oder nur ein Rundungsfehler bei der Rückrechnung muss ich noch untersuchen.

Hallo,
es war tatsächlich ein Problem bei der Rückrechnung, da hatte ich noch einen Denkfehler und mit falschen Werten gerechnet.
Im Branch für die nächste Funktionserweiterung ( 'withEnable' ) ist das korrigiert.

P.S. was Du da zurückbekommst, sind nicht die U/min, sondern die Steps/10sec. Wenn Du die Umdrehungsgeschwindigkeit willst, musst Du das noch selbst umrechnen.