Stepper motor steuern mit festgelegten Positionen

Hallo liebe Community!

ich würde gerne einen Schlitten der von einem Riemen bewegt wird an verschiedene Positionen Fahren lassen.

Jetzt habe ich einen Code erstellt bei dem jedoch die Strecke die zurückgelegt werden soll immer vom letzten angefahrenen Punkt ausgeht.

ich würde gerne immer vom Endstop ausgehen und dann die Positionen irgendwie als Variable speichern.
also:

fahre Position 1 an (x = 1000) an und danach Position 2 (x=2000 )

statt 1000 und dann nochmal 2000

die accelstepper library möchte ich nicht benutzen, da ich A4988 Treiber benutze und ich mit der Library keinen so ruhigen lauf hinbekomme.

Anbei noch der code mit X und Z Achse.

ich hoffe ich habe mich verständlich ausgedrückt und ihr könnt mir helfen, wenn nicht gerne Nachfragen!

grüße TheManicx

1cocktail_funktionierend.ino (5.23 KB)

Hi

Was hindert Dich daran, die 'neue Position' so umzurechnen, daß Du die Zwischenschritte weiter geben kannst?

Davon ab sollte Es egal sein, ob die Accel-Stepper die Pulse generiert, oder Du mit digitalWrite - am Pin kommt genau das Gleiche raus - erst der Treiber macht daraus ein harmonisch klingendes Lied im Stepper.

Vll. gefallen Dir auch die MoBaTools - auch dort ist es möglich, absolut oder relativ zu verfahren.
Sind auch aus der IDE heraus installierbar.

MfG

PS: Sketch nicht angeschaut, sehe das Problem noch 'wo anders'

Erst mal danke für die schnelle Antwort,

also es geht ja darum dass es mehrere Positionen geben wird die unterschiedlich angefahren werden,
also einmal soll von Position 1 zu 3 gefahren werden und dann zu 6
und ein ander mal dann von 2 nach 7 nach 8.

Ich dachte es gibt vielleicht eine möglichkeit die Positionen festzulegen und dann nurnoch zu sagen fahr von dem einen zum anderen. sodass das Programm selbst die schritte die vom einen Punkt zum anderen notwendig sind heraus subtrahiert.
also sagt punkt 1 ist bei 1000 Punkt 2 bei 3000 also muss ich 2000 zurücklegen.

Ich schaue mir mal die MoBaTools an :slight_smile:

MFG

Hi

Die Positionen kannst Du doch in einem Array festlegen.

uint32_t positionen[] = {1000, 3000, 17000, 333, 796,}; //wenn 'fest' gerne auch const voran stellen
const byte posanz = sizeof(positionen) / sizeof(positionen[0]);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  for (byte a = 0; a < posanz; a++) {
    Serial.print("Position ");
    Serial.print(a);
    Serial.print(':');
    Serial.println(positionen[a]);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
}

Der Sketch verwendet 1792 Bytes (5%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 218 Bytes (10%) des dynamischen Speichers, 1830 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
(Uno/Nano)

okay bin noch ein Anfänger und kenne nicht alle Möglichkeiten die es gibt.
ich schaue mir mal mehr zu den Arrays an, da ich aus dem code direkt nicht so schlau werde
vielen dank

Hi

Der Sketch soll auch nur die in dem Array eingetragenen Zahlen im Terminal ausgeben.
Da alle Elemente des Array über den Index angesprochen werden (0...Anzahl - 1), kannst Du so einfach in Deinem Sketch nur die Punkte durchzählen, die Werte, wohin die Reise gehen soll, bekommen wir aus dem Array.

Diese Werte musst Du nur noch als Ziel-Punkt festlegen, wenn Du zum Nächsten willst.
Den Rest machen dann die Libs - Die Du, natürlich, in Deren Sinne auch befehligen musst.
Bei absoluten Zielen wird Dir ein relativer Fahrbefehl nicht viel bringen.
(geht auch, mit umrechnen mit der aktuellen Position, aber wofür haben die Libs die Möglichkeit, das Ziel absolut anzugeben? Dann kann auch Die selber rechnen)

MfG

die accelstepper library möchte ich nicht benutzen, da ich A4988 Treiber benutze und ich mit der Library keinen so ruhigen lauf hinbekomme.

Dann vermute ich mal einen Fehler in der Spannungsversorgung des Motors oder der Treiber passt nicht zum Treiber.

Grüße Uwe