Hallo,
für mein Kamera-Motion-Control-System suche ich eine Möglichkeit 3 oder mehr Schrittmotoren gleichzeitig laufen zu lassen.
Es sind zwei verschiedene Modi geplant: Kontinuierliche Bewegung und intervallweise Bewegung.
Zum Programm:
Ich will zunächst Anfangsposition, 3 Zwischenpunkte und die Endposition manuell anfahren und die entsprechenden Schritte speichern. (Funktioniert bereits).
Dann sollen die Punkte mit Splines verbunden werden und die Strecke abgefahren werden, was soweit auch funktioniert.
Benutzt habe ich dafür Arduino-Splines:
und AH-Pololu für die Schrittmotorenansteuerung:
Hier mal der Ausschnitt aus dem Programmcode
float x[7] = {
P4x*0.2,P0x,-P1x,-P2x,-P3x,-P4x,-P4x*1.2 };
float y[7] = {
0,P0y,P1y,P2y,P3y,P4y,0 };
tempCurve.setPoints(x,y,7);
tempCurve.setDegree( Catmull );
for( long i = 0; i <= -P4x; i+= 1 ) {
float temp = tempCurve.value(i);
float tempPREV = tempCurve.value(i-1);
long tempGerundet = long(temp+0.5);
long tempPREVGerundet = long(tempPREV+0.5);
// Serial.println(temp);
// Serial.println(tempGerundet);
// Serial.println((tempGerundet-tempPREVGerundet)*1);
stepperY.move((tempGerundet-tempPREVGerundet)*1);
stepperX.move(-1);
}
Die AH-Pololu-Library kann jedoch nur einen Schrittmotor gleichzeitig ansteuern. Bei 3 Schrittmotoren ist es nicht mehr hinnehmbar, dass die Motoren die Schritte immer hintereinander ausführen. Des Weiteren glaub ich, dass die Arduino-Splines-Library ziemlich rechenintensiv ist und dadurch eine schnelle Bewegung nicht möglich ist.
Ich hatte auch die Accelstepper-Library ausprobiert:
void setup()
{
//Serial.begin(115200);
digitalWrite (panM0, LOW);
digitalWrite (panM1, LOW);
digitalWrite (panM2, HIGH);
stepper.setMaxSpeed(4000);
stepper.setAcceleration(20000);
}
void loop()
{
float x[7] = {
-1000,0,2500,5000,7500,10000,15000 };
float y[7] = {
0,0,8000,2000,8000,1000,0 };
tempCurve.setPoints(x,y,7);
tempCurve.setDegree( Catmull );
for( long i = 0; i <= 10000; i+= 1 ) {
stepper.moveTo(tempCurve.value(i));
stepper.run();
}
}
Jedoch weiß ich dort überhaupt nicht, wie ich die zwei weiteren Motoren mit einbinden kann...
Ich suche also nun eine Möglichkeit mehrere Schrittmotoren gleichzeitig verfahren zu lassen und dabei bestimmte Positionen abzufahren.(siehe Bild im Anhang).