Schrittmotor an TB6600 anschließen

Hallo,

ich möchte gerne diesen Motor an die TB6600 anschließen.

Die Verkabelung sieht momentan wie folgt aus:

Auf Ausgänge 10,11,12 des Arduino
ENA-
DIR-
PUL-

Auf Breadboard zusammengefasst, und dann auf 5V des Arduino gelegt
ENA+
DIR+
PUL+

Anschluss Schrittmotor, wie in der Tabelle (siehe unter Connection) der Motorseite beschrieben:
B- blau
B+ rot
A- grün
A+ schwarz

Anschluss Netzteil:
GND geht auf - des Labornetzteils
VCC geht auf + des Labornetzteils und auf GND des Arduinos

Wenn nun die Ansteuerung des Arduinos erfolgt, dreht der Motor nicht sauber. Es ist eher ein Zittern in eine Richtung.

Ich weiß auch nicht genau, welche Dip-Schalter vom TB6600 ich wie schalten muss.

Kann mir jemand helfen?

VCC geht auf + des Labornetzteils und auf GND des Arduinos

Du willst definitiv (oder hast schon) den Arduino kaputtmachen.
Welche Spannung gibst Du dem Schrittmotortreiber?
Grüße Uwe

Bin einen Schritt weiter:

Belegung hat sich wie folgt geändert:

GND des TB6600 geht auf - des Netzteils und auf GND des Arduino
VCC des TB660 geht auf + des Netzteils

im Sketch habe ich den Wert
#define STEPS 400
gesetzt, denn meine Überlegung ist:

400 x 0,9° = 360°

Damit dreht der Motor schon sehr sauber. Allerdings komme ich beim Netzteil bei 24V nicht höher als 0,17A

Der Arduino läuft noch ohne Probleme und nimmt alle Eingangssignale an und verarbeitet diese korrekt.

Allerdings komme ich beim Netzteil bei 24V nicht höher als 0,17A

Was meinst Du damit?

Der Motor nimmt nicht mehr Leistung als den angegebenen ab. Auch wenn ich einen höheren einstellen möchte, der angezeigte Wert steigt nicht.

Entweder hast Du nicht den Motor den Du gesagt hast
oder das netzteil bringt nicht mehr
oder hast Du den Treiber falsch eingestellt
und dazu mißt Du den Strom falsch

Grüße Uwe

Das Netzteil war nicht ganz in Ordnung.
Steuerung läuft nun und der Motor dreht sich Ordnungsgemäß. Allerdings komme ich mit der Programmierung der Drehzahl noch nicht zurecht.

Wie beschrieben hat der Motor einen Schrittwinkel von 0,9°
360° / 0,9° = 400 Schritte für eine volle Umdrehung

Ich würde diesen Wert nun in meinem Sketch bei #define STEPS 400 eintragen.
Weiter unten sieht man, dass der Motor bei korrektem PIN und gedrücktem Endschalter 2048 gegen den Uhrzeigersinn fährt. Das ist allerdings nur ca. eine Viertelumdrehung.

Wo ist mein Denkfehler? Und wie kann ich die Drehzahl steuern? Über die DIP Schalter am TB6600 kann ich die Drehzahl wohl steuern, allerdings glaube ich nicht, dass das korrekt ist und darüber lässt sie sich ja auch nur sehr grob steuern.

/*
 * Autor: Chris Herkes
 * Datum: 01.03.2019
 * Titel: Motorsteuerung mittels PIN Code und Endschalter, Abschlussprojekt staatl. gepruefter Maschinenbautechniker
 */

#include <Stepper.h> // stepper Bibliothek einbinden
#include <Keypad.h> // keypad Bibliothek einbinden

#define STEPS  200 // Anzahl Motorsteps
int  Steps2Take;  
 

const byte PINLENGTH = 4; // Zeichenzahl Pincode
char pinCode[PINLENGTH+1] = {'0','8','1','5'}; // Pincode festlegen
 

char keyBuffer[PINLENGTH+1] = {'-','-','-','-'};

// Achtung, Keypad ist nicht vollständig an Arduino angeschlossen. Buchstaben werden nicht uebertragen! 

const byte ROWS = 4; // vier Zeilen
const byte COLS = 4; // vier Spalten

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //Eingaenge verbunden zu den Zeilenausgaengen des Keypads
byte colPins[COLS] = {5, 4, 3, 1}; //Eingaenge verbunden zu den Spaltenausgaengen des Keypads
int Endschalter = 2; // Eingangspin Endschalter
int grueneLED = A5; // Ausgangspin grueneLED
int roteLED = A4; // Ausgangspin roteLED
 

Stepper small_stepper(STEPS, 10, 12, 11, 13); // Ausgaenge zum Schrittmotor

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 
 
void setup(){
  Serial.begin(9600);
  pinMode(Endschalter, INPUT_PULLUP); // Defiintion Endschalter
  pinMode(grueneLED, OUTPUT); // grueneLED als Ausgang
  pinMode(roteLED, OUTPUT); // roteLED als Ausgang
}
 
void loop(){

// Wenn Endschalter geschaltet, leuchtet die rote LED. Ansonsten die gruene LED.

if (digitalRead(Endschalter) == 1) { 
    digitalWrite(grueneLED, LOW);
    digitalWrite(roteLED, HIGH);
  }
else{
  digitalWrite(grueneLED, HIGH);
  digitalWrite(roteLED, LOW);
  }    

// Abfrage und Auswertung Keypad  

  char customKey = customKeypad.getKey();
 
  if (customKey) {

    if ((int(customKey) >= 48) && (int(customKey) <= 57)){ 
      addToKeyBuffer(customKey); 
    }

    else if (customKey == '#') { 
      checkKey(); 
    } 
    else if (customKey == '*') { 
    Serial.print(digitalRead(Endschalter)); 
    Serial.print(" > ");
    } 
  } 
} 
 
void addToKeyBuffer(char inkey) { 
  Serial.print(inkey); 
  Serial.print(" > ");
  for (int i=1; i<PINLENGTH; i++) {
    keyBuffer[i-1] = keyBuffer[i];
  }
  // in ganz rechter Stelle die letzte Ziffer speichern
  keyBuffer[PINLENGTH-1] = inkey;
  Serial.println(keyBuffer);
}
 
void checkKey() {
  if (strcmp(keyBuffer, pinCode) == 0) {
    Serial.println("CORRECT");
    pinCorrect();
  }
  else {
    Serial.println("WRONG!");
    pinWrong();
  }

  for (int i=0; i < PINLENGTH; i++) {
    keyBuffer[i] = '-'; 
  }
}

// Bei richtigem PIN und gedruecktem Endschalter drehe angegebene Schrittzahl in negative Richtung, ansonsten werden 10 Schritte in positiver Richtung gefahren und erneut geprueft (while-Schleife)
 
void pinCorrect() {          
  if (digitalRead(Endschalter) == 1) {      
      small_stepper.setSpeed(1000); //Max seems to be 1000
                      Steps2Take  =  -2048;  // Rotate CCW
                      small_stepper.step(Steps2Take);
                      delay(2000);        
  }
  else{
      while(digitalRead(Endschalter) == 0){
      small_stepper.setSpeed(1000); //Max seems to be 1000
                      Steps2Take  =  10;  // Rotate CCW
                      small_stepper.step(Steps2Take);
  }
                      delay(2000);       
  }
}
 
void pinWrong() {
  small_stepper.setSpeed(1000);
                      Steps2Take  =  0;  // Rotate CCW
                      small_stepper.step(Steps2Take);
                      delay(2000); 
                      
 
}

Am TB6600 kannst Du die Schrittmodi einstellen.
zB ein 1/16 Microschritt bedeutet daß jeder Vollschritt in 16 Teilschritte unterteilt ist und darum eine volle Umdrehung 400*16 = 6400 Schritte ist. Steht aber auch auf dem Gehäuse drauf.

Grüße Uwe

Hi

Mikroschritte benötige ich nicht. So genau muss der Motor nicht fahren. Habe deshalb die Zeile Mikrostep = 1 geschaltet:

S1 = ON
S2 = ON
S3 = OFF

Wie regel ich das mit der Drehzahl? Wenn ich bei #define steps den Wert 400 eintrage, bleibt der Motor einfach nur stehen und surrt. Vermutlich ist die Beschleunigung zu hoch und er bleibt deshalb stehen, habe davon hier desöfteren gelesen.
Würde eine Anfahrrampe helfen? Wie programmiere ich diese ein? Habe hier im Forum schon gesucht, aber keinen passenden Code gefunden.

 small_stepper.setSpeed(1000); //Max seems to be 1000

Hier stellst Du die Geschwindigkeit ein.

HeCh:
Wie regel ich das mit der Drehzahl? Wenn ich bei #define steps den Wert 400 eintrage, bleibt der Motor einfach nur stehen und surrt. Vermutlich ist die Beschleunigung zu hoch und er bleibt deshalb stehen, habe davon hier desöfteren gelesen.
Würde eine Anfahrrampe helfen? Wie programmiere ich diese ein? Habe hier im Forum schon gesucht, aber keinen passenden Code gefunden.

evt. solltest du die Accelstepper Library verwenden.

Ja, ich glaube, das solltest du.