ESP32 Problem mit TMC2209

Hallo

Ich bin ganz neu hier und auch Neu in dem Thema. Ich möchte einen Futterstreuer bauen und als erstes habe ich versucht einen Stepper Motor über ein ESP32 Board anzusteuern. Danach soll eine SIM800C board folgen womit ich ESP32 und Motor über SMS ansteuern kann.

Erstmal aber zu meinem Problem. Und zwar bekomme ich den Motor nicht ins laufen. Der Anschluss sollte passen aber bitte korrigiert mich. Ich denke es ist in erster Linie ein Anschlussproblem, weniger ein Code problem.

  1. VREF ist 0
  2. Der Motor blockiert im Betrieb
  3. Ich messe auf der Logic (VIO) 3,3V. Sollte passen
  4. Ich messe auf der Power (VM) 12V. Sollte auch passen
  5. Masse rundum habe ich geprüft und sollte ebenfalls passen

Der Code, zugegeben stammt aus ChatGPT, aber ergibt für mich Sinn. Stellt auch nur eine Demo da. Möchte das Ding erstmal ins laufen bekommen bevor ich ihn umschreibe für die Funktion die ich brauche.

#define STEP_PIN 25
#define DIR_PIN  26
#define EN_PIN   27

// Schrittfrequenz einstellen
// 1000 µs HIGH + 1000 µs LOW = 500 Schritte/Sekunde
#define STEP_DELAY_US 1000

void setup() {
  Serial.begin(115200);
  delay(1500);

  Serial.println("===== STEPPER TEST START =====");

  pinMode(STEP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(EN_PIN, OUTPUT);

  digitalWrite(STEP_PIN, LOW);
  digitalWrite(EN_PIN, LOW);   // Treiber aktiv

  Serial.println("Treiber AKTIV (EN = LOW)");
}

void loop() {
  Serial.println("Drehe LINKS (5 Sekunden)");
  digitalWrite(DIR_PIN, LOW);   // Richtung LINKS
  rotateForTime(5000);

  delay(1000);

  Serial.println("Drehe RECHTS (5 Sekunden)");
  digitalWrite(DIR_PIN, HIGH);  // Richtung RECHTS
  rotateForTime(5000);

  delay(1000);
}

void rotateForTime(unsigned long durationMs) {
  unsigned long startTime = millis();

  while (millis() - startTime < durationMs) {
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(STEP_DELAY_US);
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(STEP_DELAY_US);
  }
}

Bitte helft mir. Ich komme da echt nicht weiter. Ich denke das Hauptproblem ist VRef=0..
DANKE

Ich nehme mal an, damit meinst Du die Spannung an dem Schleifer des kleinen Potis? Die muss passend zum verwendeten Motor eingestellt werden. Deshalb braucht man da erstmal die technischen Daten des Motors. Dann kann man entsprechend des Datenblatts des TMC2209 die richtige Spannung am Poti einstellen.

Danke für deine Antwort.
Ich messe an diesem Poti ein paar mV also defakto nichts. Dort sollte ich aber etwas um die 1-1,3V messen und dann einstellen auf die Spannung enstellen welche zum Motor passt. Aber wenn ich dort erst gar nichts messe orte ich den Fehler wo anders.

D.h., auch wenn Du an dem Poti drehst, ändert sich an der Spannung nichts? Wo misst Du das?

Es ändert sich minimal etwas. statt 1,6mv sind es dann 1,8mv..
Ich messe mit einem Multimeter an der Masse am ESP32 (Meine Hauptmasse) und am VREF Messpunkt.

Hast Du mal direkt am Poti gemessen? Bekommt das Poti Spannung? Am Poti sollten etwa 2,5V anliegen, sodass Du mit dem Schleifer 0...2,5V einstellen kannst.

Hi. Ja da habe ich gerade gemessen und habe hier eine Spannung von 1.3V. Kann durch drehen hier die Spannung verstellen. Die Tatsache dass sich der Motor nicht dreht bleibt unverändert.

Hab es jetzt mal mit einem komplett neuen TMC2209 getested ob ich durch irgendeinen falschen Griff den Chip gebraten hätte. Gleiches Ergebnis, gleiches Verhalten.

Wo hast Du die 1,3V? Und in welchem Bereich kannst Du das verändern? Lt. dem Schaltbild sollte der Schleifer direkt mit dem VRef-Pin verbunden sein. Du müsstest also an beiden Stellen die gleiche Spannung messen (sind alle Spannungen angeschlossen wenn Du misst (Vio UND Vm)? Kannst Du den Motor mit der Hand drehen, wenn die Spannungen anliegen?
Und kannst Du mal ein Datenblatt des Motors verlinken? Und welches ESP32 Board hast DU? da gibt es nicht nur eins ...

P.S.

Das erstmal ans Laufen bringen ist ok. Aber den ChatGPT-Code kannst Du danach in die Tonne treten. Der taugt für einen echten Betrieb nicht. Da fängst Du besser wieder von vorne an.

Hallo MicroBahner

Danke für dein Post.

Zum Poti: Am Poti selber (also am Drehrad) messe ich 0,3 bis 2V. Am VRef Pin selber allderings nur mV, also defakto nichts. VIO und VM sind angeschlossen. VIO 3,3V (genau 3,27v) direkt vom ESP32 und VM 12V (genau 12,12v) von einem Netzteil.

Zum Motor: Der Motor dreht immer noch nicht. Er lässt sich auch von Hand nicht drehen, blockiert also. Der Treiber wird minimal warm nach ca 1 Minute. Anbei das Datensheet von dem ich rein davon nicht ableiten könnte wie der Poti eingestellt werden soll.

Zum ESP32: Dabei handelt es sich um ein AZ Delivery ESP32 NodeMCU Modul mit CP2102

Vielen Dank.
lg

Das ist sehr seltsam. Lt. dem Schaltbild des TMC2209 V2.0 Board ist VRef direkt mit dem Schleifer verbunden:
TMC2209_SilentStepStick_Schematic_V20.pdf (103,6 KB)

D.h., dass er vom TMC2209 bestromt wird.

Der wesentliche Parameter ist AMPS/PHASE = 1,5A. Hier gibt es eine Anleitung, unter Punkt 6. einen groben Anhaltspunkt für die Stromeinstellung ( Für den Test brauchst Du bei weitem nicht den Nennstrom lt. Datenblatt ) Mit 1V dürftest Du für erste Tests am unbelasteten Motor gut aufgestellt sein.

Hast Du die Möglichkeit zu messen ob am STEP_Eingang Pulse ankommen?

Hallo,

wo ist das TMC2209 Board her? Link bitte?

Hallo,

das hier verstehe ich nicht.

Wenn man am Poti etwas misst, muss man auch am VREF etwas messen.
Ich gehe davon aus du das Watterott v2 Board. Ansonsten korrigieren.
Für eine gemeinsame Basis habe ich Messpunkte eingezeichnet.

PCB

Was misst du, wenn du das Board alleine und nur 5V anlegst zwischen
A-B =
A-C =
A-D =

Hallo

Nochmals vielen Dank für eure Hilfe

Board 1: WANGCL Stepper Motor Driver TMC2209 with Heatsink Excellent Mute Effect for 3D Printer Park MKS Gen L/MKS SGen L/SKR V1.3 : Amazon.de: Business, Industry & Science
Ich hab das jetzt versucht zu messen (Board1):
A-B: Ich fürchte das hab ich nicht gefunden. wo hier der GND ist
A-C: 0
A-D: 0

ps. Ich hab das Board rein nur über den 5V + GND über den ESP32 angeschlossen. Sonst alles ab.

ps2. Ich kann am DIAG Pin die gleiche Spannung messen wie am Poti. der VRef Lötpunkt scheint komplett tot zu sein. Am Poti hab ich 1V eingestellt.. Ohne Resultat.

Board 2: Ultra Mute 3D Printer TMC2209 V3.1 Stepper Motor Driver Module with Heatsink Upgrade Replacement for TMC2208 TMC2130 TMC2100 : Amazon.de: Business, Industry & Science
Zusätzlich hab jetzt ein anderes Board ausprobiert. Hier kann ich am VRef eine Spannung messen und hab diese auf 1V gestellt. Dennoch gleiches Resultat und der Motor blockiert nur.

An diesem Board messe ich (initial bei 1,3V am Poti):
a-B: ? finde den Lötpunkt nicht.
a-C: 137mV
A-D: 136mv

Hallo,

wenn es andere Boards sind wie ich angenommen habe, können manche GND Punkte nicht vorhanden sein. Mach einmal bitte ein echtes Foto von deinem Board wo man alles erkennt.

Hallo,

okay, Board 1:
Andere Boards, andere Belegung. :wink: Schau einmal hier
https://github.com/makerbase-mks/MKS-StepStick-Driver/tree/master/MKS%20TMC2209/MKS%20TMC2209%20V2.0_001
im Layout.png wo der VREF Pin liegt und messe ihn gegen alle GNDs.
Wenn das passt gegen GND vom ESP messen.
Wenn das passt, liegt es vielleicht am Sketch.
Pins vom ESP langsam "blinken" lassen und messen ob sie reagieren wie gedacht. Vielleicht ist nur die Pinbelegung falsch.
Wenn das passt, wird man sicherlich Beispiele ohne ChatGPT finden.

Liebe Leut.. Vielen Dank für eure Antworten. Ich konnte das Problem lösen durch puren Zufall. In einem Post stand dass man das Stepper board zuerst mit Strom versorgen muss damit die Logik aktiv wird. Damit hat es dann funktioniert. Code und Schaltung waren also funktionell.

Hallo,

aha, wieder was gelernt. Danke für die Rückmeldung.