Forum: Mikrocontroller und Digitale Elektronik Digitaler Schrittmotortreiber DM452T // Arduino


von Tobias (tobi_115)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin neu auf dem Gebiet der Schrittmotoren und langsam am 
Verzweifeln. Folgendes Problem: Ich möchte einen NEMA17-Motor 
(17HE19-2004S) in Verbindung mit einem DM542T-Treiber betreiben. Das 
Ganze wird über ein LRS-50-24 Netzteil versorgt. Als Controller verwende 
ich das UNO R3 von Elegoo.

Ich habe nun alles nach bestem Wissen und Gewissen miteinander 
verbunden, aber ich bekomme aus dem Motor nur ein leichtes Vibrieren 
heraus. Er will sich nicht drehen.

Folgende Einstellungen habe ich gewählt: Die DIP-Schalter am Treiber 
habe ich auf 200 Schritte/Umdrehung und 1,69 A Effektivstrom gemäß 
Anleitung eingestellt. PUL+ ist auf PIN2 und DIR+ auf PIN3 gelegt. PUL- 
sowie DIR- habe ich zusammen mit V- vom Netzteil und Treiber auf GND vom 
Board gelegt. Die ENA+-Pins habe ich nicht verwendet.

Hoffe mir kann jemand weiterhelfen.

Danke und Gruß
Tobi

Hier noch das Sketch:
1
#define stepPin 2      // Der Pin, der das Step-Signal sendet
2
#define dirPin 3       // Der Pin, der das Richtungssignal sendet
3
4
void setup() {
5
  pinMode(stepPin, OUTPUT); // Setzt den Step-Pin als Ausgang
6
  pinMode(dirPin, OUTPUT);  // Setzt den Richtungs-Pin als Ausgang
7
  
8
  digitalWrite(dirPin, HIGH); // Setzt die Drehrichtung auf eine Richtung (z.B. Uhrzeigersinn)
9
}
10
11
void loop() {
12
  // Bewegung im Uhrzeigersinn
13
  for (int i = 0; i < 2000; i++) { // Anzahl der Schritte für eine Umdrehung (je nach Mikroschritt-Einstellung)
14
    digitalWrite(stepPin, HIGH);
15
    delayMicroseconds(500); // Pulslänge
16
    digitalWrite(stepPin, LOW);
17
    delayMicroseconds(500); // Wartezeit zwischen den Pulsen
18
  }
19
  
20
  delay(1000); // Eine Sekunde warten
21
  
22
  // Richtung ändern
23
  digitalWrite(dirPin, LOW); // Setzt die Drehrichtung auf die andere Richtung (z.B. gegen den Uhrzeigersinn)
24
  
25
  // Bewegung gegen den Uhrzeigersinn
26
  for (int i = 0; i < 2000; i++) { // Dieselbe Anzahl der Schritte in die entgegengesetzte Richtung
27
    digitalWrite(stepPin, HIGH);
28
    delayMicroseconds(500); // Pulslänge
29
    digitalWrite(stepPin, LOW);
30
    delayMicroseconds(500); // Wartezeit zwischen den Pulsen
31
  }
32
33
  delay(1000); // Eine Sekunde warten
34
}

von Heiner B. (karadur)


Lesenswert?

5V/24V Schalter auf 5V gestellt?

von Gerhard O. (gerhard_)


Lesenswert?

Mir sieht es so aus, als ob die Motorphasen nicht richtig an den 
zugehörigen Treiberausgängen angeschlossen wären. Im mittleren Bild 
sieht das irgendwie nicht richtig aus. Die Brückenausgänge A ist einer 
Windung zugehörig und B die Andere. Siehe hier:

https://www.linengineering.com/resources/wiring-diagrams

Miß mal mit dem Ohmmeter die Motor Windungen. Dann überprüfe ob die A 
und B Paare Ausgänge jeweils an einer Windung hängen und nicht 
kreuzweise.

Rot - A+
Blau - A-
Grün - B+
Schwarz - B-

Falls der Motor dann in die falsche Richtung läuft, wechsle die Polung 
einer Windung.


Das wäre vielleicht ein guter Fehlersuche Ansatz.

Ich habe eine sehr ähnliche Steuereinheit und die funktioniert gut.

https://3ddistributed.com/duet-wifi/stepper-motor-wire-color-and-coil-pairs/
https://halldweb.jlab.org/wiki/images/c/c1/Lin5718wiring.pdf

: Bearbeitet durch User
von Tobias S. (x12z34)


Lesenswert?

Gerhard O. schrieb:
> https://www.linengineering.com/resources/wiring-diagrams
> Rot - A+
> Blau - A-
> Grün - B+
> Schwarz - B-

Es sieht so aus, als ob stepperonline die Sache etwas anders macht. Im 
Datenblatt des Motors 
(https://www.omc-stepperonline.com/index.php?route=product/product/get_file&file=2731/17HE19-2004S(1).pdf)
passen die Farben so, wie sie angeschlossen sind
Rot - B-
Blau - A-
Grün - B+
Schwarz - A+

Dennoch ist es sicher eine gute Idee, das mal durchzumessen, um sicher 
zu gehen:

Gerhard O. schrieb:
> Miß mal mit dem Ohmmeter die Motor Windungen. Dann überprüfe ob die A
> und B Paare Ausgänge jeweils an einer Windung hängen und nicht
> kreuzweise.
>

Was mir noch aufgefallen ist: Der Motor will 2A pro Phase sehen. Du hast 
es auf ~1,7Aeff/2,3Apeak eingestellt. IMHO sollte das durchaus reichen, 
der Motor sich bewegen. Aber erhöhe mal versuchsweise den eingestellten 
Strom am Schrittmotortreiber.

Und verringere im Arduino Sketch mal die Schrittfrequenz. 2x500µs 
entspricht 1000 Schritt pro Sekunde, also 5 Umdrehungen pro Sekunde aus 
dem Stand. Für den Anfang, um grundsätzliche Fehler auszuschließen, 
würde ich da weniger empfehlen. Erhöhe doch beispielsweise einfach 
versuchsweise die Zeiten mal um den Faktor 5

von Rainer W. (rawi)


Lesenswert?

Tobias schrieb:
> Hoffe mir kann jemand weiterhelfen.

Du könntest eine höhere Untersetzung (Mikroschrittbetrieb) probieren, 
damit der Motor nicht so hart angesteuert wird.

Tobias S. schrieb:
> Was mir noch aufgefallen ist: Der Motor will 2A pro Phase sehen. Du hast
> es auf ~1,7Aeff/2,3Apeak eingestellt.

Wenn der Motor ohne Last auf dem Tisch steht, kann der volle Strom eher 
kontraproduktiv sein, weil im Vollschrittbetrieb die Schläge dann noch 
härter sind und entsprechend viele Schwingungen angeregt werden.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tobias schrieb:
> aber ich bekomme aus dem Motor nur ein leichtes Vibrieren heraus.
>  delayMicroseconds(500); // Pulslänge
Hast du da auch mal unterschiedliche und deutlich längere Zeiten 
probiert?

BTW:
Du hast da noch einen SW-Fehler drin:
>   digitalWrite(dirPin, LOW);
Wenn es mal läuft wird dein Programm dafür sorgen, dass der Motor in die 
eine Richtung A fährt, dann wartet, und von da an dann mit Pausen immer 
in die andere Richtung B fährt (und eben nicht mehr nach A umdreht).

Tobias S. schrieb:
> Gerhard O. schrieb:
>> https://www.linengineering.com/resources/wiring-diagrams
>> Rot - A+
>> Blau - A-
>> Grün - B+
>> Schwarz - B-
> Es sieht so aus, als ob stepperonline die Sache etwas anders macht
Ich würde da nicht auf irgendwelche Daten von irgendwoher aus dem 
Internet vertrauen, sondern einfach mal mit einem Ohmmeter die beiden 
Spulen ausmessen und dann an die entsprechenden Klemmen anschließen. 
Die Trefferquote liegt ziemlich hoch: mit 1 einzigen Messung kann man 
feststellen, welches die beiden Spulen denn tatsächlich sind. Die 
nachfolgenden Messungen bestätigen dann nur noch, ob die beiden 
Wicklungen den selben Widerstand oder evtl. einen Kurzschluss haben.

Tobias S. schrieb:
> Was mir noch aufgefallen ist: Der Motor will 2A pro Phase sehen.
Wenn er dann mal das volle Drehmoment braucht. Für den Leerlauf reichen 
auch 200mA.

: Bearbeitet durch Moderator
von Gunnar F. (gufi36)


Lesenswert?

Tobias schrieb:
> digitalWrite(stepPin, HIGH);
>     delayMicroseconds(500); // Pulslänge
>     digitalWrite(stepPin, LOW);
>     delayMicroseconds(500); // Wartezeit zwischen den Pulsen

Gehst du da mit 1kHz ohne Beschleunigungsrampe dran? Das ist zu viel. 
Versuch mal eher 200Hz. Oder wie schon geraten wurde, die Mikroschritte 
höher stellen.

von Tobias (tobi_115)


Lesenswert?

Heiner B. schrieb:
> 5V/24V Schalter auf 5V gestellt?

War der Meinung, dass sich der Wert auf die Ausgangsspannung bezieht... 
Einmal in der Anleitung nachgelesen... siehe da, der Wert bezieht sich 
auf die Steuersignalspannung, also in meinem Fall 5V.

Erstes Problem also gelöst.

Tobias S. schrieb:
> Dennoch ist es sicher eine gute Idee, das mal durchzumessen, um sicher
> zu gehen:

Ich habe noch einmal nachgemessen und tatsächlich war es anders als auf 
dem Datenblatt von Stepperonline beschrieben.

Mit den beiden Anpassungen läuft der Motor nun perfekt.

Vielen Dank an alle. :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.