Rätsel um Schrittmotor direction

Hallo zusammen!

Ich baue gerade ein Smartrollo, welches ich in mein Openhabsystem einbinden will.
Momentan arbeite ich an dem Antrieb.

Ich benutze ein Esp 8266 NodeMCU-Board und einen A4988 Motortreiber mit einem Nema 17 Schrittmotor.
Den Motor kann ich problemlos ansteuern bis auf die Richtung. ich kann ihn bewegen und die Geschindigkeit vorgeben, jedoch ist die Bewegungsrichtung scheinbar zufällig. Er bewegt sich mal in die eine, dann wieder in die andere Richtung. Die Richtung ändert sich aber nur, wenn ich den Motor kurz nicht ansteuere z.B. ein längeres Delay mache. Es ist egal, ob der dir-Pin am Motortreiber auf GND oder 3.3V gezogen wird. Ich habe den Pin auch mal gar nicht verbunden, dann zuckt der Motor nur hin und her. Bei einem anderen Motor (auch Nema 17 allerdings etwas kleiner und mit Getriebe) funktioniert der Aufbau wie er sollte. Im Netz habe ich zu diesem Problem nix finden können.
Vielleicht habt ihr da eine Idee.

Viele Grüße

fps_boost

Könnte es sein, dass das Modul die max. 3,3V nicht sauber als HIGH erkennt?
Schau mal ins Datenblatt.

Gruß Tommy

Hi, danke für die schnelle Antwort!

Bei dem identischen Aufbau nur mit anderem Motor hatte ich keine Probleme.
Ich denke das das Problem eher nicht beim Modul liegt sondern am Motor.
Gleichzeitig denke ich nicht, dass der Motor irgendwie kaputt ist, weil er sich ganz normal dreht.
Sehr seltsam das Ganze.

Hast du die Einstellungen des Treibers auf den Stepper angepasst ?

FPS_Boost:
Hi, danke für die schnelle Antwort!

Bei dem identischen Aufbau nur mit anderem Motor hatte ich keine Probleme.
Ich denke das das Problem eher nicht beim Modul liegt sondern am Motor.
Gleichzeitig denke ich nicht, dass der Motor irgendwie kaputt ist, weil er sich ganz normal dreht.
Sehr seltsam das Ganze.

Kann sein
Kann auch nicht sein.
Ich kann aber nicht zu einer der beiden Möglichkeiten tendieren weil ich keine infos zur Entscheidungsfindung habe.
Welcher Motor, Schaltung, Sketch?
Grüße Uwe

Solche Effekte können durchaus passieren, wenn die Stromeinstellung am A4988 nicht zum Motor passt. Wie Dieter schon erwähnte, musst Du das an den jeweils verwendeten Stepper anpassen.
Dass beides Nema17 Motore sind, sagt nichts über ihre elektrischen Eigenschaften. Nema17 definiert nur die Größe des Befestigungsflansches. Die elektrischen Daten können sich fundamental unterscheiden. Deshalb sind die genauen Daten der beiden Motore wichtig.
Wie Uwe schon schrieb: gib uns genaue Informationen zu deinem Aufbau,Sketch und den verwendeten Komponenten.

Ich habe folgenden Motor Datenblatt (funktioniert). Der funktioniert nicht Datenblatt Am Treiber habe ich nichts geändert / angepasst.
Hier ist mein Code:

#include <Arduino.h>

const uint8_t PinEnable = D0;
const uint8_t PinStep = D4;
const uint8_t PinRichtung = D5;
const uint8_t PinSchrittgroesse1 = D1;
const uint8_t PinSchrittgroesse2 = D2;
const uint8_t PinSchrittgroesse3 = D3;

bool Richtung = true;

void setup() 
{
  pinMode(PinStep, OUTPUT); 
  pinMode(PinRichtung, OUTPUT); 
 
  // Pins zum Schrittgröße einstellen
  pinMode(PinSchrittgroesse1, OUTPUT);
  pinMode(PinSchrittgroesse2, OUTPUT);
  pinMode(PinSchrittgroesse3, OUTPUT);

  pinMode(PinEnable, OUTPUT);

  // Kleinste Schrittgröße einstellen
  digitalWrite(PinSchrittgroesse1, HIGH);
  digitalWrite(PinSchrittgroesse2, HIGH);
  digitalWrite(PinSchrittgroesse3, HIGH);

  // Motor anschalten
  digitalWrite(PinEnable, LOW);
}

void loop() 
{    
  digitalWrite(PinRichtung, Richtung ? LOW : HIGH); 

  for(int i=0; i < 4000; i++)
  {
    digitalWrite(PinStep, HIGH);
    delayMicroseconds(30);
    digitalWrite(PinStep, LOW);
    delayMicroseconds(30);
  }

  delay(2000);
  Richtung = !Richtung;
}

for(int i=0; i < 4000; i++)
  {
    digitalWrite(PinStep, HIGH);
    delayMicroseconds(30);
    digitalWrite(PinStep, LOW);
    delayMicroseconds(30);
  }

Damit soll der Schrittmotor anfahren können?

Fang mal viel langsamer an.

digitalWrite(PinRichtung, Richtung ? LOW : HIGH);

Zu was brauchst Du den Ternären Ausdruck wenn Richtung schon 1 oder 0 ist (was HIGH und LOW entspricht)

digitalWrite(PinRichtung, Richtung);

reicht.

Grüße Uwe

Ich habe das Delay auf 50 Microsekunden geändert. Dann wird der Motor unangenehm laut. Wenn ich noch länger warte brummt der Motor nur noch.

Auch 50µs sind viel zu kurz. Das bedeutet 10000 Steps/Sek. Das dürfte kaum ein Schrittmotor aus dem Stand schaffen. Fang mal zum Testen eher mit Werten im 2-stelligen ms Bereich an.
Und den richtigen Strom für deine Stepper musst Du auch noch einstellen.
Der Nennstrom des nicht funktionierenden ist mit 2A auch schon grenzwertig für den A4988. Mit kleinerem Strom sollte er aber auch laufen, nur erreicht er nicht sein spezifiziertes Drehmoment.

Edit: Ok, hab' gesehen, dass Du mit 1/16 Microsteps arbeitest. Da verträgt er natürlich auch höhere Stepraten. Trotzdem muss es mit kleineren Stepraten immer gehen. Einen Stepper kannst Du so langsam betreiben wie Du willst. Der kann auch 1 Step / Minute ab. Die Grenze liegt immer nur im oberen Bereich. Deshalb zum Testen eher langsam angehen. Wenn das nicht geht, stimmt was nicht.

FPS_Boost:
Am Treiber habe ich nichts geändert / angepasst.

Und das ist auch einer der Fehler, die du machst.

Ich habe jetzt mal 200 Microsekunden eingestellt. Der Motor hat nur laut gebrummt, sich aber nicht bewegt. Dann habe ich etwas mit der Referenzspannung gespielt (0,3V bis 1V). Als ich die Schraube am Treiber gedreht habe, hat es mal lauter mal leiser gebrummt ab zu hat er sich etwas gedreht (ständiger Wechsel). Ich habe aber keine Einstellung gefunden, bei der es so funktioniert wie es sollte. Die Richtung konnte ich nicht steuern. Bei 20 Millisekunden bewegt sich der Motor nicht mehr und macht auch keine Geräusche.

Dann ist entweder etwas kaputt, oder Du hast ihn falsch angeschlossen. Wie gesagt, langsam muss es auf jeden Fall gehen. Womit versorgst Du den Motor ( Netzteil) ? Wird der Motor warm?
Zeig mal ein Foto vom Aufbau, bei dem man alle Verbindungen gut erkennen kann.

Im Anhang ist mein Schaltplan und ein Foto meiner Schaltung. Zur Stromversorgung des Motors habe ich ein Netzteil mit 12V und 2A von einem LED-Streifen. Der Motor bleibt auch bei längeren Aktivitäten kalt.

Miß mal den nicht funktionierenden Motor durch. Hat er eine Wicklung unterbrochen?
Grüße Uwe

Leider sieht man nicht, wie der Motor angeschlossen ist. Wenn er kalt bleibt, fließt da kein oder zumindest ein viel zu kleiner Strom. Sobald der enable-Pin auf low ist, muss Strom fließen, und damit wird er auch warm.
Hast Du ein Multimeter, um mal die Spulen deines Motors druchzumessen?

Habe gerade den Motor durchgemessen. Beide Spulen leiten den Strom.
Edit: Eine Spule ist an 1A & 1B (blau,rot) angeschlossen, die andere an 2A & 2B (grün,schwarz).
Die Farben beziehen sich auf die Kabel am Motor.

Vielen Dank für eure Unterstützung!

Ich habe soeben den Fehler gefunden. :grinning:
Die Kabel vom Motor habe ich mit Lüsterklemmen an den Breadboardkabeln befestigt.
Zum Messen des Motors habe ich mein Messgerät mit den Schrauben der Klemmen verbunden.
Gerade habe ich nochmals an den Breadboardkabeln gemessen und festgestellt, dass ein Kontakt nicht
in Ordnung sein kann. Also habe ich alle Kabel in den Klemmen geprüft, konnte aber keinen Fehler finden.
Daraufhin habe ich die Motorkabel um ein paar Zentimeter abgeschnitten und neu verbunden. Das hat das Problem gefixt. Jetzt funktioniert alles wie es soll (Ich kann die Richtung steuern und auch sehr langsam drehen). Anscheinend hatte eins der Kabel vom Motor einen Kabelbruch oder ähnliches, weshalb eine Spule keinen Strom bekommen hat.

Super dass Du es gefunden hast. Danke für die Rückmeldung :slight_smile:
und weiterhin viel Erfolg und Spaß damit.

FPS_Boost:
Vielen Dank für eure Unterstützung!

Ich habe soeben den Fehler gefunden. :grinning:
....
Anscheinend hatte eins der Kabel vom Motor einen Kabelbruch oder ähnliches, weshalb eine Spule keinen Strom bekommen hat.

Super;
Hatte dann mal wieder Recht :wink: :wink: :wink: :wink: 8) 8)
Grüße Uwe