Moin,
ich versuche einen Nanotec Schrittmotor (ST8918D6708-A) mit einem Motortreiber (C5-E-2-21) anzutreiben, welcher sich im Takt-Richtungsmodus befindet und die Signale dafür von einem Arduino Uno empfangen soll. Der Schrittmotor ist dabei auf 48V parallel angeschlossen.
Ich habe mittlerweile einen Code mit dem es immerhin möglich ist den Motor mit einer Geschwindigkeit von ca. 850 Schritten pro Sekunde zu fahren, allerdings bräuchte ich eine Drehzahl von knapp 1000 U/min (wären dann ca. 3333 Schritte pro Sekunde). Die Geschwindigkeit ist mit diesem Motor definitiv möglich, da ich diese mit dem selben Motortreiber bereits über die Nanotec Software "Plug & Drive 2.1.7" gefahren bin. Stelle ich die Geschwindigkeit im Code auf mehr als 900 Schritte pro Sekunde blockiert der Motor.
Den Code hänge ich mit an. Falls jemand eine Idee hat würde mir das sehr helfen.
MfG
#include <AccelStepper.h>
// Pins für den Schrittmotortreiber
const int stepPin = 2;
const int dirPin = 3;
const int enablePin = 4;
// Schritte pro Umdrehung des Schrittmotors
const int stepsPerRevolution = 200; // Anpassen an deinen Motor
// Schrittmotor initialisieren
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
// Variablen für Geschwindigkeit und Beschleunigung
float maxSpeed = 800.0; // Maximale Geschwindigkeit in Schritte pro Sekunde
float acceleration = 100.0; // Beschleunigung in Schritte pro Sekunde^2
void setup() {
// Setze die Pins für den Schrittmotor
pinMode(enablePin, OUTPUT);
// Setze die maximale Geschwindigkeit und Beschleunigung
stepper.setMaxSpeed(maxSpeed);
stepper.setAcceleration(acceleration);
// Initialisiere die serielle Kommunikation
Serial.begin(9600);
// Enable Pin auf LOW setzen, um den Treiber zu aktivieren
digitalWrite(enablePin, LOW);
// Debug-Ausgabe der initialen Einstellungen
Serial.print("Initial max speed: ");
Serial.println(maxSpeed);
Serial.print("Initial acceleration: ");
Serial.println(acceleration);
}
void loop() {
// Lese Befehle über die serielle Schnittstelle ein
if (Serial.available() > 0) {
char command = Serial.read();
switch (command) {
case 'F': // Bewege vorwärts
Serial.println("Accelerating forward to max speed");
setMotorSpeed(true); // Beschleunige vorwärts
break;
case 'B': // Bewege rückwärts
Serial.println("Accelerating backward to max speed");
setMotorSpeed(false); // Beschleunige rückwärts
break;
case 'S': // Stoppe den Motor
Serial.println("Stopping");
stepper.stop(); // Stoppe den Motor sanft
stepper.setSpeed(0); // Setze die Geschwindigkeit auf 0
break;
case 'R': // Setze die Geschwindigkeit
if (Serial.available() > 0) {
maxSpeed = Serial.parseFloat();
Serial.print("Setting speed to ");
Serial.println(maxSpeed);
stepper.setMaxSpeed(maxSpeed);
}
break;
case 'A': // Setze die Beschleunigung
if (Serial.available() > 0) {
acceleration = Serial.parseFloat();
Serial.print("Setting acceleration to ");
Serial.println(acceleration);
stepper.setAcceleration(acceleration);
}
break;
}
}
// Schrittmotor weiter bewegen, falls ein Befehl aktiv ist
stepper.runSpeed();
}
// Funktion zum Setzen der Geschwindigkeit
void setMotorSpeed(bool forward) {
if (forward) {
stepper.setSpeed(maxSpeed);
} else {
stepper.setSpeed(-maxSpeed);
}
// Debug-Ausgabe der aktuellen Einstellungen
Serial.print("Current speed: ");
Serial.println(stepper.speed());
}