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
15.03.2019, 14:46 (Dieser Beitrag wurde zuletzt bearbeitet: 15.03.2019 18:44 von Franz54.)
Beitrag #33
RE: Schrittmotor Steuerung
Ich habe den Motor mit dem Treiber DM556 jetzt mal mit 12800 Schritte je Umdrehung laufen lassen. Da bin ich auf Impulszeiten von 20 microsekunden runter. Das läuft recht gut. Smile

So den Test vom Dipschalter 4 bin ich noch schuldig. Habe ich gerade getestet. Wenn der Schalter 4ON ist, dann wird der Haltestrom halbiert. Also er bremst mit vollen Strom, und etwa eine Sekunde später geht der Haltestrom auf die Hälfte runter.

Ja und wie weiter oben schon erwähnt, ist der Haltestrom ganz aus, wenn man den Enable Pin aktiviert. Dann ist der Motor sehr leicht drehbar.

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
17.03.2019, 15:57 (Dieser Beitrag wurde zuletzt bearbeitet: 17.03.2019 18:38 von Franz54.)
Beitrag #34
RE: Schrittmotor Steuerung
Hier ist mein aktuelles Programm zum Gleichlauf Testen für drei Motoren bei 6400 Schritte je Umdrehung ohne Delay´s.

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
*/
#include <Wire.h> // Kommunikation mit Arduino IDE
#include <LiquidCrystal_I2C.h> // LCD Display

// LCD Display´s haben Adresse 0x27 oder 0x3F !!
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define BAUD (115200)

//------Steuerung für den ersten Schrittmotor------------------
word x1 = 0;
word schritte1 = 19200;
byte richtung1 = HIGH;
byte schrittposition1 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !
unsigned long pwablauf1 = 0;// Pulswechselablaufzeit1
unsigned long whablauf1 = 0;// Wiederhohlablaufzeit1
unsigned long rampenstart1 = 500;// Microsekundenx2 pro Impuls bei Anfahrt
unsigned long rampenende1 = 50;//   Microsekundenx2 pro Impuls bei Voller Fahrt
unsigned long stopbeginn1 = -5000;
unsigned long stopzeit1 = 5000;// Pausezeit von Stopp bis Anfahrt
word rampenrichtung1 = 1;
unsigned long mini1 = rampenstart1;
unsigned long maxi1 = rampenende1;
byte enabl1 = 6;
byte dir1 = 5;
byte puls1 = 4;
//--------------------------------------------------------------
//------Steuerung für den zweiten Schrittmotor------------------
word x2 = 0;
word schritte2 = 19200;
byte richtung2 = HIGH;
byte schrittposition2 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwablauf2 = 0;// Pulswechselablaufzeit2
unsigned long whablauf2 = 0;// Wiederhohlablaufzeit2
unsigned long rampenstart2 = 500;
unsigned long rampenende2 = 50;
unsigned long stopbeginn2 = -5000;
unsigned long stopzeit2 = 5000;
word rampenrichtung2 = 1;
unsigned long mini2 = rampenstart2;
unsigned long maxi2 = rampenende2;
byte enabl2 = 10;
byte dir2 = 9;
byte puls2 = 8;
//--------------------------------------------------------------
//------Steuerung für den dritten Schrittmotor------------------
word x3 = 0;
word schritte3 = 19200;
byte richtung3 = HIGH;
byte schrittposition3 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwablauf3 = 0;// Pulswechselablaufzeit3
unsigned long whablauf3 = 0;// Wiederhohlablaufzeit3
unsigned long rampenstart3 = 500;
unsigned long rampenende3 = 50;
unsigned long stopbeginn3 = -5000;
unsigned long stopzeit3 = 5000;
word rampenrichtung3 = 1;
unsigned long mini3 = rampenstart3;
unsigned long maxi3 = rampenende3;
byte enabl3 = 45;
byte dir3 = 44;
byte puls3 = 43;
//--------------------------------------------------------------
void setup()
{
  Wire.begin();
  lcd.begin(20, 4);  // initialize the lcd for 20 chars 4 lines, turn on backlight
  lcd.backlight();   // LCD Beleuchtung ein
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Motor1 ");
  lcd.print(schritte1);
  lcd.print(" Schritte");
  lcd.setCursor(0, 1);
  lcd.print("Tempo1 ");
  lcd.print(rampenstart1);
  lcd.print("-");
  lcd.print(rampenende1);
  lcd.print(" Micro");
  lcd.setCursor(0, 2);
  lcd.print("Motor2 ");
  lcd.print(schritte2);
  lcd.print(" Schritte");
  lcd.setCursor(0, 3);
  lcd.print("Tempo2 ");
  lcd.print(rampenstart2);
  lcd.print("-");
  lcd.print(rampenende2);
  lcd.print(" Micro");
  Serial.begin(BAUD);
  //----------Steuerpins für den ersten Treiber aktivieren-------
  pinMode(enabl1, OUTPUT); // Enable1
  pinMode(dir1, OUTPUT); // Step1
  pinMode(puls1, OUTPUT); // Dir1
  digitalWrite(enabl1, HIGH); // Set Enable1 High
  //---------------------------------------------------------------
  //----------Steuerpins für den zweiten Treiber aktivieren--------
  pinMode(enabl2, OUTPUT); // Enable2
  pinMode(dir2, OUTPUT); // Step2
  pinMode(puls2, OUTPUT); // Dir2
  digitalWrite(enabl2, HIGH); // Set Enable2 High
  //---------------------------------------------------------------
  //----------Steuerpins für den dritten Treiber aktivieren--------
  pinMode(enabl3, OUTPUT); // Enable3
  pinMode(dir3, OUTPUT); // Step3
  pinMode(puls3, OUTPUT); // Dir3
  digitalWrite(enabl3, HIGH); // Set Enable3 High
  //---------------------------------------------------------------
}

void loop()
{
  //---------------------------------------------------------------------
  //----------Treiber 1 aktivieren---------------------------------------
  //---------------------------------------------------------------------
  if (millis() - stopbeginn1 >= stopzeit1) {
    digitalWrite(enabl1, LOW); // Treiber Motor1 ein
    digitalWrite(dir1, richtung1); // Set Dir
    if (x1 < schritte1)    // Ziel noch nicht erreicht?
    {
      //----------------------Motor 1----------------------------------------
      //---------------------Schritt 1---------------------------------------
      if ((schrittposition1 == 1) && (micros() - whablauf1 >= mini1)) {
        digitalWrite(puls1, HIGH); // Step auf high
        schrittposition1 = 2;  // Steuerung für Schritt 1 einstellen
        pwablauf1 = micros(); // Timer für Schritt 1 starten
      }
      //----------------------Motor 1----------------------------------------
      //---------------------Schritt 2---------------------------------------
      if ((schrittposition1 == 2) && (micros() - pwablauf1 >= mini1)) {
        digitalWrite(puls1, LOW); // Step auf low
        schrittposition1 = 1;  // Steuerung für Schritt 0 einstellen
        whablauf1 = micros(); // Timer für Schritt 0 starten
        x1++;
        //-----------------------------------------------------------------
        //-----------------Rampensteuerung Motor1--------------------------
        if (x1 <= rampenstart1) {
          rampenrichtung1 = HIGH;
        } else {
          rampenrichtung1 = LOW;
        }
        if (rampenrichtung1 == HIGH) {
          if (mini1 > maxi1) {
            mini1 = mini1 - 2; // Rampe für Motor 1 Gas geben
          }
        }
        if (rampenrichtung1 == LOW) {
          if (x1 + rampenstart1 > schritte1) {
            mini1 = mini1 + 2; // Rampe für Motor 1 bremsen
          }
        }
        //-----------------------------------------------------------------
      }
    }
    //-------------------------Motor 1-------------------------------------
    //----------------------Ziel erreicht ?--------------------------------
    if (x1 == schritte1) {
      x1 = 0;
      richtung1 = !richtung1; // Dir Richtung wechseln
      mini1 = rampenstart1; //Rampe für Motor 1 Neustart
      digitalWrite(enabl1, HIGH);//Motor1 aus
      stopbeginn1 = millis();
    }
  }
  //---------------------------------------------------------------------


  //---------------------------------------------------------------------
  //----------Treiber 2 aktivieren---------------------------------------
  //---------------------------------------------------------------------
   if (millis() - stopbeginn2 >= stopzeit2) {
  digitalWrite(enabl2, LOW); // Treiber Motor2 ein
  digitalWrite(dir2, richtung2); // Set Dir
  if (x2 < schritte2)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 2--------------------------------------
    //---------------------Schritt 1-------------------------------------
    if ((schrittposition2 == 1) && (micros() - whablauf2 >= mini2)) {
      digitalWrite(puls2, HIGH); // Step auf HIGH
      schrittposition2 = 2;  // Steuerung für Schritt 1 einstellen
      pwablauf2 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 2--------------------------------------
    //---------------------Schritt 2-------------------------------------
    if ((schrittposition2 == 2) && (micros() - pwablauf2 >= mini2)) {
      digitalWrite(puls2, LOW); // Step auf low
      schrittposition2 = 1;  // Steuerung für Schritt 0 einstellen
      whablauf2 = micros(); // Timer für Schritt 0 starten
      x2++;
      //-----------------------------------------------------------------
      //-----------------Rampensteuerung Motor2--------------------------
      if (x2 <= rampenstart2) {
        rampenrichtung2 = HIGH;
      } else {
        rampenrichtung2 = LOW;
      }
      if (rampenrichtung2 == HIGH) {
        if (mini2 > maxi2) {
          mini2 = mini2 - 2; // Rampe für Motor 1 Gas geben
        }
      }
      if (rampenrichtung2 == LOW) {
        if (x2 + rampenstart2 > schritte2) {
          mini2 = mini2 + 2; // Rampe für Motor 1 bremsen
        }
      }
      //----------------------------------------------------------------
    }
  }
  //-------------------------Motor 2------------------------------------
  //----------------------Ziel erreicht ?-------------------------------
  if (x2 == schritte2) {
    x2 = 0;
    mini2 = rampenstart2; //Rampe für Motor 2 Neustart
    richtung2 = !richtung2; // Dir Richtung wechseln
    digitalWrite(enabl2, HIGH);//Motor2 aus  
     stopbeginn2 = millis();
  }
   }
  //--------------------------------------------------------------------

  //---------------------------------------------------------------------
  //----------Treiber 3 aktivieren---------------------------------------
  //---------------------------------------------------------------------
   if (millis() - stopbeginn3 >= stopzeit3) {
  digitalWrite(enabl3, LOW); // Treiber Motor3 ein
  digitalWrite(dir3, richtung3); // Set Dir
  if (x3 < schritte3)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 3--------------------------------------
    //---------------------Schritt 1-------------------------------------
    if ((schrittposition3 == 1) && (micros() - whablauf3 >= mini3)) {
      digitalWrite(puls3, HIGH); // Step auf high
      schrittposition3 = 2;  // Steuerung für Schritt 1 einstellen
      pwablauf3 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 3--------------------------------------
    //---------------------Schritt 2-------------------------------------
    if ((schrittposition3 == 2) && (micros() - pwablauf3 >= mini3)) {
      digitalWrite(puls3, LOW); // Step auf low
      schrittposition3 = 1;  // Steuerung für Schritt 0 einstellen
      whablauf3 = micros(); // Timer für Schritt 0 starten
      x3++;
      //-----------------------------------------------------------------
      //-----------------Rampensteuerung Motor3--------------------------
      if (x3 <= rampenstart3) {
        rampenrichtung3 = HIGH;
      } else {
        rampenrichtung3 = LOW;
      }
      if (rampenrichtung3 == HIGH) {
        if (mini3 > maxi3) {
          mini3 = mini3 - 2; // Rampe für Motor 1 Gas geben
        }
      }
      if (rampenrichtung3 == LOW) {
        if (x3 + rampenstart3 > schritte3) {
          mini3 = mini3 + 2; // Rampe für Motor 1 bremsen
        }
      }
      //----------------------------------------------------------------
    }
  }
  //-------------------------Motor 3------------------------------------
  //----------------------Ziel erreicht ?-------------------------------
  if (x3 == schritte3) {
    x3 = 0;
    mini3 = rampenstart3; //Rampe für Motor 3 Neustart
    richtung3 = !richtung3; // Dir Richtung wechseln
        digitalWrite(enabl3, HIGH);//Motor3 aus
         stopbeginn3 = millis();
  }
   }
  //--------------------------------------------------------------------

}

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
31.03.2019, 08:56
Beitrag #35
RE: Schrittmotor Steuerung
Hier sind ein paar gute Infos zum Thema welchen Treiber zu welchen Motor. Ich finde das hilft auch ein Stück weiter.

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Schrittmotor ruckelt jay35 21 1.159 08.05.2019 20:34
Letzter Beitrag: MicroBahner
  Fünf Phasen Schrittmotor? Holzwurm56 1 701 05.02.2019 13:49
Letzter Beitrag: Chopp
  Schrittmotor a4988 Problem iceweasel7 15 3.724 02.01.2018 16:16
Letzter Beitrag: iceweasel7
  12V Schrittmotor mit Arduino ansteuern niggo 4 3.654 21.06.2017 11:09
Letzter Beitrag: Binatone
  Bluetooth-Steuerung mit elegoo uno funktioniert nicht Matthias_Arduino 0 2.225 01.11.2016 19:47
Letzter Beitrag: Matthias_Arduino
  Welcher Schrittmotor ? Welches Motorshield? Binatone 0 1.557 22.09.2016 12:22
Letzter Beitrag: Binatone
  Schrittmotor ruckelt beim Start und im laufenden Betrieb - Arduino+Motor Shield grt35a 3 3.663 21.09.2016 06:56
Letzter Beitrag: Bitklopfer
  Steuerung eines Schrittmotor und eines Lüfters auf einem Shield phischmi 7 2.127 18.08.2016 20:58
Letzter Beitrag: phischmi
  Nema 17 Schrittmotor läuft an a4988 nicht fagus 9 3.726 04.08.2016 20:12
Letzter Beitrag: fagus
  Garagentor,- und Beleuchtungs - Steuerung ardu1n1x 2 3.034 13.07.2016 16:17
Letzter Beitrag: ardu1n1x

Gehe zu:


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