Schrittmotor ruckt und zuckt

Hallo,

ich probiere mich gerade an Schrittmotoren, Arduino & Co. ein wenig aus.
Ich verwende einen Arduino-Uno mit einem CNC-Shield V3, DRV8825-Motortreibern und einem NEMA 17-Motor.

Die Geschwindigkeit regle ich über ein Potentiometer. Das ganze funktioniert auch sehr gut bis ich versuche einen EIN/AUS-Schalter einzubinden.

Ausschalten kann ich den Motor, beim Einschalten ruckt und zuckt er aber die ganze Zeit und dreht nicht gleichmäßig..egal welche Geschwindigkeit ich einstelle. Ich verwende den ENABLE-Anschluss des Motortreibers um den Motor an/auszuschalten !

Kommentiere ich den Code für Ein/Ausschalten aus und lade neu hoch dann läuft der Motor wieder 1A.

Wo könnte denn mein Fehler liegen ?

unten mein Code.

Vielen Dank

// Defines pins numbers
   
   const int EN = 8;
   const int stepPinX = 2;
   const int dirPinX = 5; 
   int customDelay,customDelayMapped;                             // Defines variables
   int Schalter = 9;                                                                      // Ein/Aus-Schalter, liegt auf X-Endstop
    
   void setup() {
     
     pinMode(stepPinX,OUTPUT);
     pinMode(dirPinX,OUTPUT);
     pinMode(EN, OUTPUT);    
     pinMode(Schalter,INPUT);                                     // Ein/Aus-Schalter
     digitalWrite(dirPinX,LOW);                                   //Ermöglicht es dem Motor, sich in eine bestimmte Richtung zu bewegen
     digitalWrite(EN, LOW);
   }
   void loop() {
     
     customDelayMapped = speedUP();                               // Abrufen von benutzerdefinierten Verzögerungswerten aus der benutzerdefinierten speedUp-Funktion
                                                                 // Erzeugt Pulse mit benutzerdefinierter Verzögerung, abhängig vom Potentiometer, von dem die Geschwindigkeit des Motors abhängt

        if (digitalRead(Schalter)==HIGH){                        // Motoren ein/aus
        digitalWrite(EN, LOW);
        } else {
        digitalWrite(EN, HIGH);
        }

        digitalWrite(stepPinX, HIGH);
        delayMicroseconds(customDelayMapped);
        digitalWrite(stepPinX, LOW);
        delayMicroseconds(customDelayMapped);   

     
   }
   int speedUP() {                                               // Funktion zum Ablesen des Potentiometers
     int customDelay = analogRead(A5);                         // Liest das Potentiometer ab
     int newCustom = map(customDelay, 0, 1023, 500, 6000);     // Wandelt die abgelesenen Werte des Potentiometers von 0 bis 1023 in gewünschte Verzögerungswerte um (300 bis 4000)
     return newCustom;  
   }

Das sieht mir verdächtig aus.
Wie hast Du den Schalter angeschlossen?
Wenn da kein pullup/pulldown Widerstand dran ist, geht das in die Hose.

wie meinst Du das? "Wie hast Du den Schalter angeschlossen?"

sorry für die Rückfrage....ich bin neu in dieser Welt

Ok, dann mach mal folgendes:
Änder die Zeile:

     pinMode(Schalter,INPUT);                                     // Ein/Aus-Schalter

in neu:

     pinMode(Schalter,INPUT_PULLUP);                                     // Ein/Aus-Schalter

Den Schalter klemmst Du mit einem Ende an PIN 9 und mit dem anderen Ende an GND.

Geht?

1 Like

unglaublich - es funktioniert.

vielen Dank

muss jetzt erstmal recherchieren und verstehen warum :wink:

Das kann ich versuchen:
Wenn Du den PIN als INPUT definierst, musst Du extern dafür sorgen, das der PIN immer einen definierten Pegel bekommt.

Wenn der PIN "frei" in der Luft hängt, wirkt der Draht wie eine Antenne.

Extern gibt es zwei Möglichkeiten:


+5V   0---+
          |
          *
         \
          *
          |
PIN 9 0---+
          |
          -
         | |
 4,7Kohm | |
         | |
          -
          |
GND   0---+

In dieser Variante ist der Pegel immer in Richtung GND gezogen, wenn der Schalter offen. Die Schaltung ist PULLDOWN
Tauscht Du +5V und GND, wird es PULLUP.

Der AVR hat intern einen zuschaltbaren Widerstand nach +5V - den aktivierst mit INPUT_PULLUP. Darum funktionierts jetzt :wink:
PS: Der Widerstand mit 4,7 K ist unkritisch - das geht auch mit 10K.

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