INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 4 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Schrittmotor Steuerung
06.01.2019, 18:40 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2019 19:09 von Franz54.)
Beitrag #1
Schrittmotor Steuerung
Ich habe mir die Steuerbaugruppe TB6600 besorgt und muss sagen das ist eher ein Schrittmotor Treiber nach meinem Geschmack. Im Gegensatz zum A4988, der ja schon sehr stressig ist.
Hier ist mal der Link zum TB6600.

Am A4988 hat mich geärgert, dass das Kühlblech am Steuerchip zwar schön klein ist, aber auch keine Möglichkeit hat, richtig zu kühlen. Der Chip glüht schon bei rel. kleinen Motoren, wie dem Nema17 mit 12 Volt und 1,7A. Ich habe den Strom korrekt eingestellt, aber Dieser Zwerg wird sofort heiß. Ausserdem ist da Kühlblech ein wenig auf den Chip geklebt, was sich gerne ablöst. Dazu kommt noch dass der Abstand des montierten Kühlbleches zu den Lötpunkten der Anschlüße so knapp ist, dass nur ein stück Papier dazwischen passt. Also das rel. lockere Kühlblech und der Abstand des Kühlbleches zu den Anschußpunkten des Treibers ist für mich keine Option zur Benutzung.
Hier mal ein Link zum A4988 Treiber.

Einen Vorteil des A4988 zum TB6600 muß ich natürlich auch noch los werden. Erstens natürlich die Größe. Der A4988 geht auf eine Briefmarke, der TB6600 braucht locker den Platz von zwei Nema 17 Motoren. Noch ein Vorteil des A4988 ist, dass die drei Anschlüße zum einstellen der Schrittweite des Motors herausgeführt sind. Somit kann man mit dem Arduino im Programm jederzeit die Schrittweite geändert werden, wenn man es im Programmablauf braucht. Im TB6600 kann man die Schrittweite nur über Jumper einstellen.

Hier unten habe ich noch den Anschlussplan des TB6600.
Und ein passendes Testprogramm dafür. Das ist so eingestellt dass der Motor bei 6400 Schritten ein Umdrehung macht und dafür etwa eine Sekunde braucht.

Code:
// Run a A4998 Stepstick from an Arduino UNO.
// Paul Hurley Aug 2015
int x;
#define BAUD (9600)


void setup()
{
  Serial.begin(BAUD);
  pinMode(5,OUTPUT); // Enable
  pinMode(7,OUTPUT); // Step
  pinMode(6,OUTPUT); // Dir
  digitalWrite(6,LOW); // Set Enable low
}

void loop()
{
  digitalWrite(5,HIGH); // Set Enable high
  digitalWrite(6,HIGH); // Set Dir high
  Serial.println("Loop 6400 steps (1 rev)");
  for(x = 0; x < 6400; x++) // 6400 Schritte ist eine Umdrehung
  {
    digitalWrite(7,HIGH); // Step high
    delayMicroseconds(100); // Schneller Lauf
    //delay(10); // Langsammer Lauf
    digitalWrite(7,LOW); // Step low
    delayMicroseconds(100); // Schneller Lauf
    //delay(100); // Langsammer Lauf
  }
  Serial.println("Pause");
  delay(1000); // pause one second
}


Franz


Angehängte Datei(en) Thumbnail(s)
   

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2019, 14:28
Beitrag #2
RE: Schrittmotor Steuerung
Hier noch das Programm für wenn man größere Schrittweiten einstellt. Da werden die 100 Microdelays dann zu kurz und der Motor ruckelt nur noch. Dann sind es mindestens 200 Microdelay.


Code:
// Run a A4998 Stepstick from an Arduino UNO.
// Paul Hurley Aug 2015
// Einstellungen am TB6600 für 6400 Schritte pro Umdrehung
// und für den Nema 17 Motor mit 1,0 bis 1,2 Amp.
// Dippschalter 6   5   4   3   2   1
// Stellungen   0n  off on  off off off
// und für den Nema 17 Motor mit 1,5 bis 1,7 Amp.
// Dippschalter 6   5   4   3   2   1
// Stellungen   off on  on  off off off
int x;
#define BAUD (9600)


void setup()
{
  Serial.begin(BAUD);
  pinMode(5,OUTPUT); // Enable
  pinMode(7,OUTPUT); // Step
  pinMode(6,OUTPUT); // Dir
  digitalWrite(6,LOW); // Set Enable low
}

void loop()
{
  digitalWrite(5,HIGH); // Set Enable high
  digitalWrite(6,HIGH); // Set Dir high
  Serial.println("Loop 6400 steps (1 rev)");
  for(x = 0; x < 6400; x++) // 6400 Schritte ist eine Umdrehung
  {
    digitalWrite(7,HIGH); // Step high
    delayMicroseconds(200); // Schneller Lauf
    //delay(10); // Warte 10 Millisekunden
    digitalWrite(7,LOW); // Step low
    delayMicroseconds(200); // Schneller Lauf
    //delay(100); // Warte 100 Millisekunden
  }
  
  Serial.println("Pause");
  delay(1000); // pause one second
}

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.01.2019, 15:06 (Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2019 15:10 von Franz54.)
Beitrag #3
RE: Schrittmotor Steuerung
Ich habe nen Stress mit dem AccelStepper.
Wenn ich einen A4988 Treiber damit betreibe ist alles Easy. Wenn ich den TB6600 mit dem AccelStepper betreibe gibt es ein Problem.
Der A4988 Treiber braucht auf Enable einen Minus um Aktiv zu werden.
Der TB660 Treiber braucht auf Enable einen Plus um aktiv zu werden.
Gut das ist kein Problem, den Pin steuert nicht die Lib. sondern den hat man selber in der Hand.
Jetzt ist da aber auch noch den "Step". Der Step braucht auch beim A4988 einen Minus, also Minus Impulse.
Beim TB6600 brauche ich am Step plus Impulse. die werden aber von der Lib. gesteuert. Und in den Konfigurationen kann ich zwar sagen auf welchen Pin ich den Step haben will (AccelStepper stepper(1,5,4);//initialise accelstepper for a two wire board, pin 5 step, pin 4 dir), aber ich finde nichts, womit ich die Polung des Step Impulse einstellen kann Confused Da müßte ich in die Lib eingreifen. Das gefällt mir aber nicht, weil ich sie gerne Orginal lassen möchte.
Daher die Frage, gibt es eine AccelStepper Lib, die am Step pin nen Plus ausgibt, oder die in dem Punkt Konfigurierbar ist Huh

Servus
Franz

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.01.2019, 16:36
Beitrag #4
RE: Schrittmotor Steuerung
Hier scheint das einer gepackt zu haben.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.01.2019, 22:53 (Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2019 22:57 von Franz54.)
Beitrag #5
RE: Schrittmotor Steuerung
Danke Tommy

Nein der scheint eine spezielle Variante von dem TB6600 zu haben. Ist auch anders aufgebaut, vielleicht ein Nachbau. Der kann offensichtlich mit dem Minus Puls Arbeiten. Meine Treiberbaugruppe ist diese hier.

Franz

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.01.2019, 23:15
Beitrag #6
RE: Schrittmotor Steuerung
Das Schlimme bei Amazon sind die fehlenden technischen Daten.

Ansonsten kannst Du doch mit einem Transistor / Negator-Gatter die Polarität umkehren.

Ansonsten die Accelstepper-Dateien/Verzeichnisse kopieren als MyAccelStepper und dort die Umpolung vornehmen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.01.2019, 23:28 (Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2019 23:29 von Franz54.)
Beitrag #7
RE: Schrittmotor Steuerung
(15.01.2019 23:15)Tommy56 schrieb:  Ansonsten die Accelstepper-Dateien/Verzeichnisse kopieren als MyAccelStepper und dort die Umpolung vornehmen.

Ja genau, das muss ich mir anschauen. Ich dachte das hat schon jemand gemacht und ich muss nur diese angepasste Lib finden, aber scheint nicht so zu sein.

Gute Nacht
Franz

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.01.2019, 15:17 (Dieser Beitrag wurde zuletzt bearbeitet: 18.01.2019 17:30 von Franz54.)
Beitrag #8
RE: Schrittmotor Steuerung
Ich habe hier mal noch das Programm vom Beitrag 2 hier oben, aber ohne Delay´s. Ich möchte es als nächstes mal noch aufboren auf 2 und auf 3 parallel gesteuerte Schrittmotoren.

Code:
/*
Einstellungen am TB6600 für 6400 Schritte pro Umdrehung
und für den Nema 17 Motor mit 1,0 bis 1,2 Amp.
Dippschalter 6   5   4   3   2   1
Stellungen   0n  off on  off off off
und für den Nema 17 Motor mit 1,5 bis 1,7 Amp.
Dippschalter 6   5   4   3   2   1
Stellungen   off on  on  off off off
*/

word x = 0;
#define BAUD (9600)

byte Dir = HIGH;
byte schrittzaehler1 = 0;
word schritte1 = 400;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwzeit1 = 500;// +/- Pulswechselzeit1
unsigned long pwablauf1 = 0;// Pulswechselablaufzeit1
unsigned long whzeit1 = 500;// Sinus Wiederhohlzeit1
unsigned long whablauf1 = 0;// Wiederhohlablaufzeit1

void setup()
{
  Serial.begin(BAUD);
  pinMode(6, OUTPUT); // Enable
  pinMode(5, OUTPUT); // Step
  pinMode(4, OUTPUT); // Dir
  digitalWrite(6, LOW); // Set Enable low
}

void loop()
{
  digitalWrite(6, HIGH); // Set Enable high
  digitalWrite(4, Dir); // Set Dir
  if (x < schritte1) {  // Ziel noch nicht erreicht?

//---------------------Schritt 0---------------------------------------
    if ((schrittzaehler1 == 0) && (micros() - whablauf1 >= whzeit1)) {
      digitalWrite(5, HIGH); // Step auf high
      schrittzaehler1 = 1;  // Steuerung für Schritt 1 einstellen
      pwablauf1 = micros(); // Timer für Schritt 1 starten
    }
//---------------------Schritt 1---------------------------------------  
    if ((schrittzaehler1 == 1) && (micros() - pwablauf1 >= pwzeit1)) {
      digitalWrite(5, LOW); // Step auf low
      schrittzaehler1 = 0;  // Steuerung für Schritt 0 einstellen
      whablauf1 = micros(); // Timer für Schritt 0 starten
      x++;
    }
  }
  //--------------------Ziel erreicht ?--------------------------------
  if (x == schritte1) {
    x = 0;
    Dir = !Dir; // Dir Richtung wechseln
    delay(1000); // Eine Sekunde Pause
  }
}

Der delay am Ende das Programmes ist nur um eine kurze Pause zwischen den Bewegungen zu haben. Kann aber eigentlich entfernt werden. Am Ende würde ich gerne eine drei Achsen Steuerung erreichen. Aber ich habe eigentlich noch keinerlei Konzept Confused Bis ich das erreiche, werde ich wohl noch ein paar komplett Umbauten brauchen. Big Grin Aber wenn ich was habe, dann ist das Zeit Tongue

Jetzt der Grundstock für zwei Motoren. Sie laufen fürs Auge absolut gleich.

Code:
/*
Einstellungen am TB6600 für 6400 Schritte pro Umdrehung
und für den Nema 17 Motor mit 1,0 bis 1,2 Amp.
Dippschalter 6   5   4   3   2   1
Stellungen   0n  off on  off off off
und für den Nema 17 Motor mit 1,5 bis 1,7 Amp.
Dippschalter 6   5   4   3   2   1
Stellungen   off on  on  off off off
*/

#define BAUD (9600)
//------Steuerung für den ersten Schrittmotor------------------
word x1 = 0;
byte Dir1 = HIGH;
byte schrittzaehler1 = 0;
word schritte1 = 400;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwzeit1 = 500;// +/- Pulswechselzeit1
unsigned long pwablauf1 = 0;// Pulswechselablaufzeit1
unsigned long whzeit1 = 500;// Sinus Wiederhohlzeit1
unsigned long whablauf1 = 0;// Wiederhohlablaufzeit1
//--------------------------------------------------------------
//------Steuerung für den zweiten Schrittmotor------------------
word x2 = 0;
byte Dir2 = HIGH;
byte schrittzaehler2 = 0;
word schritte2 = 400;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwzeit2 = 500;// +/- Pulswechselzeit2
unsigned long pwablauf2 = 0;// Pulswechselablaufzeit2
unsigned long whzeit2 = 500;// Sinus Wiederhohlzeit2
unsigned long whablauf2 = 0;// Wiederhohlablaufzeit2
//--------------------------------------------------------------
void setup()
{
//----------Steuerpinns für den ersten Treiber aktivieren-------
  Serial.begin(BAUD);
  pinMode(6, OUTPUT); // Enable1
  pinMode(5, OUTPUT); // Step1
  pinMode(4, OUTPUT); // Dir1
  digitalWrite(6, LOW); // Set Enable1 low
//---------------------------------------------------------------
//----------Steuerpinns für den zweiten Treiber aktivieren-------
  Serial.begin(BAUD);
  pinMode(10, OUTPUT); // Enable2
  pinMode(9, OUTPUT); // Step2
  pinMode(8, OUTPUT); // Dir2
  digitalWrite(10, LOW); // Set Enable2 low
//---------------------------------------------------------------  
}

void loop()
{
//----------Treiber eins aktivieren------------------------------------
  digitalWrite(6, HIGH); // Set Enable high
  digitalWrite(4, Dir1); // Set Dir
  if (x1 < schritte1) {  // Ziel noch nicht erreicht?
//---------------------Schritt 0---------------------------------------
    if ((schrittzaehler1 == 0) && (micros() - whablauf1 >= whzeit1)) {
      digitalWrite(5, HIGH); // Step auf high
      schrittzaehler1 = 1;  // Steuerung für Schritt 1 einstellen
      pwablauf1 = micros(); // Timer für Schritt 1 starten
    }
//---------------------Schritt 1---------------------------------------  
    if ((schrittzaehler1 == 1) && (micros() - pwablauf1 >= pwzeit1)) {
      digitalWrite(5, LOW); // Step auf low
      schrittzaehler1 = 0;  // Steuerung für Schritt 0 einstellen
      whablauf1 = micros(); // Timer für Schritt 0 starten
      x1++;
    }
  }
  //--------------------Ziel erreicht ?--------------------------------
  if (x1 == schritte1) {
    x1 = 0;
    Dir1 = !Dir1; // Dir Richtung wechseln
  }

  //----------Treiber zwei aktivieren------------------------------------
  digitalWrite(10, HIGH); // Set Enable high
  digitalWrite(8, Dir2); // Set Dir
  if (x2 < schritte2) {  // Ziel noch nicht erreicht?
//---------------------Schritt 0---------------------------------------
    if ((schrittzaehler2 == 0) && (micros() - whablauf2 >= whzeit2)) {
      digitalWrite(9, HIGH); // Step auf high
      schrittzaehler2 = 1;  // Steuerung für Schritt 1 einstellen
      pwablauf2 = micros(); // Timer für Schritt 1 starten
    }
//---------------------Schritt 1---------------------------------------  
    if ((schrittzaehler2 == 1) && (micros() - pwablauf2 >= pwzeit2)) {
      digitalWrite(9, LOW); // Step auf low
      schrittzaehler2 = 0;  // Steuerung für Schritt 0 einstellen
      whablauf2 = micros(); // Timer für Schritt 0 starten
      x2++;
    }
  }
  //--------------------Ziel erreicht ?--------------------------------
  if (x2 == schritte1) {
    x2 = 0;
    Dir2 = !Dir2; // Dir Richtung wechseln
    delay(1000); // Eine Sekunde Pause
  }
}

Frage an die, die den Umgang mit Schrittmotoren im Zusammenhang mit CNC Fräsen kennen.

Zum anfahren ist sicher eine Anfahrrampe nicht verkehrt oder?

Aber beim Stoppen wird der Schrittmotor doch nicht weiterlaufen wenn ich sofort Stoppe. Also ich denke da an 6400 Schritte pro Umdrehung. Da braucht der Motor etwas über eine Sekunde für eine Umdrehung. Da bleibt er doch sofort stehen wenn ich keinen Schritt mehr fahre?

Bei meinem Test laufen sie jetzt mit 6400 Schritten je Umdrehung. Da lasse ich sie jetzt mal laufen und schaue, ob sie nach ein paar Std. noch synchron laufen.

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fünf Phasen Schrittmotor? Holzwurm56 1 563 05.02.2019 13:49
Letzter Beitrag: Chopp
  Schrittmotor a4988 Problem iceweasel7 15 3.343 02.01.2018 16:16
Letzter Beitrag: iceweasel7
  12V Schrittmotor mit Arduino ansteuern niggo 4 3.190 21.06.2017 11:09
Letzter Beitrag: Binatone
  Bluetooth-Steuerung mit elegoo uno funktioniert nicht Matthias_Arduino 0 2.017 01.11.2016 19:47
Letzter Beitrag: Matthias_Arduino
  Welcher Schrittmotor ? Welches Motorshield? Binatone 0 1.379 22.09.2016 12:22
Letzter Beitrag: Binatone
  Schrittmotor ruckelt beim Start und im laufenden Betrieb - Arduino+Motor Shield grt35a 3 3.298 21.09.2016 06:56
Letzter Beitrag: Bitklopfer
  Steuerung eines Schrittmotor und eines Lüfters auf einem Shield phischmi 7 1.847 18.08.2016 20:58
Letzter Beitrag: phischmi
  Nema 17 Schrittmotor läuft an a4988 nicht fagus 9 3.366 04.08.2016 20:12
Letzter Beitrag: fagus
  Garagentor,- und Beleuchtungs - Steuerung ardu1n1x 2 2.725 13.07.2016 16:17
Letzter Beitrag: ardu1n1x
  Android App für RGB Steuerung heino_m 5 1.410 08.05.2016 10:20
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste