TMC2208 mit Arduino

Hallo zusammen,

ich habe ein Problem mit meinem NEMA11 5V 0.46A Schrittmotor und dem TMC2208 v2 Treiber. Ursprünglich habe ich den Motor mit einem MX1508 DC Motor Treiber Modul LN298N 1.5A betrieben, aber der Motor lief zu ruckelig und laut. Deshalb wollte ich auf den TMC2208 v2 wechseln, um bessere Laufruhe zu erreichen. Leider bekomme ich den Motor jetzt nicht mehr zum Laufen.

Hier sind die Details:

  • Motor: NEMA11 Schrittmotor
  • Treiber: TMC2208 v2
  • Pins:

Rechte Seite (von oben nach unten):

Pin Nummer Pin Name Beschreibung
1 GND Masse (Ground)
2 VDD Logikspannung (3.3V oder 5V)
3 1B Motorphase 1B
4 1A Motorphase 1A
5 2A Motorphase 2A
6 2B Motorphase 2B
7 GND Masse (Ground)
8 Vcc Motorversorgungsspannung (5V)

Linke Seite (von oben nach unten):

Pin Nummer Pin Name Beschreibung
9 DIR Richtung (Direction)
10 STEP Schritt (Step)
11 NC Nicht verbunden (Not Connected)
12 UART UART-Kommunikation
13 Widerstand 8 mit Pfeil auf UART Widerstand für UART-Kommunikation
14 MS1 Microstepping-Selektor 1
15 MS2 Microstepping-Selektor 2
16 EN Enable (Aktivierung des Treibers)
  • Kaufort: eBay
  • Anschlussplan: Harald Kreuzer
  • Arduino: Arduino Uno
  • Motorspannung: 5V (später extern)

Ich gehe davon aus, dass der Treiber im UART-Modus läuft, aber ich habe beide Modi ausprobiert. Leider funktioniert keiner.

Hier ist der Code für den nicht-UART-Modus:

#include <AccelStepper.h>

// Define stepper motor connections
#define STEP_PIN 2
#define DIR_PIN 5

// Set the number of steps per revolution and microstepping mode
const long STEPS_PER_REV = 3200;   // Full steps per revolution

// Create an instance of AccelStepper
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);

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

  // Set the maximum speed and acceleration of the stepper motor
  stepper.setMaxSpeed(0.25 * STEPS_PER_REV);      // 0.2 rotations per second
  stepper.setAcceleration(2.0 * STEPS_PER_REV);  // 2 rotations per second squared

  // Set the initial position and enable the stepper motor
  stepper.setCurrentPosition(0);
  stepper.enableOutputs();
  stepper.move(-20 * STEPS_PER_REV);
  stepper.setSpeed(0.25 * STEPS_PER_REV);
  stepper.runSpeedToPosition();
}

Und hier ist der Code für den UART-Modus:

// Defining
#define StepPin     2
#define RX_PIN      0
#define TX_PIN      1

#define Current     460
#define MicroStep   0

// Including library
#include <TMC2208Stepper.h>                                // Include library
TMC2208Stepper driver = TMC2208Stepper(RX_PIN, TX_PIN);    // Create driver and use

// Setup
void setup() {
  Serial.begin(9600);
  delay(2000);
  driver.beginSerial(115200); 
  Serial.println("Driver set");   
  driver.push();

  // Prepare pins
  pinMode(StepPin, OUTPUT);
  Serial.println(driver.DRV_STATUS());  

  driver.pdn_disable(1);              // Use PDN/UART pin for communication
  driver.I_scale_analog(0);           // Adjust current from the registers
  driver.rms_current(Current);        // Set driver current 
  driver.toff(5);                     // Enable driver
  driver.shaft(1);
  driver.en_spreadCycle(0);           // 1: spreadCycle
                                      // 0: stealthChop
  driver.pwm_autoscale(1);            // 1: if stealthChop is chosen. Otherwise 0
  driver.mstep_reg_select(1);
  driver.mres(MicroStep);
}

// Looping
void loop() {
  digitalWrite(StepPin, !digitalRead(StepPin));  // Step
  delayMicroseconds(100);
}

Ich bin mir nicht sicher, was ich falsch mache. Es gibt leider nicht viele Arduino-Tutorials für diesen Treiber. Ich hoffe, jemand hier kann mir weiterhelfen.

Vielen Dank im Voraus!

Zu knapp an der unteren Grenze!
Kannst durchaus auf 24V hoch gehen.

Hast du den obligatorischen 100µF Stützkondensator dran?
(den alle Treiber dieser Art benötigen)

Wobei mir scheint, dass der Motor nicht sonderlich gut zum Treiber passt.
Hast du auf 0.46A eingestellt (oder darunter)
Leider habe ich weder den Treiber, noch den geheimen Motor.

1,2A für einen 0,46A Motor?
Ich vermute, das geht ins Auge.

Oh ja, das hatte ich vergessen zu ändern; dort sollte eigentlich 460 stehen. Ich würde gerne 24V verwenden, aber mein LiPo-Akku liefert nur 3,7V, und somit kann ich im Moment mit 5V arbeiten. Ich könnte aber mal probieren eine 9V Blockbatterie anzuscließen und zu schauen ob das klappt. Wenn ich das nochmal umstrukturiere, wähle ich einen anderen Aufbau.
Ja, der 100µF 16V Kondensator befindet sich an seinem Platz.
Auch mit der 9V Blockbatterie tut sich da leider gar nichts.

Eine 9V-Blockbatterie ist die denkbar ungünstigste Versorgung, sobald ein nennenswerter Strom fließen soll. Sie hat einen hohen Innenwiderstand und einen niedrigen Energiegehalt.

Gruß Tommy

@formeo
Schau mal hier unter Dokumente ist auch Video wie und was.
Nimm doch die MobaTools der Ersteller der Bibliothek ist auch hier im Forum Aktiv.

Ich habe das Problem gefunden. Es lag am Arduino Uno; ich weiß nicht genau warum, aber mit meinem ESP32 funktioniert alles wunderbar. Also mit 5V und ohne 9V Batterie.

Der TMC2208 ist ein Stromtreiber während der L298N ein Spannungstreiber ist.

Ein Spannungstreiber gibt dem Motor die volle Versorgungsspannung. Der Strom wird durch den Windungswiderstand und der Windungsinduktivität begrenzt.

Ein Stromtreiber begrenzt den Strom einfach gesagt indem der Windungsstrom gemessen wird und bei erreichen eines gewissen eingestellten Wertes die Versorgungsspannung abschaltet. Nach einer gewissen Zeit schaltet er die Versorgungsspannung wieder ein und wartet wieder bis zum erreichen des eingestellten Wertes. Da man so fast jeden beliebigen Strom einstellen kann kann man die beiden Spulen des Motors mit verschiedenen Strömen treiben und so viele Zwischenschritte (Microschritte) zwischen den Vollschritten realisieren.
Der TMC2208 kann mit 32 Microschritten angesteuert werden aber steuert den Motor mit 256 Microschritten an. Dies macht den Schrittmotor leise.

Damit der Treiber den Strom bestimmen kann muß die Induktivität des Motors so wenig Einfluß auf den Strom haben wie möglich. Dies wird erreicht indem die Motorversorgungsspannung höher als die Nennspannung des Motors gewählt wird.
Bei Deinem 5V Motor sind 24V sinnvoll.
Wenn Du den Treiber mit 5V betreibst wird der leise und runde Lauf nicht erreicht werden.
Grüße Uwe

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