Schrittmotor Geschwindigkeit ändern

Hallo,

Ich bediene einen Schrittmotor über einen Motortreiber und einen Arduino Mini. Dazu habe ich einen Code gefunden, welcher auch soweit super funktioniert.
Ich würde gerne die Motordrehgeschwindigkeit erhöhen. Könnte ich den Wert in Zeile:
const int maxSpeed = 1000;
einfach auf 2000 erhöhen und somit die Drehgeschwindigkeit beeinflussen?

Liebe Grüße

/*
 * Controllo di due motori passo passo con Arduino e un Joystick
 *
 * Autore  : Andrea Lombardo
 * Web     : http://www.lombardoandrea.com
 * Post    : http://wp.me/p27dYH-KQ
 */ 
 
//Inclusione delle librerie
#include <AccelStepper.h>
#include <Bounce2.h>
 
//definizione delle costanti dei pin di Arduino
const int ledEnable = 13; //il led on board ci mostrerà lo stato di attivazione dei motori
const int pinSwEnable = 7;  //il bottone presente nel modulo joystick che abilita o disabilita il controllo
const int pinEnable = 8;  //i pin che comandano lo stato ENABLE dei driver A4988 sono in collegati in serie per questo basta un solo pin per gestirli entrambi
 
unsigned long debounceDelay = 10; //millisecondi per il debonuce del bottone
 
const int jX = A0;  //pin analogico che legge i valori per le X
const int stepX = 3;  //pin digitale che invia i segnali di STEP al driver delle X
const int dirX = 4; //pin digitale che invia il segnale DIREZIONE al driver delle X
long speedX, valX, mapX;  //variabili di gestione movimenti motore X
 
const int jY = A1;  //pin analogico che legge i valori per le Y
const int stepY = 5;  //pin digitale che invia i segnali di STEP al driver delle Y
const int dirY = 6; //pin digitale che invia il segnale DIREZIONE al driver delle Y
long speedY, valY, mapY;  //variabili di gestione movimenti motore Y
 
//variabili utilizzate dalla libreria AccelStepper
const int maxSpeed = 1000;  //stando alla documentazione della libreria questo valore può essere impostato fino a 4000 per un Arduino UNO
const int minSpeed = 0; //velocità minima del motore
const float accelerazione = 50.0; //numero di step al secondo in accelerazione
 
const int treshold = 30;  //la lettura dei potenziometri non è mai affidabile al 100%, questo valore aiuta a determinare il punto da considerare come "Stai fermo" nei movimenti
long tresholdUp, tresholdDown;  //variabili di servizio per espletare il compito descritto sopra
 
boolean abilitato, muoviX, muoviY, enable;  //variabili di gestione dei movimenti
 
Bounce btnEnable = Bounce();  //istanzia un bottone dalla libreria Bounce
 
//istanzia i motori
AccelStepper motoreX(AccelStepper::DRIVER, stepX, dirX);
AccelStepper motoreY(AccelStepper::DRIVER, stepY, dirY);
 
void setup() {
  //inizializza valori
  speedX = speedY = 0;
  enable = false;
 
  //definizione delle modalità dei pin
  pinMode(ledEnable, OUTPUT);
  pinMode(pinEnable, OUTPUT);
 
  pinMode(pinSwEnable, INPUT_PULLUP); //l'input dello switch ha bisogno di essere settato come INPUT_PULLUP
 
  digitalWrite(ledEnable, enable);
  digitalWrite(pinEnable, !enable); //I driver A4988 disabilitano i comandi al motore se sul pin ENABLE ricevono un segnale HIGH per questo motivo il valore è opposto a quello del LED
 
  //configura il bottone del joystick utilizzando la libreria Bounce
  btnEnable.attach(pinSwEnable);
  btnEnable.interval(debounceDelay);
 
  //calcola range valori entro i quali considerare la posizione del joystick come "Stai fermo"
  tresholdDown = (maxSpeed / 2) - treshold;
  tresholdUp = (maxSpeed / 2) + treshold;
 
  //configura parametri dei motori
  motoreX.setMaxSpeed(maxSpeed);
  motoreX.setSpeed(minSpeed);
  motoreX.setAcceleration(accelerazione);
 
  motoreY.setMaxSpeed(maxSpeed);
  motoreY.setSpeed(minSpeed);
  motoreY.setAcceleration(accelerazione);
}
 
void loop() {
 
  //esegui funzione di controllo e lettura del bottone che determina lo stato di abilitazione
  checkEnable();
 
  digitalWrite(ledEnable, enable);  //mostra stato di abilitazione tramite il led su pin 13
  digitalWrite(pinEnable, !enable); //imposta valore opposto sui pin ENABLE dei driver
 
  //esegui lettura analogica dei valori provenienti dai potenziometri del joystick
  valX = analogRead(jX);
  valY = analogRead(jY);
 
  //mappa i valori letti in funzione della velocità inima e massima
  mapX = map(valX, 0, 1023, minSpeed, maxSpeed);
  mapY = map(valY, 0, 1023, minSpeed, maxSpeed);
 
  //esegui funzione di comando dei motori
  pilotaMotori(mapX, mapY);
 
}
 
void pilotaMotori(long mapX, long mapY) {
 
  if (mapX <= tresholdDown) {
    //x va indietro
    speedX = -map(mapX, tresholdDown, minSpeed,   minSpeed, maxSpeed);
    muoviX = true;
  } else if (mapX >= tresholdUp) {
    //x va avanti
    speedX = map(mapX,  maxSpeed, tresholdUp,  maxSpeed, minSpeed);
    muoviX = true;
  } else {
    //x sta fermo
    speedX = 0;
    muoviX = false;
  }
 
  if (mapY <= tresholdDown) {
    //y va giù
    speedY = -map(mapY, tresholdDown, minSpeed,   minSpeed, maxSpeed);
    muoviY = true;
  } else if (mapY >= tresholdUp) {
    //y va su
    speedY = map(mapY,  maxSpeed, tresholdUp,  maxSpeed, minSpeed);
    muoviY = true;
  } else {
    //y sta fermo
    speedY = 0;
    muoviY = false;
  }
 
  if (muoviX) {
    motoreX.setSpeed(speedX);
    motoreX.run();
  } else {
    motoreX.stop();
  }
 
  if (muoviY) {
    motoreY.setSpeed(speedY);
    motoreY.run();
  } else {
    motoreY.stop();
  }
}
 
 
void checkEnable() {
 
  btnEnable.update();
 
  if (btnEnable.fell()) {
    enable = !enable;
  }
 
}

Hi

In der Zeit, wo ich mir Deinen Sketch angesehen habe, hättest Du Das einfach testen können - so wie ich Das verstehe, spricht Nichts dagegen.

Mit Italienisch hab ich's nicht so (ein Bier und ein Brötchen bekäme ich noch hin, also Überleben wäre gesichert g) - sonst müsste der Moderator im deutschen Forenzweig dem Italienischem mächtig sein, wenn ich mich jetzt nicht allzu sehr verhaue :slight_smile:

MfG

const int maxSpeed = 1000;  //stando alla documentazione della libreria questo valore può essere impostato fino a 4000 per un Arduino UNO

Übersetzung: Laut Dokumentation der Bibliothek kann dieser Wert für den Arduino UNO bis 4000 gesetzt werden.

Prinzipiell kann die Bibliothek schneller takten. Die Frage ist ob es der Motor auch kann bzw ob der Motor bei dieser Schrittfrequenz noch genügend Drehmoment für Deine Anwendung hat.

Grüße Uwe

Hi Uwe

Die einzelnen Kommentare via deepl (oder google) ins Deutsche übersetzen zu lassen hielt ich für gegeben - mein Gedanke war, ob Du z.B. aus den Kommentaren 'direkt sehen kannst', ob/daß Da was falsch gemacht wird.
... zumindest übersetzt Du 'deepl' nicht unähnlich :wink:

MfG

Ich bin nach München zur Make Munich gefahren. Darum hab ich im Moment wenig Zeit was zu übersetzen oder auch nur aufmerksam zu lesen.

Meiner Meinung ist mal wichtiger herauszubekommen ob die Hardware sprich motor überhaupt genug Drehmoment hat um eine solche Geschwindigkeit zu erreichen.

Grüße Uwe

Hi

Viel Spaß dort - mach ein paar Fotos :slight_smile:

MfG