bipolare HF-Spindel mit AccelStepper.h betreiben

Hallo,

ich benötige mal etwas Hilfe.
Ich habe eine Uralte HF-Spindel bekommen welche ich nun mit einem HB860H Schrittmotorentreiber und einen Arduino mit der "AccelStepper.h" zum laufen bekommen habe. Nun möchte ich die Drehzahl noch beeinflussen können als Steuersignal hätte ich die Steuererspannung für einen Frequenzumrichter 0-10VDC. Ich weis das der Arduino nur bis maximal 5V verträgt. Die Spannung könnte man ja aber über einen Spannungsteiler halbieren und wäre somit in der Vorgabe.
Jetzt zu meiner Frage: Wie kann man nun die Spannung einlesen und die Drehzahl anpassen? Dazu bin ich zu blöd. Auch würde ich gern über 2 Eingänge die Spindel ein/ausschalten und rechts/links laufen lassen.
Kann mir jemand helfen?

Freundliche Grüsse

mein bisheriges Sketch welches so funktioniert allerding nur mit einer Dehzahl.

/* Example sketch to control a stepper motor with TB6600 stepper motor driver, AccelStepper library and Arduino: acceleration and deceleration. More info: https://www.makerguides.com */

// Include the AccelStepper library:
#include <AccelStepper.h>

// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1

// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
// Set the maximum speed and acceleration:
stepper.setMaxSpeed(32000);
stepper.setAcceleration(500);
}

void loop() {
stepper.move(32000);
stepper.runSpeed();

}

Wenn Du quote = Zitat durch code = Quelltext in Deinem Tag ersetzt, ist er beser lesbar.

Gruß Tommy

red_d:

stepper.setMaxSpeed(32000);

Du kannst deine Spannung( nach dem Spannungsteiler) mit analogRead() einlesen, und aufgrunddessen mit der obigen Anweisung die Geschwindigkeit ändern.
32000 Steps/Sec ist allerdings weit jenseits von dem, was ein normaler Arduino schafft. Was für ein Arduino soll es denn überhaupt sein? Und wieviel Steps/Sec brauchst Du wirklich?

Für eine Spindel ist eine Stepperansteuerung m.M.n nicht wirklich geeignet - schon garnicht für eine HF-Spindel.

Guten Morgen ud Danke,

Mir ist vollkommen bewusst das dies nicht der reguläre oder beste weg ist. Aber was solls sie läuft mit dem setting schon mehrer Stunden. Mir ist auch bewusst das ich sicher nie an die maximal Drehzahl kommen werde. Für mich ist die Spindel aber so brauchbar und aufgrund ihres alters bekommt man keinen Umrichter mehr für diese Spindel.

das einlesen der Spannung ist mir klar mit analogRead() nur wie ich das ganzen dann umrechne in stepper.setMaxSpeed ? Das Versteh ich nicht. Und was wenn ich die Drehzahl im Betrieb ändern möchte?

Freundliche Grüsse und vielen Dank

red_d:
... einen Arduino ...

Welchen?

red_d:
... nur wie ich das ganzen dann umrechne in stepper.setMaxSpeed ...

Da hilft der Dreisatz.

red_d:
Und was wenn ich die Drehzahl im Betrieb ändern möchte?

setMaxSpeed solltest Du als Konstante ansehen und mit setSpeed die Geschwindigkeit anpassen (UNO, ungetestet):

#include <AccelStepper.h>

// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1

// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

const uint32_t MAXSPEED = 1000;

void setup() {
  Serial.begin(9600);
  Serial.println("Start");
  // Set the maximum speed and acceleration:
  stepper.setMaxSpeed(MAXSPEED);
  stepper.setAcceleration(500);
}

void loop() {
  uint32_t geschwindigkeit = analogRead(A0) * MAXSPEED / 1024;
  stepper.setSpeed(geschwindigkeit);   
  stepper.runSpeed();   
  anzeige();
}

void anzeige() {
  static uint32_t vorhin = millis();
  if (millis() - vorhin >= 500) {
    vorhin = millis();
    Serial.print("Geschwindigkeit: ");
    Serial.println(stepper.speed());
  }
}

agmue:
setMaxSpeed solltest Du als Konstante ansehen und mit setSpeed die Geschwindigkeit anpassen

Der Ansatz ist nicht ganz korrekt. Es hängt davon ab, ob mit Rampe gefahren werden soll oder nicht. setMaxSpeed gibt die Geschwindigeit vor , wenn mit Rampe gefahren wird. Das ist keineswegs eine Konstante, sondern gibt in dem Fall die Geschwindigkeit am Ende der Rampe an.
setSpeed() setzt die Momentangeschwindigkeit ( ohne Rampe ) und wird intern auch von 'run()' beim Betrieb mit Rampe genutzt.
Frage ist, inwieweit bei einer Spindel eine Rampe gebraucht wird. Schrittverluste beim Hochlauf wären sicher kein Problem. Wenn der Geschwindigkeitssprung aber zu groß ist, könnte es auch sein, dass der Stepper ganz stehen bleibt.

MicroBahner:
setMaxSpeed gibt die Geschwindigeit vor , wenn mit Rampe gefahren wird.

Ohne setMaxSpeed ist speed immer 1.00. Das kann doch auch nicht sein :confused:

1.00 ist der Standardwert für setMaxSpeed. Und bei run() wird runspeed() intern aufgerufen und dabei der von setSpeed genutzte interne Wert verwendet ( und auch verändert ). Wegen dieser internen Abhängigkeit wird bei SetSpeed dieser Wert auch auf den von setMaxSpeed gesetzten Maximalwert begrenzt.

Edit: Die 'Problematik' ist, dass die Funktionalität ohne Rampe intern von dem Verfahren mit Rampe mitgenutzt wird. Dadurch entstehen Abhängigkeiten, die nicht immer so offensichtlich erkennbar sind.

Guten Abend,

es handelt sich um einen Arduino Micro.

Ersteinmal vielen Dank. Das hilft mir doch schon weiter.
Franz hat vollkommen recht. Die Anfahrrampe wird unbedingt benötigt. Die Spindel verhält sich wie ein Stepper. Startet man das Programm ohne Rampe kommt es zu Schrittverlusten und die Spindel kommt nicht auf Touren. Leider habe ich keine Ahnung was das Inkrement der Spindel ist.

Ich habe leider heute erst das Netzgerät für dein Treiber erhalten. Ich hoffe das ich es diese Woche oder am Wochenende noch schaffe alles zu Verdrahten und einen Testlauf durchzuführen.

freundliche Grüsse und besten Dank

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.